티스토리 뷰

반응형
Table of Contents

 

개요

for 문

for 문제

while 문

while 문제

do while 문

break 문

continue 문

종합 문제

 

 

 

1. 개요

 

 반복문은 말 그대로 반복작업을 명령할 때 유용한 구문입니다. 거두절미하고 반복문의 필요성을 알아보기 위해 1부터 10까지의 자연수를 모두 곱한 결과를 출력하는 프로그램을 만들어 보도록 하겠습니다. 정수형 변수만을 활용한다면 아래와 같이 프로그래밍할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//code by RiKang, weeklyps.com
#include <stdio.h>
 
int main(void) {
    int a;
    a=1;
    a*=2;
    a*=3;
    a*=4;
    a*=5;
    a*=6;
    a*=7;
    a*=8;
    a*=9;
    a*=10;
    printf("%d",a);
    return 0;
}
cs

 

 하지만 이렇게 해서는 프로그래밍을 할 이유가 반감됩니다. 애초에 컴퓨터가 반복적인 계산을 인간보다 빠르게 하기 때문에 사용하는 것인데, 이렇게 하나 하나 연산을 입력해야 하면 직접 계산하는 것과 별 차이가 없기 때문이지요. 따라서 c언어에서는 이런 반복적인 명령을 쉽게 내릴 수 있는 구문이 존재합니다. 그를 이용하면 아래와 같은 프로그램을 만들 수 있습니다.

 

 

 한 번 이 프로그램을 손으로 따라가 보시면 1 부터 10까지 순차적으로 a에 곱해짐을 알 수 있습니다. 이러한 반복적인 처리를 도와주는 구문을 반복문이라고 하며, 그 중 대표적인 for 문으로 이 프로그램을 만들면 아래와 같이 간단하게 바뀝니다.

 

1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include <stdio.h>
 
int main(void) {
    int a=1;
    for(int i=1; i<=10; i++){
        a*=i;
    }
    printf("%d",a);
    return 0;
}
cs

 

 

 

2. for 문

 

C언어에 정수형 변수로 int가 있듯이, 실수형 변수로는 float 와 double이 있다.

 

이 두 변수형은 int와 달리 소수 표현이 가능하다. 아래와 같이 선언할 수 있다.



출처: http://www.weeklyps.com/entry/C언어-5-변수-2-실수형-변수 [weekly ps]

 

 대표적인 반복문인 for 문의 기본 구조는 다음과 같습니다.

 

1
2
3
4
5
6
7
//code by RiKang, weeklyps.com
for(실행1; 조건1; 실행3)
{
    실행2;
    ...
}
외부
cs

 

 이 구조를 만들면 아래와 같이 프로그램이 돌아갑니다.

 

 

 

 

반복되는 구간만 살펴보면 아래와 같이 표현할 수도 있지요.

 

 

 이것만 보고는 어떤 식으로 돌아가는지 감이 잡히지 않을 수 있으므로 개요에 있는 프로그램을 따라가 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include <stdio.h>
 
int main(void) {
    int a=1;
    for(int i=1; i<=10; i++){
        a*=i;
    }
    printf("%d",a);
    return 0;
}
cs

 

 이 프로그램을 실행시킬 때 for가 시작되면 아래 표와 같이 구문들이 실행됩니다.

 

순서
파트
 구문 설명
 1  실행1 int i=1
  i 라는 정수형 변수를 선언하고 1을 저장한다.
 2  조건1 i<=10 1<=10 이므로 실행2,3이 실행된다.
 3  실행2 a*=i a 에 1 이 곱해진다.
 4  실행3 i++ i가 1에서 2로 변한다.
 5  조건1 i<=10 2<=10 이므로 실행2,3이 실행된다. 
 6  실행2 a*=i
a 에 2 가 곱해진다. 
 7  실행3 i++ i가 2에서 3로 변한다.
 8  반복 조건1, 실행2, 실행3 반복
i =3,4,5,6,7,8,9 일 때 반복 된다.
 9 조건1
