A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© m573555543 中级黑马   /  2014-6-11 21:16  /  1366 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。
  3. */

  4. #include <stdio.h>

  5. int main(int argc, const char * argv[])
  6. {
  7.     // 选择 服务等级 :‘f’—自动加,‘m’—自己加,‘e’—协助加
  8.     int f,m ,e  ;
  9.     printf("选择 服务等级 :‘f’—自动加,‘m’—自己加,‘e’—协助加\n");
  10.    
  11.     // 汽油品种‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升)
  12.     float a = 6.92;float b = 7.37 ;float c = 7.64 ;
  13.     printf("汽油品种,‘a’,‘b’,‘c’三种汽油品种\n");
  14.    
  15.     // 加油量 x
  16.     int x = 0;
  17.     printf("请输入加油量:\n");
  18.    
  19.     // 汽油品种y和服务类型z,加油量x
  20.     char z ,y;
  21.     scanf("%c,%c,%d",&z,&y,&x);
  22.    
  23.     // 钱数是pay
  24.     int pay = 0;
  25.     //当选择是自动加汽油的时候
  26.     if (z  == f )
  27.     {
  28.         if (y == a)
  29.         {
  30.             pay = a * x;
  31.             printf("自动加,无优惠,应付%d",pay);
  32.         
  33.         }
  34.         else if (y == b)
  35.         {
  36.             pay = b * x;
  37.             printf("自动加,无优惠,应付%d",pay);
  38.         }
  39.         else if (y == c)
  40.         {
  41.             pay = c * x;
  42.             printf("自动加,无优惠,应付%d",pay);
  43.         }
  44.     }
  45.        // printf("自动加,无优惠,应付");
  46.    
  47.       // 当选择是自己加汽油的时候
  48.         if (z  == m )
  49.         {
  50.             if (y == a)
  51.             {
  52.                 pay = (a * x)*0.05;
  53.                 printf("自己加,5%优惠应付%d",pay);
  54.                
  55.             }
  56.             else if (y == b)
  57.             {
  58.                 pay = (b * x)*0.05;
  59.                 printf("自己加,5%优惠应付%d",pay);
  60.             }
  61.             else if (y == c)
  62.             {
  63.                 pay = (c * x)*0.05;
  64.                 printf("自己加,5%优惠应付%d",pay);
  65.             }
  66.          }
  67.    
  68.         // 协助加汽油
  69.         if (z  == e )
  70.         {
  71.             if (y == a)
  72.             {
  73.                 pay = (a * x)*0.10;
  74.                 printf("协助加,优惠10%,应付%d",pay);
  75.                
  76.             }
  77.             else if (y == b)
  78.             {
  79.                 pay = (b * x)*0.10;
  80.                 printf("协助加,优惠10%,应付%d",pay);
  81.             }
  82.             else if (y == c)
  83.             {
  84.                 pay = (c * x)*0.10;
  85.                 printf("协助加,优惠10%,应付%d",pay);
  86.             }
  87.         }
  88.     return 0;
复制代码


问题1:输入了三个数,不运行if语句。
问题2:如何精简这个语句?

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

5 个回复

倒序浏览
  1. /*
  2. 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。
  3. */
  4. #include <stdio.h>
  5. int main(int argc, const char * argv[])
  6. {
  7.     //服务等级
  8.     float discount=1;
  9.     char serviceLevel;   //int f,m ,e ;*******只需一个变量存储服务等级(因为只能选择一种服务类型)
  10.     printf("请选择服务等级:f(自动加),m(自己加),e(协助加)\n");
  11.     scanf("%c",&serviceLevel);//*******接受用户输入的服务等级
  12.     getchar();//吸收'\n'
  13.     //*******根据服务类型计算出优惠
  14.     switch(serviceLevel)
  15.     {
  16.     case 'm':          //******自己加,优惠5%
  17.         discount=0.95;
  18.         break;
  19.     case 'e':          //******协助加,优惠加10%
  20.         discount=0.9;
  21.         break;
  22.     default:           //******其他情况(自动加或输错时)不优惠
  23.         discount=1;
  24.         break;
  25.     }

  26.     //汽油品种‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升)
  27.     float price ;
  28.     char gasType;            //*******定义变量接收汽油品种
  29.     printf("请选择汽油品种:a、b、c三种汽油\n");
  30.     scanf("%c",&gasType);   //接收用户输入的汽油品种
  31.     getchar();//吸收'\n'
  32.     //*******先根据汽油品种计算汽油价格
  33.     switch(gasType)
  34.     {
  35.     case 'a':        //*******a汽油:6.92(元/公升)
  36.         price=6.92;
  37.         break;
  38.     case 'b':       //*******b汽油:7.37(元/公升)
  39.         price=7.37;
  40.         break;
  41.     case 'c':       //*******c汽油:7.64(元/公升)
  42.         price=7.64;
  43.         break;
  44.     default:
  45.         price=-1;   //*******其他情况不计算
  46.         break;
  47.     }

  48.     // 加油量 x
  49.     float  amountOfGas = 0;           //int x = 0;*******加油量用float类型表示(参考实际生活),变量名更换有意义的标识符
  50.     printf("请输入加油量(公升)\n");
  51.     scanf("%f",&amountOfGas);//*******接收用户输入的加油量

  52.     //*******我选择在提示之后就让用户输入数据,这样用户使用简单明了,不扎堆输入
  53.     // 汽油品种y和服务类型z,加油量x
  54.     //char z ,y;
  55.     //scanf("%c,%c,%d",&z,&y,&x);

  56.     // 应付款
  57.     float pay = 0; //int pay = 0;*******pay定义为float类型
  58.     pay=amountOfGas*price*discount;


  59.     //*******打印输出结果
  60.     if(price==-1)
  61.         printf("\n汽油品种不存在!\n");
  62.     else
  63.         printf("\n价格:%.2f(元/公升)  汽油量:%.2f(公升)   优惠:%.2f  \n应付款:%.2f元\n",price,amountOfGas,1-discount,pay);
  64.     return 0;
  65. }
复制代码
第一个问题:
     1.f、m、e都是整型变量名,不是服务等级的标志,运行时,if(z==f)自然不会成立,也就不会运行
     2.正确写法应该是if(z=='f'),'f'、'm'、'e'才代表一个字符表示不同的服务等级(即用单引号将f、m、e括起来)
     3.服务类型的if分支书写也不正确,应该是以下方式

  1. if(z=='f')//当选择是自动加汽油的时候
  2. {
  3. }
  4. else if(z=='m')// 当选择是自己加汽油的时候
  5. {
  6. }
  7. else if(z=='a')// 协助加汽油
  8. {
  9. }
复制代码


第二个问题:我自己写了一个,你可以参考一下下


回复 使用道具 举报
第一个问题:
      1.f、m、e都是整型变量名,不是服务等级的标志,运行时,if(z==f)自然不会成立,也就不会运行
      2.正确写法应该是if(z=='f'),'f'、'm'、'e'才代表一个字符表示不同的服务等级(即用单引号将f、m、e括起来)
      3.服务类型的if分支书写也不正确,应该是以下方式

  1. if(z=='f')//当选择是自动加汽油的时候

  2. {

  3. }

  4. else if(z=='m')// 当选择是自己加汽油的时候

  5. {

  6. }

  7. else if(z=='a')// 协助加汽油

  8. {

  9. }
复制代码

第二个问题:我自己写了一个,你可以参考一下下
  1. /*

  2. 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。

  3. */

  4. #include <stdio.h>

  5. int main(int argc, const char * argv[])

  6. {

  7.     //服务等级

  8.     float discount=1;

  9.     char serviceLevel;   //int f,m ,e ;*******只需一个变量存储服务等级(因为只能选择一种服务类型)

  10.     printf("请选择服务等级:f(自动加),m(自己加),e(协助加)\n");

  11.     scanf("%c",&serviceLevel);//*******接受用户输入的服务等级

  12.     getchar();//吸收'\n'

  13.     //*******根据服务类型计算出优惠

  14.     switch(serviceLevel)

  15.     {

  16.     case 'm':          //******自己加,优惠5%

  17.         discount=0.95;

  18.         break;

  19.     case 'e':          //******协助加,优惠加10%

  20.         discount=0.9;

  21.         break;

  22.     default:           //******其他情况(自动加或输错时)不优惠

  23.         discount=1;

  24.         break;

  25.     }


  26.     //汽油品种‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升)

  27.     float price ;

  28.     char gasType;            //*******定义变量接收汽油品种

  29.     printf("请选择汽油品种:a、b、c三种汽油\n");

  30.     scanf("%c",&gasType);   //接收用户输入的汽油品种

  31.     getchar();//吸收'\n'

  32.     //*******先根据汽油品种计算汽油价格

  33.     switch(gasType)

  34.     {

  35.     case 'a':        //*******a汽油:6.92(元/公升)

  36.         price=6.92;

  37.         break;

  38.     case 'b':       //*******b汽油:7.37(元/公升)

  39.         price=7.37;

  40.         break;

  41.     case 'c':       //*******c汽油:7.64(元/公升)

  42.         price=7.64;

  43.         break;

  44.     default:

  45.         price=-1;   //*******其他情况不计算

  46.         break;

  47.     }


  48.     // 加油量 x

  49.     float  amountOfGas = 0;           //int x = 0;*******加油量用float类型表示(参考实际生活),变量名更换有意义的标识符

  50.     printf("请输入加油量(公升)\n");

  51.     scanf("%f",&amountOfGas);//*******接收用户输入的加油量


  52.     //*******我选择在提示之后就让用户输入数据,这样用户使用简单明了,不扎堆输入

  53.     // 汽油品种y和服务类型z,加油量x

  54.     //char z ,y;

  55.     //scanf("%c,%c,%d",&z,&y,&x);


  56.     // 应付款

  57.     float pay = 0; //int pay = 0;*******pay定义为float类型

  58.     pay=amountOfGas*price*discount;



  59.     //*******打印输出结果

  60.     if(price==-1)

  61.         printf("\n汽油品种不存在!\n");

  62.     else

  63.         printf("\n价格:%.2f(元/公升)  汽油量:%.2f(公升)   优惠:%.2f  \n应付款:%.2f元\n",price,amountOfGas,1-discount,pay);

  64.     return 0;

  65. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
瑾❤ 发表于 2014-6-12 21:23
第一个问题:
     1.f、m、e都是整型变量名,不是服务等级的标志,运行时,if(z==f)自然不会成立,也就不 ...

:'(编辑的时候没仔细看内容,代码放错了位置,又不知道怎么删除,就重新回了一个,见谅啊。
回复 使用道具 举报
好厉害,我都没说用swith 语句。
回复 使用道具 举报
不明觉厉啊,代码很强大

评分

参与人数 1黑马币 +3 收起 理由
傘が咲く + 3 黑马币去哪啦,猴哥- -

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马