[ 6. C언어의 기본 - 제어문의 반복문 ]
이번엔 제어문의 반복문에 대해서 포스팅 해보도록 하겠습니다.
컴퓨터 프로그램은 명령어가 서술된 순서에 따라 무조건 위에서 아래로 실행되는데,
조건을 지정해서 진행 순서를 변경할 수 있다.
이렇게 프로그램의 순서를 변경할 때 사용하는 명령문을 제어문이라고 한다.
if 문, switch~case, for문, while 문, break, continue, goto 문 등이 있다.
1) 조건문 [ if, if else, switch~case]
2) 반복문 [ for, while, do while ]
3) 점프문 [ break, continue, goto, return ]
2) 반복문
반복문의 종류로는 for문, while문, do-while문이 있다.
어떤 상황이냐에 따라 반복문의 문법을 결정하여 코딩을 진행하는데,
for문과 while문은 서로 변환이 가능하기때문에 반복문을 작성할 때 어느쪽을 선택해도 상관은 없다.
for문은 반복횟수를 명확히 알고있을 때 주로 사용하고,
while문은 조건에 따라 반복횟수를 결정해야할 때 주로 사용된다.
while문과 do-while문의 차이점은 조건을 먼저 검사하느냐, 나중에 검사하냐만 다를 뿐 기본적인 로직은 같다.
For문 예제
*문법
for (초기화식; 조건식; 증감식) {
실행문;
}
실행순서는 이러하다.
① 초기화식 제일 먼저 실행
② 조건식을 평가해서 참(True)이면
③ 블록 내부의 실행문을 실행시키고
④ 증감식을 실행 뒤 다시 조건식을 평가한다.
1) 구구단 프로그램을 작성 ( 이중 for문 사용)
#include <stdio.h>
int main(){
for (int i = 1; i < 10; i++){
for(int j = 1; j < 10; j++){
printf("%d * %d = %d\n", i, j, i * j);
}
printf("\n");
}
}
|
cs |
2) 1부터 500까지 누적하여 합을 구하시오.
( 500이 넘었을 때 for문을 멈추고 그때까지의 합과 마지막으로 더해진 값을 출력)
즉, 1+2+3+4+5+ ....... 500
#include <stdio.h>
int main(){
int sum = 0;
int i;
for ( i = 0; ; i++){
sum += i;
if (sum > 500)
break;
}
printf("합은 %d이고, 더해진 수는 %d이다.", sum, i);
return 0;
}
결괏값 : 528, 32
|
cs |
1부터 누적되는 합을 구하기 위해 초기식을 1로 지정하고 증감식 i++를 사용했다.
코드를 보면 조건식이 비어있는것을 확인할 수 있다.
for 문의 조건식은 반복문을 종료하는 역할을 하는데, 조건식이 위처럼 빠져있다면 무한 루프에 빠지게 된다.
하지만 for문 안에 if문안에 break 문이 보일 것 이다. (break 문은 반복문의 종료를 결정한다.)
따라서 for문 내의 조건식이 비어 있지만 실행문내에서 break 문의 존재로 인하여 이 프로그램은
무한 루프에 빠지지 않을 수 있다.
3) "*"을 이용하여 직각삼각형 모양을 만드는 프로그램 작성 (다중 for문 사용)
#include <stdio.h>
int main(){
int i, j;
for( i = 0; i < 5; i++){
for( j = 0; j <= i; j++){
printf("*");
}
printf("\n");
}
}
|
cs |
3-1) "*"을 이용하여 직각삼각형 모양을 역순으로 만드는 프로그램 작성

#include <stdio.h>
int main(){
int i, j;
for( i = 0; i < 5; i++){
for( j = 0; j < 5-i; j++){
printf("*");
}
printf("\n");
}
}
|
cs |
직각삼각형 원래의 코드를 참조해보면 바깥 for문은 그대로이고, 안쪽 for문만 변경하였다.
3-2) 위 직각삼각형 코드를 붙여서 출력하라.

