黑马程序员技术交流社区
标题: 加油站switch方法的代码分享 [打印本页]
作者: wslinke 时间: 2015-4-12 19:57
标题: 加油站switch方法的代码分享
本帖最后由 wslinke 于 2015-4-12 23:51 编辑
看到很多人都在问这道题,我也写了个方案,分享一下
某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。(请用多分支选择switch语句)
- #include <stdio.h>
- #define kPriceA 6.92 //(元/公升)
- #define kPriceB 7.37
- #define kPriceC 7.67
- //服务类型折扣
- #define kDiscount1 0.05
- #define kDiscount2 0.1
- int main(int argc, const char * argv[]) {
- double x,priceOfPetrol,discount,pay;
- char z,y;
- printf("请输入要添加的汽油量,按回车提交\n");
- //输入汽油量,输入错误则报错退出
- if (scanf("%lf",&x) != 1)
- {
- printf("输入有误!\n");
- return 1;
- }
- //清空缓冲区
- while(getchar()!='\n')continue;
- printf("请输入汽油品种(a或b或c),按回车提交\n");
- //输入汽油品种,输入错误则报错退出
- if (scanf("%c",&y) != 1 || '\n' == y)
- {
- printf("汽油品种输入有误,程序结束!\n");
- return 1;
- }
- //清空缓冲区
- while(getchar()!='\n')continue;
- //进入汽油品种判断
- switch (y) {
- case 'a':
- priceOfPetrol = kPriceA;
- break;
- case 'b':
- priceOfPetrol = kPriceB;
- break;
- case 'c':
- priceOfPetrol = kPriceC;
- break;
- //输入有误,退出
- default:
- {
- printf("汽油品种输入有误,程序结束");
- return 1;
- }
- break;
- }
-
- printf("请输入服务类型(f或m或e),按回车提交\n");
- //输入服务类型,输入错误则报错退出
- if (scanf("%c",&z)!=1|| '\n' == z)
- {
- printf("服务类型输入有误,程序结束!\n");
- return 2;
- }
- //进入服务类型判断
- switch (z) {
- case 'f':
- discount = 0.0;
- break;
- case 'm':
- discount = kDiscount1;
- break;
- case 'e':
- discount = kDiscount2;
- break;
- default:
- {
- printf("服务类型输入有误,程序结束!\n");
- return 2;
- }
- break;
- }
- //清空缓冲区
- while(getchar()!='\n')continue;
- //计算最终结果
- pay = x*priceOfPetrol*(1-discount);
- printf("您一共需要支付%lf元.\n",pay);
-
- }
复制代码 大家都觉得太长.. 我就删了过滤输入的代码
- #include <stdio.h>
- #define kPriceA 6.92 //(元/公升)
- #define kPriceB 7.37
- #define kPriceC 7.67
- //服务类型折扣
- #define kDiscount1 0.05
- #define kDiscount2 0.1
- int main(int argc, const char * argv[]) {
-
- double x,priceOfPetrol,discount,pay; //加油量,油的单价,折扣值,最终付款值
- char z,y;//服务类型,汽油品种
- printf("请输入要添加的汽油量,按回车提交\n");
- //输入汽油量
- scanf("%lf",&x);
- //清空缓冲区
- while(getchar()!='\n')continue;
-
- printf("请输入汽油品种(a或b或c),按回车提交\n");
- //输入汽油品种
- scanf("%c",&y);
- //清空缓冲区
- while(getchar()!='\n')continue;
-
- //进入汽油品种判断
- switch (y) {
- case 'a':
- priceOfPetrol = kPriceA;
- break;
- case 'b':
- priceOfPetrol = kPriceB;
- break;
- case 'c':
- priceOfPetrol = kPriceC;
- break;
- //输入有误,退出
- default:
- return 1;
- }
-
- printf("请输入服务类型(f或m或e),按回车提交\n");
- //输入服务类型
- scanf("%c",&z);
- //进入服务类型判断
- switch (z) {
- case 'f':
- discount = 0.0;
- break;
- case 'm':
- discount = kDiscount1;
- break;
- case 'e':
- discount = kDiscount2;
- break;
- default:
- return 2;
- break;
- }
- //计算最终结果
- pay = x*priceOfPetrol*(1-discount);
- printf("您一共需要支付%lf元.\n",pay);
-
- }
复制代码
作者: guanguan0622 时间: 2015-4-12 19:59
我累个去,看得我累死了!能不能在优化下!
作者: wslinke 时间: 2015-4-12 20:03
:L去掉注释和筛选输入错误的语句 就剩下几句代码了啊
作者: 康仔 时间: 2015-4-12 21:03
#include <stdio.h> int main(int argc, const char * argv[]) { // 定义4个变量,一个是选择加油方式,一个是汽油品种,一个是加油量,一个是应付的钱 float x = 0.0f,pay = 0.0f; char z ,y ; //提示客户选择加油方式 printf("请选择加油方式,f 是自动加、m 是自己加、e 是协助加:\n"); //提示客户选择汽油品种 printf("请选择汽油品种,a类汽油、b类汽油、c类汽油:\n"); scanf("%c,%c",&z,&y); //提示用户输入加油量 printf("请输入加油量:"); scanf("%f",&x); switch (y) { case 'a': switch (z) { case 'f': pay = 6.92*x; break; case 'm': pay = 6.92*x*0.95; break; default: pay = 6.92*x*0.90; break; } break; case 'b': switch (z) { case 'f': pay = 7.37*x; break; case 'm': pay = 7.37*x*0.95; break; default: pay = 7.37*x*0.90; break; } break; default: switch (z) { case 'f': pay = 7.64*x; break; case 'm': pay = 7.64*x*0.95; break; default: pay = 7.64*x*0.90; break; break; } break; } printf("应付:%.2f",pay); return 0; }
作者: BoysLove 时间: 2015-4-12 21:29
哥们,看的好累啊,能不能优化一下啊
作者: sgr2038 时间: 2015-4-12 22:18
好长,我都没想出来怎么做呢
作者: 37°天黑 时间: 2015-4-12 22:35
这个代码的可读性,真是有点那个,希望楼主优化下!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |