鱼C论坛

 找回密码
 立即注册
查看: 22|回复: 3

程序求助

[复制链接]
发表于 昨天 23:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
运输公司对用户计算运费。

路程(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);
        }
}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 23:39 | 显示全部楼层
鱼油的程序基本正确,但存在一些可以改进的地方。主要问题是缺少 s >= 3000 的情况,并且条件判断可以简化。以下是修正后的程序:


  1. #include <stdio.h>

  2. int main()
  3. {
  4.     double p = 10, w = 5, s, d, f;

  5.     // 输入路程s,确保s > 0
  6.     while (1)
  7.     {
  8.         printf("请输入路程s(公里):");
  9.         scanf("%lf", &s);
  10.         if (s > 0)
  11.             break;
  12.         else
  13.         {
  14.             printf("请输入大于0的数\n");
  15.             while (getchar() != '\n'); // 清除输入缓冲区
  16.         }
  17.     }

  18.     // 根据路程确定折扣
  19.     if (s < 250)
  20.         d = 0;
  21.     else if (s < 500)
  22.         d = 0.02;
  23.     else if (s < 1000)
  24.         d = 0.05;
  25.     else if (s < 2000)
  26.         d = 0.08;
  27.     else if (s < 3000)
  28.         d = 0.10;
  29.     else
  30.         d = 0.15;

  31.     // 计算运费
  32.     f = p * w * s * (1 - d);
  33.     printf("运费 = %lf\n", f);

  34.     return 0;
  35. }
复制代码


主要修改点:
1. 将 void main() 改为标准写法 int main(),并添加了 return 0
2. 简化了条件判断,直接利用 if-else if 的顺序结构,使代码更清晰。
3. 补充了 s >= 3000 时折扣为 0.15 的情况。
4. 统一在最后计算运费,避免重复代码。
5. 增加了输入提示,用户体验更好。

这样修改后,程序逻辑更完整,且易于维护。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 23:45 | 显示全部楼层
FishC 发表于 2026-1-1 23:39
鱼油的程序基本正确,但存在一些可以改进的地方。主要问题是缺少 s >= 3000 的情况,并且条件判断可以简化 ...

好的,感谢答复~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 23:49 | 显示全部楼层
但求过程001 发表于 2026-01-01 23:45
FishC 发表于 2026-1-1 23:39
鱼油的程序基本正确, ...


不客气!很高兴能帮到你~

程序的关键点在于 if-else if 结构的逻辑顺序和所有情况的覆盖。你原来的思路是对的,主要是补全条件和调整结构。

以后写类似的分段函数或阶梯折扣问题时,都可以参考这种“依次判断、简化条件”的写法。

如果还有其它问题,随时再来问。编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-2 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表