제어문 Control Statements LOGO
반복문
Iteration statements반복문은 지정된 조건식에 만족하는 동안 계속해서 반복을 수행 반복문의 종류로는 for 문 , while 문 , 그리고 do~while 문 등이 있다
LOGO
도서출판 한산
제어문 Control Statements
for문은 조건식의 값이 참인 경우 계속해서 반복을 수행하다가 거짓이 되면 for{ } 를 빠져 나오게 된다 for문은 반복문 중에서도 많은 프로그래머들이 자주 사용하는 형식이기 때문에 반드시 활용 방법에 익숙해질 필요성이 있다
for문의 형식은 :
for 문
형 식 설 명
for(초기값 ; 조건식 ; 증감식) {
실행문 1;
실행문 2;
•••
•••
}
- for문은 먼저 초기값이 실행된다 .
- 초기값은 반복문을 실행하기 전에 단 한번만 사용 하게 되며 조건식의 값과 비교하여 그 평가 값이
참인지 거짓인지를 판별하게 된다 .
- 만약 조건식에 의한 판별 평가 값이 참이면 for{ } 내의 실행문들을 수행하게 되며 거짓이면 for{
}를 빠져 나오게 된다 .
- 증감식은 판별에 의한 평가 값을 증가 또는 감소시 키는 역할을 한다 . - 참고로 , for 문의 조건 뒤에는 세미콜론 ( ; )을 붙 이지 않는다 . [예시 ] for( 초기값 ; 조건식 ; 증감식 );
제어문 Control Statements LOGO
for문의 실행 순서 :
for 문
소스코드 실행 순서
① ② ④
for(i=0; i<2; i++) {
실행문 1; ③ }
[STEP 1] ①은 초기값으로 변수 i 에 0 을 대입하고 있으며 단 한 번만 실행하게 된다 .
[STEP 2] 초기값 0 을 조건식
②
에서 비교 판단하게 된다 . 이때 , 초기값 0 은 3 보다 작기 때 문에판별 결과가 참이므로 for{ } 내의
③
의 실행문 1 을 수행하게 된다 .[STEP 3] ③의 실행문 1 을 수행하고
④
로 이동하여 변수 i 의 값을 1증가 시킨다 . 즉 , i++ 는 i=i+1과같은 의미이기 때문이다 . 따라서 i 의 값은 0에서 1 로 증가하게 된다 .
LOGO
도서출판 한산
제어문 Control Statements
for문의 실행 순서 :
for 문
[STEP 4] 증가된 1 의 값은
②
에서 다시 한 번 비교 판단을 하게 된다 . 증가된 값 1 은 2보다 작기때문에 판별 결과가 참이므로 또 다시 for{ } 내의
③
의 실행문 1 을 실행하게 된 다 .[STEP 5] [STEP 3]의 방법에 따르면 변수 i 의 값은 1에서 2 로 증가하게 된다 .
[STEP 6] 증가된 2 의 값은
②
의 조건식인 i<2 에 거짓이기 때문에 for{ } 를 빠져 나가게 된다 .제어문 Control Statements LOGO
for문의 흐름도 :
for 문
LOGO
도서출판 한산
제어문 Control Statements
예제 " 초기값 1부터 5까지의 값을 출력 "하는 프로그램
[ 흐름도 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: int x;
6:
7: for(x=1; x<=5; x++) 8: {
9: printf("PRT1: %d, n", x); ∖ 10: }
11: }
제어문 Control Statements LOGO
예제 " 초기값 5부터 1까지의 값을 출력 "하는 프로그램
[ 흐름도 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: int x;
6:
7: for(x=5; x>=1; x--) 8: {
9: printf("PRT1: %d, n", x); ∖ 10: }
11: }
LOGO
도서출판 한산
제어문 Control Statements
예제 "1부터 10까지 중에 홀수만의 누적 합을 구하여 출력 "하는 프로그램
[ 흐름도 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: int x, add;
6:
7: add=0;
8:
9: for(x=1; x<=10; x+=2) 10: {
11: add+=x;
12: }
13: printf("PRT1:홀수총합 :%d 이다 . n", add); ∖ 14:}
제어문 Control Statements LOGO
예제 양의 정수 1에서 n까지의 총 합을 구하는 프로그램
[ 흐름도 ]
1: #include <stdio.h>
2:
3: mian() 4: {
5: int x, n, add=0;
6:
7: printf("n의 정수 값을 입력하시오∖ n");
8: scanf("%d", &n);
9:
10: for(x=1; x<=n; x++) 11: {
12: add+=x; // add=add+x;와 같다 . 13: }
14: printf("PRT1: %d까지의 총합은 %d 이다 . n", n, add);∖ 15: }
[변수 n 에 10 을 입력한 경우 ]
[변수 n 에 100 을 입력한 경우 ]
LOGO
도서출판 한산
제어문 Control Statements
예제 알파벳 a부터 입력된 알파벳까지 출력 가능한 프로그램
[ 흐름도 ]
[알파벳 f 를 을 입력한 경 우 ]
[알파벳 m 을 입력한 경우 ]
1: #include <stdio.h>
2:
3: mian() 4: {
5: char n, x;
6:
7: printf("알파벳을 입력하시오∖ n");
8: scanf("%c", &n);
9:
10: for(x='a'; x<=n; x++) 11: {
12: printf("%c ", x);
13: }
14: printf(" n"); ∖ 15: }
제어문 Control Statements LOGO
for문 형식의 구성을 변형시켜도 문제가 되지 않는 몇 가지 유형에 대해서 알아보자
❏ 그 밖의 for 문의 유형
for문을 이용한 무한 루프의 경우
for문의 형식에서 조건식을 생략 for문의 형식에서 모든 조건을 생략
for( x=0; ;x++ ) {
실행문 ; }
for( ; ; ) {
실행문 ; }
초기값과 증감식이 생략된 경우
초기값을 for{ } 이전에 초기화 for문의 실행 블록에 증감식을 기입
int x=0;
for( ; x<=50; x++ ) {
실행문 ; }
for( x=0; x<=50; ) {
실행문 ; x++;
}
LOGO
도서출판 한산
제어문 Control Statements
중첩 for 문이란 for{ } 의 중괄호인 실행 블록 내에 또 다른 for 문들을 사용하는 것 중첩 for 문의 형식은 :
중첩 for 문
형 식 설 명
// 바깥쪽 for 문
for(초기값 ; 조건식 ; 증감식) {
// 안쪽 for 문
for(초기값 ; 조건식 ; 증감식) {
실행문 1;
실행문 2;
} }
[STEP1] 바깥쪽 for 문에서 초기값부터 실행한다 .
[STEP2] 조건식의 값과 비교하여 그 평가 값이 참이 면 안쪽 for 문의 초기값을 실행한 다 .
[STEP3] 안쪽 for 문의 조건식이 참이면 안쪽 for 문의 실행 블록 내의 실행문 1 과 실 행문
2를 수행 한다 .
[STEP4] 안쪽 for 문의 증감식에 의한 값을 [STEP3] 과 같이 수행한다 .
[STEP5] 안쪽 for 문의 조건식 판별 결과가 거짓이 될 때까지 [STEP3] 과 [STEP4] 를 반복
수행한 다 .
[STEP6] 안쪽 for 문의 조건식에 따른 판별 결과가 거 짓이면 바깥쪽 for 문의 증감식으 로
이동하여 얻은 값을 조건식에서 참 또는 거짓의 판별 을 하게 된다 .
[STEP7] 만약 , 바깥쪽 for 문의 조건식이 참이면 [STEP2] 부터 [STEP6] 까지를 재차 수행
하게 되며 , 거짓이면 바깥쪽 for 문에서 완전히 빠 져 나가 순차적 처리에 의 해서
그 다음 단계의 실행을 하게 된다 .
제어문 Control Statements LOGO
중첩 for 문의 흐름도
LOGO
도서출판 한산
제어문 Control Statements
예제 "1 단부터 3단까지의 구구단을 출력할 수 있는 프로그램 "
[ 흐름도 ]
[구구단 3단까지 실행결 과 ]
1: #include <stdio.h>
2:
3: mian() 4: {
5: int x, y;
6:
7: for(x=1; x<=3; x++) 8: {
9: for(y=1; y<=9; y++) 10: {
11: printf("%4d", x*y);
12: }
13: printf("∖n");
14: } 15: }
제어문 Control Statements LOGO
while문도 for 문과 마찬가지로 조건식의 평가 결과 값이 참인 경우 계속해서 반복을 수행하다가 거짓이 되면 while{ } 를 빠져 나오게 된다
중첩 for 문의 형식은 :
while 문
형 식 설 명
while(조건식) {
실행문 1;
실행문 2;
}
실행문 3;
- while문의 조건식이 참인 경우 while 문의 실행 내 용인 실행문 1 과 실행문 2 를 수행
하게 된다 .
만약 조건식의 판단 결과가 거짓이 되면 중괄호 { } 를 건너뛰고 실행문 3 을 수 행하
게 된다 .
LOGO
도서출판 한산
제어문 Control Statements
while 문의 흐름도
제어문 Control Statements LOGO
예제 "알파벳 A부터 K까지 출력 가능한 프로그램 "
[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: char x='A', y='K';
6:
7: while(x<=y) 8: {
9: printf("%3c", x);
10: x++;
11: }
12: printf(" n");∖ 13: }
LOGO
도서출판 한산
제어문 Control Statements
예제 "정수 1부터 키보드를 통해 입력된 값까지 총 합 "
[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: int x=1, y, add=0;
6:
7: printf("정수를 입력하시오∖ n");
8: scanf("%d", &y);
9:
10: while(x <= y) 11: {
12: add+=x;
13: x++;
14: }
15: printf("총합은 %d 이다 . n", add);∖ 16: }
제어문 Control Statements LOGO
예제 "한 문자씩 입력하다가 엔터키를 누르면 입력한 모든 문자들을 모니터에 출력 "
[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: char munja;
6:
7: printf("한 문자씩 입력하세요∖ n");
8: while((munja=getchar()) != ' n')∖ 9: {
10: putchar(munja);
11: }
12: printf(" n");∖ 13: }
LOGO
도서출판 한산
제어문 Control Statements
예제
while
문의 경우에 있어서 무한 반복으로 실행[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: int x=0;
6:
7: while(1) 8: {
9: printf("현재 %d 번째 반복 중 . n",x+∖ +);
10: } 11: }
제어문 Control Statements LOGO
do~while문은 while문과 매우 유사하지만 순차적 처리에 의해서 먼저 실행문을 수행
그 후에 while문의 조건식을 판별하여 그 결과에 따라서 재차 실행문을 수행할 것인가를 결정 do~while 문의 형식은 :
do~while 문
형 식 설 명
do {
실행문 1;
실행문 2;
} while(조건식);
실행문 3;
- 순차적 처리에 의해서 do{ } 내의 실행문 1 과 실행 문 2 를 수행한다 . 그리고 while 문의
조건식을 판별 하여 그 결과가 참인 경우 do{ } 내의 실행문 1 과 실행문 2 를 재차 수행하
게 된다 .
- 만약 while 문의 조건식을 판별하여 결과가 거짓이 면 while 문을 빠져나와서 실행문 3을
실행하게 된 다 .
- do~while문의 경우는 while( 조건문 ) 다음에 반드시 세미콜론 (;)을 붙여서 while( 조 건문 );
과 같이 표현 한다 .
LOGO
도서출판 한산
제어문 Control Statements
do~while 문의 흐름도
제어문 Control Statements LOGO
예제 " 정수 1부터 키보드를 통해 입력된 값까지 총 합 "
을 구하는 프로그램
[ 흐름도 ]
[변수 y 에 10 을 입력한 경 우 ]
1: #include <stdio.h>
2:
3: mian() 4: {
5: int x=1, y, add=0;
6:
7: printf("정수를 입력하시오∖ n");
8: scanf("%d", &y);
9:
10: do 11: {
12: add+=x;
13: x++;
14: } while(x <= y);
15: printf("총합은 %d 이다 . n", ∖ add);
16: }
LOGO
도서출판 한산
제어문 Control Statements
예제 "알파벳 A부터 K까지 출력 가능한 프로그램 "
[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: char x='A', y='K';
6:
7: do 8: {
9: printf("%3c", x);
10: x++;
11: } while(x <= y);
12: printf(" n");∖ 13: }
제어문 Control Statements LOGO
분기문
branching statements분기문은 제어의 흐름을 지정된 조건에 따라서 여러 방향으로 이동시켜 처리하는 구문으로 break, continue, 그리고 goto문으로 나누어 살펴 볼 수 있다
break문은 switch~case문에서도 학습한 적이 있듯이 주로 반복문에서 반복 실행 도중에 강제적으로 반복을 멈추고 해당문을 빠져 나올 때 사용
중첩된 반복문에 강제적으로 빠져나올 경우는 중첩된 반복문의 수만큼 break문이 필요하게 된다
break 문
형 식 설 명
// 반복문 for, while, do~while, 그리고
// switch문에서 주로 사용된다 .
반복문 (조건식) { 실행문 1;
실행문 2;
break;
}
실행문 3;
- 반복문 (for, while 등 ) 에서 실행문 1 과 실행문 2 를 반복 실행하 다가 break 문을 만나게 되면 프로그램의 흐름이 강제적으 로 종료 되면서 순차적 처리에 의해서 다 음 단계인 실행문 3 으로 이동하여 처리하 게 된다 .
LOGO
도서출판 한산
제어문 Control Statements
break 문의 실행과정 흐름도
제어문 Control Statements LOGO
예제 break문
[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: char x;
6:
7: for(x='A'; x<'Z'; x++) 8: {
9: printf("%c n", x);∖ 10: if(x=='D')
11: {
12: break;
13: } 14: } 15: }
LOGO
도서출판 한산
제어문 Control Statements
continue문은 반복문에서만 사용되며 switch~case 문에서는 사용하지 않는다
반복문에서 반복 실행을 하다가 continue문을 만나게 되면 이후의 실행문를 수행하지 않고 반복문의 조건식으로 이동하게 된다
continue 문
형 식 설 명
반복문 (조건식) { 실행문 1;
continue;
실행문 2;
}
- 반복문 (for, while 등 ) 을 실행하면서 continue 를 만나게 되면 continue 이후의 실행문 2 를 수행하지 않고 반복문의 조건식으 로
이동하게 된다 .
제어문 Control Statements LOGO
continue 문의 실행과정 흐름도
LOGO
도서출판 한산
제어문 Control Statements
예제 continue의 예제
[ 흐름도 ]
[실행결과 ] 1: #include <stdio.h>
2:
3: mian() 4: {
5: int x;
6:
7: for(x=1; x<10; x+=2) 8: {
9: if(x==7) 10: {
11: continue;
12: } 13: else 14: {
15: printf("x=%d n", x); ∖ 16: }
17: } 18: }