i<=10
i가 10일 경우 : 10<=10 이므로 실행2,3이 실행된다.
 10  실행2 a*=i a에 10 이 곱해진다.
 11  실행3 i++  i가 10에서 11로 변한다.
 12   조건1 i<=10  11<=10 은 거짓이므로 반복이 끝나고 외부로 간다.
 13  외부 printf("%d",a)
a를 출력한다.

 

 요약하면 먼저 실행1은 1번 실행하고 이후 조건1이 NO가 나올 때까지, 실행2와 실행3을 반복해서 실행하는 것입니다. for에 대한 감각을 익히기 위해선 아래의 예제들을 직접 풀어보는 것이 좋습니다.

 

예제 1) 1부터 1234까지 모든 자연수의 합을 출력하는 프로그램을 만들어 보자.

 

더보기
1
2
3
4
5
6
7
8
9
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    int a=0;
    for(int i=1; i<=1234; i++){
        a+=i;
    }
    printf("%d",a);
}
cs

 

예제 2) 5개의 실수를 입력 받아, 평균을 출력하는 프로그램을 만들어 보자.

 

더보기

 

1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    double sum=0;
    for(int i=1; i<=5; i++){
        double a;
        scanf("%lf",&a);
        sum+=a;
    }
    printf("%lf",sum/5);
}
cs

 

 

 

3. for 문제

 

(1) [BOJ 2741] N 찍기

 

(2) [BOJ 2742] 기찍 N

 

풀이 모음

 

 

 

4. while 문

 

 for 문과 비슷한 반복문 중 하나인 while 문의 기본 구조는 다음과 같습니다.

 

1
2
3
4
5
6
//code by RiKang, weeklyps.com
while(조건){
    실행;
    ...
}
외부
cs

 

 이 구조를 만들면 아래와 같이 프로그램이 돌아갑니다.

 

 

 while 문을 이용해 1부터 1234까지 모든 자연수의 합을 출력하는 프로그램을 만들면 아래와 같이 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    int a=0, i=1;
    while(i<=1234){
        a+=i;
        i++;
    }
    printf("%d",a);
    return 0;
}
cs

 

 while 문이 for 문보다 형식은 간단하지만, while 문을 쓰면 중괄호 안의 명령이 더 길어질 수 있기 때문에 서로 장단점이 존재합니다.

 

 

 

 

5. while 문제

 

C언어에 정수형 변수로 int가 있듯이, 실수형 변수로는 float 와 double이 있다.

 

이 두 변수형은 int와 달리 소수 표현이 가능하다. 아래와 같이 선언할 수 있다.



출처: http://www.weeklyps.com/entry/C언어-5-변수-2-실수형-변수 [weekly ps]

 

for 문으로 풀었던 문제들도 while 문으로 다시 한 번 풀어보는 것을 추천합니다.

 

(1) [BOJ 2741] N 찍기

 

(2) [BOJ 2742] 기찍 N

 

풀이 모음

 

 

 

6. do while 문

 

 또 다른 반복문인 do while 문의 기본 구조는 다음과 같습니다.

 

1
2
3
4
5
//code by RiKang, weeklyps.com
do{
    실행;
}while(조건);
외부
cs

 

 이를 표현하면 아래와 같이 됩니다.

 

 

 

 살펴보면 조건이 아래에 있다는 점만 빼면 while 문과 거의 같은 형식임을 알 수 있습니다. do while 과 while 문의 차이점은 2가지가 존재하고 나머지 구동은 while과 동일합니다.

 

1. 조건에 상관없이 실행이 한 번은 실행된다는 점

 

 조건문이 뒤에 들어가기 때문에 중괄호 안의 내용이 한 번은 실행되게 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    int n;
    scanf("%d",&n);
    do{
        printf("%d\n",n);
        n--;
    }while(n>=1);
    return 0;
}
cs

 

 예를 들어 위의 프로그램에서 0을 입력으로 넣어보면 0이 출력 되는 걸 확인할 수 있습니다. 0>=1 도 거짓이지만, 처음 실행할 땐 조건문을 보지 않기 때문이지요. 반대로 아래의 프로그램에선 0이 출력 되지 않습니다.

 

