5장. 제어문
#include <stdio.h>
int main(void) {
int num;
printf(“Please enter an integer: ");
scanf("%d", &num);
if ( num < 0 )
printf("Is negative.\n");
printf("num = %d\n", num);
return 0;
}
■ 제어문인 조건문, 반복문, 분기문에 대해 알아본다.
■ 조건문인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.
■ 반복문인 for, while, do while의 사용 방법과 사용시 주의사항에 대해 알아본다.
■ 분기문인 break, continue, goto, return에 대해 알아본다.
5장. 제어문
학습목표
2
조건문
• if
• switch
반복문
• for
• while
• do while
분기문
• break
• continue
• goto
• return
5장. 제어문
목차
3
제어문 : 특정 문장을 수행하거나 수행하지 않도록 선택하거나, 특정 문장을 여러 번 반복 수행하게 만드는 것
제어문의 종류
조건문 : if, switch
반복문 : for, while, do while
분기문 : break, continue, goto, return
5장. 제어문
제어문
4
기본적인 if
5장. 제어문
if
조건문
5
if의 사용 예
5장. 제어문
if
조건문
6
01: /* Ex05_01.c */
02: #include <stdio.h>
03: 04: int main(void) 05: {
06: int score;
07: 08: printf("점수를 입력하세요 : ");
09: scanf("%d", &score);
10: 11: if( score < 60 )
12: printf("%d점은 불합격입니다.\n", score);
13: 14: if( score >= 60 )
15: printf("%d점은 합격입니다.\n", score);
16: 17: return 0;
18: }
If의 사용
If의 사용
복합문(compound statement)
if의 조건식이 참일 때 수행할 문장이 여러 개면, 수행할 문장들을 { }로 묶어 주어
야 한다.5장. 제어문
if
조건문
7
if else
5장. 제어문
if
조건문
8
if else의 사용 예
5장. 제어문
if
조건문
9
01: /* Ex05_02.c */
02: #include <stdio.h>
03: 04: int main(void) 05: {
06: int score;
07: 08: printf("점수를 입력하세요 : ");
09: scanf("%d", &score);
10: 11:
if( score < 60 )
12: printf("%d점은 불합격입니다.\n", score);
13:
else
14: printf("%d점은 합격입니다.\n", score);
15: 16: return 0;
17: }
If else의 사용
입력한 숫자가 짝수이면 ‘짝수’를 출력하고 홀수이면 ‘홀수’로 출 력하는 프로그램을 구현하세요
실습
10
실습
{
int i;
printf("정수를 입력하세요 : ");
scanf("%d", &i);
if( i%2== 0 )
printf(“짝수입니다.\n");
else
printf(“홀수입니다.\n");
return 0;
}
다중 if(1/2)
if else문에서 else 다음에 다시 if를 사용
5장. 제어문
if
조건문
12
입력한 숫자를 3으로 나누었을 때의 나머지에 대해 출력하세요 예) 40을 입력한 경우 : 3으로 나눠 나머지가 1입니다
23을 입력한 경우 : 3으로 나눠 나머지가 2입니다.
실습
실습
14
{
int i;
printf("정수를 입력하세요 : ");
scanf("%d", &i);
if( i%3== 1 )
printf(“ 3으로 나눠 나머지가 1입니다.\n");
else if( i%3== 2)
printf(“3으로 나눠 나머지가 2입니다.\n");
else
printf(“3의 배수입니다.\n");
return 0;
}
{ int num1,num2,num3;
int max;
printf("세 정수를 입력하세요 : ");
scanf("%d %d %d",&num1,&num2,&num3);
if(num1>num2) {
max=num1>num3?num1:num3;
printf("세 정수 중 가장 큰 수는 %d입니다.\n",max);
}
else if(num1<num2) {
max=num2>num3?num2:num3;
printf("세 정수 중 가장 큰 수는 %d입니다.\n",max);
}
else if(num1<num3) {
max=num3>num2?num3:num2;
printf("세 정수 중 가장 큰 수는 %d입니다.\n",max);
} }
실습 ( 세 정수를 입력 받아 가장 큰 수)-다중 if문
int i, j, k;
printf(“
세 정수를 입력하세요. ");
scanf("%d %d %d", &i, &j, &k);
if( (i > j) && (i > k) )
printf("%d\n", i);
else if(j > k)
printf("%d\n", j);
else
printf("%d\n", k);
i
j
i>j && i>k
J >k
k
참참
거짓
거짓
실습 ( 세 정수를 입력 받아 가장 큰 수)-다중 if문
{ int a,b,c;
int max;
printf("세 정수를 입력하세요 : ");
scanf("%d %d %d",&a, &b ,&c);
if(a>b && a>c) max=a;
else if(b>c) max=b;
else
max=c;
printf("%d, %d, %d 중 큰 값은 %d입니다.\n", a,b,c,max);
return 0;
}
실습 ( 세 정수를 입력 받아 가장 큰 수)-다중 if문
{ int max, x, y, z;
scanf("%d%d%d", &x,&y,&z);
if (x > y && x > z) max=x;
else if (y > x && y > z) max=y;
else
max= z;
printf(“가장 큰수는 %d”,max);
return 0;
}
18
실습 ( 세 정수를 입력 받아 가장 큰 수)-다중 if문
max=x;
if(y>max) max=y;
if(z>max) max=z;
printf(“%d”, max);
return 0;
}
if(x>y) {
max=x;
if(x<z)
max=z;
}
else if(y>x) {
max=y;
if(y<z)
max=z;
}
printf(“%d”, max);
return 0;
. . .
. .
.
int x, y, z, max;
printf("세 수를 입력하세요>>> :");
scanf("%d %d %d" , &x, &y, &z);
max = (x>y) ? x : y ;
max = (max>z) ? max : z ;
printf("가장 큰수 : %d \n", max);
#define max(x, y) ((x>y) ? x : y) int main(void)
{
int i, j, k;
printf(“세 정수를 입력하세요>>> ");
scanf("%d %d %d", &i, &j, &k);
printf("입력한 세 정수 중 가장 큰 수는 %d입니다.\n", max(max(i, j), k));
int x, y, z, max;
printf(“세 수를 차례로 입력하세요>>> :");
scanf("%d %d %d",&a, &b, &c);
max=((x>y ? x : y)>z) ? ((x>y) ? x : y) : z ; printf("가장 큰 수는 %d 입니다\n", max);
실습 ( 세 정수를 입력 받아 가장 큰 수)-조건연산자
다중 if(2/2)
중첩된 if : if 안에 다른 if문을 사용
다중 if : 중첩된 if 중에서 if else if의 형태로 작성할 수 있는 if문
여러 가지 조건을 차례차례 검사할 때 유용
5장. 제어문
if
조건문
20
중첩된 if 다중 if
다중 if의 사용 예(1/2)
5장. 제어문
if
조건문
21
01: /* Ex05_03.c */
02: #include <stdio.h>
03: 04: int main(void) 05: {
06: int score;
07: char grade;
08: 09: printf("점수를 입력하세요 : ");
10: scanf("%d", &score);
11: 12: if( score >= 90 ) 13: grade = 'A';
14: else if( score >= 80 ) 15: grade = 'B';
16: else if( score >= 70 ) 17: grade = 'C';
18: else if( score >= 60 ) 19: grade = 'D';
20: else
21: grade = 'F‘;
다중 If
다중 if의 사용 예(2/2)
5장. 제어문
if
조건문
22
22: 23: printf("%c 학점입니다.\n", grade);
24: 25: return 0;
26: }
중첩된 if의 사용 예(1/2)
5장. 제어문
if
조건문
23
01: /* Ex05_04.c */
02: #include <stdio.h>
03: 04: int main(void) 05: {
06: int score;
07: char grade;
08: 09: printf("점수를 입력하세요 : ");
10: scanf("%d", &score);
11:
5장. 제어문
if
조건문
24
12: if ( score < 0 || score > 100 )
13: {
14: printf("잘못 입력하셨습니다.\n");
15: }
16: else
17: {
18: if ( score >= 90 ) 19: grade = 'A';
20: else if ( score >= 80 ) 21: grade = 'B';
22: else if ( score >= 70 ) 23: grade = 'C';
24: else if ( score >= 60 ) 25: grade = 'D';
26: else
27: grade = 'F';
28: 29: printf("%c 학점입니다.\n", grade);
30: }
31: 32: return 0;
33: }
중첩된 if
다중 if
중첩된 if의 사용 예(2/2)
중첩된 if와 다중 if
5장. 제어문
if
조건문
25
기본적인 switch
먼저 정수식의 값을 평가한다.
값이 같은 case문을 찾아서 해당 case문 다음에 나열된 문장들을 수행한다.
break를 만날 때까지 문장들을 수행하고, break를 만나면 switch문을 빠져나간다.
5장. 제어문
switch
조건문
26
switch
조건문
28
// 달의 일수 계산
#include <stdio.h>
int main(void)
{ int month, days;
printf(“일수를 알고 싶은 달을 입력하세요 : ");
scanf("%d ", &month);
switch( month ) {
case 2:
days=28;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
default:
days=31;
break;
}
printf(“%d월의 일수는 %d입니다.\n“, month, days);
return 0;
}
switch
조건문
switch를 이용한 사칙연산 계산기(1/2)
5장. 제어문
switch
조건문
29
01: /* Ex05_05.c */
02: #include <stdio.h>
03: 04: int main(void) 05: {
06: int a, b;
07: char op;
08: 09: printf("수식을 입력하세요 : ");
10: scanf("%d %c %d", &a, &op, &b);
11:
두 정수를 입력받을 int형 변수 a, b 선언 연산자를 입력받을 char형 변수 op 선언
switch를 이용한 사칙연산 계산기(2/2)
5장. 제어문
switch
조건문
30
12: switch ( op )
13: {
14: case '+':
15: printf("%d + %d = %d\n", a, b, a + b);
16: break;
17: case '-':
18: printf("%d - %d = %d\n", a, b, a - b);
19: break;
20: case '*':
21: printf("%d * %d = %d\n", a, b, a * b);
22: break;
23: case '/':
24: printf("%d / %d = %d\n", a, b, a / b);
25: break;
26: default:
27: printf("계산할 수 없습니다.\n");
28: break;
29: }
30: 31: return 0;
32: }
switch의 사용
switch문의 수행 순서
5장. 제어문
switch
조건문
31
switch 대신 if else if를 사용하는 경우(1/3)
5장. 제어문
switch
조건문
32
01: /* Ex05_06.c */
02: #include <stdio.h>
03: 04: int main(void) 05: {
06: int a, b;
07: char op;
08: 09: printf("수식을 입력하세요 : ");
10: scanf("%d %c %d", &a, &op, &b);
11:
두 정수를 입력받을 int형 변수 a, b 선언 연산자를 입력받을 char형 변수 op 선언
switch 대신 if else if를 사용하는 경우(2/3)
5장. 제어문
switch
조건문
33
12: if ( op == '+' )
13: {
14: printf("%d + %d = %d\n", a, b, a + b);
15: }
16: else if ( op == '-' )
17: {
18: printf("%d - %d = %d\n", a, b, a - b);
19: }
20: else if ( op == '*' )
21: {
22: printf("%d * %d = %d\n", a, b, a * b);
23: }
24: else if ( op == '/' )
25: {
26: printf("%d / %d = %d\n", a, b, a / b);
27: }
28: else
29: {
30: printf("계산할 수 없습니다.\n");
31: }
if else if의 사용
switch 대신 if else if를 사용하는 경우(3/3)
5장. 제어문
switch
조건문
34
32: 33: return 0;
34: }
switch와 if else if의 선택(1/2)
값을 비교하는 경우 조건식을 사용하는데, 비교할 값이 둘 이상이면 switch를 사 용하는 것이 더 좋다.
5장. 제어문
switch
조건문
35
switch와 if else if의 선택(2/2)
값의 범위를 비교하는 경우에는 if else if를 사용하는 것이 더 좋다.
5장. 제어문
switch
조건문
36
break를 사용하지 않은 경우의 예
5장. 제어문
switch
조건문
37
11: switch ( op )
12: {
13: case '+':
14: printf("%d + %d = %d\n", a, b, a + b);
15: case '-':
16: printf("%d - %d = %d\n", a, b, a - b);
17: case '*':
18: printf("%d * %d = %d\n", a, b, a * b);
19: case '/':
20: printf("%d / %d = %d\n", a, b, a / b);
21: default:
22: printf("계산할 수 없습니다.\n");
23: }
24: 25: return 0;
26: }
Break를 생략한 경우
switch 사용 시 주의사항(1/3)
switch문에서 break를 생략하면, break를 만날 때까지 모든 문장들을 수행한다.
5장. 제어문
switch
조건문
38
switch 사용 시 주의사항(2/3)
switch문에서 사용되는 default도 생략할 수 있다.
default는 switch문 안에 어떤 위치에도 사용할 수 있다.
5장. 제어문
switch
조건문
39
switch 사용 시 주의사항(3/3)
switch의 ( ) 안에는 정수식만 사용할 수 있으며, 실수나 문자열은 사용할 수 없다.
5장. 제어문
switch
조건문
40