int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다. 인 for, while, do while의 사용 방법과 사용시 주의사항에 대해 알아본다. 분기문인 break, continue, goto, return에 대해 알아본다. 2
목차 if switch for while do while 분기문 break continue goto return 3 제어문(Control Statement) 제어문 : 특정 문장을 수행하거나 수행하지 않도록 선택하거나, 특정 문장을 여러 번 반복 수행하게 만드는 것 제어문의 종류 : if, switch : for, while, do while 분기문 : break, continue, goto, return 4
if 기본적인 if 5 if if의 사용 예 18: /* Ex05_01.c */ int score; printf("점수를 입력하세요 : "); scanf("%d", &score); if( score < 60 ) printf("%d점은 불합격입니다.\n", score); If의 사용 if( score >= 60 ) printf("%d점은 합격입니다.\n", score); If의 사용 6
if 복합문(compound statement) if의 조건식이 참일 때 수행할 문장이 여러 개면, 수행할 문장들을 로 묶어 주어 야 한다. 7 8 if if else
if if else의 사용 예 /* Ex05_02.c */ int score; printf("점수를 입력하세요 : "); scanf("%d", &score); if( score < 60 ) printf("%d점은 불합격입니다.\n", score); else printf("%d점은 합격입니다.\n", score); If else의 사용 9 if 다중 if(1/2) if else문에서 else 다음에 다시 if를 사용 10
if 다중 if(2/2) 중첩된 if : if 안에 다른 if문을 사용 다중 if : 중첩된 if 중에서 if else if의 형태로 작성할 수 있는 if문 여러 가지 조건을 차례차례 검사할 때 유용 중첩된 if 다중 if 11 if 다중 if의 사용 예(1/2) 18: 19: 20: 21: /* Ex05_03.c */ int score; char grade; printf("점수를 입력하세요 : "); scanf("%d", &score); if( score >= 90 ) grade = 'A'; else if( score >= 80 ) grade = 'B'; else if( score >= 70 ) grade = 'C'; else if( score >= 60 ) grade = 'D'; else grade = 'F ; 다중 If 12
if 다중 if의 사용 예(2/2) 22: 23: 24: 25: 26: printf("%c 학점입니다.\n", grade); 13 14 if 중첩된 if의 사용 예(1/2) /* Ex05_04.c */ int score; char grade; printf("점수를 입력하세요 : "); scanf("%d", &score);
if 중첩된 if의 사용 예(2/2) 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: if ( score < 0 score > 100 ) printf("잘못 입력하셨습니다.\n"); else if ( score >= 90 ) grade = 'A'; else if ( score >= 80 ) grade = 'B'; else if ( score >= 70 ) grade = 'C'; else if ( score >= 60 ) grade = 'D'; else grade = 'F'; 중첩된 if 다중 if printf("%c 학점입니다.\n", grade); 15 16 if 중첩된 if와 다중 if
switch 기본적인 switch 먼저 정수식의 값을 평가한다. 값이 같은 case문을 찾아서 해당 case문 다음에 나열된 문장들을 수행한다. break를 만날 때까지 문장들을 수행하고, break를 만나면 switch문을 빠져나간다. 17 switch switch를 이용한 사칙연산 계산기(1/2) /* Ex05_05.c */ int a, b; char op; 두 정수를 입력받을 int형 변수 a, b 선언 연산자를 입력받을 char형 변수 op 선언 printf("수식을 입력하세요 : "); scanf("%d %c %d", &a, &op, &b); 18
switch switch를 이용한 사칙연산 계산기(2/2) 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: switch ( op ) case '+': printf("%d + %d = %d\n", a, b, a + b); break; case '-': printf("%d - %d = %d\n", a, b, a - b); break; case '*': printf("%d * %d = %d\n", a, b, a * b); break; case '/': printf("%d / %d = %d\n", a, b, a / b); break; default: printf("계산할 수 없습니다.\n"); break; switch의 사용 19 20 switch switch문의 수행 순서
switch switch 대신 if else if를 사용하는 경우(1/3) /* Ex05_06.c */ int a, b; char op; 두 정수를 입력받을 int형 변수 a, b 선언 연산자를 입력받을 char형 변수 op 선언 printf("수식을 입력하세요 : "); scanf("%d %c %d", &a, &op, &b); 21 switch switch 대신 if else if를 사용하는 경우(2/3) 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: if ( op == '+' ) printf("%d + %d = %d\n", a, b, a + b); else if ( op == '-' ) printf("%d - %d = %d\n", a, b, a - b); else if ( op == '*' ) printf("%d * %d = %d\n", a, b, a * b); else if ( op == '/' ) printf("%d / %d = %d\n", a, b, a / b); else printf("계산할 수 없습니다.\n"); if else if의 사용 22
switch switch 대신 if else if를 사용하는 경우(3/3) 32: 33: 34: 23 switch switch와 if else if의 선택(1/2) 값을 비교하는 조건식을 사용하고, 비교할 값이 둘 이상이면 switch를 사용하는 것이 더 좋다. 24
switch switch와 if else if의 선택(2/2) 값의 범위를 비교하는 경우에는 if else if를 사용하는 것이 더 좋다. 25 switch break를 사용하지 않은 경우의 예 18: 19: 20: 21: 22: 23: 24: 25: 26: switch ( op ) case '+': printf("%d + %d = %d\n", a, b, a + b); case '-': printf("%d - %d = %d\n", a, b, a - b); case '*': printf("%d * %d = %d\n", a, b, a * b); case '/': printf("%d / %d = %d\n", a, b, a / b); default: printf("계산할 수 없습니다.\n"); break를 생략한 경우 26
switch switch 사용 시 주의사항(1/3) switch문에서 break를 생략하면, break를 만날 때까지 모든 문장들을 수행한다. 27 switch switch 사용 시 주의사항(2/3) switch문에서 사용되는 default는 생략할 수 있다. default는 switch문 안에 어떤 위치에도 사용할 수 있다. 28
switch switch 사용 시 주의사항(3/3) switch의 ( ) 안에는 정수식만 사용할 수 있으며, 실수나 문자열은 사용할 수 없다. 29 같은 코드를 여러 번 반복할 수 있도록 하는 제어문 코드를 반복해서 수행해야 할 때 코드를 복사해서 작성하는 대신 을 사용 의 종류 for while do while 30
for 기본적인 for 31 for for의 사용 예 /* Ex05_08.c */ int i; for ( i = 1 ; i <= 10 ; i++) printf("%d ", i); for의 사용 printf("\n"); 32
for for의 실행 과정 for문에서도 반복해서 수행할 문장이 여러 개일 때는 로 묶어준다. 33 for for를 이용한 합계와 곱 구하기 18: 19: 20: /* Ex05_09.c */ int i; int sum = 0; int factorial = 1; 합계를 저장할 int형 변수 sum 선언 곱을 저장할 int형 변수 factorial 선언 for ( i = 1 ; i <= 10 ; i++) sum += i; factorial *= i; for의 사용 printf("1~10의 합계 : %d\n", sum); printf("1~10의 곱 : %d\n", factorial); 34
for for의 여러 가지 변형(1/2) for 문을 구성하는 초기식, 조건식, 증감식, 반복할 문장은 모두 생략할 수 있다. 35 36 for for의 여러 가지 변형(2/2) 무한 루프 널 문장
for 중첩된 for의 사용 18: /* Ex05_10.c */ #include <stdio. int i, j; for ( i = 1 ; i < 10 ; i++ ) for ( j = 1 ; j < 10 ; j++ ) printf("%d*%d=%2d ", i, j, i*j); printf("\n"); 중첩된 for의 사용 37 38 for 중첩된 for의 수행 순서 for ( i = 1 ; i < 10 ; i++ ) for ( j = 1 ; j < 10 ; j++ ) printf("%d*%d=%2d ", i, j, i*j); printf("\n");
while 기본적인 while 39 while while의 사용 예 /* Ex05_11.c */ int i; i = 1; while ( i <= 10 ) printf("%d ", i++); while의 사용 printf("\n"); 40
while for와 while for를 while로 변경할 때는 while문 앞에 초기식을 쓰고 while 블록 안쪽의 맨 끝 에 증감식을 써준다. 41 while while을 이용한 합계와 곱 구하기 18: 19: 20: 21: 22: /* Ex05_12.c */ int i; int sum = 0; int factorial = 1; i = 1; while ( i <= 10 ) sum += i; factorial *= i; i++; for의 초기식은 while 앞에서 수행 for의 조건식을 while의 조건식으로 사용 for의 증감식을 while의 맨 끝에서 수행 printf("1~10의 합계 : %d\n", sum); printf("1~10의 곱 : %d\n", factorial); 42
while while을 이용한 사칙연산 계산기(1/3) /* Ex05_13.c */ int a, b; char op; printf("수식을 입력하세요 (0 0 0 입력 시 종료) : "); scanf("%d %c %d", &a, &op, &b); 43 while while을 이용한 사칙연산 계산기(2/3) 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: while ( a!= 0 op!= '0' b!= 0 ) switch ( op ) case '+': printf("%d + %d = %d\n", a, b, a + b); break; case '-': printf("%d - %d = %d\n", a, b, a - b); break; case '*': printf("%d * %d = %d\n", a, b, a * b); break; case '/': printf("%d / %d = %d\n", a, b, a / b); break; default: printf("계산할 수 없습니다.\n"); break; op에 따라서 더하기, 빼기, 곱하기, 나누기 연산 수행 while문 수행 44
while while을 이용한 사칙연산 계산기(3/3) 33: 34: 35: 36: 37: 38: printf("수식을 입력하세요 (0 0 0 입력 시 종료) : "); scanf("%d %c %d", &a, &op, &b); 45 while 무한 루프를 이용한 구구단 프로그램 18: 19: 20: /* Ex05_14.c */ int num; int i; 구구단의 단수를 입력받기 위한 int형 변수 num 선언 while ( 1 ) printf("정수를 입력하세요 (Ctrl+C 입력 시 종료) : "); scanf("%d", &num); while을 이용한 무한 루프 for ( i = 1 ; i < 10 ; i++) printf("%d*%d=%2d ", num, i, num * i); printf("\n"); 46
do while 기본적인 do while 47 do while do while의 사용 예 /* Ex05_15.c */ int i; i = 1; do printf("%d ", i++); while ( i <= 10 ); printf("\n"); do while의 사용 48
do while for, while과 do while의 차이 for와 while은 조건식을 먼저 검사해서 조건식이 참인 경우에만 문장을 수행하지 만, do while은 일단 먼저 문장을 수행한 다음에 조건식을 검사한다. 49 분기문 break 분기문을 이용하면 실행 순서를 변경할 수 있다. break : 을 탈출한다. continue : 의 시작 부분으로 이동한다. return : 함수를 호출한 곳으로 돌아간다. goto : 레이블이 지정한 위치로 이동한다. break switch문 안에 사용하면 switch를 탈출해 서 switch의 다음 문장으로 이동한다. for, while, do while 등의 안에서 사용하면 을 빠져나가게 된다. 50
분기문 break break의 사용 예 /* Ex05_16.c */ int i; for ( i = 1 ; i <= 10 ; i++ ) if ( i % 2 == 0 ) break; printf("%d ", i); printf("\n"); i가 1~10인 동안 수행되는 for 문 break를 만나면 for 루프 탈출 51 분기문 break break를 이용한 무한 루프 탈출(1/2) /* Ex05_17.c */ #include <conio.h> int num, sum; int i; 52
분기문 break break를 이용한 무한 루프 탈출(2/2) 18: 19: 20: 21: 22: 23: 24: 25: while ( 1 ) printf("정수를 입력하세요 (-1 입력 시 종료) : "); scanf("%d", &num); if ( num == -1 ) break; 무한 루프 num이 -1이면 무한 루프 탈출 sum = 0; for ( i = 1 ; i <= num ; i++) sum += i; printf("%d까지의 합계 : %d\n", num, sum); 53 분기문 continue continue 안에서 continue를 만나면 루프의 시작 부분으로 이동해서 검사부 터 다시 계속한다. 54
분기문 continue continue의 사용 예 /* Ex05_18.c */ int i; for ( i = 1 ; i <= 10 ; i++ ) if ( i % 2 == 0 ) continue; printf("%d ", i); printf("\n"); continue를 만나면 루프 시작으로 돌아감 55 분기문 goto goto 프로그램 수행 중 제어의 흐름을 프로그램의 특정 위치로 이동하려면 goto 문을 사용한다. goto문을 사용하려면 먼저 이동할 문장을 가리키는 레이블(label)이 필요하다. 레이블을 정의할 때는 레이블을 구별하기 위한 이름과 콜론(:)이 필요하다. goto문으로 제어의 흐름을 갑자기 아무데로나 이동하게 되면, 프로그램이 이해하 기 어려워지므로 꼭 필요한 경우가 아니면 goto문을 사용하지 않는 것이 좋다. 56
분기문 goto goto의 사용 예 18: /* Ex05_19.c */ int i; exit: for ( i = 1 ; i <= 10 ; i++ ) if ( i % 2 == 0 ) goto exit; printf("%d ", i); goto를 만나면 지정된 위치로 이동 goto의 레이블 printf("\n"); 57 분기문 return return 프로그램 수행 중에 return문을 만나면 함수를 호출한 곳으로 되돌아간다. main 함수 안에서 return문을 만나면 프로그램이 종료된다. 58
분기문 return return의 사용 예 /* Ex05_20.c */ int i; for ( i = 1 ; i <= 10 ; i++ ) if ( i % 2 == 0 ) return 1; printf("%d ", i); printf("프로그램을 종료합니다.\n"); return을 만나면 함수를 호출한 곳으로 되돌아감 59 학습정리 if : 조건식이 참이면 문장을 수행하고, 조건식이 거짓이면 수행하지 않는다. switch : 정수식에 값에 따라서 다중 분기를 수행한다. for : 초기식, 조건식, 증감식으로 구성되며, 조건이 참인 동안 문장을 반복 수행한 다. while : 조건식이 참인 동안 문장을 반복 수행한다. do while : 조건식이 참인 동안 문장을 반복 수행하며, 문장을 한번 수행한 다음에 조건식을 검사한다. 분기문 break : 을 빠져나가게 만든다. continue : 의 시작 부분으로 돌아가게 만든다. return : 함수를 호출한 곳으로 돌아가게 만든다. goto : 레이블이 지정한 위치로 이동하게 만든다. 60
5 장. 제어문 수고하셨습니다. 질문있습니까? NEXT Chapter 6 장. 함수 61