重量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);
}
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;
}
感觉代码有冗余,根本不需要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 所以是多余的
程序逻辑很清晰,有一处错误:
int i,d,mileage;
scanf("%f%f",&weight,&mileage); //之前mileage定义成int类型,这里用%f格式字符串接收会出问题。
应该是:
scanf("%f%d", &weight, &mileage);
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!