41. 반복문 (while, do while, for)

C언어 – 반복문, 별 출력
00:20 반복문
01:14 [실습] while문 1에서 100까지 합계 구하기
02:30 [실습] do while문 1에서 100까지 합계 구하기
03:11 [실습] do while문 음수 입력 전까지 합계 구하기
04:34 [실습] for문 1에서 100까지 합계 구하기
05:43 별출력
05:51 [실습] 별출력 - 속이 빈 정사각형 출력

반복문은 특정 조건이 참일 동안 반복해서 구문을 수행하는 구문이예요.
C언어에서는 세 가지 종류의 반복문을 제공합니다.

while(조건 표현식) 반복 수행 구문;
do 반복 수행 구문 while(조건 표현식);
for(초기 수행문; 조건 표현문; 조건 변화 구문) 반복 수행 구문;

반복문에서도 조건문처럼 반복해서 수행할 구문이 하나 이상일 때 블록을 지정해서 사용해요.  

while(조건 표현식) 반복 수행 구문;

◈ while문을 이용하여 1부터 100까지 합계를 구하는 예
#include <stdio.h>
int main()
{
    int sum = 0; //합계를 위한 변수 선언
    int lcnt=0;   //반복문 루프 카운터 변수 선언
    lcnt = 1; //lcnt를 1로 대입
    while(lcnt<=100) //루프 카운터가 100보다 작다면
    {
        sum += lcnt; //sum에 현재 sum과 lcnt 더한 값을 대입
        lcnt++; //lcnt 증가
    }
    printf(“1부터 100까지 합은 %d입니다.\n”,sum);
    return 0;
}
◈ 실행 결과
1부터 100까지 합은 5050입니다.

do 반복 수행 구문; while(조건 표현식);

while문은 조건 표현식을 먼저 표현하고 반복 수행할 구문을 작성했어요.
 처음부터 조건 표현식의 결과가 거짓이면 한 번도 수행하지 않을 수 있죠.

반면 do while문은 반복 수행할 구문을 먼저 작성하고 조건 표현식을 작성해요.
do while문은 반복 수행 구문을 최소한 한 번은 수행해요.

최종 사용자로부터 반복해서 정수를 입력 받고 음수를 입력하면 반복문을 마치고 합계를 출력하는 코드를 생각해봐요.
이 때 최종 사용자에게 입력 받는 부분은 최소한 한 번은 수행해야겠죠.
while문을 이용해서 구현할 수도 있지만 do while문을 이용해서 구현할 수도 있어요.

◈ do while 문을 사용하는 예

#include <stdio.h>
int main()
{
    int sum = 0; //합계를 위한 변수 선언
    int num = 0;
    do
    {
        sum += num; //sum에 현재 sum과 lcnt 더한 값을 대입
        printf(“정수를 입력하세요. [음수 입력하면 종료]\n”);
        scanf_s(“%d”, &num);  
    }while(num>=0); //입력한 정수(num)가 0보다 크거나 같다면
    printf(“입력한 수의 합은 %d 입니다.\n”, sum);
    return 0;
}  

for(초기 수행문; 조건 표현문; 조건 변화 구문) 반복 수행 구문

for문은 다른 반복문과 다르게 초기에 한 번 수행하는 초기 수행문과 조건 변화 구문을 표현하는 부분이 있어요.
대부분의 반복하는 작업은 초기화 작업과 조건을 변화시키는 구문이 필요할 때가 많아요.
이러한 이유로 for문을 사용하면 효과적으로 반복 작업을 표현할 수 있어요.  

for 문을 사용할 때 주의할 점은 조건 변화 구문을 실행한 후에 반복 수행 구문을 실행하는 것이 아니라는 것이예요.
반복 수행 구문을 실행한 후에 조건 변화 구문을 실행하는 것을 잊지 마세요.

또한 for 문에 조건 표현은 구문으로 작성하는 것이라 표현식이 없는 널 구문(구문의 내용없이 ;만 표현한 구문) 을 사용할 수 있고 널 구문은 참으로 판별해요.

◈ for 문을 이용하여 1부터 100까지의 합을 계산하는 예
#include <stdio.h>
int main()
{
    int sum = 0; //합계를 위한 변수 선언
    int lcnt=0;   //반복문 루프 카운터 변수 선언

    for(lcnt = 1; lcnt<=100 ; lcnt++ ) //1로 초기화; lcnt가 100보다 작다면; lcnt 1 증가
    {
        sum += lcnt; //sum에 현재 sum과 lcnt 더한 값을 대입
    }
    printf(“1부터 100까지 합은 %d입니다.\n”,sum);
    return 0;



이러한 제어문의 문법은 머리로 이해하는 것은 크게 어렵지 않아요.
하지만 반복문으로 문제를 해결하는 코드를 작성하는 것은 단순히 문법을 익힌다고 되는 것은 아니예요.
다양한 문제를 해결하는 과정에서 경험적 노하우를 키워야 프로그램에서 제어문을 사용할 수 있어요.

프로그래밍 언어 학습 후에 자료구조와 알고리즘을 익혀 다양한 문제를 해결방법을 익히고 경험을 쌓길 바래요.

이 책에서는 다양한 자료구조와 알고리즘을 소개하고 않아요.
여러분은 자료구조와 알고리즘 등의 학습으로 효과적인 문제 해결 능력을 키우세요.

 ◈ 기본 연습 (정답 바로가기)
1. 두 수를 입력받은 후 작은 수~큰 수 사이의 모든 수의 합을 구하는 프로그램을 작성하시오.

2. 1부터 100 사이에 있는 모든 6의 배수를 출력하는 프로그램을 작성하시오.

3. 한 자리의 정수를 입력받아 입력받은 수의 단을 출력하는 프로그램을 작성하시오.
예:
한 자리의 정수를 입력하시오.
7
7*1 = 7   7*2 = 14   7*3 = 21
7*4 = 28 7*5 = 35   7*6 = 42
7*7 = 49 7*8 = 56   7*9 = 63

4. 다음을 반복하는 프로그램을 작성하시오.
“I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력
하나의 문자를 입력받음
입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색, ‘l’, ‘L’일 때는 전체 출력이라고 화면에 출력

(단, E를 누르면 프로그램을 종료)

5. 두 개의 양의 정수를 입력받아 공약수의 합을 계산하는 프로그램을작성하시오.

6. 두 개의 양의 정수를 입력받아 공배수를 작은 순서부터 차례대로 10개를 출력하는 프로그램을 작성하시오.

7. ‘a’문자에서 ‘z’문자 사이의 모든 문자와 아스키 코드 값을 출력하는 프로그램을 작성하시오.