<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 5 (8,9,10,11,12)

08. 월을 입력받아 몇 분기인지를 출력하는 프로그램을 switch ~ case문을 이용해 작성하시오.

 

#include <stdio.h>

int main(void)
{
    int month;

    printf("월 입력:");
    scanf_s("%d", &month);

    switch (month)
    {
    case 1:
        printf("1사분기입니다.");
        break;
    case 2:
        printf("1사분기입니다.");
        break;
    case 3:
        printf("1사분기입니다.");
        break;
    case 4:
        printf("2사분기입니다.");
        break;
    case 5:
        printf("2사분기입니다.");
        break;
    case 6:
        printf("2사분기입니다.");
        break;
    case 7:
        printf("3사분기입니다.");
        break;
    case 8:
        printf("3사분기입니다.");
        break;
    case 9:
        printf("3사분기입니다.");
        break;
    case 10:
        printf("4사분기입니다.");
        break;
    case 11:
        printf("4사분기입니다.");
        break;
    case 12:
        printf("4사분기입니다.");
        break;
    default:
        break;
    }

    return 0;
}

 switch case문으로 작성하라 했으므로 월마다 12가지 케이스를 나누어서 작성했다.

 

 

09. 키보드로 태어난 년도를 입력받아 그 해의 띠를 출력하는 프로그램을 switch문으로 작성하시오.

#include <stdio.h>

int main(void)
{
    int year, animal;

    printf("월 입력:");
    scanf_s("%d", &year);
    animal = year % 12; //띠 판단

    switch (animal)
    {
    case 0:
        printf("당신은 원숭이띠입니다.");
    case 1:
        printf("당신은 닭띠입니다.");
        break;
    case 2:
        printf("당신은 개띠입니다.");
        break;
    case 3:
        printf("당신은 돼지띠입니다.");
        break;
    case 4:
        printf("당신은 쥐띠입니다.");
        break;
    case 5:
        printf("당신은 소띠입니다.");
        break;
    case 6:
        printf("당신은 범띠입니다.");
        break;
    case 7:
        printf("당신은 토끼띠입니다.");
        break;
    case 8:
        printf("당신은 용띠입니다.");
        break;
    case 9:
        printf("당신은 뱀띠입니다.");
        break;
    case 10:
        printf("당신은 말띠입니다.");
        break;
    case 11:
        printf("당신은 양띠입니다.");
        break;
    default:
        break;
    }

    return 0;
}

마찬가지 문제이다. 띠를 판단할 수 있도록 year를 12로 나눈 나머지를 animal에 대입해 사용했다.

 

10. 키보드로 정수 하나와 계산 방법을 입력받은 뒤 계산 방법이 1이면 입력된 수를 이면 2배수를, 3이면 3배수를 출력하는 프로그램을 switch~case문을 이용해 작성하시오. 계산 방법으로 1,2,3 외의 입력이 들어오는 경우에는 '잘못된 연산자입니다.'라는 메시지를 출력한다.

#include <stdio.h>

int main(void)
{
    int num, cal;

    printf("수 입력:");
    scanf_s("%d", &num);
    printf("계산법(1,2,3):");
    scanf_s("%d", &cal);

    switch (cal)
    {
    case 1:
        printf("입력한 수 %d의 1배수는 %d입니다.", num, num);
        break;
    case 2:
        printf("입력한 수 %d의 2배수는 %d입니다.", num, 2 * num);
        break;
    case 3:
        printf("입력한 수 %d의 3배수는 %d입니다.", num, 3 * num);
        break;
    default:
        printf("잘못된 연산자입니다.");
        break;
    }

    return 0;
}

수와 계산법을 입력받아 각각 num, cal에 대입한다. cal을 switch 인자로 넣어 계산법에 따라 다른 결과가 출력되도록 한다.

 

 

11. 양의 정수 하나를 입력받고 입력받은 수가 소수(prime number)인지 판단하는 프로그램을 작성하시오.

#include <stdio.h>

int main(void)
{
    int x, n = 0;

    printf("수 입력:");
    scanf_s("%d", &x);

    if (x == 2) printf("2는(은) 소수입니다.\n");
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x % i == 0)
            {
                n = 0;
                break;
            }
            else n = 1;
        }
        if (n == 1) printf("%d는(은) 소수입니다.\n", x);
        if (n == 0) printf("%d는(은) 소수가 아닙니다.\n", x);
    }

    return 0;
}

2는 짝수이지만 소수이므로 특별히 처리했다. 2가 아닌 다른 수 x가 들어오면 x를 점점 증가하는 i로 나눠본다. 나누어떨어지면 소수가 아니다. 소수가 아니란 의미에서 n에 0을 대입한 후 반복문을 빠져나온다. 나누어떨어지지 않는다면 소수이므로 n에 1을 대입한다. 

 

n이 0이면 소수가 아니다, n이 1이면 소수가 맞다고 출력하면 끝난다.

 

'에라토스테네스의 체'라는 효율적인 소수판정 알고리즘이 존재한다.

https://kiffblog.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%98%A4%EC%9D%BC%EB%9F%AC

 

'프로그래밍/프로젝트오일러' 카테고리의 글 목록

나의 USB.

kiffblog.tistory.com

에서 다루기도 했다. 모르셨던 분들은 검색해서 한 번 살펴보시길 바란다.

 

12.숫자 하나(n)을 입력받은 후, 3의 배수를 그 수만큼 출력하는 프로그램을 작성하시오.

#include <stdio.h>

int main(void)
{
    int n = 0;

    printf("출력할 3의 배수의 개수는:");
    scanf_s("%d", &n);

    for (int i = 1; i <= n; i++)
        printf("%d ", i * 3);

    return 0;
}

횟수를 입력받으므로 for문을 입력받은 n만큼 반복한다. i가 1부터 커지니 반복문 내에서 i * 3을 반복해주면 된다.