Coding/C

[C언어] 반복문(for, while, do while) - 코딩도장

GunP4ng 2023. 12. 17. 23:31

[코딩도장] Unit 27 ~ 31


1. 반복문 사용하기

1. for 문 사용하기

for 문은 반복 횟수를 지정해서 반복할 수 있다

초기식에는 반복을 시작할 값을 지정한다

조건식에는 얼마나 반복할지 지정한다

변화식은 반복할 때마다 루프 인덱스 변수(i)가 얼마나 변화할지 지정한다

//     초기식   조건식  변화식
//       ↓       ↓      ↓ 
for (int i = 0; i < 100; i++)
{
    반복할 코드
}

 

for (;;)    // 초깃값, 조건식, 변화식을 모두 생략하면 무한 루프
    printf("Hello, world!\n");

for 문에서도 무한루프를 만들 수 있다

상황에 따라 초기식, 조건식, 변화식을 생략하여 무한루프를 만들 수 있다

 

for (int i = 0; i < 100; i++)
    printf("Hello, world!\n");    // 반복할 코드가 한 줄이라면 중괄호 생략

반복할 코드가 한 줄이라면 중괄호를 생략할 수 있다

 

for (int i = 0; i < 10; i++)    // 바깥쪽 루프
{
    for (int j = 0; j < 10; j++)    // 안쪽 루프
    {
    }
}

반복문 안에 반복문이 들어있는 형태를 중첩 루프라고 한다

루프 인덱스 변수는 i 부터 순서대로 짓는다 ex) i j k

주로 가로 x 세로인 2차원 평면을 다룰 때 사용한다

 

2. while 문 사용하기

while 문은 반복할 횟수가 정해져 있지 않을 때 사용한다

조건이 만족하면 계속 반복하고

조건이 맞지 않으면 반복을 멈춘다

초기식
while (조건식)
{
    반복할 코드
    조건식의 결과에 영향을 주는 코드(변화식)
}

 

while (1)    // while에 1을 지정하면 무한 루프
    printf("Hello, world!\n");

while 문에서도 무한루프를 만들 수 있다

while 에서 조건식에 1을 지정하면 무한루프를 만들 수 있다

true 값을 지정해줘도 가능하다

 

while (1)
    printf("Hello, world!\n");    // 반복할 코드가 한 줄이라면 중괄호 생략

마찬가지로 반복할 코드가 한 줄이라면 중괄호를 생략할 수 있다

 

 

3. do while 문 사용하기

do while 문은 반복할 횟수가 정해져 있지 않을 때 사용한다

do 부분은 조건식과 상관없이 최초 한번은 실행한다

while 문의 조건식이 맞으면 계속 반복하고 아니면 멈춘다

초기식
do // ↓ 조건식과는 상관없이 한 번은 실행됨
{
    반복할 코드
    조건식의 결과에 영향을 주는 코드(변화식)
} while (조건식)

 

do
{
    printf("Hello, world!\n");
} while (0);    // while에 0을 지정하면 코드가 한 번만 실행됨

while 에서 조건식 대신 0을 지정하면 코드가 한 번만 실행된다

 

 

4. break, continue 사용하기

반복문에서 break 을 사용하면 반복문을 끝낼 수 있다

while (조건식1)
{
    if (조건식2)
        break;    // 반복문을 끝냄
}

 

반복문에서 continue 를 사용하면 코드의 일부를 건너뛸 수 있다

반복문을 끝내지 않고 계속 반복한다

while (조건식1)
{
    if (조건식2)
        continue;    // 아래 코드를 건너뛴 뒤 계속 반복함

    코드;
}

2.심사문제

27.12 알파벳 순서로 출력하기

표준 입력으로 문자 하나가 입력됩니다. 입력된 문자부터 z까지 순서대로 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다).

정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    char c1;
    scanf("%c", &c1);

    // a = 97 z = 122
    for(int i = 0; c1 + i <= 122; i++) {
        printf("%c", c1 + i);
    }

    return 0;
}

28.11 교통카드 잔액 출력하기

표준 입력으로 금액이 입력됩니다. 1회당 요금은 1,200원이고, 교통카드를 사용했을 때마다의 잔액을 각 줄에 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다). 단, 최초 금액은 출력하지 않아야 합니다. 그리고 잔액은 음수가 될 수 없으며 잔액이 부족하면 출력을 끝냅니다.

정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int money;
    int charge = 1200;

    scanf("%d", &money);

    while (money >= 1200) {
        money -= charge;
        printf("%d\n", money);
    }

    return 0;
}

29.10 숫자의 합 구하기

표준 입력으로 정수가 입력됩니다(입력 값의 범위는 0~1000). 다음 소스 코드를 완성하여 0부터 입력된 숫자까지의 합이 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    unsigned int num1;
    unsigned int sum = 0;

    scanf("%d", &num1);

    unsigned int i = 0;
    do
    {
        _____________
        _____________
    } while (i <= num1);

    printf("%d\n", sum);

    return 0;
}

 

정답

sum += i;
i++;

30.7 두 수 사이의 숫자 중 7로 끝나지 않는 숫자 출력하기

표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~200, 두 번째 입력 값의 범위는 10~200이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 다음 소스 코드를 완성하여 첫 번째 정수와 두 번째 정수 사이의 숫자 중 7로 끝나지 않는 숫자가 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num1;
    int num2;
    int i;

    scanf("%d %d", &num1, &num2);
    
    i = num1;

    while (1)
    {
        ________________
        ________________
        ________________
        ________________
        ________________

        ________________
        ________________

        printf("%d ", i);
        i++;
    }

    return 0;
}

 

정답

if (i > num2)
    break;

if (i % 10 == 7) {
    i++;
    continue;
    }

첫번째 입력값(i) 은 두번째 입력값(num2) 보다 항상 작기 때문에

i > num2 가 될 시 반복을 멈춘다

 

7로 끝나는 숫자는 출력을 하면 안되기 때문에

continue 를 이용해서 건너뛰어준다

건너뛸 때 아래에 있는 i++ 를 건너뛰고 처음으로 돌아가기 때문에

※ i++ 를 추가해서 무한루프에 빠지지 않도록 한다


31.7 산모양으로 별 출력하기

표준 입력으로 삼각형의 높이가 입력됩니다(입력 값의 범위는 3~10). 입력된 높이만큼 산 모양으로 별을 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다). 이때 출력 결과는 예제와 정확히 일치해야 합니다. 모양이 같더라도 공백이나 빈 줄이 더 들어가면 틀린 것으로 처리됩니다.

정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int num;
    scanf("%d", &num);

    for (int i = 1; i <= num; i++) {
        for (int j = 1; j <= num - i; j++)
            printf(" ");
        for (int k = 1; k <= 2 * i - 1; k++) 
            printf("*");
        printf("\n");
    }
    return 0;
}

첫번째 for 문을 이용해서 높이를 지정해준다

0부터 시작할 시 첫줄은 출력을 하지 않기 때문에

인덱스 변수는 1로 시작해야 한다.

 

두번째 for 문은 공백을 출력한다

세번째 for 문은 * 을 출력한다