반복문을 공부하기 앞서 이전 내용을 함께 공부해 보아요
---> 2020.07.18 - [프로그래밍언어/c언어] - C언어 독학 #8. 자료형
반복문이란?
반복문이란 말그대로 반복되어 실행되는 문장을 말합니다.
음 이해를 돕기 위해서 대표적인 맨몸 운동인 팔굽혀펴기를 예로 들어볼게요.
제가 팔굽혀펴기를 하기 위해서 목표 횟수를 60회로 정해두고 팔굽혀펴기를 시작하면, 60회를 반복하여 팔굽혀펴기를 마무리하게 됩니다. 물론 저는 컴퓨터가 아니라 60회를 무조건 한다는 보장은 없지만..ㅎ
이를 플로우 차트로 위와 같이 나타낼 수 있습니다. 그럼 팔굽혀펴기로 비유한 반복문을 실제 c언어에서는 어떻게 적용시키는지 알아볼까요?
for문
for문 문법
사전적 의미로 '~동안'이라는 의미를 갖고 있는 for 키워드는 c언어에서 반복문을 의미합니다.
위와 같이 for문을 사용할 수 있습니다. 초기식은 반복을 시작하기 전 조건에 사용할 변수를 초기화하는 식을 의미합니다. 조건식은 조건에 사용할 변수가 반복문을 돌 수 있는 조건을 나타내는 값을 의미하고, 변화식은 그 변수의 증감을 의미합니다. 한 마디로 조건식이 참인 동안 조건에 사용되는 변수를 증감하여 내용을 반복하는 것을 나타냅니다. 팔굽혀펴기 예시를 실제 코드로 작성하여 설명해볼게요!
우선 팔굽혀펴기 횟수에 대한 정보를 담을 변수를 선언해줍니다.
// 변수 선언
int count;
이제 이 count 변수를 조건으로 for문을 돌립니다.
for( count = 1; count < 60; count++ ) {
printf("팔굽혀펴기 %d 회 \n", count);
}
for문에 진입하면서 count를 1로 설정합니다. 그다음 조건식을 통해 해당 조건이 참인지 확인한 후 참이면 반복 내용을 수행합니다. 반복 내용은 횟수를 출력해주는 작업입니다. 그 후 변화식을 통해 조건에 사용되는 변수를 증감시킵니다. 여기에서는 횟수 변수인 count를 1 증가시키는 것입니다. 증감시킨 값 2가 조건값보다 작아서 참이므로 마찬가지로 반복 내용을 수행합니다.
위 실행결과와 같이 1회부터 59회까지 반복 내용이 출력이 됩니다.
어 근데 왜 출력 내용에서 '팔굽혀펴기 60회'가 보이지 않을까요?
바로 count 변수가 59에서 1증가 하면서 조건식을 만족하지 못해 for문을 종료하기 때문입니다. 따라서 출력은 되지 않고, count 변수를 따로 확인해보면 60을 저장하고 있는 것을 확인할 수 있습니다.
코드
#include <stdio.h>
int main(void) {
int count;
for (count = 1; count < 60; count++) {
printf("팔굽혀펴기 %d 회 \n", count);
}
printf("\n 종료후 횟수: %d \n", count);
return 0;
}
중첩 for문
for문을 중첩해서 사용한다면 어떨까요? 구구단 출력을 예로 들어볼게요.
구구단을 1단부터 9단 까지 나타내기 위해서 2단의 x 1부터 x 9까지 3단의 x 1부터 x 9까지 이렇게 마지막은 9단의 x 1부터 x 9까지 나타내겠죠? 이런 구구단을 중첩 for문으로 짧게 나타낼 수 있습니다!
바로 1단에서 9단까지를 의미하는 변수 i, 1부터 9까지 곱하는 수를 의미하는 변수 j를 사용해서 코드를 작성해볼게요.
#include <stdio.h>
int main(void) {
int i, j;
// 2단 부터 9단 까지
for (i = 2; i <= 9; i++) {
printf("%d단 \n", i);
// 1부터 9까지 곱함
for (j = 1; j <= 9; j++) {
printf("%d x %d = %d \n", i, j, i * j);
}
printf("\n");
}
return 0;
}
i는 초기값 2로 조건을 만족하기 때문에 반복 내용을 수행합니다.
일단 몇 단인지 출력하는 작업을 해준 뒤 또 반복문을 만납니다. 이때 j는 초기값 1로 조건을 만족하여 1부터 9까지 곱한 값을 출력하는 반복 내용을 수행합니다.
이 과정을 i = 2 부터 i = 9까지 수행하게 됩니다!
그럼 위와 같이 2단부터 9단까지 출력되는 결과를 얻을 수 있습니다.
for문의 여러가지 형태
무한루프
//1은 참을 의미
for (i = 0; 1; i++) {
//또다른 조건식
if (i > 10) {
break;
}
//반복 내용
}
//조건값 생략
for (i = 0; ; i++) {
//또다른 조건식
if (i < 5) {
continue;
}
//반복 내용
}
1은 c언어에서 참을 의미하므로 조건이 항상 참이기 때문에 원래 첫 번째 for문은 계속 실행됩니다.
for문의 초기값, 조건값, 증감값은 생략할 수 있습니다. 조건값을 생략하여 무한 루프를 나타낼 수 있습니다.
하나 눈여겨 볼 점은 두 반복문에 쓰인 또 다른 조건식입니다.
첫 번째 반복문에서 또다른 조건식은 i가 10보다 크다면 break를 하는 것인데 break문은 반복문의 종료를 의미합니다. 따라서 이는 원래 조건식 i <= 10과 동일하여 무한 루프를 돌지 않고, 빠져나올 수 있습니다.
두 번째 반복문에서 쓰인 또 다른 조건식은 i가 5보다 작으면 continue를 하는 것입니다. continue문은 반복문의 생략을 의미합니다. break와 달리 반복문을 종료하는 것이 아니라 반복 내용만 생략하게 됩니다. 따라서 i가 0부터 4까지는 반복 내용을 수행하지 않고, 나머지 i에 대해 반복 내용을 수행하여 무한 루프를 돌게 됩니다.
for문 초기값 변수 선언
for ( int i = 0; i < 100; i++ ){
//반복 내용
}
초기값을 설정할 때 변수를 선언하여 사용할 수 있습니다. 이때 선언되는 변수는 for문 내부에서만 사용 가능합니다.
증감값 생략
for ( i = 0; i < 100; ){
//반복 내용
i++; //증감값과 같은 역할
}
while문
while문 문법
while도 for문과 마찬가지로 사전적으로 '~동안'이라는 의미를 갖고 있고, c언어에서 반복문으로 쓰입니다.
for문과 마찬가지로 조건식을 만족하면 반복 내용을 수행합니다. 이번엔 팔굽혀펴기를 while로 구현해보겠습니다.
#include <stdio.h>
int main(void) {
int count = 1;
while (count < 60) {
printf("팔굽혀펴기 %d 회 \n", count);
count++;
}
printf("\n 종료후 횟수: %d \n", count);
return 0;
}
for문과 다른점은 초기식과 변화식이 조건식과 한 번에 쓰이지 않습니다. 초기식 같은 경우는 while문 밖에서 설정되어 있고, 변화식 같은 경우는 while문 내부에서 설정되어 있습니다.
(실행결과는 for문 팔굽혀펴기와 같음)
중첩 while문
구구단도 마찬가지로 중첩 while문을 사용하여 구현해보겠습니다.
#include <stdio.h>
int main(void) {
int i = 2;
int j = 1;
while (i <= 9) {
printf("%d단 \n", i);
while (j <= 9) {
printf("%d x %d = %d \n", i, j, i * j);
j++;
}
printf("\n");
i++;
j = 1;
}
return 0;
}
변수 i, j를 선언하여 초기값을 설정해줍니다. i는 9보다 작거나 같기 때문에 반복 내용을 수행합니다. j도 9보다 작거나 같기 때문에 반복 내용을 수행하고 내부에서 변화식을 사용하여 구구단을 출력해주고 반복문을 종료합니다. 다음 구구단 출력을 위해 i를 증가시켜 주고, j는 다시 초기식을 사용해서 1로 설정합니다. 이런 과정을 반복하면 구구단을 출력하게 됩니다!
(실행결과는 for문 구구단과 같음)
while문 무한 루프
while(1) {
//반복 내용
}
for문과 마찬가지로 조건식을 1(참)으로 설정하여 무한 루프를 돌릴 수 있습니다.
예제 풀어보기
별 출력
위와 같은 출력 결과를 얻는 코드 작성해보기.
정답은 다음 글에 올리도록 하겠습니다.
끝!!
'프로그래밍언어 > c언어' 카테고리의 다른 글
C언어 독학 #10. 조건문 (0) | 2022.07.17 |
---|---|
C언어 독학 #8. 자료형 (0) | 2020.07.18 |
C언어 독학 #7. 비트 체계와 비트 연산자 (0) | 2020.07.17 |
C언어 독학 #6. 연산자 (0) | 2020.05.13 |
C언어 독학 #5. 상수 변하지 않는 데이터 (2) | 2020.05.12 |