Language/C

혼공C : 반복문, 소수 출력 프로그램

짱도르딘 2024. 6. 17. 20:15
728x90

이번에는 혼공C 6장 반복문의 도전 실전 예제를 풀어보려고 한다.

 

반복문

반복문은 일정 조건을 만족하는 동안 같은 실행문을 반복하는 동작을 수행한다. 따라서 반복문은 조건식, 실행문, 초기식 등으로 구성된다.

 

C언어에서는 주로 while문, for문, do ~ while문 세 가지 종류의 반복문이 사용된다.

 

for 문

for문은 초기식, 조건식, 증감식 세 부분으로 구성된다.

초기식은 반복문이 시작될 때 한 번 실행되는 부분이며, 조건식은 각 반복이 실행될 때마다 참이면 계속 반복하고, 거짓이면 반복을 멈춘다. 증감식은 각 반복이 끝난 후에 실행되며, 증감식이 실행된 후에는 다시 초반으로 돌아가 조건이 끝날 때까지 수행한다.

 

아래는 for문을 활용한 간단한 예제이다.

#include <stdio.h>

int main() 
{
    int i;

    for (i = 1; i <= 5; i++) {
        printf("%d번째 반복입니다.\n", i);
    }

    return 0;
}

 

정수형 변수 i를 선언해 준 뒤, i가 5 이하까지 1씩 증가하며 실행문을 반복하여 출력한다. 출력된 화면은 아래와 같다.

for문 예제 출력 화면

 

while 문

while문은 for문과는 달리, 주어진 조건이 참인 동안 계속해서 반복하며, 반복 횟수가 명확하지 않을 때 주로 사용된다.

 

임의로 반복 구간을 설정한 while문의 예제는 아래와 같다.

#include <stdio.h>

int main() {
    int i = 1;

    while (i <= 5) {
        printf("%d번째 반복입니다.\n", i);
        i++;
    }

    return 0;
}

 

정수형 변수 i가 5 이하일 때까지 출력을 반복하는 예제이다. 결과 출력 화면은 아래와 같다.

while문 예제 출력 화면

 

 

do ~ while 문

do ~ while문은 위의 반복문과는 달리 특이하게도 실행문을 무조건 실행하고 조건을 확인한 후 다시 실행문을 실행하는 방식으로 동작한다.

 

do ~ while문의 간단한 예제는 아래와 같다.

#include <stdio.h>

int main() {
    int i = 1;

    do {
        printf("%d번째 반복입니다.\n", i);
        i++;
    } while (i <= 5);

    return 0;
}

 

코드 블럭을 실행한 뒤 조건을 평가하는 방식으로 진행되며, 출력된 화면은 아래와 같다.

do ~ while문 예제 출력 화면


도전 실전 예제 문제는 다음과 같다.

"2 이상의 정수를 입력하여 2부터 입력한 수까지의 모든 소수를 출력한다. 한 줄에 5개씩 5칸 간격으로 출력한다."

 

출력 과정은 다음과 같다.

"일단 소수라 가정하고 2부터 그 정수보다 하나 작은 수까지 하나라도 나누어 떨어지면 가정을 취소한다."

 

처음으로 마주치는 for 문에서는 int i의 값을 2로 시작함으로써, 2 이상의 정수를 입력하지 않을 시 실행되지 않도록 설정한 것이다. 

그다음에는 flag 변수를 마주치게 되는데, 이것은 입력한 숫자가 소수인지 소수가 아닌지 판별해 내는 역할을 수행한다.

 

두 번째 for 문에서 i % j의 값이 0 일시 (= 2부터 입력된 정수보다 하나 작은 수 까지 하나라도 나누어 떨어질 시) flag는 0이 되며 break를 통해 for문을 빠져나간다.

#include <stdio.h>

int main(void)
{
	int num, i, j, flag, cnt = 0;

	printf("2 이상의 정수를 입력하세요 : ");
	scanf("%d", &num);

	for (i = 2; i <= num; i++)
	{
		flag = 1;

		for (j = 2; j < i; j++)
		{
			if ((i % j) == 0)
			{
				flag = 0;

				break;
			}
		}

		if (flag == 1)
		{
			printf("%5d", i);
			cnt++;
			if ((cnt % 5) == 0)
			{
				printf("\n");
			}
		}
	}
	return 0;
}

 

출력된 결과 화면은 아래와 같다.

소수 출력 프로그램 출력 화면

728x90