C语言谭浩强课本例5.7、运输公司对用户计算运费.路程(S)越远,每公里运费越低.运输公司对用户计算运费.路程(S)越远,每公里运费越低.标准如下:s<250km 没有折扣250≤S<500 2%折扣500≤S<1000
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 08:51:06
C语言谭浩强课本例5.7、运输公司对用户计算运费.路程(S)越远,每公里运费越低.运输公司对用户计算运费.路程(S)越远,每公里运费越低.标准如下:s<250km 没有折扣250≤S<500 2%折扣500≤S<1000
C语言谭浩强课本例5.7、运输公司对用户计算运费.路程(S)越远,每公里运费越低.
运输公司对用户计算运费.路程(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)
分析: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
为了便于在switch语句中处理,当 3000≤s 时,令 c=12 而不使c随s增大,这样用一条case语句便可处理所有3000≤s 的情况.
下面2种写法:
------------------------------------
1、#include
int 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);
}
2、#include
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=0.02;break;
case 2:case 3:d=5;break;
case 4:case 5:case 6:case 7:d=0.08;break;
case 8:case 9:case 10:case 11:d=0.1;break;
case 12:d=0.15;break; }
f=p*w*s*(1-d);
printf("freight=%.2f\n",f);}
这语句printf("freight=%.2f\n",f);中.2,printf("freight =%15.4f\n",f);中15.4根据什么得来的?
还有最后一句写成printf("freight=%.2f\n",f);中.2,或printf("freight =%15.4f\n",f);都对吗?如果写成printf("freight =%f\n",f);可以吗?输出格式是自己设定的吗?
C语言谭浩强课本例5.7、运输公司对用户计算运费.路程(S)越远,每公里运费越低.运输公司对用户计算运费.路程(S)越远,每公里运费越低.标准如下:s<250km 没有折扣250≤S<500 2%折扣500≤S<1000
%15.4f
指15位整数部分、4位小数部分的浮点数