4장: 반복문

2011-04-06 23:07:01 +0900 -
C

4장에서는 아래의 내용을 설명할 것입니다:

  • 논리 연산자
  • while, do while, for
  • 다중 반복문

예제

#include <stdio.h>
int main(void) {
	int num;
	int sum = 0; // sum의 값을 0으로 초기화합니다
	int status;
	printf("추가할 정수를 입력해주세요. (q를 입력하면 종료합니다): ");
	status = scanf("%d", &num);
	/* == 는 "같다"를 의미합니다 */
	while (status == 1) {
		sum = sum + num;
		printf("다음 정수를 입력해주세요. (q를 입력하면 종료합니다): ");
		status = scanf("%d", &num);
	}
	printf("입력한 정수들의 합은 %d입니다.\n", sum);
	return 0;
}

< 출력 화면 >

추가할 정수를 입력해주세요. (q를 입력하면 종료합니다): 1
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  3
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  5
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  101
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  256
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  1024
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  11
다음 정수를 입력해주세요. (q를 입력하면 종료합니다):  q
입력한 정수들의 합은 1401입니다.

예제에 대한 설명

1. status == 1
status = scanf("%d", &num);

위의 부분을 이해하기 힘드셨을 것입니다.

scanf()는 안에 있는 서식의 데이터를 받으면 받은 서식의 수를 출력합니다.

만약 scanf("%d %d", ..., ...)에서 정수를 1개 넣으면 1을 반환하고 정수를 2개 넣으면 2를 반환합니다. 정수를 안 넣고 둘 다 다른 것을 넣게 되면 0을 반환합니다.

예)
#include <stdio.h>
int main(void) {
	int x, y;
	int status;
	printf("x y 형식으로 입력해주세요: ");
	status=scanf("%d %d", &x, &y);
	printf("status=%d\n", status);
	return 0;
}
< 출력 화면 >
x y 형식으로 입력해주세요: a b
status=0
x y 형식으로 입력해주세요: a 1
status=1
x y 형식으로 입력해주세요: 10 4
status=2
2. while 반복문
while ( 조건 ) {
	...
}

while은 조건이 성립하면 { }안의 작업을 반복합니다.

논리 연산자 종류
연산자 조건
a==b a와 b가 같다
a!=b a와 b가 다르다
a>b a가 b보다 크다
a<b a가 b보다 작다
a>=b a가 b보다 같거나 크다
a<=b a가 b보다 같거나 작다
예)
// when.c -- 언제 반복문이 종료될까?
#include <stdio.h>
int main(void) {
	int n = 1;
	while (n < 4) {
		printf("n = %d\n", n);
		n++;
		printf("n++를 한뒤의 n = %d\n", n);
	}
	printf("반복문이 종료되었습니다.\n");
	return 0;
}
< 출력 화면 >
n = 1
n++를 한뒤의 n = 2
n = 2
n++를 한뒤의 n = 3
n = 3
n++를 한뒤의 n = 4
반복문이 종료되었습니다.

추가 내용: while(1)을 사용하게 되면 계속 반복합니다. 그 이유는 () 안의 조건이 성립하면 True 값인 1이 되기 때문인데 조건이 True로 고정되어 있으므로 while의 조건은 항상 성립하여 작업을 무한히 반복하게 됩니다. printf("%d", 1 == 2); printf("%d", 2 == 2); 를 사용하여 출력해보면 True는 1 False는 0을 출력하는 것을 확인할 수 있습니다.

3. do while

do whiledo 다음의 명령을 먼저 실행한 뒤 조건이 성립하면 반복합니다.

예)
// dowhile.c -- q를 입력받을 때까지 반복합니다
#include <stdio.h>
int main(void) {
    char ch;
    printf("q를 입력하면 프로그램을 종료합니다.\n");
    do {
        scanf("%c", &ch);
        printf("%c", ch);
    } while ( ch != 'q' );
    printf("프로그램을 종료합니다.\n");
    return 0;
}
< 출력 화면 >
q를 입력하면 프로그램을 종료합니다.
a
a
b
b
c
c
q
q프로그램을 종료합니다.
4. for

for은 while과 같은 반복문입니다.

while과 다른 점은 초기식, 조건식, 증감식을 설정할 수 있습니다.

for(n=0 ; n<3 ; n++)

위와 같이 입력하면 n의 초깃값을 0으로 설정하고, n<3일 때 작동하며 반복문이 돌 때마다 n은 1씩 증가하게 됩니다.

예)
// for.c -- 1부터 100을 모두 더합니다.
#include <stdio.h>
int main(void) {
    int num;
    int total=0;
    for (num=1 ; num<=20 ; num++) {
		printf("%d에 %d를 더하였습니다.\n", total, num);
		total += num; // total = total + num
	}
	printf("결과: %d\n", total);
  return 0;
}

< 출력 화면 >
0에 1를 더하였습니다.
1에 2를 더하였습니다.
3에 3를 더하였습니다.
6에 4를 더하였습니다.
10에 5를 더하였습니다.
15에 6를 더하였습니다.
21에 7를 더하였습니다.
28에 8를 더하였습니다.
36에 9를 더하였습니다.
45에 10를 더하였습니다.
55에 11를 더하였습니다.
66에 12를 더하였습니다.
78에 13를 더하였습니다.
91에 14를 더하였습니다.
105에 15를 더하였습니다.
120에 16를 더하였습니다.
136에 17를 더하였습니다.
153에 18를 더하였습니다.
171에 19를 더하였습니다.
190에 20를 더하였습니다.
결과: 210
5. 다중 반복문

다중 반복문은 반복문 안에 반복문이 있는 구조를 말합니다.

예)
// gugucode.c -- 2단부터 5단까지 구구단을 출력합니다
#include <stdio.h>
int main(void) {
	int table, num;
	for (table=2 ; table <= 5 ; table++) {
		for (num=1 ; num <= 9 ; num++) {
			printf("%d x %d = %d\n", table, num, table*num);
		}
		printf("\n");
	}
	return 0;
}
< 출력 화면 >
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18

3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27

4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45

  1. 정수형 변수 table과 num이 선언됩니다.
  2. 5번째 줄에 있는 첫 번째 반복문이 시작되며 table은 2로 초기화한 뒤 table 값이 5와 같거나 작을 때까지 반복되며 반복문이 돌 때마다 1씩 증가합니다.
  3. 6번째 줄에 있는 두 번째 반복문이 시작되며 num을 1로 초기화한 뒤 1씩 증가하여 num이 9와 같거나 작을 때까지 반복합니다.
  4. 7번째 줄에 있는 printf("%d x %d = %d\n", table, num, table*num);에서 table, num, table*num 값을 출력합니다.
  5. 6번째 줄에 있는 두 번째 반복문이 종료되면 printf("\n");이 실행됩니다.
  6. 다시 5번째 줄에 있는 첫 번째 반복문이 시작되며 여기서 table의 값은 1이 증가했기 때문에 3이 되며, ‘3번 ~ 5번’ 단계를 실행합니다.
  7. 계속 반복하다 table의 값이 5보다 크면 반복을 중지하고 프로그램을 종료합니다.