3-1. 메뉴 주문 누적 통계 프로그램

문제설명

카페에서 메뉴 주문을 계속 입력받아 주문을 처리하고, 종료 시 총 주문 횟수, 총 매출, 가장 많이 주문된 메뉴를 출력하는 프로그램을 작성하시오.

 

목표

  • 반복문 안에서 메뉴 처리
  • 조건문으로 예외 처리
  • 여러 함수 호출 구조 설계
  • 누적 데이터 관리

요구사항

  1. 메뉴는 다음과 같다.
    • 1: 아메리카노 (2000원)
    • 2: 라떼 (3000원)
    • 3: 모카 (3500원)
    • 0: 종료
  2. 메뉴 번호와 수량을 입력받아 주문 처리하시오.
  3. 잘못된 메뉴 번호는 무시하고 오류 메시지를 출력하시오.
  4. 수량은 1 이상이어야 한다.
  5. 종료 시 다음을 출력하시오.
    • 총 주문 횟수
    • 총 매출
    • 가장 많이 주문된 메뉴
  6. 다음과 같은 함수로 나누어 구현하시오.
    • print_menu()
    • get_price(int menu)
    • get_menu_name(int menu)
    • process_order(...)
 

출력예시

1. 아메리카노(2000)
2. 라떼(3000)
3. 모카(3500)
0. 종료
메뉴 선택: 2
수량 입력: 3
라떼 3개 주문 완료

1. 아메리카노(2000)
2. 라떼(3000)
3. 모카(3500)
0. 종료
메뉴 선택: 0

총 주문 횟수: 1
총 매출: 9000원
가장 많이 주문된 메뉴: 라떼
 
 
코드예시
#include <stdio.h>

void print_menu(void);
int get_price(int menu);
const char* get_menu_name(int menu);
void process_order(int menu, int qty, int *total_orders, int *total_sales,
                   int *count1, int *count2, int *count3);

int main(void)
{
    int menu, qty;
    int total_orders = 0;
    int total_sales = 0;
    int count1 = 0, count2 = 0, count3 = 0;

    while (1)
    {
        print_menu();
        printf("메뉴 선택: ");
        scanf("%d", &menu);

        if (menu == 0)
        {
            break;
        }

        printf("수량 입력: ");
        scanf("%d", &qty);

        process_order(menu, qty, &total_orders, &total_sales, &count1, &count2, &count3);
    }

    printf("\n총 주문 횟수: %d\n", total_orders);
    printf("총 매출: %d원\n", total_sales);

    if (count1 >= count2 && count1 >= count3)
        printf("가장 많이 주문된 메뉴: %s\n", get_menu_name(1));
    else if (count2 >= count1 && count2 >= count3)
        printf("가장 많이 주문된 메뉴: %s\n", get_menu_name(2));
    else
        printf("가장 많이 주문된 메뉴: %s\n", get_menu_name(3));

    return 0;
}

void print_menu(void)
{
    printf("\n1. 아메리카노(2000)\n");
    printf("2. 라떼(3000)\n");
    printf("3. 모카(3500)\n");
    printf("0. 종료\n");
}

int get_price(int menu)
{
    if (menu == 1) return 2000;
    if (menu == 2) return 3000;
    if (menu == 3) return 3500;
    return -1;
}

const char* get_menu_name(int menu)
{
    if (menu == 1) return "아메리카노";
    if (menu == 2) return "라떼";
    if (menu == 3) return "모카";
    return "없음";
}

void process_order(int menu, int qty, int *total_orders, int *total_sales,
                   int *count1, int *count2, int *count3)
{
    int price = get_price(menu);

    if (price == -1)
    {
        printf("잘못된 메뉴입니다.\n");
        return;
    }

    if (qty < 1)
    {
        printf("수량은 1 이상이어야 합니다.\n");
        return;
    }

    *total_orders += 1;
    *total_sales += price * qty;

    if (menu == 1) *count1 += qty;
    else if (menu == 2) *count2 += qty;
    else if (menu == 3) *count3 += qty;

    printf("%s %d개 주문 완료\n", get_menu_name(menu), qty);
}​

3-2. 약수/소수 분석기

문제설명

정수를 여러 번 입력받아, 각 수에 대해 약수의 개수, 약수의 합, 소수 여부를 판별하는 프로그램을 작성하시오. 사용자가 0을 입력하면 종료한다.

 

목표

  • 반복 입력 처리
  • 여러 계산 함수를 조합
  • 조건 분기와 함수 호출 설계 능력 강화

요구사항

  1. 0이 입력될 때까지 반복하시오.
  2. 다음 함수를 정의하시오.
    • count_divisors(int n)
    • sum_divisors(int n)
    • is_prime(int n)
  3. 각 입력값에 대해 다음 내용을 출력하시오.
    • 약수의 개수
    • 약수의 합
    • 소수 여부
  4. 1은 소수가 아님을 반영하시오.
 
 

출력예시

정수 입력(0 종료): 7
약수의 개수: 2
약수의 합: 8
소수입니다.

정수 입력(0 종료): 12
약수의 개수: 6
약수의 합: 28
소수가 아닙니다.

정수 입력(0 종료): 0
 

 

코드예시

더보기
더보기
#include <stdio.h>

int count_divisors(int n);
int sum_divisors(int n);
int is_prime(int n);

int main(void)
{
    int n;

    while (1)
    {
        printf("정수 입력(0 종료): ");
        scanf("%d", &n);

        if (n == 0)
        {
            break;
        }

        printf("약수의 개수: %d\n", count_divisors(n));
        printf("약수의 합: %d\n", sum_divisors(n));

        if (is_prime(n))
            printf("소수입니다.\n");
        else
            printf("소수가 아닙니다.\n");

        printf("\n");
    }

    return 0;
}

int count_divisors(int n)
{
    int i, count = 0;
    for (i = 1; i <= n; i++)
    {
        if (n % i == 0)
        {
            count++;
        }
    }
    return count;
}

int sum_divisors(int n)
{
    int i, sum = 0;
    for (i = 1; i <= n; i++)
    {
        if (n % i == 0)
        {
            sum += i;
        }
    }
    return sum;
}

int is_prime(int n)
{
    if (n < 2)
    {
        return 0;
    }

    if (count_divisors(n) == 2)
    {
        return 1;
    }

    return 0;
}

+ Recent posts