qq_39218580 2017-06-18 04:25 采纳率: 50%
浏览 915
已采纳

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条回答 默认 最新

  • lzl_Avery 2017-06-18 10:16
    关注

    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;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?