2017년 1월 5일 목요일

09. 예제 문제와 풀이

09. 예제 문제와 풀이

조건문과 반복문, 그리고 지금까지 배운 내용을 토대로 예제 문제를 풀어봅니다.




1) 가장 큰 수, 작은 수

문제

입력받은 세 정수 중 가장 큰 수와 가장 작은 수를 출력하세요.
예시
정수 3개를 입력하세요: 10 20 30
10이 가장 작고 30이 가장 큽니다.

답안 예시

#include <stdio.h>

int main(void)
{
    int a, b, c;
    int max, min;

    printf("정수 3개를 입력하세요: ");
    scanf("%d %d %d", &a, &b, &c);

    max = (a > b) ? a : b;
    max = (max > c) ? max : c;

    min = (a < b) ? a : b;
    min = (min < c) ? min : c;

    printf("%d이 가장 작고 %d이 가장 큽니다.\n", min, max);

    return 0;
}




2) 입력받은 수의 합

문제

입력받은 모든 수의 합을 출력하세요. 만약 입력이 0이면 입력을 종료하고 합을 출력합니다.
예시
수를 입력하세요: 10
수를 입력하세요: 6
수를 입력하세요: 3
수를 입력하세요: -31
수를 입력하세요: 85
수를 입력하세요: 0
총 합은 73입니다.

답안 예시

#include <stdio.h>

int main(void)
{
    int input = 1;
    int sum = 0;

    while (input != 0)
    {
        printf("수를 입력하세요: ");
        scanf("%d", &input);
        sum += input;
    }

    printf("총 합은 %d입니다.\n", sum);

    return 0;
}




3) 입력받은 수의 평균

문제

입력받은 모든 수의 평균을 출력하세요. 만약 입력이 0이면 입력을 종료하고 평균을 출력합니다.
소숫점이하도 입력받고 출력해야 하므로 자료형은 float을 사용합니다.
단, 0은 입력한 개수에 포함하지 않습니다.
예시
수를 입력하세요: 10.5
수를 입력하세요: 6.2
수를 입력하세요: 3.4
수를 입력하세요: -31.8
수를 입력하세요: 85.7
수를 입력하세요: 0
평균은 14.8입니다.

답안 예시

#include <stdio.h>

int main(void)
{
    float input = 1;
    float sum = 0;
    int count = 0;

    while (input != 0)
    {
        printf("수를 입력하세요: ");
        scanf("%d", &input);
        sum += input;
        count++;
    }

    printf("평균은 %f입니다.\n", sum / (count - 1));
}
이때 count로 나누지 않고 count - 1로 나누는 이유는 0을 입력의 개수로 치지 않기 때문입니다.
또는 count의 초기값을 -1로 설정해도 되고 while문 안에서 input이 0일 때 count++를 하지 않도록 해도 됩니다.



3) 입력받은 수의 평균

문제

입력받은 모든 수의 평균을 출력하세요. 만약 입력이 0이면 입력을 종료하고 평균을 출력합니다.
소숫점이하도 입력받고 출력해야 하므로 자료형은 float을 사용합니다.
단, 0은 입력한 개수에 포함하지 않습니다.
예시
수를 입력하세요: 10.5
수를 입력하세요: 6.2
수를 입력하세요: 3.4
수를 입력하세요: -31.8
수를 입력하세요: 85.7
수를 입력하세요: 0
평균은 14.8입니다.

답안 예시

#include <stdio.h>

int main(void)
{
    float input = 1;
    float sum = 0;
    int count = 0;

    while (input != 0)
    {
        printf("수를 입력하세요: ");
        scanf("%d", &input);
        sum += input;
        count++;
    }

    printf("평균은 %f입니다.\n", sum / (count - 1));
}
이때 count로 나누지 않고 count - 1로 나누는 이유는 0을 입력의 개수로 치지 않기 때문입니다.
또는 count의 초기값을 -1로 설정해도 되고 while문 안에서 input이 0일 때 count++를 하지 않도록 해도 됩니다.
마지

3) 입력받은 수의 평균

문제

입력받은 모든 수의 평균을 출력하세요. 만약 입력이 0이면 입력을 종료하고 평균을 출력합니다.
소숫점이하도 입력받고 출력해야 하므로 자료형은 float을 사용합니다.
단, 0은 입력한 개수에 포함하지 않습니다.
예시
수를 입력하세요: 10.5
수를 입력하세요: 6.2
수를 입력하세요: 3.4
수를 입력하세요: -31.8
수를 입력하세요: 85.7
수를 입력하세요: 0
평균은 14.8입니다.

답안 예시

#include <stdio.h>

