본문 바로가기

공부/C언어

C언어 - (6) : 반복문

while 반복문

#include <stdio.h>
int main(void)
{
    int num=0;
    while (num<5) // 중괄호 내 반복
    {
        printf("Hello World! %d \n", num);
        num++;
    }

    return 0;
}

/* Output
Hello World! 0 
Hello World! 1 
Hello World! 2 
Hello World! 3 
Hello World! 4 
*/

위 예시와 같이 while문을 사용하는 경우에 while 옆의 조건(num<5)을 만족할때까지 중괄호 안의 내용을 반복해서 실행하게 된다.

(반복해서 실행하게 되는 내용을 한 문장으로 적을 수 있는 경우에는 중괄호의 생략이 가능하다.)

 

while 문을 사용해서 무한히 실행되는 '무한 루프'도 생성이 가능한데, 이는 조건을 '1'로 설정하면 생성할 수 있다(1==True)

`while (1) ...실행문...`

do ~ while

do
{
	// 실행문
} while(condition);

의 형태로 구성되는 문법이며 위의 코드로 유추할 수 있듯이, 실행문을 가장 먼저 수행하고 while 반복문에 들어가는 구조이므로

일반적인 while문과 다르게 조건에 맞지 않더라도 무조건 1회 이상은 실행문이 수행된다.

for 반복문

for문도 while문과 마찬가지의 원리로 조건하에서 실행문을 반복시키는 문법이지만, while문과 그 형식에서의 차이가 존재한다.

/*

for (초기식; 조건식; 증감식)
{
	실행문
}

*/

int main(void)
{
    int num;
    for(num=0; num<3; num++)
    	printf("Hi"):
}

위와 같이 [초기식, 조건식, 증감식]을 명시해주는 것이 정석이지만, 굳이 명시할 필요가 없는 경우에는 생략도 가능하다.

int main(void)
{
    double total=0.0;
    double input=0.0;
    int num=0;
    
    for( ; input>=0.0; )
    {
    	total+=input;
        printf("실수 입력(minus to quit): ");
        scanf("%lf", &input);
        num++;
    }
    
    printf("평균: %f \n", total/(num-1));
    return 0;
}

/*
실수 입력(minus to quit): 3.2323
실수 입력(minus to quit): 5.1891
실수 입력(minus to quit): 2.9297
실수 입력(minus to quit): -1   
평균: 3.783700 
*/

예제

1.  왼쪽 정렬된 별 찍기

/* output

*
**
***
****
*****

*/

#include <stdio.h>
int main(void)
{
    int n_line;
    printf("Number of line ? ");
    scanf("%d", &n_line);
    
    for (int num=1;num<=n_line;num++)
    {
        for (int n_star=1;n_star<=num;n_star++)
            printf("*");
        printf("\n");
    }

    return 0;
}

2. 피라미드(사이 사이 공간 O)

/* output

Number of line ? 5
    * 
   * * 
  * * * 
 * * * * 
* * * * * 

*/

#include <stdio.h>
int main(void)
{
    int n_line;
    int n_star=1;
    printf("Number of line ? ");
    scanf("%d", &n_line);

    for(int line=1;line<=n_line;line++)
    {
        for(int n_space=1; n_space<=n_line-n_star; n_space++)
                printf(" ");
        for(int num=1; num<=n_star; num++)
            printf("* ");
        printf("\n");
        n_star++;
    }

    return 0;
}