반복문
하나 이상의 문장을 특정 조건에서 여러 번 반복하고 싶을 때 반복문이 사용된다.
반복문에는 while문과 for문이 있다.
반복문에서 중괄호 안에 반복을 원하는 문장을 작성하는 형식으로 사용할 수 있다.
또한 코드를 보기 편하게 하기 위해 보통 중괄호 안의 코드를 들여 쓰기를 한다.
for문
for 문은 초기식, 조건식, 증감식을 사용해서 원하는 내용을 반복할 수 있다.
초기식이란 조건에 사용할 문자를 선언, 혹은 초기화할 수 있는 식이다.
조건식이란 반복을 원하는 조건을 작성할 수 있는 식으로 조건값이 false 가 되면 반복을 중지하게 된다.
증감식이란 for 문 반복을 한 번 끝낼 때마다 실행하는 문장으로 조건을 변경시킬 때 사용한다.
아래 그림과 같이 정리 할 수 있다.
위 그림의 코드는 num이 0에서 시작하여 반복이 한 번 끝날 때마다 1씩 증가하고 15보다 작을 때 반복을 실행한다.
따라서 중괄호 안에 있는 Hello World! 는 총 15번 반복 출력된다.
그런데 컴파일러에 따라 초기식에서 변수 선언을 허용하지 않는 경우도 있다.
그런 경우에는 다음 코드와 같이 변수를 for 문 이전에 먼저 선언하고 사용을 해주어야 한다.
#include <stdio.h>
int main ()
{
int num;
for (num=0; num<15; num++)
{
printf("Hello World!%d\n", num);
}
return 0;
}
for 문에서는 초기식, 조건식, 증감식 중 필요하지 않은 식은 생략해도 괜찮다.
따라서 위 코드를 다음과 같은 코드로 바꿔 쓸 수 있다.
#include <stdio.h>
int main ()
{
int num = 0;
for ( ; num<15; )
{
printf("Hello World!%d\n", num);
num++;
}
return 0;
}
for문 무한루프
for 문안의 내용을 무한 번 반복하게 작성할 수도 있다.
먼저 조건을 항상 일치하게 작성해 주는 방법이 있다.
위 코드에서 num++를 해주지 않으면 num은 항상 0일 것이고 15 이상이 될 일이 절대 없을 것이다.
따라서 아래 코드처럼 작성하면 "Hello World!"를 무한 번 반복하는 코드가 된다.
#include <stdio.h>
int main ()
{
int num = 0;
for ( ; num<15; )
{
printf("Hello World!%d\n", num);
}
return 0;
}
for 문은 변수를 사용하지 않고도 무한 루프를 만들 수 있다.
조건식이 필수적이지 않음을 이용하는 것이다.
for 문은 조건식에 아무것도 작성하지 않으면 중괄호 안의 코드를 무한 번 반복한다.
따라서 다음 코드도 "Hello World!"를 무한 번 반복하는 코드이다.
#include <stdio.h>
int main ()
{
for ( ; ; )
{
printf("Hello World!\n");
}
return 0;
}
for문 중첩
for 문은 중첩해서 사용이 가능하다. 즉 for 문안에 for 문을 사용할 수 있다.
물론 아래에서 소개할 while 문에서도 중첩은 가능하다.
while 문에 for 문을 중첩한다던가 for 문에 while 문을 중첩이 가능한 것처럼 중첩에 제약은 없다.
중첩을 쉽게 이해하기 위해 for 문 중첩을 사용하여 구구단을 출력하는 코드를 작성해 보겠다.
#include <stdio.h>
int main ()
{
int dan = 0;
int mul = 0;
for (dan=2; dan<=9; dan++)
{
for (mul=1; mul<=9; mul++)
{
printf("%d x %d = %d\n", dan, mul, dan*mul);
}
}
return 0;
}
while문
while 문은 초기식과 증감식 없이 조건식만을 사용할 수 있다.
for 문에서는 조건식을 사용하지 않아도 문제가 없지만 while 문은 조건식이 꼭 필요하다.
따라서 조건식에 필요한 문자를 먼저 선언해야 하며 증감식을 사용할 수 없으니 중괄호 안에서 반복할 때
증감식을 작성해 주어야 한다.
"Hello World!"를 15번 출력하는 코드를 작성해 보겠다.
#include <stdio.h>
int main ()
{
int num = 0;
while (num<15) // num이 15보다 작을 때 출력
{
printf("Hello Wolrd!");
num++; // num이 1 증가
}
return 0;
}
위 코드에서 while 문은 num이 15보다 작을 때 반복되며 num이 15 이상이 되면 while 문을 빠져나오게 된다.
num 은 중괄호 안에서 작성된 코드의 내용대로 while 문을 한 번 반복할 때마다 1씩 증가한다.
따라서 총 15번의 while이 반복되면 num은 15가 되고 while 문은 작동하지 않게 되어
"Hello World!"를 15번 출력하게 되는 것이다.
while문 무한루프
while 문안의 내용도 무한 번 반복하게 작성할 수도 있다.
for 문 무한 루프를 설명할 때처럼 조건식이 항상 일치하지 않게 작성하는 방법이 있다.
while 문은 조건식이 필수적으로 필요하지만 변수를 사용하지 않고도 무한 루프를 만들 수 있는 방법이 있다.
while(1)을 이용하는 것이다.
앞서 논리연산자를 소개할 때 false는 0 값을 true는 0 이외의 값을 반환한다고 하였다.
따라서 while의 조건식에 0 이외의 값을 넣게 되면 항상 조건이 성립하게 되어서 while 문을 무한 루프로 만들 수 있다.
통상적으로는 while(1)을 사용하나 while(2), while(3) 도 가능하고
while('a'), while("abc")처럼 문자나 문자열을 사용하는 것도 가능하다.
그러나 C언어에서는 기본적으로 bool형을 지원하지 않기 때문에 while(true)로 사용하는 것은
다른 방법을 사용해야 한다. 이 방법은 나중에 bool 자료형에 대해서 소개하면서 설명하겠다.
따라서 우선 while(1) 을 이용하여 무한 루프를 만드는 코드를 작성해 보겠다.
#include <stdio.h>
int main ()
{
while (1)
{
printf("Hello Wolrd!\n");
}
return 0;
}
중괄호 생략
반복문에서 반복하고 싶은 내용이 한 줄 일 경우에는 중괄호를 생략할 수 있다.
아까 for 문을 소개할 때 작성했던 구구단 코드를 예시로 들면 printf 함수가 포함된 for 문은
중괄호 안에 한 줄만 있으므로 중괄호를 생략할 수 있다.
따라서 for 문을 다음과 같이 사용할 수 있다.
#include <stdio.h>
int main ()
{
int dan = 0;
int mul = 0;
for (dan=2; dan<=9; dan++)
{
for (mul=1; mul<=9; mul++)
printf("%d x %d = %d\n", dan, mul, dan*mul);
}
return 0;
}
물론 while 문도 중괄호 생략이 가능하다.
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] bool 자료형 (0) | 2024.02.09 |
---|---|
[C언어] 반복문 (do while문) (0) | 2024.02.08 |
[C언어] 아스키 코드(ASCII CODE), 널(Null)과 0의 차이 (0) | 2024.02.08 |
[C언어] 심볼릭 상수 (Symbolic Const) (0) | 2024.02.08 |
[C언어] 형변환 (Type Casting) (0) | 2024.02.07 |