C언어/참고서: C언어 콘서트

C언어 7차시 정수형 연습문제

Olivia-BlackCherry 2023. 3. 21. 11:41

목차

    1. 현재 가지고 있는 외국화를 한화로 환전하기

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void)
    {
    	int my_pound;
    	int won;
    	const int POUND = 1560;
    	printf("당신이 가지고 있는 파운드화는 얼마입니까? \n");
    	scanf("%d", &my_pound);
    
    	won = my_pound * POUND;
    	printf("파운드를 한화로 바꾸면 약 %d입니다 \n", won);
    
    	return 0;
    }

     

     

    2. 매달 저축할 예금액, 햇수를 입력받아 몇 년 후 총 자산 예측하기

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void)
    {
    	int deposit;
    	int year;
    	int fortune;
    	const int MONTH = 12;
    
    	printf("당신은 매달 얼마를 저축하시겠습니까? \n");
    	scanf("%d", &deposit);
    	printf("몇 년간 납입하시겠습니까? \n");
    	scanf("%d", &year);
    
    	fortune = deposit * year * MONTH;
    	printf("%d년 뒤, 당신의 자산은 %d입니다. \n", year, fortune);
    
    	return 0;
    }

     

     

    3. 오버플로우 문제 해결

    위의 콘솔창에서 매달 저축액을 1,000,000,000으로 30년 납입으로 계산한다면 fortune값이 -가 되는 등 틀린 값이 나온다. int형 변수가 나타낼 수 있는 정수의 범위를 넘어갔기 때문에 발생하는 현상이고, 이를 오버플로우라고 한다. 해당 오류를 해결하기 위한 코드를 작성해보자.

    <해결 방법>

    자료형을 long long으로 형식 지정자로 %lld를 사용한다. 

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void)
    {
    	long long deposit;
    	long long year;
    	long long fortune;
    	const long long MONTH = 12;
    
    	printf("당신은 매달 얼마를 저축하시겠습니까? \n");
    	scanf("%lld", &deposit);
    	printf("몇 년간 납입하시겠습니까? \n");
    	scanf("%lld", &year);
    
    	fortune = deposit * year * MONTH;
    	printf("%lld년 뒤, 당신의 자산은 %lld입니다. \n", year, fortune);
    
    	return 0;
    }

     

     

    4. a, b 두 정수의 값의 위치 바꾸기

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void)
    {
    	int a,b,c;
    	
    	a = 100;
    	b = 200;
    	
    	printf("%d, %d \n", a, b);
    	
    	c = a;
    	a = b;
    	b = c;
    
    	printf("%d, %d \n", a, b);
    	return 0;
    }

     

     

    5. 2진수 16진수로 바꾸기A

    다음은 8비트이다. 한 비트는 1인 경우에만 켜지고, 0인 경우에는 꺼진다. 이를 16진수로 만들어보자. 

    1 0 0 0 0 0 0 0

    <해결 방법>

    2진수와 16진수는 깊은 연관이 있다. 

    우선 8비트를 4비트 4비트씩 나눈다. 

    1 0 0 0 0 0 0 0

    (4비트는 2의 4승이므로 16이다. )

    1000 0000으로 나뉜다. 

    1의 값은 2의 3승이므로 8의 값을 갖는다. 

    1 0 0 0 0 0 0 0
    1000 0000
    8 0

    <결과>

    0x80(16진수)

     

     

    6. 2진수 16진수로 바꾸기B

    1 1 0 0 0 1 0 0
    1100 0100
    8+4=12
    C
    4

    <결과>

    0xC4(16진수)