《C Primer Plus(第5版)中文版》第7章编程练习第11题

来源:互联网 发布:农村淘宝下载安装2017 编辑:程序博客网 时间:2024/04/17 01:42

ABC Mail Order Grocery朝鲜蓟的售价是1.25美元/磅,甜菜的售价是0.65美元/磅,胡萝卜的售价是0.89美元/磅。在添加运输费用之前,他们为100美元的订单提供5%的打折优惠。对5磅或以下的定单收取3.50美元的运输和装卸费用;超过5磅而不足20磅的定单收取1O.OO美元的运输和装卸费用:20磅或以上的运输,在8美元基础上每磅加收0.1美元。编写程序,在循环中使用switch语句,以便对输入的响应是让用户输入所需的a朝鲜蓟磅数,b甜菜的磅数,c胡萝卜的磅数,而q允许用户退出订购过程。然后程序计算总费用、折扣和运输费用(如果有运输费的话),以及总数。随后程序应该显示所有的购买信息:每磅的费用、订购的磅数、该订单每种蔬菜的费用、订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。

#include <stdio.h>#include <stdbool.h>#include <ctype.h>#define GOOD1 "朝鲜蓟"#define GOOD2 "甜菜" #define GOOD3 "胡萝卜"#define UNIT "磅"#define CURRENCY "美元"void clearbuffered(void);double get_double(void);double getWeight(double,char[]);void list(char[],double,double);int main(void){const float SHIPPING_LV1=5.00;//第一档阈值const float SHIPPING_LV2=20.00;//第二档阈值 const float SHIPPING_CHARGE_LV1=3.50;//第一档运输费 const float SHIPPING_CHARGE_LV2=10.00;//第二档运输费 const float SHIPPING_CHARGE_LV3_BASE=8.00;//第三档基础运输费const float SHIPPING_CHARGE_LV3_PERPOUND=0.10;//第三档每磅运输费 const float DISCOUNT_ORDER_PRICE=100;//打折所需最低订单金额const float DISCOUNT_RATE=0.05;//折扣const float GOOD1_PRICE=1.25;//朝鲜蓟单价 const float GOOD2_PRICE=0.65;//甜菜单价 const float GOOD3_PRICE=0.89;//胡萝卜单价double good1_weight=0;//朝鲜蓟重量 double good2_weight=0;//甜菜重量 double good3_weight=0;//胡萝卜重量double sum_weight=0;//总重 double good1_cost=0;//朝鲜蓟折前价 double good2_cost=0;//甜菜折前价 double good3_cost=0;//胡萝卜折前价double sum_cost=0;//总价 double discount=0;//折后价 double shipping_charge;//运费 int ch;printf("请选择您要订购的货品,输入名称前的序号:\n");printf("A.%s\t\tB.%s\nC.%s\t\tQ.退出选购,进入结算\n",GOOD1,GOOD2,GOOD3);while(printf("\n请选择您要订购的货品:"),toupper((ch=getchar()))!='Q'){switch(toupper(ch)){case 'A':{good1_weight=getWeight(good1_weight,GOOD1);break;}case 'B':{good2_weight=getWeight(good2_weight,GOOD2);break;}case 'C':{good3_weight=getWeight(good3_weight,GOOD3);break;}default:{printf("输入有误,请重新选择货品。\n");clearbuffered();break;}}}sum_weight=good1_weight+good2_weight+good3_weight;if(sum_weight>0){printf("\n购物清单:\n\n");printf("商品\t\t重量(%s)\t计价(%s)\n-------------------------------------\n",UNIT,CURRENCY);if(good1_weight>0){good1_cost=good1_weight*GOOD1_PRICE;list(GOOD1,good1_weight,good1_cost);}if(good2_weight>0){good2_cost=good2_weight*GOOD2_PRICE;list(GOOD2,good2_weight,good2_cost);}if(good3_weight>0){good3_cost=good3_weight*GOOD3_PRICE;list(GOOD3,good3_weight,good3_cost);}sum_cost=good1_cost+good2_cost+good3_cost;printf("-------------------------------------\n");printf("合计\t\t%6.2f\t\t%6.2f\n\n",sum_weight,sum_cost);if(sum_cost>=DISCOUNT_ORDER_PRICE){printf("订单花费已达到折扣线,您将享受折扣。\n");discount=sum_cost*DISCOUNT_RATE;printf("折扣为您节省了 %.2f%s。\n\n",discount,CURRENCY);sum_cost-=discount;}if(sum_weight<SHIPPING_LV1){shipping_charge=SHIPPING_CHARGE_LV1;}else if(sum_weight<SHIPPING_LV2){shipping_charge=SHIPPING_CHARGE_LV2;}else{shipping_charge=SHIPPING_CHARGE_LV3_BASE+(sum_weight-SHIPPING_LV2)*SHIPPING_CHARGE_LV3_PERPOUND;}printf("按照物流标准,您总计 %.2f%s 的货将花费 %.2f%s 的物流费用。\n",sum_weight,UNIT,shipping_charge,CURRENCY);printf("最终,扣除您的折扣并计算物流费用后:您需要缴纳 %.2f%s。\n\n",sum_cost+shipping_charge,CURRENCY) ;printf("感谢您光临本商场。祝您生活愉快。\n\n\n\n\n\n\n\n");}else{printf("您的购物车是空的,欢迎下次光临。");}return 0;}void clearbuffered(void){while(getchar()!='\n')continue;}void list(char a[],double b,double c){printf("%s\t\t%6.2f\t\t%6.2f\n",a,b,c);}double getWeight(double a,char b[]){printf("请输入选择产品的重量(%s):",UNIT);a+=get_double();printf("目前您购物车中共有 %.2f%s 的%s。\n",a,UNIT,b);return a;}double get_double(void){clearbuffered();double input;while(scanf("%Lf",&input)!=1){clearbuffered();printf("输入的值有误,请重新输入:");}clearbuffered();return input;}


0 0