2021-07-06 第七章最后一题

这是一个简单的购物结算程序,用户可以选择购买洋蓟、甜菜或胡萝卜,并输入购买磅数。程序会计算总价、折扣(如果总价超过100元)、运费以及总费用。使用了`goto`语句进行流程控制,确保输入的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个程序检查输入数据是否有效和多个输入之间的衔接比较费劲
虽然用了两个goto,不过似乎还是比较容易看明白

#include <stdio.h>
int sushu(int a);

int main(void)
{
 char i;
 int zhekou;
 float totalcost,aftercost,n,transfee,a_num,b_num,c_num,totalweight;
 while(1)//大循环,直到按e退出
 { 
   a_num=0,b_num=0,c_num=0,zhekou=0;  
   while(1)//多轮选购
   {
     printf("请选购蔬菜:\n");
     printf("a)洋蓟  b)甜菜  c)胡萝卜 d)选好了 e)不买了\n");
     while(1)//确保输入的品种选项有效
      {
        if ((i=getchar())=='\n') i=getchar();
        while(getchar()!='\n');
        switch(i)
         {
           case 'a': break;
           case 'b': break;
           case 'c': break;
           case 'd': goto smallend;
           case 'e': goto end;
           default:  printf("请输入正确的字母:\n");
                     continue;             
          }
          break;
      }  
       //确保输入的磅数有效
       printf("请输入磅数:\n");
       while(scanf("%f",&n)!=1)
       {
         printf("请输入正确的磅数:\n");
         while(getchar()!='\n');
       }
         while(getchar()!='\n');
         switch(i)
         {
           case 'a': a_num+=n;
                     break;
           case 'b': b_num+=n;
                     break;
           case 'c': c_num+=n;
                     break;
         }
   }
   
   smallend:
   //总计金额
   totalweight=a_num+b_num+c_num;
   totalcost=2.05*a_num+1.15*b_num+1.09*c_num;
   if (totalcost>=100.00) 
    {aftercost=totalcost*95.0/100.0; 
     zhekou=1;}
   //运费
   if (totalweight==0) transfee=0;
   else if(totalweight<=5) transfee=6.5;
   else if (totalweight<=20) transfee=14;
   else transfee=14+(n-20)*0.5;
   
   printf("您购买了洋蓟%.2f磅,共%.2f元。\n",a_num,a_num*2.05);
   printf("您购买了甜菜%.2f磅,共%.2f元。\n",b_num,b_num*1.15);
   printf("您购买了胡萝卜%.2f磅,共%.2f元。\n",c_num,c_num*1.09);
   printf("总共需要%.2f元。\n",totalcost);
   if (zhekou==1)printf("有%%5折扣,折后价格为%.2f元。\n",aftercost);
   else printf("无折扣,总价为%.2f元。\n",totalcost);
   printf("运费为%.2f元。\n",transfee);
   printf("总费用为%.2f元。\n",(zhekou==1?aftercost:totalcost)+transfee);
   
 }
 end:printf("谢谢光临!\n");
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值