3-1. 메뉴 주문 누적 통계 프로그램
문제설명
카페에서 메뉴 주문을 계속 입력받아 주문을 처리하고, 종료 시 총 주문 횟수, 총 매출, 가장 많이 주문된 메뉴를 출력하는 프로그램을 작성하시오.
목표
- 반복문 안에서 메뉴 처리
- 조건문으로 예외 처리
- 여러 함수 호출 구조 설계
- 누적 데이터 관리
요구사항
- 메뉴는 다음과 같다.
- 1: 아메리카노 (2000원)
- 2: 라떼 (3000원)
- 3: 모카 (3500원)
- 0: 종료
- 메뉴 번호와 수량을 입력받아 주문 처리하시오.
- 잘못된 메뉴 번호는 무시하고 오류 메시지를 출력하시오.
- 수량은 1 이상이어야 한다.
- 종료 시 다음을 출력하시오.
- 총 주문 횟수
- 총 매출
- 가장 많이 주문된 메뉴
- 다음과 같은 함수로 나누어 구현하시오.
- 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을 입력하면 종료한다.
목표
- 반복 입력 처리
- 여러 계산 함수를 조합
- 조건 분기와 함수 호출 설계 능력 강화
요구사항
- 0이 입력될 때까지 반복하시오.
- 다음 함수를 정의하시오.
- count_divisors(int n)
- sum_divisors(int n)
- is_prime(int n)
- 각 입력값에 대해 다음 내용을 출력하시오.
- 약수의 개수
- 약수의 합
- 소수 여부
- 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;
}
'[1] 프로그래밍1 및 실습(C언어) > 6주차. 재귀함수, 배열' 카테고리의 다른 글
| [6주차][배열] 2단계 연습문제 (0) | 2026.04.09 |
|---|---|
| [6주차][배열] 1단계 연습문제 (0) | 2026.04.09 |
| [6주차][조건,분기,함수] 2단계 연습문제 (0) | 2026.04.06 |
| [6주차][조건,분기,함수] 1단계 연습문제 (0) | 2026.04.06 |
| [6주차][재귀함수] 연습문제 (0) | 2026.04.06 |