cyphen156
Chapter3 과제 본문
개인 문제풀이임으로 오답이 있을 수 있습니다.
- 두 개의 자연수를 입력받아 첫 번째 수를 두 번째 수로 나눈 몫과 나머지를 출력하라.
> Enter dividend.
> 21(Enter)
> 4(Enter)
> Quotient is 5. Remainder is 1.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int num1, num2; printf("Enter dividend.\n"); scanf("%d %d", &num1, &num2); getchar(); printf("Quotient is %d. Remainder is %d\n", num1 / num2, num1 % num2); return 0; }
- 섭씨 온도를 C라고 했을 때 그에 해당하는 화씨 온도 F는 F = (9 / 5)C + 32로 표시된다. 섭씨를 화씨로 바꾸어 출력하는 프로그램을 작성하되 정수 버전을 작성하라.
[hint] (9 / 5)C를 어떻게 표현하느냐에 따라 결과가 달라진다. 이를 (9 / 5 * C)로 표현하면 결과는 항상 C가 된다. 곱하기는 순서를 바꾸어야 정밀도가 높아진다.
> Enter degrees in Celcius.
> 16(Enter)
> 16 degrees in Celcius is 60 degrees in Fahrenheit.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int C, F; printf("Enter degrees in Celcius.\n"); scanf("%d", &C); getchar(); F = C * 9 / 5 + 32; //(9/5)*C를 하면 왜 항상 C인가? -> 9/5의 결과가 실수 1.8이 아니라 정수 1로 표기되므로!! printf("%d degrees in Celcius is %d degrees in Fahrenheit.\n", C, F); return 0; }
- 세 개의 정수를 입력받아 평균을 구하는 프로그램을 작성하라. 단 출력은 double 형으로서 소수 이하 3자리까지 출력하기로 한다. 입력은 한 줄로 이어지되 입력 사이는 빈칸으로 구분하기로 한다.
[hint] 나눗셈 도중 분자나 분모를 double로 변환하는 형 변환 연산자를 써야 한다.
> Enter three integers
> 2 3 5(Enter)
> The average of 2, 3, 5 is 3.333.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int num1, num2, num3; double avg; printf("Enter three integers\n"); scanf("%d %d %d", &num1, &num2, &num3); getchar(); avg = (double)(num1 + num2 + num3) / 3; printf("The average of %d, %d, %d is %.3f.\n", num1, num2, num3, avg); return 0; }
- 초 단위를 입력받아 그것을 시간, 분, 초 단위로 출력하는 프로그램을 작성하라.
> Enter seconds.
> 25310(Enter)
> It is 7 hours, 1 minutes, 50 seconds.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int input, hours, min, sec; printf("Enter seconds.\n"); scanf("%d", &input); getchar(); sec = input % 60; min = input / 60 % 60; hours = input / 60 / 60; printf("It is %d hours, %d minutes, %d seconds.\n", hours, min, sec); return 0; }
- 자연수를 입력받아 1) 그것이 5 또는 6 중 하나로 나누어 떨어지는지 2) 그것이 5와 6 모두로 나누어 떨어지는지 3) 5와 6 모두로 나누어 떨어지지 않는지를 판단하는 프로그램을 작성하라. 단, 나누어 떨어지면 1, 그렇지 않으면 0을 출력한다.
> Enter a natural number.
> 30(Enter)
> 1
> 1
> 0
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int input, result1, result2, case1, case2, case3; printf("Enter a natural number.\n"); scanf("%d", &input); getchar(); result1 = input % 5; result2 = input % 6; if (result1 == 0 || result2 == 0) case1 = 1; else case1 = 0; if (result1 == 0 && result2 == 0) case2 = 1; else case2 = 0; if (result1 != 0 && result2 != 0) case3 = 1; else case3 = 0; printf("%d\n%d\n%d\n", case1, case2, case3); return 0; }
- 다음 소스코드를 실행해 보고 a의 결과 값이 왜 그렇게 되는지 소스코드에 주석을 달아 설명하라.
#include <stdio.h> int main() { int a, b, c, d, e; a = b = c = d = e = 1; a = a-- - ++b * (c = d = 10) + (e *= 2); // 1 - 2 * (c = 10) + 2 r-value 사칙 연산 // a = 1 - 20 + 2 == -17 a에 r-value대입 연산 // a -= 1; = -18 후위감산 연산 printf("After calculation, a becomes %d.\n", a); return 0; }
- 거스름돈 문제(Coin change Problem)는 '주어진 잔돈을 동전으로 거슬러 주되 이렇게 하면 동전의 개수를 최소화할 수 있는가'의 문제이다. 어떤 자판기가 500원, 100원, 50원, 10원짜리 동전을 갖고 있을 경우 거스름돈이 270원이면 얼마짜리 동전을 몇 개씩 주어야 하는지를 출력하는 프로그램을 작성하라.
[hint] 반드시 최적의 방법은 아니지만 이 문제를 해결하기 위한 방법 중 하나는 고액권을 많이 사용하는 것이다. 500원짜리는 너무 크니 일단 100원짜리 2개를 준다. 그리고 70원이 남으면 50원짜리 1개, 그리고 20원이 남으니 10원짜리를 2개 주면 된다. 거슬러 줄 금액을 입력받아 이 자판기에서 얼마짜리 몇 개를 주어야 하는지를 출력하는 프로그램을 작성한다.
> Enter the amount of change.
> 2360(Enter)
> 500원: 4개, 100원: 3개, 50원: 1개, 10원: 1개
거스름돈 심화-1 루프문을 통한 연속반환 및 잔돈체크#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int money, cost500, cost100, cost50, cost10; printf("Enter the amount of change.\n"); scanf("%d", &money); getchar(); cost500 = money / 500; cost100 = money % 500/ 100; cost50 = money % 500 % 100 / 50; cost10 = money % 500 % 100 % 50 / 10; printf("500원: %d개, 100원: %d개, 50원: %d개, 10원: %d개", cost500, cost100, cost50, cost10); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //잔돈반환 프로그램 심화 -- 잔돈이 모자랄때 까지 반환하는 프로그램 int main() { int money, cost500, cost100, cost50, cost10; int cnt1 = 20, cnt2 = 20, cnt3 = 20, cnt4 = 20; printf("현재 남은 잔돈 개수\n500원 : %d개 100원 : %d개 50원 : %d개 10원 : %d개\n", cnt1, cnt2, cnt3, cnt4); printf("Enter the amount of change.\n"); scanf("%d", &money); getchar(); while (1) { if (cnt1 != 0) { cost500 = money / 500; money -= cost500 * 500; cnt1 -= cost500; } if (cnt2 != 0) { cost100 = money / 100; money -= cost100 * 100; cnt2 -= cost100; } if (cnt3 != 0) { cost50 = money / 50; money -= cost50 * 50; cnt3 -= cost50; } if (cnt4 != 0) { cost10 = money / 10; money -= cost10 * 10; cnt4 -= cost10; } printf("잔돈반환 500원: %d개, 100원: %d개, 50원: %d개, 10원: %d개\n", cost500, cost100, cost50, cost10); printf("현재 남은 잔돈 개수\n500원 : %d개 100원 : %d개 50원 : %d개 10원 : %d개\n", cnt1, cnt2, cnt3, cnt4); if (cnt1 <= 0 || cnt2 <= 0 || cnt3 <= 0 || cnt4 <= 0) { // 잔돈체크 printf("잔돈이 모자랍니다. 프로그램을 종료합니다.\n"); break; } printf("Enter the Next amount of change.\n"); scanf("%d", &money); getchar(); } return 0; } /*추후 프로그램 개선 계획 잔돈 감산, 상위금액권 모자라면 하위 금액권으로 대체 반환 함수화 잔돈 보충기능 */ //
//모든 예제 소스는 한빛 미디어홈페이지에서 찾으실 수 있습니다.
IT CookBook, 전공자를 위한 C 언어 프로그래밍 (hanbit.co.kr)
또는 cyphen156/Work-space: Studying (github.com)에서 찾으실 수 있습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
Chapter4 과제 (0) | 2023.02.10 |
---|---|
Chapter4 함수Ⅰ (0) | 2023.02.09 |
Chapter3 변수와 상수, 대입문과 연산 (0) | 2023.02.01 |
Chapter2 과제 (0) | 2023.01.05 |
Chapter2 C언어의 자료형과 표준 입출력 함수 (0) | 2023.01.04 |