while (1): study();

소수 계산 프로그램 본문

학습/C, C++

소수 계산 프로그램

전국민실업화 2021. 12. 13. 18:18
728x90
키보드로 양수를 입력한 후에 입력한 수까지의 모든 소수를 출력합니다. 2부터 한 줄에 5개씩 출력하며 소수가 아닌 수는 X를 출력합니다. 입력한 수에 따라 적절한 크기의 배열을 동적 할당하여 사용합니다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int is_prime_number(int);
void print_2darray(int**);

int main(void)
{
	int end;
	int flg;
	int i;
	char value[80]; // 동적할당용 임시 버퍼

	printf("정수 입력 : ");
	scanf("%d", &end);

	char** nums = (char**)calloc(end - 2, sizeof(char*));
	if (nums == NULL)
	{
		printf("allocation failed");
		return 1;
	}

	for (i = 2; i < end; i++)
	{	
		flg = is_prime_number(i);

		if (flg == 1)
		{
			sprintf(value, "%d", i);
		}
		else
		{
			strcpy(value, "X");
		}
		nums[i - 2] = (char*)malloc(strlen(value) + 1);
		strcpy(nums[i - 2], value);
	}
		
	print_2darray(nums);
	
	for (i = 2; i < end; i++)
	{
		free(nums[i - 2]);
	}
	free(nums);

	return 0;
}

int is_prime_number(int num)
{
	int flg = 1;
	for (int i = 2; i < num; i++)
	{
		if (num % i == 0)
		{
			flg = 0;
			break;
		}
	}
	return flg;
}

void print_2darray(char** ary)
{
	int col = 0;

	while (*ary != "\0")
	{
		printf("%s ", *ary++);
		if (++col == 5)
		{
			printf("\n");
			col = 0;
			continue;
		}
	}
}
728x90

'학습 > C, C++' 카테고리의 다른 글

단어 검출 프로그램  (0) 2021.12.16
성적 처리 프로그램  (0) 2021.12.14
프로필 교환 프로그램  (0) 2021.12.12
[C언어]특별한 포인터  (0) 2021.12.11
가로 세로의 합 구하기  (0) 2021.12.09
Comments