|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 没个正样 于 2012-3-19 17:46 编辑
/*运输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下:
s<250km 没有折扣
250≤S<500 2%折扣
500≤S<1000 5%折扣
1000≤S<2000 8%折扣
2000≤S<3000 10%折扣
3000≤S 15%折扣
设:
每公里每吨货物的基本运费为P,
货物重为w,
距离为S,
折扣为d,
则总运费f的计算公式为f=P*w*S*(1-d)
分析: S各域的边界值均为250的倍数, 这样如果用开关语句实现可以设一变量c , 使c=s/250 这样c就可以做为switch中的"表达式"以控制分支,此时标准如下:
c<1 没有折扣
1≤c<2 2%折扣
2≤c<4 5%折扣
4≤c<8 8%折扣
8≤c<12 10%折扣
12≤c 15%折扣
为了便于在switch语句中处理,当 3000≤s 时,令 c=12 . 这样不会使c随s增大而增大。*/
#include <stdio.h>
void 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)
{
case 0:d=0;break;
case 1:d=2;break;
case 2: case 3:d=5;break;
case 4: case 5: case 6: case 7:d=8;break;
case 8: case 9: case 10:case 11: d=10;break;
case 12:d=15;break;
}
f=p*w*s*(1-d/100);
printf("freight=%15.4f\n",f);
}
//我发觉 f=p*w*s*(1-d/100.0)之后的.0加与不加算出来的值,都是一样的?
|
|