자료/C언어 스케치

[C 언어 스케치] 프로그래밍 연습 5장 문제 풀이, 솔루션 (1)

PSY_CHOPATH 2020. 7. 1. 21:29

CHAPTER 5 ::

프로그래밍 연습


1. 다음을 참고로 표준입력으로 두 실수 x, y를 이용하여 연산 값을 출력하는 프로그램을 작성하시오.

x: 양수 y: 양수 : x + y

x: 양수 y: 0 또는 음수 :x - y

x: 0 또는 음수 y: 양수 :-x + y

x: 0 또는 음수 y: 0 또는 음수 :-x - y

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	double x, y, sum;

	printf("두 실수를 입력해주세요. >> ");
	scanf("%lf %lf", &x, &y);

	if (x > 0)
	{
		if (y > 0)
		{
			sum = x + y;
		}
		else
		{
			sum = x - y;
		}
	}
	else
	{
		if (y > 0)
		{
			sum = -x + y;
		}
		else
		{
			sum = -x - y;
		}
	}

	printf("두 실수의 연산값은 %f 입니다.\n",sum);

	return 0;
}


2. 다음을 참고로 표준입력으로 받은 월(month)에 해당하는 분기를 출력하는 프로그램을 if 문을 사용하여 작성하시오.

 1사분기: 1, 2, 3, 2사분기: 4, 5, 6, 3사분기: 7, 8, 9, 4사분기: 10, 11, 12

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int month, quarter = 0;

	printf("달(月)을 입력해주세요. >> ");
	scanf("%d", &month);

	if (1 <= month && month <= 3)
	{
		quarter = 1;
	}
	else if (4 <= month && month <= 6)
	{
		quarter = 2;
	}
	else if (7 <= month && month <= 9)
	{
		quarter = 3;
	}
	else if (10 <= month && month <= 12)
	{
		quarter = 4;
	}
	else
	{
		puts("잘못된 달을 입력하셨습니다.");
	}

	quarter != 0 ? printf("%d 월은 %d 분기입니다.\n", month, quarter) : printf("");

	return 0;
}


3. 다음을 참고로 표준입력으로 받은 년도의 윤년을 판단하는 프로그램을 if 문을 사용하여 작성하시오.

 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년으로 하고,

 1번 중에서 100으로 나누어 떨어지는 해는 평년으로 하며,

 다만 400으로 나누어 떨어지는 해는 윤년으로 정한다

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int year;
	printf("해당 년도가 윤년인지 판별하는 프로그램입니다.\n");
	printf("년도를 입력해주세요. >> ");
	scanf("%d", &year);

	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		printf("%d년은 윤년입니다.\n", year);
	}
	else
	{
		printf("%d년은 평년입니다.\n", year);
	}

	return 0;
}


4. 위 문제를 참고로 표준입력으로 받은 년도와 달을 이용하여 월의 말일을 출력하는 프로그램을 switch 문을 사용하여 작성하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int year, month, lastday = 0;

	printf("해당 년도 달의 마지막 일(日)을 알려주는 프로그램입니다.\n");
	printf("년도를 입력해주세요. >> ");
	scanf("%d", &year);
	printf("월을 입력해주세요. >> ");
	scanf("%d", &month);
	puts("");

	switch (month)
	{
		case 1:case 3: case 5: case 7:case 8:case 10:case 12:
			lastday = 31;
			break;

		case 4: case 6: case 9: case 11:
			lastday = 30;
			break;

		case 2:
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		{
			lastday = 29;
		}
		else
		{
			lastday = 28;
		}
			break;

		default:
			printf("달을 잘못 입력하셨습니다.");

	}

	(1 <= month && month <= 12) ? printf("%d 년 %d 월의 마지막 날은 %d 일 입니다.\n", year, month, lastday) : printf("\n");

	return 0;
}


5. 1에서 100까지의 정수 중에서 2, 3, 5, 7의 배수를 제외한 수를 한 행에 10 개씩 출력하는 프로그램을 작성하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int i, k = 1;

	for (i = 1; i <= 100; i++)
	{
		if ((i % 2 != 0) && (i % 3 != 0) && (i % 5 != 0) && (i % 7 != 0))
		{
			k % 10 == 0 ? printf("%3d \n", i) : printf("%3d ", i);
			k++;
		}
	}

	puts("");

	return 0;
}


6. 1부터 100까지 정수 중에서 소수(prime number)를 출력하는 프로그램을 작성하시오.

 소수는 약수가 1과 자신 뿐인 수

 2에서부터 자기 자신까지 수로 나누어 떨어지지 않는 수

#include <stdio.h>

int main(void)
{
	int n, divisor, count = 0;

	for (n = 2; n <= 100; n++)
	{
		for (divisor = 2; n % divisor; divisor++);
		{
			if (divisor == n)
			{
				printf("%2d%c", n, (++count % 10 ? ' ' : '\n'));
			}
		}
	}
	printf("\n");

	return 0;
}


