C语言计算运输费用

运输公司对用户计算运输费用。路程(s表示,以km为单位)越远,单位运费(每吨·千米为单位)越低。
计算标准如下:

 解题思路:

货物的基本运费为p,货物重为w,距离为s,折扣为d,总运费f=p*w*s*(1-d);

用if...else语句写比较容易理解,(switch语句在下面)

#include <stdio.h>                     
int main()
{
    int s;
    float p,w,d,f;
    system("mode con cp select=65001");
    printf("请输入基本运费p、货物重w、距离s的值:");
    scanf("%f,%f,%d",&p,&w,&s);
    if(s<250){
        d=0;
    }else if(s>=250 && s<500){
        d=0.02;
    }else if(s>=500 && s<1000){
        d=0.05;
    }else if(s>=1000 && s<2000){
        d=0.08;
    }else if(s>=2000 && s<3000){
        d=0.10;
    }else{
        d=0.15;
    }
    f=p*w*s*(1-d);
    printf("总运费=%10.2fn",f);
    return 0;
}

switch语句需要一个常量表达式,经过分析,折扣的“变化点”都是250的倍数(250,500,1000,2000,3000),通过定义一个c,c的值=s/250,当c<1时,表示s<250,折扣d=0;当1<=c<2 时,表示250<=s<500 ,折扣d=2%...

#include <stdio.h>                     
int main()
{
    int c,s;
    float p,w,d,f;
    system("mode con cp select=65001");
    printf("请输入基本运费p、货物重w、距离s的值:");
    scanf("%f,%f,%d",&p,&w,&s);
    // 3000km以上为同一折扣;3000km以下折扣不同,c值不同
    if(s>=3000){
        c=12;
    }else{
        c=s/250;
    }
    switch (c)
    {
        case 0:d=0;break;   //c=0,250km以下,折扣d=0;
        case 1:d=2;break;   //c=1,250~500km,折扣d=2%;
        case 2:
        case 3:d=5;break;   //c=2和3,500~1000km,折扣d=5%;
        case 4:
        case 5:
        case 6:
        case 7:d=8;break;   //c=4~7,1000~2000km,折扣d=8%;
        case 8:
        case 9:
        case 10:
        case 11:d=10;break; //c=8和11,2000~3000km,折扣d=10%;
        case 12:d=15;break; //c=12,代表3000km以上,折扣d=15%;       
        default:printf("错误");break;
    }
    f=p*w*s*(1-d/100);
    printf("总运费=%10.2fn",f);
    return 0;
}