#include <stdio.h>
int main(){
int i, j;
for( i = 0; i < 5; i++){
for( j = 0; j <= i; j++){
printf("*");
}
printf("\n");
}
for( i = 5; i >= 1; i--){
for( j = 1; j <= i; j++){
printf("*");
}
printf("\n");
}
}
|
cs |
4) " * "를 이용하여 피라미드 만들기
#include <stdio.h>
int main(){
int num = 5;
for(int i=0; i < num; i++){
for(int j = num-1; j > i; j-- ){
printf(" ");
}
for(int j=0; j < 2*i+1; j++){
printf("*");
}
printf("\n");
}
}
|
cs |
4-1) " * "를 이용하여 역순 피라미드 만들기
#include <stdio.h>
int main(){
int num = 5;
for (int i = 0; i < num; i++){
for(int j = 0; j < i; j++){
printf(" ");
}
for(int j = 2*num-1; j > 2*i; j--){
printf("*");
}
printf("\n");
}
}
|
cs |
4-2) 다이아몬드 모양 만들기 ( 피라미드 두 개를 합치면 됨)
#include <stdio.h>
int main(){
int num = 5;
for(int i=0; i < num; i++){
for(int j = num-1; j > i; j-- ){
printf(" ");
}
for(int j=0; j < 2*i+1; j++){
printf("*");
}
printf("\n");
}
for (int i = 0; i < num; i++){
for(int j = 0; j < i; j++){
printf(" ");
}
for(int j = 2*num-1; j > 2*i; j--){
printf("*");
}
printf("\n");
}
}
|
cs |
While 문 예제
while문은 for문과 같이 초기값, 조건값, 증감값이 존재하여야 한다.
while문은 조건식이 true일 경우에 계속해서 반복하는 문법이다.
조건식이 false가 되면 반복을 멈추고 while을 종료한다.
while문은 조건식이 true라면 실행문을 실행시키는데,
블록안에 증감문은 넣어주어도 되고 안넣어주어도 된다.
하지만 증감식을 넣어주지않게되면 무한루프에 빠지게 된다.
1) 1~100까지의 홀수의 합을 구하는 프로그램을 작성
#include <stdio.h>
int main(){
int num = 1;
int sum = 0;
while ( num <= 100){
if ( num % 2 == 1){
sum += num;
}
++num;
}
printf("1부터 100까지 홀수의 합 : %d\n", sum);
}
결괏값 : 2500
|
cs |
2) 구구단 만들기
#include <stdio.h>
int main(){
int i = 1;
while ( i < 10) {
int j = 1;
while ( j < 10){
printf("%d * %d = %d\n", i, j, i * j);
j++;
}
i++;
printf("\n");
}
}
|
cs |
3) 이중 while문을 사용하여 직각삼각형 모양 프로그램을 작성
- 위의 for문의 출력과 동일하다.
#include <stdio.h>
int main(){
int i = 1;
int j = 0;
while ( i <= 5)
{
j = 0;
while ( j < i )
{
printf("*");
++j;
}
printf("\n");
++i;
}
}
|
cs |
Do ~ While 문
위에 봤던 While 반복문의 구조는 반복 내용이 수행되기 전에 반복 조건식을 검사한다.
따라서 조건이 만족되지 않았다면 반복문의 내용은 실행되지 않고 생략된다.
이때, 반복문의 내용이 테스트 조건식에 앞서 수행되기를 원할때가 있다면 Do문을 사용한다.
<문법>
Do
{
반복할 내용
}
while (반복조건)
Do ~ While 예제
1) 숫자를 입력받아 해당 숫자가 홀수면 종료되는 프로그램을 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <stdio.h>
int main(){
int num;
do {
printf("숫자 입력. (홀수면 좋료됨)\n");
scanf("%d", & num);
} while (num%2 != 1);
printf("num이 %d로 홀수입니다. 프로그램을 종료합니다.", num);
return 0;
}
|
cs |
코드를 보면 while문 쪽에 num%2 나머지를 구하여 1이면 원래는 참이됩니다.
거기에 ! 연산으로 부정을 하여 반대의 결과로 거짓으로 바뀐다.
즉, 부정을 하여 조건이 만족되지 않는다.
2) 숫자 두개를 각각 입력받고 그 수를 비교하여 서로 같을 때까지 계속 입력받는 프로그램 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <stdio.h>
int main(){
int num1, num2;
do {
printf("두 수가 같을 때까지 실행되는 반복문\n");
printf("(숫자 입력) num1 : ");
scanf("%d", & num1);
printf("(숫자 입력) num2 : ");
scanf("%d", & num2);
} while ( num1 != num2);
printf(" num1과 num2가 %d로 일치하여 프로그램을 종료\n", num1);
return 0;
}
|
cs |
제어문의 반복문 포스팅 끝.