7. 다음을 출력하는 프로그램을 중첩된 for 문을 이용하여 작성하시오.

         0

        101

       21012

      3210123

     432101234

    54321012345

  6543210123456

765432101234567

#include<stdio.h>
#include<math.h>

#define MAX 7

int main(void)
{
	int i, j;

	for (i = 0; i <= MAX; i++)
	{
		for (j = -MAX; j <= MAX; j++)
		{
			if (abs(j) > i)
			{
				putchar(' ');
			}
			else
			{
				printf("%d", abs(j));
			}
		}
		putchar('\n');
	}

	return 0;
}


8. 표준입력으로 입력한 정수에서 각각의 자리에 해당하는 수를 반대로 출력하는 프로그램을 do while 문을 이용하여 작성하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <math.h>

int main(void)
{
	int input, num;

	printf("각 자리 숫자를 거꾸로 출력하는 프로그램입니다.\n");
	printf("정수를 입력해주세요.");
	scanf("%d", &input);

	do
	{
		num = input % 10;

		printf("%d", num);
		
		input = input / 10;

	} while (input);

	printf("\n");

	return 0;
}


9. 다음은 우리나라의 소득세율을 나타내고 있다. 표준입력으로 연봉을 입력받아 세금을 출력하는 프로그램을 작성하시오.

 8,800만원 초과: 8,800만원 초과액 * 35% + 이하 세율에 의한 세금(15,920,000)

 4,600만원 초과: 4,600만원 초과액 * 24% + 이하 세율에 의한 세금(5,820,000)

 1,200만원 초과: 1,200만원 초과액 * 15% + 이하 세율에 의한 세금(720,000)

 1,200만원 이하: 6%

위에서 각 구간의 이하 세율에 의한 세금도 모두 프로그램에서 계산한다.

 

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int x, total = 0;
	const int LEVEL1 = 1200;
	const int LEVEL2 = 4600;
	const int LEVEL3 = 8800;

	printf("연봉을 입력해주세요.(단위: 만원) >> ");
	scanf("%d", &x);

	if (x >= 0)
	{
		printf("입력하신 연봉은 %d만원입니다.\n\n", x);
	}
	else
	{
		printf("잘못된 입력입니다.\n");
		return 0;
	}

	if (x > LEVEL3)
	{
		printf("세금35%% 적용: %d 만원 \n", (int)((x - LEVEL3) * 0.35));
		total += (int)((x - LEVEL3) * 0.35);
		printf("세금24%% 적용: %d 만원 \n", (int)((LEVEL3 - LEVEL2) * 0.24));
		total += (int)((LEVEL3 - LEVEL2) * 0.24);
		printf("세금15%% 적용: %d 만원 \n", (int)((LEVEL2 - LEVEL1) * 0.15));
		total += (int)((LEVEL2 - LEVEL1) * 0.15);
		printf("세금 6%% 적용: %d 만원 \n", (int)(LEVEL1 * 0.06));
		total += (int)(LEVEL1 * 0.06);
	}
	else if(x > LEVEL2)
	{
		printf("세금24%% 적용: %d 만원 \n", (int)((x - LEVEL2) * 0.24));
		total += (int)((x - LEVEL2) * 0.24);
		printf("세금15%% 적용: %d 만원 \n", (int)((LEVEL2 - LEVEL1) * 0.15));
		total += (int)((LEVEL2 - LEVEL1) * 0.15);
		printf("세금 6%% 적용: %d 만원 \n", (int)(LEVEL1 * 0.06));
		total += (int)(LEVEL1 * 0.06);
	}
	else if(x > LEVEL1)
	{
		printf("세금15%% 적용: %d 만원 \n", (int)((x - LEVEL1) * 0.15));
		total += (int)((x - LEVEL1) * 0.15);
		printf("세금 6%% 적용: %d 만원 \n", (int)(LEVEL1 * 0.06));
		total += (int)(LEVEL1 * 0.06);
	}
	else
	{
		printf("세금6%% 적용: %d 만원 \n", (int)(x * 0.06));
		total += (int)(x * 0.06);
	}

	printf("\n전체 세금은 %d 만원입니다.\n", total);

	return 0;
}


10. 다음 수식과 내용을 참고로 해당하는 x y 값을출력하는 프로그램을 작성하시오.

 y = 3x^3+ 2x^2 + x + 5, x 5에서 10까지 0.5씩 증가하도록

 

#include <stdio.h>

int main(void)
{
	double x, y;
	printf("함수 y = 3x^3 + 2x^2 + x + 5\n\n");

	for (x = 5; x <= 10; x += 0.5)
	{
		y = 3 * x * x * x + 2 * x * x + x + 5;

		printf("x가 %.1f 일 때, y는 %.2f 이다.\n", x, y);
	}
	return 0;
}