1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    int n;
    scanf("%d",&n);
    while(n>=1){
        printf("%d\n",n);
        n--;
    }
    return 0;
}
cs

 

2. while 뒤에 ;을 붙여줘야 하는 점

 

 C언어 문법상 while 문의 while 뒤엔 중괄호가 오기 때문에 ; 을 붙이지 않지만, do while 문의 while 뒤엔 중괄호가 없기 떄문에 ;를 붙여줘야 합니다.

 

 

 

7. break 문

 

 위의 반복문들을 보면 일단 중괄호 안의 내용이 실행되기 시작하면, 그 내용이 전부 다 실행되고 나서야 다시 조건문을 보게 되어있습니다. 만일, 중괄호 내용의 중간 지점에서 구문을 종료 시키고 싶다면 어떻게 해야 할까요? 그럴 경우 과거에는 go to 문이라는 구문을 사용하기도 하였지만, go to 문을 자주 사용하는 건 안좋은 습관이라는 인식이 퍼지면서 요즘에는 대부분 break 문을 사용하고 있습니다.

 

 break 는 해당 중괄호에 해당하는 for, while 등의 반복문 구문을 강제로 종료 시키는 구문입니다. 이해를 위해 아래와 같이 프로그램을 만들어서 실행해 봅시다. 10 이하의 수 중 가장 큰 3의 배수를 찾는 프로그램입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    for(int i=10; i>=1; i--){
        printf("현재 i = %d\n",i);
        if(i%3==0){
            printf("10 이하의 수 중 최대의 3의 배수 = %d\n",i);
            break;
        }
    }
    return 0;
}
cs

 

 이 프로그램을 돌려보면, i>=1 이 조건이지만 i=9 일 때 까지만 돌아감을 알 수 있습니다. 6과 3이 출력되지 않기 때문이지요. 9에서 반복문이 종료되는 까닭은 for 안에 있는 break 가 for 를 강제로 종료 시켰기 때문입니다. 아직 감이 안잡히신다면, break 를 지우고 다시 한 번 프로그램을 돌려서 차이점을 확인하시는 걸 추천합니다.

 

 

 

8. continue 문

 

C언어에 정수형 변수로 int가 있듯이, 실수형 변수로는 float 와 double이 있다.

 

이 두 변수형은 int와 달리 소수 표현이 가능하다. 아래와 같이 선언할 수 있다.



출처: http://www.weeklyps.com/entry/C언어-5-변수-2-실수형-변수 [weekly ps]

 

 반복문 중간에 continue 가 실행된다면, continue 아래에 있는 명령문들을 1번 스킵하고 반복문으로 되돌아갑니다. 10 이하의 수 중 3의 배수만 출력하는 아래의 프로그램을 실행시켜 봅시다.

 

1
2
3
4
5
6
7
8
9
10
11
12
//code by RiKang, weeklyps.com
#include<stdio.h>
int main(void){
    for(int i=1; i<=10; i++){
        if(i%3==0){
            printf("3의 배수 : %d\n",i);
            continue;
        }
        printf("%d는 3의 배수가 아닙니다.\n",i);
    }
    return 0;
}
cs

 

 이 프로그램을 돌려보면 i =3, 6, 9 일 때만 '3의 배수가 아닙니다.' 가 출력 되지 않음을 알 수 있습니다. i = 3,6,9일 땐, if 문안에서 continue를 통해 반복문으로 (i++부분) 돌려보냈기 때문에, 아래에 있는 printf는 실행되지 않는 것입니다. 아직 감이 안잡히신다면, continue 를 지우고 다시 한 번 프로그램을 돌려서 차이점을 확인하시는 걸 추천합니다.

 

 

 

9. 종합 문제

 

C언어에 정수형 변수로 int가 있듯이, 실수형 변수로는 float 와 double이 있다.

 

이 두 변수형은 int와 달리 소수 표현이 가능하다. 아래와 같이 선언할 수 있다.



출처: http://www.weeklyps.com/entry/C언어-5-변수-2-실수형-변수 [weekly ps]
 
 
 
 

풀이 모음

반응형