75g后邮费都为0,什么原因。

重量15倍数,邮费(15g,5元;30g,9元;45g,12元;60g,14元;75g~,15元)60以上里程每足1000m邮费+1元,75以上里程每足1000m邮费+2元

#include
main()
{

    float weight,price;
int i,d,mileage;
price=0,weight=0,d=0;
printf("please input weight&mileage:");
scanf("%f%f",&weight,&mileage);
i=weight/15;
switch (i)
{
    case 1:price=5; break;
    case 2:price=9; break;
    case 3:price=12; break;
    case 4: {
    d=mileage/1000;switch(d)
    {
        case 0: price=14;break;
        case 1: price=14+d;break;
        case 2: price=14+d;break;
        case 3: price=14+d;break;
        case 4: price=14+d;break;
        case 5: price=14+d;break;
        case 6: price=14+d;break;
        case 7: price=14+d;break;
        case 8: price=14+d;break;
        case 9: price=14+d;break;
        default: price=14+d;break;
    }break;}
        case 5:{             
    d=mileage/1000;switch(d){
        case 0: price=15;break;
        case 1: price=15+2*d;break;
        case 2: price=15+2*d;break;
        case 3: price=15+2*d;break;
        case 4: price=15+2*d;break;
        case 5: price=15+2*d;break;
        case 6: price=15+2*d;break;
        case 7: price=15+2*d;break;
        case 8: price=15+2*d;break;
        case 9: price=15+2*d;break;
        default: price=15+2*d;break;
    }break;}

}


printf("price=%f\n",price);

}

3个回答

switch(i){
case 0:
case 1:price=5;break;//0没有break表示0-15g以内包括15g都是5元
case 2:price=9;break;
case 3:price=12;break;
case 4:
d=mileage/1000;
price=14+d;
break;
case 5: //case 5的范围大于等于75g 小于90g 因为weight/15 weight==90时为6
d=mileage/1000;
price=15+2*d;
break;
default :
d=mileage/1000;
price=15+2*d; //这里是大于等于90 和case 5结合起来表示的是75g以上 由于是switch的最后了
} //所以可以省略break; 程序到这里还可以进一步优化成下面这样

switch(i){
case 0:
case 1:price=5;break;//0没有break表示0-15g以内包括15g都是5元
case 2:price=9;break;
case 3:price=12;break;
case 4:
d=mileage/1000;
price=14+d;
break;
case default: //因为60g<=case 4的范围=75了所以可以这样写
d=mileage/1000;
price=15+2*d;
break;
}

程序逻辑很清晰,有一处错误:

int i,d,mileage;
scanf("%f%f",&weight,&mileage);   //之前mileage定义成int类型,这里用%f格式字符串接收会出问题。

应该是:

 scanf("%f%d", &weight, &mileage);

用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!

qq_39218580
qq_39218580 回复战在春秋: 不好意思,您的会的确实很给力,我在看到您的回答之前发现了自己的错误,所以忽略您的回答。抱歉
2 年多之前 回复
fight_in_dl
战在春秋 回复战在春秋: 很想知道是基于什么原因采纳的那个答案,这样我在以后回答问题的时候会考虑怎么样提高采纳率,可以说一下原因吗,谢谢~~
大约 3 年之前 回复
fight_in_dl
战在春秋 回复qq_39218580: 采纳的答案中并没有指出这个错误,而这才是根本,不理解为什么采纳!!
大约 3 年之前 回复
qq_39218580
qq_39218580 谢谢
大约 3 年之前 回复

感觉代码有冗余,根本不需要0-9 d本就随1000米数变化 从0到9都是 比如 d=0说明在1000米以内 price=14+d ==14 以此类推9000米
price=14+d ==14+9==23 为什么不直接就 price=14+d break; 还多余的加个 switch、、、同理 75g

price=15+2d 如果是1000米以内d==0很自然的就是15 2000米d==1 price=15+2*d== 17 很自然的就对了 为什么还要个switch 所以是多余的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问