Ch05 코드의 흐름 제어하기

2020. 1. 8. 16:41C# 언어/이것이 C# 이다. 책정리

반응형

 

챕터5 '코드의 흐름 제어' 입니다

if문 ,switch, 각종 반복문, 분기문 등을 배웁니다

 

'이것이 C#이다' 교재를 바탕으로 정리했습니다.

 

이전 정리글


 

ㅇ 분기문

분기문은 프로그램의 흐름을 조건에 따라 여러 갈래로 나누는 흐름 제어 구문입니다.

C#에서는 if 문과 switch문 두 가지의 분기문을 제공합니다.

 

if, else, else if 문

if 문은 한번에 단 하나의 조건을 평가합니다. 

if 문에서 사용하는 조건식은 true 또는 false의 값을 가지는 bool 형식이어야 합니다.

if문

if ( 조건식 )
{
    // 참인 경우
    // 실행할
    // 코드
}

 

if else 문

if ( 조건식)
{
    //참인 경우 실행 구문
}
else
{
    //거짓인 경우
}

 

if elseif else 문

if ( 조건식)
{
    // 참인 경우 실행 구문
}
else if (조건식)
{
    //참인 아닌 경우 다른 if  실행 구문
}
else
{
    //모두가 거짓인 경우 실행
}

 

switch 문

switch 문에 사용되는 조건식은 정수 형식문자열 형식 두가지만 지원합니다.

switch ( 조건식)
{
    case 상수1 :
        // 실행할 코드
        break;
    case 상수2 : 
        // 실행할 코드
        break;
    case 상수3 : 
        // 실행할 코드
        break;

 

ㅇ 반복문

특정 조건을 만족하는 동안 코드 또는 코드 블록을 계속 반복해서 실행하도록 하는 문장

C#은 모두 네 가지의 반복문을 제공

  1. while
  2. do while
  3. for
  4. foreach

 

 while

while 키워드 옆의 조건식은 논리 형식(bool 형식) 입니다

while 문은 조건식이 참인 동안 코드를 반복 실행합니다.

while ( 조건식)
    반복실행할_코드

 

예제 코드

1
2
3
4
5
6
7
int a = 10;
 
while ( a > 0// a가 0보다 큰 동안 반복해서 실행
{
    Console.WriteLine( a ); // a의 값을 출력
    a -= 2// a는 한번 루프에 2만큼 
}

 

do while

do while 문은 while 문과 유사하지만 while 문이 조건식을 평가한 후에 그 결과가 참이면 실행하는데 반해,

do while 문은 조건식을 평가하기 전에 무조건 처음 한번은 코드를 실행한다는 점이 다릅니다.

do
{
    반복실행할_코드_블럭
}
while ( 조건식 ) ; // while 문과 다르게 ;(세미콜론)을 붙여줘야함

 

예제 코드

1
2
3
4
5
6
7
8
int a = 10;
 
do
{
    Console.WriteLine ( a ) ; 
    a -= -2;
}
while ( a > 0 );

 

for

while 문처럼 조건식이 참인동안 코드를 반복 실행하지만, 

while 문보다 반복을 더 정교하게 제어할 수 있다는 차이가 있음

for ( 초기화식; 조건식; 반복식; )
{
    반복실행할_코드_블럭
}

 

예제 코드

1
2
3
4
5
6
for ( int i = 0; i < 10; i++ )
{
    Console.WriteLine( i ); // i는 for문에서 만들어진 매개변수이다. for문이 끝나면 사라진다.
                            // i는 i++(증가 연산자)로 인해 1씩 증가되어 "i < 10" 조건식이 참일 때 동안
                            // 계속 반복 
}

foreach

배열을 순회하며 각 데이터 요소에 차례대로 접근하도록 해줌

foreach ( 데이터형식 변수명 in 배열_또는_컬렉션)
    코드_또는_코드블럭

 

예제 코드

1
2
3
4
5
6
int[] arr = new int[] {0,1,2,3,4}; // 배열 선언
 
foreach ( int a in arr ) // 배열의 각 인덱스를 순회하며 그 값을 a에 
{
    Console.WriteLine( a ); 
}

 

ㅇ 점프문

점프문은 흐름을 끊고 프로그램의 실행 위치를 원하는 곳으로 단숨에 도약시킬 수 있다.

C#이 제공하는 점프문에는 다음과 같이 다섯 가지가 있다.

  1. break
  2. continue
  3. goto
  4. return // 이후 정리에서 다룸
  5. throw // 이후 정리에서 다룸

 

break

현재 실행 중인 반복문이나 whitch 문의 실행을 중단하고 할 때 사용한다.

탈출(break) 하고 자 하는 부분에 넣어주면 끝!

 

예제 코드

1
2
3
4
5
6
7
8
9
10
11
int i = 0;
 
while ( i >= 0 ) // 루프가 실행되다가
{
    if ( i == 10 ) // i가 10이 되면 while 문에서 탈출
        break;
 
    Console.WriteLine(i++); // i는 1씩 증가되어 
}
 
Console.WriteLine("멈추는 시점");

 

continue

continue 문은 한 회 건너 뛰어 반복을 계속 수행하게 하는 기능

 

예제 코드

1
2
3
4
5
6
7
8
9
10
11
for ( int i = 0; i > 10; i++ )
{
    if ( i % 2 == 0 ) // i는 2로 나누었을 때 나머지가 0 이면 짝수
        continue// 위에 경우가 참일 경우(짝수일 때) 건너뜀
 
    Console.WriteLine($"{i}는 홀수"); // 1는 홀수
                                     // 3는 홀수
                                     // 5는 홀수
                                     // 7는 홀수
                                     // 9는 홀수
}

 

goto

goto 문은 저 레이블이 가리키는 곳으로 바로 뛰어넘어감

하지만 goto 문이 코드의 이곳 저곳으로 텔레포트하면서

흐름을 자주 끊어 코드를 읽기 어렵게 만들기 때문에

많이 사용하지 않음.

 

 

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using static System.Console;
 
namespace p176
{
    class Program
    {
        static void Main(string[] args)
        {
            Write("종료 조건(숫자)를 입력하세요 : ");
 
            string input = Console.ReadLine();
 
            int input_number = Convert.ToInt32(input);
 
            int exit_number = 0;
 
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    for (int k = 0; k < 3; k++)
                    {
                        if (exit_number++ == input_number)
                            goto EXIT_FOR;
 
                        WriteLine(exit_number);
                    }
                }
            }
 
            goto EXIT_PROGRAM; // 최대 반복횟수가 끝났을 때
// EXIT_FOR 레이블을 만나지 않기 위해서입니다.
 
        EXIT_FOR:
            WriteLine("\n탈출했습니다.");
 
        EXIT_PROGRAM:
            WriteLine("\n 프로그램종료");
 
        }
    }
}


반응형