C 语言中swith case语句的妙用

在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语句来的简单呢?代码简单了好多,也很容易看懂。