int main(void)
{
    float input = 1;
    float sum = 0;
    int count = 0;

    while (input != 0)
    {
        printf("수를 입력하세요: ");
        scanf("%d", &input);
        sum += input;
        count++;
    }

    printf("평균은 %f입니다.\n", sum / (count - 1));
}
이때 count로 나누지 않고 count - 1로 나누는 이유는 0을 입력의 개수로 치지 않기 때문입니다.
또는 count의 초기값을 -1로 설정해도 되고 while문 안에서 input이 0일 때 count++를 하지 않도록 해도 됩니다.


4) 구구단 출력

문제

구구단을 1단부터 9단까지 출력하세요.
예시
=== 1단 ===
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
(생략)
1 * 9 = 9

=== 2단 ===
2 * 1 = 2
2 * 2 = 2
(생략)

답안 예시

#include <stdio.h>

int main(void)
{
    int dan = 1;
    int num = 1;

    for (dan = 1; dan <= 9; dan++)
    {
        printf("=== %d단 ===\n", dan);

        for (num = 1; num <= 9; num++)
        {
            printf("%d * %d = %d\n", dan, num, dan * num);
        }
    }
}
for문 안에 for문을 또 쓰면 if문 안에 if문을 쓰는 것과 마찬가지로 for문 중첩이라고 하며 이중 for문이라고도 합니다.




5) 세금 계산기

문제

다음 세금 계산표에 따라 세금을 계산하는 계산기를 만드세요.
표시된 금액의 범위는 초과 ~ 이하입니다.
입력되는 값은 실수형 양수이며 출력값은 소숫점 2자리까지 표기합니다. (%.2f 사용)
금액 (원)세금 (원)
0 ~ 7501%
750 ~ 22507.5원 + 750원을 초과한 만큼의 2%
2250 ~ 375037.5원 + 2250원을 초과한 만큼의 3%
3750 ~ 525082.5원 + 3750원을 초과한 만큼의 4%
5250 ~ 7000142.5원 + 5250원을 초과한 만큼의 5%
7000 ~ 그이상230원 + 7000원을 초과한 만큼의 6%
예시
금액을 입력하세요: 750
세금은 7.50원입니다.

답안 예시

#include <stdio.h>

int main(void)
{
    float income = 0;
    float tax = 0;

    printf("금액을 입력하세요: ");
    scanf("%f", &income);

    if (income <= 750)
    {
        tax = income * 0.01f;
    }
    else if (income <= 2250)
    {
        tax = 7.5f + (income - 750) * 0.02f;
    }
    else if (income <= 3750)
    {
        tax = 37.5f + (income - 2250) * 0.03f;
    }
    else if (income <= 5250)
    {
        tax = 82.5f + (income - 3750) * 0.04f;
    }
    else if (income <= 7000)
    {
        tax = 142.5f + (income - 5250) * 0.05f;
    }
    else
    {
        tax = 230.0f + (income - 7000) * 0.06f;
    }

    printf("세금은 %.2f원입니다.\n", tax);

    return 0;
}




6) 자릿수 구하기

문제

주어진 자연수가 몇자리 자연수인지 출력하는 프로그램을 작성하세요.
만약 0123이라면 123으로 간주하여 3자리로 출력합니다.
입력되는 자연수는 최대 9999입니다.
만약 그보다 큰 수가 입력되면 "1에서 9999사이의 값만을 입력하세요!"라는 문구를 출력합니다.
입력은 자연수이므로 0과 음수는 고려하지 않습니다.
예시
자연수를 입력하세요: 1234
1234는 4자리 자연수입니다.

답안 예시

#include <stdio.h>

int main(void)
{
    int num;

    printf("자연수를 입력하세요: ");
    scanf("%d", &num);

    if (num < 10)
    {
        printf("%d는 1자리 자연수입니다.\n", num);
    }
    else if (income < 100)
    {
        printf("%d는 2자리 자연수입니다.\n", num);
    }
    else if (income < 1000)
    {
        printf("%d는 3자리 자연수입니다.\n", num);
    }
    else if (income < 10000)
    {
        printf("%d는 4자리 자연수입니다.\n", num);
    }
    else
    {
        printf("1에서 9999사이의 값만을 입력하세요!\n", num);
    }

    return 0;
}




7) 별찍기

문제

입력한 수까지 점점 늘어나는 별을 찍으세요.
예시
자연수를 입력하세요: 5
*
**
***
****
*****

답안 예시

#include <stdio.h>

int main(void)
{
    int num, i, j;

    printf("자연수를 입력하세요: ");
    scanf("%d", &num);

    for (i = 0; i < num; i++)
    {
        for (j = 0; j <= i; j++)
        {
            printf("*");
        }

        printf("\n");
    }

    return 0;
}




댓글 없음:

댓글 쓰기