개발/C#

[C#] 자습서 4장 - 제어문

by Majangnan 2023. 1. 5.

조건문

조건문은 조건의 진위 여부에 따라 명령의 실행 여부를 결정하는 문장이다. 조건이 참일 때만 뒤쪽의 명령을 수행하며 거짓이면 명령을 무시한다. else문은 조건이 거짓일 때 실행할 명령을 지정하며 생략도 가능하다.

 

if(조건) 명령1; else 명령2;

internal class Program
{
    private static void Main(string[] args)
    {
        int i = 3;

        if (i == 3)
            Console.WriteLine("i는 3이다.");
        else
            Console.WriteLine("i는 3이 아니다.");
    }
}

 간단한 예시이다. i 변수에 3이 저장되어 있으므로 결과는 "i는 3이다." 가 출력된다. 명령문이 한 줄이면 바로 밑에 써도 되지만 2줄이상이 된다면 {} 안에 써야한다.

반복문

반복문은 비슷한 명령을 여러 번 반복하는 문장이다. 반복적으로 실행되는 코드 묶음을 루프(loop)라고 한다. C#은 4가지 반복문 (for, while, do while, foreach)을 제공하는데 for문이 가장 흔하게 사용된다.

 

for

for(초기식;조건식;증감식) {명령}

초기식은 반복을 시작하기 전에 딱 한 번 실행되어 제어 변수를 초기화한다. 조건식은 언제까지 실행할 지 지정하며 이 식이 참인 동안 루프의 명령을 반복 실행한다. 보통 제어 변수의 값을 대소 비교하는 연산문이 온다. 증감식은 명렬을 한 번 실행할 때마다 제어 변수의 값을 변경한다.  이렇게 초기식을 실행한 후 조건이 참인 동안 명령과 증감식을 계속 반복한다. for 문은 반복 횟수가 미리 정해진 경우에 주로 사용한다.

internal class Program
{
    private static void Main(string[] args)
    {
        int sum = 0;
        for (int i = 0; i <= 100; i++)
        {
            sum = sum + i;
        }
        Console.WriteLine("1~100까지의 합계 = " + sum);
    }
}

초기식에 int i = 0으로 초기화를 하고 i 가 100 이하가 될 때까지 1씩 증가시키며 밑의 명령문인 sum = sum + i 를 101번 실행한다. 

 

while

while(조건식){명령;}

while은 반복 횟수가 가변적인 경우에 적합하다. 조건식이 참인 동안 반복적으로 실행한다. for문과는 형태가 조금 다를 뿐 서로 대체 가능하다. 

internal class Program
{
    private static void Main(string[] args)
    {
        int i = 1;
        int sum = 0;
        while (sum < 1000)
        {
            sum = sum + i;
            i++;
        }
        Console.WriteLine("1000 초과 수 = " + i);
    }
}

 

do while

do{명령} while(조건식);

do while문은 while문과 거의 똑같지만 조건보다 명령이 먼저 온다는 점이 다르다. do 로 명령을 일단 실행하고 조건을 점검한다. 조건보다 명령이 우선이기 때문에 최소한 한 번은 실행하게 된다.

internal class Program
{
    private static void Main(string[] args)
    {
        string snum;
        int num;
        do
        {
            Console.Write("숫자를 입력하세요(끝낼 때는 0) : ");
            snum = Console.ReadLine();
            num = Int32.Parse(snum);
            Console.WriteLine($"입력한 값은 {num}입니다.");
        } while (num != 0);
    }
}

 

foreach

foreach(타입 변수 in 배열){명령}

foreach 반복문은 집합의 요소를 반복 처리할 때 사용한다. 배열의 모든 요소를 순회하는 예가 가장 전형적이다. 

internal class Program
{
    private static void Main(string[] args)
    {
        int[,] ar =
        {
            {1, 2, 3 },
            {4, 5, 6 }
        };
        foreach (int a in ar)
        {
            Console.Write(a + "");
        }

        //같은 의미의 for 문
        Console.WriteLine("\n-----------");
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 3; j++)
                Console.Write(ar[i, j] + "");
    }
}

2차원 배열의 모든 요소를 순회하며 요소를 출력하는 foreach 문이다. 실행 결과로는 "1 2 3 4 5 6" 이 나오게 된다. for 문으로 같은 문장을 만들어내면 코드가 더 길어지는 것을 확인할 수 있다. 하지만 필자는 foreach 문을 거의 사용해 본 적이 없다. (for문으로도 다 가능하기 때문에..!)

 

선택문

switch

switch(제어 변수){

             case 값 1: 처리 1; break;

             case 값 2: 처리 2; break;

             default: 디폴트 처리; break;

}

switch 문은 제어 변수의 값과 일치하는 case의 명령을 찾아 실행하는 다중 선택문이다. if else를 여러 번 중첩해서 똑같은 코드를 작성할 수 있지만 값이 많을 때는 switch 문이 깔끔해서 가독성이 높고 유지보수도 쉽다.

default는 일치하는 case가 없을 때를 의미하는데 필요 없으면 생략한다. case의 값은 중복되지 말아야 하며 상수만 쓸 수 있고 변수나 범위를 지정할 수는 없다.

internal class Program
{
    private static void Main(string[] args)
    {
        Console.Write("점수를 입력하세요 >> ");
        int score = Int32.Parse(Console.ReadLine());

        switch (score/10)
        {
            case 10:
                Console.WriteLine("A");
                break;
            case 9:
                Console.WriteLine("B");
                break;
            case 8:
                Console.WriteLine("C");
                break;
            default:
            	Console.WriteLine("D");
                break;

        }
    }
}

위 예제는 점수에 따라 등급을 출력하는 예제이다. 점수를 10으로 나누고 나온 점수에 따라 A~D등급을 매기는데 100점은 A, 90점 대는 B, 80점 대는 C, 그 이하는 D 등급을 출력한다. 

'개발 > C#' 카테고리의 다른 글

[C#] 자습서 6장 - 함수  (0) 2023.01.11
[C#] 자습서 5장 - 클래스  (0) 2023.01.10
[C#] 자습서 3장 - 변수  (0) 2023.01.04
[C#] 자습서 2장 - 입출력  (0) 2023.01.03
[C# ] 자습서 1장 - 닷넷  (0) 2023.01.02

댓글