早教吧作业答案频道 -->其他-->
switch语句先看例题:运输公司对用户计算运费.路程(S)越远,每公里运费越低.标准如下:s<250km没有折扣250≤S<5002%折扣500≤S<10005%折扣1000≤S<20008%折扣2000≤S<300010%折扣3000≤S15
题目详情
switch语句
先看例题:
运输公司对用户计算运费.路程(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)
程序为:
#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);
}
我的问题是,这里认为S,c为一整型常量,但是题目上只说明了不同范围的取值,所以取值应该会有实型常量,那么编写出来的程序不是无法解决问题了(比如如果我输入c=10.5,那就无法做出答案了)?那教材为什么要用这种方法解决呢?初学C,对switch的用法不理解,如果可以,希望能详细解释一下switch的适用条件,.
先看例题:
运输公司对用户计算运费.路程(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)
程序为:
#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);
}
我的问题是,这里认为S,c为一整型常量,但是题目上只说明了不同范围的取值,所以取值应该会有实型常量,那么编写出来的程序不是无法解决问题了(比如如果我输入c=10.5,那就无法做出答案了)?那教材为什么要用这种方法解决呢?初学C,对switch的用法不理解,如果可以,希望能详细解释一下switch的适用条件,.
▼优质解答
答案和解析
c是整型的
c= s / 250;中间存在一个强制转换,相当于
c=(int)(s/250);所以这里是取整了
就是c是 s/250的整数部分
因此不会出现c=10.5的情况
如果你赋值c=10.5; c的值是10
因为取整了
c= s / 250;中间存在一个强制转换,相当于
c=(int)(s/250);所以这里是取整了
就是c是 s/250的整数部分
因此不会出现c=10.5的情况
如果你赋值c=10.5; c的值是10
因为取整了
看了 switch语句先看例题:运...的网友还看了以下:
当V原语对信号量作运算之后,A.当S<0,进程继续执行B.当S<0,要唤醒一个就绪进程C.当S<=0 2020-05-24 …
当V原语对信号量作运算之后,()。A.当S<0,进程继续执行B.当S<0,要唤醒一个就绪进程C.当S 2020-05-24 …
一质点做直线运动,t=t0时,s>0,v>0,a>o,此后a逐渐减小至零,则A一质点做直线运动,t 2020-06-06 …
如图1,在等腰Rt△ABC中,D为斜边AC边上一点,以CD为直角边,点C为直角顶点,向外构造等腰R 2020-07-30 …
幂级数和函数s(0)=0.幂级数求和函数有个S(0)=0如果不是0会怎样运算,幂级数求和的时候会有 2020-07-31 …
一物体作直线运动,速度为v=2t,设物体的阻力为f=-1/2v^2,运动的路程为s,试求物体由s= 2020-08-02 …
关于十米折返跑的题:测试者听到哨声跑向正前方10的折返线,同时开始计时,测试者到达折返线时,用手触摸 2020-11-07 …
小玲家珍藏书本有371本,比小名家的书多3倍的11本,小名家有几本书?小红买来12米彩带折幸运星,折 2020-11-13 …
一个跳水运动员从距水面10m高的跳台向上跳起0.8m,最后以14m/s的向下运动速度下水.(1)运动 2020-11-22 …
一道二级C题目设有以下程序段:intx=0,s=0;while(!=0)s+=++x;printf( 2020-12-07 …