자료/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;
}