在C语言的switch case语句中,只有碰到break的时候才会跳出,这点大家都知道,但是有的时候我们不需要跳出,让它执行下去,可以帮助我们缩短一些代码。今天在C语言培训的时候,老师说了一个这样的例子,下面是题目:
物流公司对用户计算费用。路程S(千米)越远,每千米每千克费用越低。标准如下表:
S<250千米 |
没有折扣 |
250千米<=S<500千米 |
2%折扣 |
500千米<=S<1000千米 |
5%折扣 |
1000千米<=S<2000千米 |
8%折扣 |
2000千米<=S<3000千米 |
10%折扣 |
3000千米<=S |
15%折扣 |
从键盘输入每千米每千克货物的基本费用P,货物重W,距离S,,计算总费用F(保留两位小数)。.
输入
P <回车>
W <回车>
S <回车>
输出
F <换行>
这个当然可以用if else来做,但是代码会比较长,可以考虑用switch case 来做。
在用switch来做的时候,我们要考虑先计算3000千米以上的费用,然后计算2000到3000公里之间的费用,接着计算更短路径的那部分费用。这样做的好处是,如果你输入的路程是1700公里,在switch的时候,他不会执行该执行的语句千米的那部分费用计算。还是看代码比较容易懂:
#include <stdio.h>
void main()
{
int result,p,w,s;
double f=0;
scanf("%d%d%d",&p,&w,&s);
if ((s/250)>12)
result=12;
else result=s/250;
switch(result)
{
case 12:f=p*w*(s-3000)*0.85;
s=3000;
case 11:
case 10:
case 9:
case 8:f=f+p*w*(s-2000)*0.9;
s=2000;
case 7:
case 6:
case 5:f=f+p*w*(s-1000)*0.92;
s=1000;
case 4:
case 3:
case 2:f=f+p*w*(s-500)*0.95;
s=500;
case 1:f=f+p*w*(s-250)*0.98;
s=250;
case 0: f=f+p*w*s;
}
printf("fee=%.2f\n",f);
}
在写代码的时候,根据题目提供的数字之间的关系,选择利用250作为一个台阶,因为switch( i )中的这个"i"一定要是整数,其实字符在C语言中是转换成ASCII码的,保存的时候也是整数。
利用switch 是不是比用if语句来的简单呢?代码简单了好多,也很容易看懂。