반응형
Q. 소수(prime number) 출력 프로그램
2 이상의 정수를 입력하여 2부터 입력한 수까지의 모든 소수를 출력합니다. 단, 한 줄에 5개씩 5칸 간격으로 출력합니다.
하나의 정수가 소수인지를 판단해서 출력하는 과정은 다음과 같습니다.
① 일단 소수라고 가정한다.
② 2부터 그 정수보다 하나 작은 수까지 하나라도 나누어 떨어지면 가정을 취소한다.
③ ①의 가정이 ②에서 바뀌지 않았으면 그 정수를 출력한다.
위의 ①~③까지의 과정은 하나의 정수에 대해서 소수를 판별하는 과정이고 어떤 수까지의 모든 수를 판별하기 위해서는 ①~③까지의 과정을 다시 반복합니다.
실행결과
문제를 푸시다가 어렵다고 느껴지신다면 조금 더 쉬운 문제를 풀어보시는 것을 권장함.
2021.11.23 - [IT/코딩 예제] - [C언어] for문 기초 예제, 연습문제 1탄
소수 출력 프로그램 정답
#include <stdio.h>
int main(void)
{
int num;
int i, j;
int pn;
int cnt = 0;
printf("2이상의 정수를 입력하세요 : ");
scanf("%d", &num);
for(i = 2; i <= num; i++)
{
pn = 1;
for(j = 2; j < i; j++)
{
if((i % j) == 0)
{
pn = 0;
break;
}
}
if(pn == 1)
{
printf("%5d", i);
cnt++;
if((cnt % 5) == 0)
{
printf("\n");
}
}
}
return 0;
}
break를 쓴 이유는 한번 나누어 떨어지면 더 이상 소수가 아니므로 그 이후에 다른 값으로 나누어 떨어지는지 확인할 필요가 없기 때문이다. 불필요한 반복을 즉시 중단해서 실행시간을 단축할 수 있음. break는 if문 안에 사용하더라도 if문만 빠져나가는 것이 아니고 if문이 포함된 반복문을 탈출함.
'IT > 프로그래밍 공부' 카테고리의 다른 글
C 자료구조 메모리 공간, 스택(Stack), 힙(Heap), 데이터(Data) (0) | 2021.11.28 |
---|---|
[C언어] malloc() , free() 함수를 이용한 동적할당 (0) | 2021.11.27 |
[C언어] 배열 기초 예제, 연습 문제 1탄 (0) | 2021.11.26 |
[C언어] for문 기초 예제, 연습문제 2탄 (0) | 2021.11.25 |
[C언어] for문 기초 예제, 연습문제 1탄 (0) | 2021.11.23 |