例5.7运输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下:
s<250km没有折扣
250≤S<500 2%折扣
500≤S<1000 5%折扣
1000≤S<2000 8%折扣
2000≤S<3000 10%折扣
3000≤S 15%折扣设每公里每吨货物的基本运费为P(Price的缩写),货物重为w(weight的缩写),距离为S,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为f=P*w*S*(1-d)
分析此问题,折扣的变化是有规律的:从图4.15可以看到,折扣的“变化点”都是250的倍数(250,500,1000,2000,3000)。利用这一特点,可以在横轴上加一种坐标c,c的值为S/250。c代表250的倍数。当c<1时,表示S<250,无折扣;1≤c<2时,表示250≤S<500,折扣d=2%;2≤c<4时,d=5%;4≤c<8时,d=8%;8≤c<12时,d=10%;c≥12时,d=15%。
据此写出程序如下:
main()
{
int c,S;
float P,w,d,f;
scanf("%f,%f,%d",&P,&w,&S);
if(S>=3000) c=12;
else c=S/250;
switch(c)
{
case0∶d=0;break;
case1∶d=2;break;
case2∶
case3∶d=5;break;
case4∶
case5∶
case6∶
case7∶d=8;break;
case8∶
case9∶
case10∶
case11∶d=10;break;
case12∶d=15;break;
}
f=P*w*S*(1-d/100.0);
printf("freight=%15.4f",f);
}
运行情况如下:
100,20,300
freight= 588000.0000
请注意:c、S是整型变量,因此c=S/250为整数。当S≥3000时,令c=12,而不使c随S增大,这是为了在Switch语句中便于处理,用一个case可以处理所有S≥3000的情况。
s<250km没有折扣
250≤S<500 2%折扣
500≤S<1000 5%折扣
1000≤S<2000 8%折扣
2000≤S<3000 10%折扣
3000≤S 15%折扣设每公里每吨货物的基本运费为P(Price的缩写),货物重为w(weight的缩写),距离为S,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为f=P*w*S*(1-d)
分析此问题,折扣的变化是有规律的:从图4.15可以看到,折扣的“变化点”都是250的倍数(250,500,1000,2000,3000)。利用这一特点,可以在横轴上加一种坐标c,c的值为S/250。c代表250的倍数。当c<1时,表示S<250,无折扣;1≤c<2时,表示250≤S<500,折扣d=2%;2≤c<4时,d=5%;4≤c<8时,d=8%;8≤c<12时,d=10%;c≥12时,d=15%。
据此写出程序如下:
main()
{
int c,S;
float P,w,d,f;
scanf("%f,%f,%d",&P,&w,&S);
if(S>=3000) c=12;
else c=S/250;
switch(c)
{
case0∶d=0;break;
case1∶d=2;break;
case2∶
case3∶d=5;break;
case4∶
case5∶
case6∶
case7∶d=8;break;
case8∶
case9∶
case10∶
case11∶d=10;break;
case12∶d=15;break;
}
f=P*w*S*(1-d/100.0);
printf("freight=%15.4f",f);
}
运行情况如下:
100,20,300
freight= 588000.0000
请注意:c、S是整型变量,因此c=S/250为整数。当S≥3000时,令c=12,而不使c随S增大,这是为了在Switch语句中便于处理,用一个case可以处理所有S≥3000的情况。