프로그램에서 같은 코드를 변수값만 바꿔가며 반복해서 해야 하는 경우는 빈번하게 발생한다. 이런 경우를 위해서 반복문이 사용된다. C 언어에서 사용하는 반복문은 for 와 while 그리고 do~while 세 가지가 있으며 가장 많이 쓰이는 것은 for 반복문이다.
for (초기실행문; 반복조건; 변환문) { 명령문1; … 명령문n;} |
for문 이후의 블럭이 정해진 수만큼 반복해서 수행이 된다. 초기실행문은 반복을 시작할 때의 초기값을 설정하는 부분이다. 만약 10번 반복해야 하고 초기값이 0이라면 이 부분에 0을 설정하는 실행문이 들어가야 한다. 만약 반복조건이 거짓이 되면 그 순간 반복문을 빠져 나가게 된다. 변환문은 매 반복이 끝나고(즉 명령문n이 끝난 다음) 반복조건이 참일 때 수행되는 명령문이다. 여기서 변수의 값을 증가 혹은 감소시킨다든가 하는 실행문이 위치하게 된다.
다음 예제를 보자
0403-01.c |
#include <stdio.h>int main() { int ia; for (ia=0; ia<10; ia++) { printf("count : %d\n", ia); }} |
실행 결과 |
count : 0count : 1count : 2count : 3count : 4count : 5count : 6count : 7count : 8count : 9 |
이 예제는 단순히 화면에 0부터 9까지 출력하는 프로그램이다. for구문이 수행되는 단계를 기술하면 다음과 같다.
① 반복문에 진입하기 전에 초기 실행문은 한 번 수행된다.
② 조건식을 검사한다.
③ 조건식이 참이라면 반복명령문(들)을 실행한다.
④ 변환문을 수행한 후 ②로 돌아간다.
위의 예제에서는 변환문은 ia++ 이다. ia는 0부터 시작해서 10보다 작을 경우 루프를 돌며 반복문을 수행한다. 즉 10번 반복문을 수행한다.
초기 실행문에 아예 변수의 선언을 해도 된다.
0403-02.c |
#include <stdio.h>int main() { for (int ia=9; ia>=0; ia--) { printf("count : %d\n", ia); }} |
실행 결과 |
count : 9count : 8count : 7count : 6count : 5count : 4count : 3count : 2count : 1count : 0 |
이 예는 앞의 경우와 반대로 10부터 1까지 카운트다운을 하는 프로그램이다. 이 경우 변수 ia는 반복문이 시작될 때 생성되고 반복문이 종료되면 소멸된다. 즉, 반복문이 종료되면 변수 ia는 사용할 수 없다. 단, 이 기능은 C99 이후부터 지원하므로 gcc 를 실행할 때 ‘-std=c99’ 옵션을 반드시 추가해야 한다. 만약 C++컴파일러를 사용한다면 (g++) 별다른 옵션 조절없이 이 기능을 사용할 수 있다.
이제 for 반복문을 사용하여 1부터 100까지의 총합을 구하는 프로그램을 작성해 보자.
0403-03.c |
#include <stdio.h>int main(void){ int isum = 0; for (int ia=1; ia<=100; ia++) { isum += ia; } printf(“result: %d.\n”,isum);} |
for 문 뒤에 실수로 세미콜론을 붙이지 않도록 주의한다. 즉
for ( ia=1; ia<=100; ia++); isum += ia; |
이와 같이 되면 문법적으로는 오류가 없으나 의도하지 않게 반복문이 수행되지 않을 것이다. 또한 for문 뒤에 오는 명령어가 하나뿐이라면 중괄호{}를 생략할 수 있어 좀더 간결하게 프로그램을 작성할 수 있다.
for ( ia=1; ia<=100; ia++) isum += ia; |
하지만 반복문에 속한 명령문이 하나 뿐일지라도 중괄호로 포함해 주면 가독성 측면에서 좀 더 낫다.
다른 예로 구구단을 출력하는 프로그램을 for 반복문을 이용하여 작성해 보자.
0403-04.c |
#include <stdio.h>int main() { int ia = 3; for (int ib=2; ib<10; ib++) { printf("%d x %d = %d\n",ia, ib, ia*ib); }} |
이 예제에서 변수 ia는 단수를 지정하며 다음과 같이 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 |
for문을 중첩해서 사용할 수 도 있다. 다음 예제는 2단부터 9단가지 출력하는 프로그램이다.
0403-05.c |
#include <stdio.h>int main() { for (int ia=2; ia<10; ia++) { for (int ib=2; ib<10; ib++) { printf("%d x %d = %d\n",ia, ib, ia*ib); } printf("------------\n"); }} |
초기 실행문은 콤마(,)로 연결하여 여러 변수를 동시에 초기화시킬 수도 있다.
for (int ia=1, isum=0; ia<=100; ia++) { isum += iA;} |
초기실행문에서 선언된 변수는 반복문이 종료된 이후에는 사용할 수 없다. 즉, 이 경우 변수 ia와 isum은 반복문이 종료된 후 소멸되므로 사용할 수 없다. 변환문도 콤마로 구분하여 여러 변수를 동시에 변화시켜줄 수 있다. 또한 조건은 ||연산자나 &&연산자를 이용하여 다중 조건을 체크할 수도 있다. 혹은 리턴값을 가진 함수를 이용하여 그 값을 비교할 수도 있다.
만약 isum 변수를 반복문 종료 후에도 사용하고 싶다면 반드시 for문 밖에서 선언해야 한다. 다음 예는 1부터 100까지의 합을 구하는 예이다.
0403-06.c |
#include <stdio.h>int main() { int isum = 0; for (int ia=1; ia<=100; ia++) { isum += ia; } printf("isum = %d", isum); // isum변수를 사용할 수 있다.} |
실행 결과 |
isum = 5050 |
for 반복문 바깥에서 선언된 변수는 반복문이 종료된 이후에도 사용할 수 있다.