程序求助
运输公司对用户计算运费。路程(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)
程序如下,请帮忙看下是否正确~~
#include <stdio.h>
void main()
{
double p=10,w=5,s,d,f;
while(1)
{
scanf("%lf",&s);
if(s>0)break;
else
{
printf("请输入大于0的数\n");
while(getchar()!='\n');
}
}
if(s>0 && s<250)
{
f=p*w*s;
printf("运费=%lf\n",f);
}
else if(s>=250 && s<500)
{
d=0.02;
f=p*w*s*(1-d);
printf("运费=%lf\n",f);
}
else if(s>=500 && s<1000)
{
d=0.05;
f=p*w*s*(1-d);
printf("运费=%lf\n",f);
}
else if(s>=1000 && s<2000)
{
d=0.08;
f=p*w*s*(1-d);
printf("运费=%lf\n",f);
}
else if(s>=2000 && s<3000)
{
d=0.1;
f=p*w*s*(1-d);
printf("运费=%lf\n",f);
}
else
{
d=0.15;
f=p*w*s*(1-d);
printf("运费=%lf\n",f);
}
}
鱼油的程序基本正确,但存在一些可以改进的地方。主要问题是缺少 s >= 3000 的情况,并且条件判断可以简化。以下是修正后的程序:
#include <stdio.h>
int main()
{
double p = 10, w = 5, s, d, f;
// 输入路程s,确保s > 0
while (1)
{
printf("请输入路程s(公里):");
scanf("%lf", &s);
if (s > 0)
break;
else
{
printf("请输入大于0的数\n");
while (getchar() != '\n'); // 清除输入缓冲区
}
}
// 根据路程确定折扣
if (s < 250)
d = 0;
else if (s < 500)
d = 0.02;
else if (s < 1000)
d = 0.05;
else if (s < 2000)
d = 0.08;
else if (s < 3000)
d = 0.10;
else
d = 0.15;
// 计算运费
f = p * w * s * (1 - d);
printf("运费 = %lf\n", f);
return 0;
}
主要修改点:
1. 将 void main() 改为标准写法 int main(),并添加了 return 0。
2. 简化了条件判断,直接利用 if-else if 的顺序结构,使代码更清晰。
3. 补充了 s >= 3000 时折扣为 0.15 的情况。
4. 统一在最后计算运费,避免重复代码。
5. 增加了输入提示,用户体验更好。
这样修改后,程序逻辑更完整,且易于维护。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-1-1 23:39
鱼油的程序基本正确,但存在一些可以改进的地方。主要问题是缺少 s >= 3000 的情况,并且条件判断可以简化 ...
好的,感谢答复~~ 但求过程001 发表于 2026-01-01 23:45
FishC 发表于 2026-1-1 23:39
鱼油的程序基本正确, ...
不客气!很高兴能帮到你~
程序的关键点在于 if-else if 结构的逻辑顺序和所有情况的覆盖。你原来的思路是对的,主要是补全条件和调整结构。
以后写类似的分段函数或阶梯折扣问题时,都可以参考这种“依次判断、简化条件”的写法。
如果还有其它问题,随时再来问。编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]