cyphen156

Chapter3 과제 본문

프로그래밍/C언어

Chapter3 과제

cyphen156 2023. 2. 3. 14:18

개인 문제풀이임으로 오답이 있을 수 있습니다.

  1. 두 개의 자연수를 입력받아 첫 번째 수를 두 번째 수로 나눈 몫과 나머지를 출력하라.
    > 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;
    }
  2. 섭씨 온도를 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;
    }
  3. 세 개의 정수를 입력받아 평균을 구하는 프로그램을 작성하라. 단 출력은 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;
    }
  4. 초 단위를 입력받아 그것을 시간, 분, 초 단위로 출력하는 프로그램을 작성하라.
    > 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;
    }
  5. 자연수를 입력받아 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;
    }
  6. 다음 소스코드를 실행해 보고 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;
    }
  7. 거스름돈 문제(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개
    #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;
    }
    거스름돈 심화-1 루프문을 통한 연속반환 및 잔돈체크
    #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