运输公司对用户计算运输费用。路程(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.2f\n",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.2f\n",f);
return 0;
}