黑马程序员技术交流社区
标题:
用 if语句来做
[打印本页]
作者:
m573555543
时间:
2014-6-11 21:16
标题:
用 if语句来做
/*
某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
// 选择 服务等级 :‘f’—自动加,‘m’—自己加,‘e’—协助加
int f,m ,e ;
printf("选择 服务等级 :‘f’—自动加,‘m’—自己加,‘e’—协助加\n");
// 汽油品种‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升)
float a = 6.92;float b = 7.37 ;float c = 7.64 ;
printf("汽油品种,‘a’,‘b’,‘c’三种汽油品种\n");
// 加油量 x
int x = 0;
printf("请输入加油量:\n");
// 汽油品种y和服务类型z,加油量x
char z ,y;
scanf("%c,%c,%d",&z,&y,&x);
// 钱数是pay
int pay = 0;
//当选择是自动加汽油的时候
if (z == f )
{
if (y == a)
{
pay = a * x;
printf("自动加,无优惠,应付%d",pay);
}
else if (y == b)
{
pay = b * x;
printf("自动加,无优惠,应付%d",pay);
}
else if (y == c)
{
pay = c * x;
printf("自动加,无优惠,应付%d",pay);
}
}
// printf("自动加,无优惠,应付");
// 当选择是自己加汽油的时候
if (z == m )
{
if (y == a)
{
pay = (a * x)*0.05;
printf("自己加,5%优惠应付%d",pay);
}
else if (y == b)
{
pay = (b * x)*0.05;
printf("自己加,5%优惠应付%d",pay);
}
else if (y == c)
{
pay = (c * x)*0.05;
printf("自己加,5%优惠应付%d",pay);
}
}
// 协助加汽油
if (z == e )
{
if (y == a)
{
pay = (a * x)*0.10;
printf("协助加,优惠10%,应付%d",pay);
}
else if (y == b)
{
pay = (b * x)*0.10;
printf("协助加,优惠10%,应付%d",pay);
}
else if (y == c)
{
pay = (c * x)*0.10;
printf("协助加,优惠10%,应付%d",pay);
}
}
return 0;
复制代码
问题1:输入了三个数,不运行if语句。
问题2:如何精简这个语句?
作者:
瑾❤
时间:
2014-6-12 21:23
/*
某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
//服务等级
float discount=1;
char serviceLevel; //int f,m ,e ;*******只需一个变量存储服务等级(因为只能选择一种服务类型)
printf("请选择服务等级:f(自动加),m(自己加),e(协助加)\n");
scanf("%c",&serviceLevel);//*******接受用户输入的服务等级
getchar();//吸收'\n'
//*******根据服务类型计算出优惠
switch(serviceLevel)
{
case 'm': //******自己加,优惠5%
discount=0.95;
break;
case 'e': //******协助加,优惠加10%
discount=0.9;
break;
default: //******其他情况(自动加或输错时)不优惠
discount=1;
break;
}
//汽油品种‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升)
float price ;
char gasType; //*******定义变量接收汽油品种
printf("请选择汽油品种:a、b、c三种汽油\n");
scanf("%c",&gasType); //接收用户输入的汽油品种
getchar();//吸收'\n'
//*******先根据汽油品种计算汽油价格
switch(gasType)
{
case 'a': //*******a汽油:6.92(元/公升)
price=6.92;
break;
case 'b': //*******b汽油:7.37(元/公升)
price=7.37;
break;
case 'c': //*******c汽油:7.64(元/公升)
price=7.64;
break;
default:
price=-1; //*******其他情况不计算
break;
}
// 加油量 x
float amountOfGas = 0; //int x = 0;*******加油量用float类型表示(参考实际生活),变量名更换有意义的标识符
printf("请输入加油量(公升)\n");
scanf("%f",&amountOfGas);//*******接收用户输入的加油量
//*******我选择在提示之后就让用户输入数据,这样用户使用简单明了,不扎堆输入
// 汽油品种y和服务类型z,加油量x
//char z ,y;
//scanf("%c,%c,%d",&z,&y,&x);
// 应付款
float pay = 0; //int pay = 0;*******pay定义为float类型
pay=amountOfGas*price*discount;
//*******打印输出结果
if(price==-1)
printf("\n汽油品种不存在!\n");
else
printf("\n价格:%.2f(元/公升) 汽油量:%.2f(公升) 优惠:%.2f \n应付款:%.2f元\n",price,amountOfGas,1-discount,pay);
return 0;
}
复制代码
第一个问题:
1.f、m、e都是整型变量名,不是服务等级的标志,运行时,if(z==f)自然不会成立,也就不会运行
2.正确写法应该是if(z=='f'),'f'、'm'、'e'才代表一个字符表示不同的服务等级(即用单引号将f、m、e括起来)
3.服务类型的if分支书写也不正确,应该是以下方式
if(z=='f')//当选择是自动加汽油的时候
{
}
else if(z=='m')// 当选择是自己加汽油的时候
{
}
else if(z=='a')// 协助加汽油
{
}
复制代码
第二个问题:我自己写了一个,你可以参考一下下
作者:
瑾❤
时间:
2014-6-12 21:26
第一个问题:
1.f、m、e都是整型变量名,不是服务等级的标志,运行时,if(z==f)自然不会成立,也就不会运行
2.正确写法应该是if(z=='f'),'f'、'm'、'e'才代表一个字符表示不同的服务等级(即用单引号将f、m、e括起来)
3.服务类型的if分支书写也不正确,应该是以下方式
if(z=='f')//当选择是自动加汽油的时候
{
}
else if(z=='m')// 当选择是自己加汽油的时候
{
}
else if(z=='a')// 协助加汽油
{
}
复制代码
第二个问题:我自己写了一个,你可以参考一下下
/*
某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
//服务等级
float discount=1;
char serviceLevel; //int f,m ,e ;*******只需一个变量存储服务等级(因为只能选择一种服务类型)
printf("请选择服务等级:f(自动加),m(自己加),e(协助加)\n");
scanf("%c",&serviceLevel);//*******接受用户输入的服务等级
getchar();//吸收'\n'
//*******根据服务类型计算出优惠
switch(serviceLevel)
{
case 'm': //******自己加,优惠5%
discount=0.95;
break;
case 'e': //******协助加,优惠加10%
discount=0.9;
break;
default: //******其他情况(自动加或输错时)不优惠
discount=1;
break;
}
//汽油品种‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升)
float price ;
char gasType; //*******定义变量接收汽油品种
printf("请选择汽油品种:a、b、c三种汽油\n");
scanf("%c",&gasType); //接收用户输入的汽油品种
getchar();//吸收'\n'
//*******先根据汽油品种计算汽油价格
switch(gasType)
{
case 'a': //*******a汽油:6.92(元/公升)
price=6.92;
break;
case 'b': //*******b汽油:7.37(元/公升)
price=7.37;
break;
case 'c': //*******c汽油:7.64(元/公升)
price=7.64;
break;
default:
price=-1; //*******其他情况不计算
break;
}
// 加油量 x
float amountOfGas = 0; //int x = 0;*******加油量用float类型表示(参考实际生活),变量名更换有意义的标识符
printf("请输入加油量(公升)\n");
scanf("%f",&amountOfGas);//*******接收用户输入的加油量
//*******我选择在提示之后就让用户输入数据,这样用户使用简单明了,不扎堆输入
// 汽油品种y和服务类型z,加油量x
//char z ,y;
//scanf("%c,%c,%d",&z,&y,&x);
// 应付款
float pay = 0; //int pay = 0;*******pay定义为float类型
pay=amountOfGas*price*discount;
//*******打印输出结果
if(price==-1)
printf("\n汽油品种不存在!\n");
else
printf("\n价格:%.2f(元/公升) 汽油量:%.2f(公升) 优惠:%.2f \n应付款:%.2f元\n",price,amountOfGas,1-discount,pay);
return 0;
}
复制代码
作者:
瑾❤
时间:
2014-6-12 21:31
瑾❤ 发表于 2014-6-12 21:23
第一个问题:
1.f、m、e都是整型变量名,不是服务等级的标志,运行时,if(z==f)自然不会成立,也就不 ...
:'(编辑的时候没仔细看内容,代码放错了位置,又不知道怎么删除,就重新回了一个,见谅啊。
作者:
m573555543
时间:
2014-6-13 23:37
好厉害,我都没说用swith 语句。
作者:
脸皮猴
时间:
2014-6-14 00:03
不明觉厉啊,代码很强大
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2