제
제
5
5
장 제어명령
장 제어명령
C 에서 제공하는 제어명령의 종류와 사용법에 대해 설명할 수 있다 . C 로 카운터기 프로그램을 개발 ( 작성 ) 할 수 있다 .
C 로 타이머기 프로그램을 개발 ( 작성 ) 할 수 있다 .
5.1 선택문
5.2 반복문
5.3 분기문
구분 제어명령 선택문 if if ∼ else if ∼ else if ∼ else switch ∼case 반복문 for while do ∼ while 분기문 break continue goto
if 문
if∼else 문
if∼else if∼else 문
switch∼case 문
주어진 조건에 따라 원하는 문장을 선택하여 수행시킬 때 사용하는 명령이다. 여기에는 4 가지 명령이 제공되고 있 다 .6 / 52
(1) if 문
[ 사용형식 1] if( 조건식 ) 문장 ; if( 조건식 ) { 문장 1; 문장 2; } [ 사용형식 2] if 명령은 괄호 () 속에 조건식을 만족하면 포함된 문장을 수행하고 , 조건식을 만족하지 않으면 포함된 문장을 수행하지 않는다 .#include <stdio.h> void main() { int a; printf(" 정수 값을 입력해 주세요 ? "); scanf("%d", &a); if( (a%2)==0 ) printf(" 입력한 %d 는 짝수입니다 . \n", a); printf(" 프로그램 실행을 종료합니다 . \n"); } ◀5-1.C▶ 실행결과 정수 값을 입력해 주세요? 22 <Enter> 입력한 22 는 짝수입니다 . 프로그램 실행을 종료합니다 . 이 문장은 if 문에 포함된 문장이다 . 따라서 이 문장은 변수 a 값이 짝수일 때 수행한다 . 이 문장은 if 문에 포함된 문장이 아니다. 따라서 변수 a 값이 짝수이거나 홀수일 때 모두 수행한다. 조건식 if 문블 록
◀5-2.C▶ if 문에 포함된 문장이 단문일 경우 실행결과 정수 값을 입력해 주세요 ? 22 <Enter> 입력한 22 는 짝수입니다 . 프로그램 실행을 종료합니다 . #include <stdio.h> void main() { int a; printf(" 정수 값을 입력해 주세요 ? "); scanf("%d", &a); if( (a%2)==0 ) printf(" 입력한 %d 는 짝수입니다 . \n", a); if( (a%2)==1 ) printf(" 입력한 %d 는 홀수입니다 . \n", a); printf(" 프로그램 실행을 종료합니다 . \n"); } 이 문장은 변수 a 값 이 짝수일 때만 수행한 다 . 이 문장은 변수 a 값 이 홀수일 때만 수행한 다 . 조건식 if 문블록 if 문블록
◀5-3.C▶ if 문에 포함된 문장이 복문일 경우 ( 블록화가 필요 ) #include <stdio.h> void main() { int a; printf(" 정수 값을 입력해 주세요 ? "); scanf("%d", &a); if( (a%2)==0 ){ printf(" 입력한 %d 는 \n", a); printf(" 짝수입니다 . \n"); } if( (a%2)==1 ){ printf(" 입력한 %d 는 \n", a); printf(" 홀수입니다 . \n"); } printf(" 프로그램 실행을 종료합니다 . \n"); } 실행결과 정수 값을 입력해 주세요? 33 <Enter> 입력한 33 는 홀수입니다. 블록에 포함된 이 2 개의 문장은 변수 a 값이 짝수일 때만 수행한다. 블록에 포함된 이 2 개의 문장은 변수 a 값이 홀수일 때만 수행한다. if 문블록 if 문블록
10 / 52 ◀5-4.C▶ #include <stdio.h> void main() { int jumsu; printf(" 점수는 ? "); scanf("%d", &jumsu);
if( jumsu>=90 && jumsu<=100 ) printf("A 입니다 . \n");
if( jumsu>=80 && jumsu<=89 ) printf("B 입니다 . \n");
if( jumsu>=70 && jumsu<=79 ) printf(“C 입니다 . \n"); if( jumsu>=60 && jumsu<=69 ) printf("D 입니다 . \n");
if( jumsu>=0 && jumsu<=59 ) printf("F 입니다 . \n");
printf(" 프로그램 실행을 종료합니다 . \n"); 조건식 각 if 문의 조건식 이 만족하면 수행하는 문장이다. 실행결과 점수는? 85 <Enter> B 입니다 . 프로그램 실행을 종료합니다 .
(2) if∼else 문
[ 사용형식 ] if( 조건식 ) 문장 1; else 문장 2; 이 명령은 if 문의 조건식이 만족하면 포함된 문장 1 을 수행하고 , 조건식이 만족되지 않으면 else 에 포함된 문장 2 을 수행한다 .◀5-5.C▶ 실행결과 정수 값을 입력해 주세요? 33 <Enter> 입력한 33 는 홀수입니다 . 프로그램 실행을 종료합니다 . #include <stdio.h> void main() { int a; printf(" 정수 값을 입력해 주세요 ? "); scanf("%d", &a); if( (a%2)==0 ) printf(" 입력한 %d 는 짝수입니다 . \n", a); else printf(" 입력한 %d 는 홀수입니다 . \n", a); printf(" 프로그램 실행을 종료합니다 . \n"); } 이 문장은 변수 a 값이 짝수일 때만 수행한 다 . 이 문장은 변수 a 값이 홀수일 때만 수행한다. 조건식 if 문 블록 else 문 블록
◀5-6.C▶ #include <stdio.h> void main() { int jumsu; printf(" 점수는 ? "); scanf("%d", &jumsu);
if( jumsu>=90 && jumsu<=100 ) printf("A 입니다 . \n"); else{
if( jumsu>=80 && jumsu<=89 ) printf("B 입니다 . \n"); else{
if( jumsu>=70 && jumsu<=79 ) printf("C 입니다 . \n"); else{
if( jumsu>=60 && jumsu<=69 ) printf("D 입니다 . \n"); else{
if( jumsu>=0 && jumsu<=59 ) printf("F 입니다 . \n"); }
} } }
(3) if∼else if 문
[ 사용형식 ] if( 조건식 1 ) 문장 1; else if( 조건식 2 ) 문장 2; else if( 조건식 3 ) 문장 3; … else 문장 n; 이 명령은 if 문의 조건식을 계속 검사하여 만족하는 if 문의 문장을 선택하여 수행한다 . 만약 어떤 if 조건식도 만족하지 않는 경우에 는 else 에 포함된 문장을 수행시킨다 .◀5-7.C▶ 실행결과 정수 값을 입력해 주세요 ? 77 <Enter> 입력한 77 는 홀수입니다 . 프로그램 실행을 종료합니다 . #include <stdio.h> void main() { int a; printf(" 정수 값을 입력해 주세요 ? "); scanf("%d", &a); if( (a%2)==0 ) printf(" 입력한 %d 는 짝수입니다 . \n", a); else if( (a%2)==1 )
printf(" 입력한 %d 는 홀수입니다 . \n", a); printf(" 프로그램 실행을 종료합니다 . \n"); } 조건식 if 문블록 else if 문블록
◀5-8.C▶ #include <stdio.h> void main() { int jumsu; printf(" 점수는 ? "); scanf("%d", &jumsu);
if( jumsu>=90 && jumsu<=100 ) printf("A 학점입니다 . \n");
else if( jumsu>=80 && jumsu<=89 ) printf("B 학점입니다 . \n");
else if( jumsu>=70 && jumsu<=79 ) printf("C 학점입니다 . \n");
else if( jumsu>=60 && jumsu<=69 ) printf("D 학점입니다 . \n");
else if( jumsu>=0 && jumsu<=59 ) printf("F 입니다 . \n"); printf(" 프로그램 실행을 종료합니다 . \n"); } 실행결과 점수는 ? 95 <Enter> A 학점 입니다 . 프로그램 실행을 종료합니다 . 조건식 각 else if 문의 조건식이 만족하면 수행하는 문장이 다 .
(4) switch∼case 문
[ 사용형식 ] switch( 식 ) { case 식결과 1 : 문장 1; break; case 식결과 2 : 문장 2; break; case 식결과 3 : 문장 3; break; … default : 문장 n; } 이 명령은 switch 의 괄호 () 속에 식의 결과에 따라 해당 case 로 이동하여 지정된 문장을 수행한다.◀5-9.C▶ #include <stdio.h> void main() { int a; printf(" 정수 값을 입력해 주세요 ? "); scanf("%d", &a); switch( a%2 ){
case 0 : printf(" 입력한 %d 는 짝수입니다 . \n", a); break;
case 1 : printf(" 입력한 %d 는 홀수입니다 . \n", a); break; } printf(" 프로그램 실행을 종료합니다 . \n"); } 실행결과 정수 값을 입력해 주세요 ? 33 <Enter> 입력한 33 는 홀수입니다 . 프로그램 실행을 종료합니다 . switch 문에서 는 식이라고 한다. switch 문 블록
◀5-10.C▶ #include <stdio.h> void main() { int jumsu; printf(" 점수는 ? "); scanf("%d", &jumsu); switch( jumsu/10 ){ case 10 : case 9 : printf("A 학점입니다 . \n"); break; case 8 : printf("B 학점입니다 . \n"); break; case 7 : printf("C 학점입니다 . \n"); break; case 6 : printf("D 학점입니다 . \n"); break; case 5 : case 4 : case 3 : case 2 : case 1 : case 0 : printf("F 입니다 . \n"); } printf(" 프로그램 실행을 종료합니다 . \n"); } switch 문 블록 식 break 명령은 자기 자신을 감싸고 있는 맨 안쪽의 블록을 탈출하게 한다.
◀5-11.C▶ #include <stdio.h> void main() { int jumsu; printf(" 점수는 ? "); scanf("%d", &jumsu); switch( jumsu/10 ){ case 10 : case 9 : printf("A 학점입니다 . \n"); break; case 8 : printf("B 학점입니다 . \n"); break; case 7 : printf("C 학점입니다 . \n"); break; case 6 : printf("D 학점입니다 . \n"); break; default : printf("F 입니다 . \n"); } printf(" 프로그램 실행을 종료합니다 . \n"); } 식 switch 문 블록
퀴즈 풀어보기
교제
140 쪽 ( 1 번 ~ 10
번
)
for 문
while 문
do ∼ while 문
주어진 조건에 따라 원하는 문장을 반복 수행시킬 때 사용하는 명령이다 . 여기에는 3 개의 명령이 제공되고 있 다 .(1) for 문
[ 사용형식 ]for(
식 1 ; 식 2 ; 식 3
)
문장 ;
( 초기값) 시작 값 지정 식 ( 최종값) 마지막 값 지정 식 ( 증감식) 증가, 감소 값 지정 식#include <stdio.h> void main()
{
int a;
for( a=1; a<=10; a++ ) printf("%d ", a); } 실행결과 1 2 3 4 5 6 7 8 9 10 ◀5-12.C▶ for 문의 사용 예 이 printf() 문장을 for 명령에 의해 10 회 반복 수행하여 변수 a 값을 출력 한다. 식 1( 초기 값 ) 식 2( 최종 값 ) 식 3( 증감 값 ) a 변수 for 블록
#include <stdio.h> void main()
{
int a, b;
for( b=1; b<=3; b++ ){ for( a=1; a<=10; a++ ) printf("%d ", a); printf("\n"); } } ◀5-13.C▶ for 문의 중첩사용 예 실행결과 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 이 printf() 문장은 a 변수 for 문 블록과 b 변수 for 문 블록에 모두에 공통으로 포함된 문장이기 때문에 30회 (=10 회 *3 회 ) 반복 수행한다. 이 printf() 문장은 b 변수 for 문 블록에 포함되는 때문에 3 회만 반복 수행한다. 이 for 문은 포함된 문장 을 3 회 반복 수행시킨다. 이 for 문은 포함된 문장 을 10 회 반복 수행시킨다 . b 변수 for 블록 a 변수 for 블록
실행결과 2*1=5 2*2=4 3*3=6 이하 2 단부터 9 단까지 출력합니다 . #include <stdio.h> void main() { int a, b; for( b=2; b<=9; b++ ){ for( a=1; a<=9; a++ )
printf("%d*%d=%d \n", b, a, b*a); printf("\n"); } } ◀5-14.C▶ for 문을 사용한 구구단 출력 이 printf() 문장 은 72회 (=8 회 *9 회 ) 반복 수행한다. b 변수 for 블록 a 변수 for 블록 이 printf() 문장은 b 변수 for 문 블록에 포함되 는 때문에 9 회만 반복 수행한 다 .
(2) while 문
[ 사용형식]
while(
조건식
) {
문장 ;
◀5-15.C▶ 실행결과 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> void main() { int a; a=1; while( a<=10 ){ printf("%d ", a); a++; } } 이 문장은 10 회 반복 수행된 다 . 식 1( 초기 값 ) 식 2( 최종 값 ) 식 3( 증감 값 ) while 문블록
◀5-16.C▶ #include <stdio.h> void main() { int a, b; b=1; while( b<=3 ){ a=1; while( a<=10 ){ printf("%d ", a); a++; } printf("\n"); b++; } } 실행결과 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 b 변수 while 문 블록 a 변수 while 문 블록 b 변수 while 블록의 식 1( 초 기값) b 변수 while 블록의 식 2( 최 종값) a 변수 while 블록의 식 1( 초 기값) a 변수 while 블록의 식 2( 최 종값) b 변수 while 블록의 식 3( 증 가값) a 변수 while 블록의 식 3( 증 가값)
◀5-17.C▶ 구구단을 출력하는 프로그램
#include <stdio.h>
void main()
{
int a, b;
b=2;
while(
b<=9
){
a=1;
while( a<=9 ){
printf(“
%d
*%d=%d \n",
b
, a, b*a);
a++;
}
printf("\n");
b++;
}
}
실행결과 2*1=5 2*2=4 3*3=6 이하 2 단부터 9 단까지 출력한다 . b 변수 while 문 블록 a 변수 while 문 블록 구구단의 단을 나타내는 while 문 블록 각 단의 곱을 지정하는 while 문 블록(3) do∼while 문
[ 사용형식 ]
do {
문장 ;
◀5-18.C▶ 실행결과 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> void main() { int a; a=1; do{ printf("%d ", a); a++; } while( a<=10 ); } 이 문장은 10 회 반복 수행된다 . 식 1( 초기 값 ) 식 2( 최종 값 ) 식 3( 증감 값 ) do~while 문 블록
◀5-19.C▶ #include <stdio.h> void main() { int a, b; b=1; do{ a=1; do{ printf("%d ", a); a++; } while( a<=10 ); printf("\n"); b++; } while( b<=3 ); } 실행결과 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 b 변수 do~while 문 블록 a 변수 do~while 문 블록
◀5-20.C▶ #include <stdio.h> void main() { int a, b; b=2; do{ a=1; do{ printf(“%d*%d=%d \n", b, a, b*a); a++; }while( a<=9 ); printf("\n"); b++; }while( b<=9 ); } 실행결과 2*1=5 2*2=4 3*3=6 이하 2 단부터 9 단까지 출력한 다 . b 변수 do~while 문 블록 a 변수 do~while 문 블록
퀴즈 풀어보기
교 제
150 쪽 ( 11 번 ~
25 번 )
break 문
continue 문
goto 문
원하는 문장으로 분기시킬 때 사용하는 명령이다. 여기에는 3 개의 명령이 제공되고 있다.(1) break 문
- 강제로 반복문을 탈출 시킬 때 사용한다 .
- 이때 하나의 break 문에 의해 벗어나는 블록은 자신을 포함시키는 맨 안쪽의 블록만 탈출시킨다 .
#include <stdio.h> void main()
{
int a;
for( a=1; ; a++ ){ if( a>10 ) break; else printf("%d ", a); } } 변수 a 값을 평가하여 10 보다 크면 if 문의 조건이 거짓이 되어 이 break 문장 을 수행하게 되어 for 문 블록을 벗어나게 된다. for 문에서 식 2 가 생략되었다. 즉 , 최종값 을 설정하지 않고 있다. 실행결과 1 2 3 4 5 6 7 8 9 10 ◀5-21.C▶ a 변수 for 블록
(2) continue 문
- 반복문에 사용한다 .
- 반복 수행하는 과정에서 continue 문을 만나게 되면 그 이하의 문장은 건너 띄고 , 다음 반복 조건에 의해 계속 수행하게 한다 .
#include <stdio.h> void main()
{
int a;
for(a=1; a<=10; a++){ if( a%2==0 ) continue; else printf("%d ", a); } } if 문에서 변수 a 값을 평가하여 0 이면 즉, 짝수이 면 이 continue 문장에 의해 다시 for 문으로 실행지점이 이동하여 계속 수행하게 된다. ◀5-22.C▶ 실행결과 1 3 5 7 9 a 변수 for 블록
(3) goto 문
- 무조건 원하는 문장으로 분기시켜 주는 명령이다 . [ 사용형식 ]goto
레이블명
;
…
레이블명
:
문장
;
#include <stdio.h> void main()
{
int a=1;
KING : printf("%d ", a); if(a<10){ a++; goto KING; } } 변수 a 값을 평가하여 10 보다 작거나 같으면 레이블명이 KING 이라고 붙여진 문장으로 이동하여 계속 수행한다. 실행결과 1 2 3 4 5 6 7 8 9 10 ◀5-23.C▶ if 문블록
퀴즈 풀어보기
교 제
156 쪽 ( 26 번 ~
30 번 )
응용실습
(1)
for 문을 이용하여
일정시간간격으로 1 씩 증가하면서
파일명
: 카운터 .C
#include <stdio.h> void main()
{
int a;
for( a=1; a<=10; a++ ) { printf(“%d “, a); } } (1) 먼저 , 1 부터 10 까지 출력하는 프로그램을 작성한다 . 먼저, 이 문장을 수정하 여 숫자가 고정된 위치에 출력되게 한다.
#include <stdio.h> void main()
{
int a; int b;
for( a=1; a<=10; a++ ) { printf( “%d \r“, a ); for( b=1; b<=200000000; b++ ) ; } } (2) 고정된 위치에서 숫자가 표시되는 시간을 원하는 대로 조정해 보자 . \r 에 의해 1 부터 10 까지의 숫자가 고정된 위치에서 출력된다. 이 for 문에 의해 1 부터 10 까지의 숫자가 1 씩 카운터 할 때마다 공 문장을 일정횟수만큼 반복 수행시켜 다음숫자의 표시를 지연시킨다.
응용실습
(2)
이번에는 앞의
“ 카운터 .c” 프로그램을 수정하여
1 씩 감소하면서 카운트 ( 디스카운트 ) 하는 타이머 프로그램이 되도록 하라 .
파일명
: 타이머 .C
#include <stdio.h> void main() { int a; int b;for( a=10; a>=1; a-- ) { printf( “%d \r“, a );
for( b=1; b<=200000000; b++ ) ;
} }
응용실습
(3)
이번에는 앞의 “ 타이머 .c” 프로그램을 수정하여 프로그램 사용자가 셋팅하는 시간만큼 디스카운트한 후에 프로그램 실행을 종료시키는 타이머 프로그램이 되도록 해보라 . 이때 원하는 시간단위는 초 (sec) 단위라고 가정한다 .파일명
: 타이머셋 .C
#include <stdio.h> void main() { int a; int b: printf(“ 타이머 시간 ( 초 ) 을 셋팅해 주세요 ? “); scanf(“%d”, &time);for( a=time; a>=1; a-- ) { printf( “%d \r“, a );
for( b=1; b<=200000000; b++ ) ;
} }