Anna belly belly hard/C#

[C# 개념] 5.1 분기문

bibiana 각선행 2023. 7. 10. 16:38
반응형

- 분기문 : 프로그램의 흐름을 조건에 따라 여러 갈래로 나누는 흐름 제어 구문

- C# 에서는 if 문과 switch 문 제공

 

5.1.1 if,else,else if

using System;

namespace IfElse
{
   class MainApp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("숫자를 입력하세요 : ");

            string input = Console.ReadLine(); // console.readline()은 사용자로 부터 문자열을 입력 받아 그결과를 반환하는 기능을 합니다.
            int number = Int32.Parse(input);

            if (number < 0)
                Console.WriteLine("음수");
            else if (number > 0)
                Console.WriteLine("양수");
            else
                Console.WriteLine("0");

            if (number % 2 == 0)
                Console.WriteLine("짝수");
            else
                Console.WriteLine("홀수");
        }
    }
}

 

5.1.2 if 문 중첩해서 사용하기

using System;

namespace IfIf
{
    class MainApp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("숫자를 입력하세요. :");

            string input = Console.ReadLine();
            int number = Convert.ToInt32(input);    

            if(number>0 ) { 
                
                if(number %2 == 0 )
                {
                    Console.WriteLine("0보다 큰 짝수.");
                }
                else
                {
                    Console.WriteLine("0보다 큰 홀수");
                }
            }
            else
            {
                Console.WriteLine("0 보다 작거나 같은수");
            }
        }
    }
}

 

5.1.3 switch 문

- case 절이나 default 절 에 사용된 break 문은 각 swithc 절에서 실행 중이던 흐름을 switch 문 바깥으로 옮깁니다.

- 필요에 따라 break 문 대신 goto 나 return, throw 와 같은 점프문을 사용하는 것이 문법적으로 허용된다.

using System;

namespace Switch
{
    class MainApp
    {
        static void Main(string[] args)
        {
            Console.Write("요일을 입력하세요. (일,월,화,수,목,금,토) :");
            string day = Console.ReadLine();    

            switch (day) {
                case "일":
                    Console.WriteLine("Sunday");
                    break;
                case "월":
                    Console.WriteLine("Monday");
                    break;
                case "화":
                    Console.WriteLine("Tuesday");
                    break;
                case "수":
                    Console.WriteLine("Wednesday");
                    break;
                case "목":
                    Console.WriteLine("Thursday");
                    break;
                case "금":
                    Console.WriteLine("Friday");
                    break;
                case "토":
                    Console.WriteLine("Saturday");
                    break;
                default: 
                    Console.WriteLine($"{day}는(은) 요일이 아닙니다.");
                    break;
            }
        }
    }
}

1) switch 문과 패턴 매칭

- switch 레이블의 패턴에는 상수와 형식을 비롯해서 관계, 논리 등등 C# 이 지원하는 다양한 패턴을 적용할수 있다.

- 패턴의 종류는 다양하지만 switch 문, switch 식 등에 적용하는 방법은 같기 때문에 형식 패턴만 간단하기 넘어가겠습니다.

 

using System;

namespace Switch2
{
    class MainAPP
    {
        static void Main(string[] args)
        {
            object obj = null;

            string s = Console.ReadLine();
            if (int.TryParse(s, out int out_i)) // TryParse() 메소드
                obj = out_i;
            else if (float.TryParse(s, out float out_f))
                obj = out_f;
            else
                obj = s;

            switch (obj)
            {
                case int:
                    Console.WriteLine($"{(int)obj}는 int 형식 입니다.");
                    break;
                case float:
                    Console.WriteLine($"{(float)obj}는 float 형식 입니다.");
                    break;
                default:
                    Console.Write($"{obj}는 모르는 형식 입니다.");
                    break;
            }
        }
    }
}

 

 

2) 케이스 가드

- 케이스 가드 : switch 문의 case 절의 패턴을 더 구체적으로 만들어주는 추가적인 조건 검사

- case 절에 뒤에 when 절을 붙여 사용한다, when 절은 if 문 처럼 true/false로 결과가 나오는 식을 입력 받는다.

 

5.1.4 switch 식

- 식(expression) : 결과값을 만들어 낼 수 있는 연산자와 연산자의 조합, 식은 계산해서 결과를 내놓는다.

- 문(statement) : 주어진 일을 한다. 결과를 내든 그렇지 않든.

- 어떤 작업에 분기가 필요할 때는 switch문을 사용하되, 분기를 거쳐 값을 내야하는 경우에는 switch 식을 사용! 게다가 break 같은 점프문도 필요 없다!

- switch 문

- switch 식

- switch 식에 케이스 가드 를 이용한 추가적인 분기 처리

 

using System;

namespace SwitchExp
{
    class MainApp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("점수를 입력하세요.");
            int score = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("재수강 인가요?(y/n)");
            string line = Console.ReadLine();
            bool repeated = line == "y"?true:false;

            string grade = (int)(Math.Truncate(score / 10.0) * 10) switch
            {
                90 when repeated == true => "B+",
                90 => "A",
                80 => "B",
                70 => "C",
                60 => "D",
                _ => "F"
            };

            Console.WriteLine($"학점 : {grade}");
        }
    }
}

 

 

반응형