[交流]一道C primer plus 复习题,请教谁会不使用goto做法
题目:ABC Mail Order Grocery朝鲜蓟的售价是1.25美元/磅,甜菜的售价是0.65美元/磅,胡萝卜的售价是0.89美元/磅。在添加运输费用之前,他们为100美元的订单提供5%的打折优惠。对5磅或以下的订单收取3.50美元的运输和装卸费用;超过5磅而不足20磅的订单收取100.00美元的运输和装卸费用;20磅或以上的运输,在8美元基础上每磅加收0.1美元。编写程序,在循环中使用switch语句,以便对输入a的响应是让用户输入所需朝鲜蓟磅数,b为甜菜的磅数,c为胡萝卜的磅数,而q允许用户退出订购过程。然后程序计算总费用、折扣和运输费用(如果有运输费的话),以及总数。随后程序应该显示所有的购买信息:每磅的费用、订购的磅数、该订单每种蔬菜的费用、订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。
按照题目要求,我只有使用了goto,不使用的话我实在想不出来。因为书上说goto用习惯了不好,所以来交流下。
我编写的代码如下:
#include"stdio.h"
#define DZ 100
#define CXJ 1.25
#define TC 0.65
#define HLB 0.89
#define BA 5
#define BB 20
int main(void)
{int a,b,c,bang,z;
int n=0;
float m1,m2,y;
first:printf("input how many pounds chaoxianji you want:\n");
second:if(scanf("%d",&bang)==1)
{switch(n++)
{case 0:a=bang; printf("input how many pounds tiancai you want:\n");goto second;break;
case 1:b=bang; printf("input how many pounds huluoboyou want:\n");goto second;break;
case 2:c=bang;break;
default:;
}
if(n>2)
goto third;
}
else goto exit;
third:n=0;
m1=a*CXJ+b*TC+c*HLB;
if(m1>=100)
m1=0.95*m1;
z=a+b+c;
if(z<5)
y=3.5;
else if(z<=20)
y=10.00;
else if(z>20)
y=8+(z-20)*0.1;
m2=m1+y;
printf("chaoxianji is %f a pound;you want %d pound;cost you %f money.\n",CXJ,a,a*CXJ);
printf("tiancai is %f a pound;you want %d pound;cost you %f money.\n",TC,b,b*TC);
printf("huluobo is %f a pound;you want %d pound;cost you %f money.\n",HLB,c,c*HLB);
printf("you cost %f money for dingdan.\n",m1);
if(m1>=100)
printf("your zhekou is 0.05.\n");
printf("you pay all money is %f.\n",m2);
goto first;
exit:return 0;
}