반응형
기차표 예매 프로그램을 작성하려고 한다. 간단한 구현을 위해 좌석은 모두 10개라고 하자.
예매할 좌석수를 입력받아 빈 자리를 할당하고 예매할 때마다 각 좌석의 상태를 출력한다.
O이면 예매 가능, X는 예매 불가를 의미하며 더 이상 예매할 수 없으면 프로그램을 종료한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_CNT 10
void Seat(int remain_cnt)
{
printf("현재 좌석 : [ ");
int i;
for (i = 0; i < MAX_CNT - remain_cnt; i++)
printf("X ");
for (; i < MAX_CNT; i++)
printf("O ");
printf("]\n");
}
int main(void)
{
int cnt, remain_cnt = MAX_CNT;
int i;
while (remain_cnt) {
Seat(remain_cnt);
printf("\n예매할 좌석 수? ");
scanf("%d", &cnt);
if (cnt > 0 && cnt <= remain_cnt) {
for (int i = 0; i < cnt; i++)
printf("%d ", i + 1 + MAX_CNT - remain_cnt);
printf("번 좌석을 예약했습니다.\n");
remain_cnt -= cnt;
}
else {
printf("남은 좌석수가 %d이므로 %d 좌석을 예약할 수 없습니다.\n", remain_cnt, cnt);
}
}
return 0;
}
▶ void Seat(int remain_cnt) : remain_cnt를 매개변수로 갖는 Seat 함수 생성
→ 0번째 자리부터 최대 자리수(10자리)에서 남은 자리를 뺀 값까지 반복문을 수행해서 X로 변경
→ 초기값은 생략하고 최대 자리수(10자리)까지 반복문을 수행해서 O로 변경
▶ int cnt, remain_cnt = MAX_CNT : 사용자에게 예매할 좌석 수를 입력받기 전까지는 남은 좌석 수와 카운트 수(예매할 좌석 수)를 MAX(10자리)와 동일하게 설정
▶ while(remain_cnt) : 남은 좌석 수가 있을 때까지 계속해서 반복문을 수행
→ 10번 자리까지 모두 예약하면 반복문이 종료됨
▶ if (cnt > 0 && cnt <= remain_cnt) : 사용자가 입력한 예매 좌석 수가 0보다 크고 남은 좌석 수보다 작거나 같다면 해당 좌석 예약 완료
반응형
'Language > C' 카테고리의 다른 글
[ C ] [ 포인터 연습 문제 ] 배열 주소 출력 프로그램 (0) | 2021.12.14 |
---|---|
[ C ] [ 포인터 연습 문제 ] 배열 원소 출력 프로그램 (0) | 2021.12.13 |
[ C ] [ 배열 연습 문제 ] 3 X 3 행렬 합 계산 프로그램 (0) | 2021.12.11 |
[ C ] [ 배열 연습 문제 ] 할인 가격 출력 프로그램 (0) | 2021.12.10 |
[ C ] [ 배열 연습 문제 ] 배열 원소 합계 프로그램 (0) | 2021.12.09 |