2007年7月5日 星期四

C 程式設計作業一,選擇邏輯:解題


/* C Programming Project 1 */

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int adultNum, childNum, rate;
int adultFee, childFee, totalFee;
int over3Discount, discountFee;
while (1) {
do {
printf("輸入平日(1)、晚上(2)或離開(0):");
scanf("%d", &rate);
fflush(stdin);
if (rate==0)
exit(0);
} while (rate!=1 && rate!=2);

printf("輸入大人數:");
scanf("%d", &adultNum);
printf("輸入小孩數:");
scanf("%d", &childNum);

if (rate==1) {
adultFee = 268;
childFee = 120;
} else {
adultFee = 368;
childFee = 150;
}
printf("大人 %d 人\n", adultNum);
printf("小孩 %d 人\n", childNum);

totalFee = (adultNum*adultFee + childNum*childFee)*1.1;
printf("原價 %d 元\n", totalFee);

over3Discount = (adultNum+childNum)/3;
if (over3Discount>0) {
if (childNum > over3Discount)
discountFee = over3Discount*childFee*1.1;
else
discountFee = ((over3Discount-childNum)*adultFee + childNum*childFee)*1.1;
totalFee -= discountFee;
printf("三人同行方案 折扣 %d 元\n", discountFee);
printf("三人同行方案 小計 %d 元\n", totalFee);
}

if (childNum+adultNum >= 10) {
discountFee = totalFee*0.05;
totalFee -= discountFee;
printf("十人以上方案 折扣 %d 元\n", discountFee);
printf("十人以上方案 小計 %d 元\n", totalFee);
}
printf("--------------------\n");
printf("總計 %d 元\n\n", totalFee);
}
return 0;
}


作業一題目
回到首頁

7 則留言:

匿名 提到...

請問一下,若是小孩人數比大人多,例如2大6小,那麼discountFee = ((over3Discount-childNum)*adultFee + childNum*childFee)*1.1;的邏輯不就不大對了,因為over3Discount-childNum會變成負的,如果是這樣的話,那要怎麼改呢

liangk 提到...

over3Discount-childNum 不會變成負的,因為這是在 childNum 小於等於 over3Discount 時才會計算。

pumacu 提到...

不好意思,感謝你提供這麼好的地方.
讓我可以學習程式語言.

這個作業,我發現用你的程式下去跑.
如果三個大人三個小孩來算的話.
似乎是扣掉兩個小孩的錢.

但是,一般生活當中
消費都是以最便宜的條件去算.
所以,以三個大人及三個小孩來說.
雖然符合折扣兩組的條件.
但是,以折扣一組(扣一個大人的錢)比較划算.
現實生活來說,也是會這樣算.
所以,這邊的判斷跟運算可能要再改一下.
謝謝!

David Kuo 提到...

您好,可能是題目寫得不夠清楚,題目原網址,它的意思是:小孩能免費先免費,不能免費才免費大人。
其實題目貴在訓練邏輯思考,至於那些小毛病,不仿就算了吧!
謝謝您給的寶貴意見。

Unknown 提到...

請問.......假日呢.......

Unknown 提到...

請問....假日的選擇呢

匿名 提到...

假日的價格和平日晚上一樣,我認為點選晚上也有同樣的效果,頂多printf的字修改一下,關於三個大人,三個小孩,我認為按照原本的就可以,因為規則說三人同行,免費的為小孩,結帳在同一張發票的狀況下,當然是會折扣掉兩個小孩的費用,如果要賺同行免費為大人,消費者必須自己分開結帳,開兩張發票,畢竟這程式是站在公司的立場而寫。