鱼C论坛

 找回密码
 立即注册
查看: 2080|回复: 6

[已解决]神之谜题

[复制链接]
发表于 2019-7-29 18:15:04 | 显示全部楼层 |阅读模式
5鱼币

  1. #include<stdio.h>

  2. int main()
  3. {
  4.         float w,s,p;
  5.         float f;
  6.         printf("请输入吨数与公里数和运费(单价):");
  7.         scanf("%d %d %d",&w,&s,&p);
  8.        
  9.         if(s>=250 && s<500){
  10.                 p = p*0.99;
  11.                 f = p*w*s;
  12.         }else if(s>=500 && s<1000){
  13.                 p = p*0.97;
  14.                 f = p*w*s;
  15.         }else if(s>=1000 && s<2000){
  16.                 p = p*0.95;
  17.                 f = p*w*s;
  18.         }else if(s>=2000 && s<3000){
  19.                 p = p*0.98;
  20.                 f = p*w*s;
  21.         }else if(s>=3000){
  22.                 p = p*0.9;
  23.                 f = p*w*s;
  24.         }
  25.        
  26.         printf("总价是: %.2f\n",f);
  27.        
  28.         return 0;
  29. }
复制代码


为甚麽改来改去都是0.00啊...
求助,谢谢
最佳答案
2019-7-29 18:15:05
本帖最后由 df3379 于 2019-7-30 14:29 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         do
  5.         {
  6.         float w,s,p;
  7.         double f;
  8.         printf("请输入吨数与公里数和运费(单价):");
  9.         scanf("%f %f %f",&w,&s,&p);
  10.         
  11.         if(s>0 && s<249){
  12.                f = p*w*s;

  13.        }else if(s>=250 && s<500){
  14.                 p = p*0.99;
  15.                 f = p*w*s;
  16.                
  17.         }else if(s>=500 && s<1000){
  18.                 p = p*0.97;
  19.                 f = p*w*s;
  20.                        
  21.         }else if(s>=1000 && s<2000){
  22.                 p = p*0.95;
  23.                 f = p*w*s;
  24.                        
  25.         }else if(s>=2000 && s<3000){
  26.                 p = p*0.98;
  27.                 f = p*w*s;
  28.                                
  29.         }else if(s>=3000){
  30.                 p = p*0.9;
  31.                 f = p*w*s;
  32.                                
  33.         }
  34.         printf("\n重量为:%.1f吨\n\n里程数为:%.1f公里\n\n运费为:%.2f元/公里\n\n",w,s,p);
  35.         printf("本次运输总价是: %.2f元\n\n=========================分隔线==================\n\n",f);
  36.         }
  37.             while('%f');
  38.         return 0;
  39. }
复制代码



                               
登录/注册后可看大图


变量定义时修改一下就行了!
主要问题在f变量修改为双精度。结果为单精度会出现数据溢出.
低于250公里的选项没有,补上就好。

希望设我为最佳答案哟

最佳答案

查看完整内容

变量定义时修改一下就行了! 主要问题在f变量修改为双精度。结果为单精度会出现数据溢出. 低于250公里的选项没有,补上就好。 希望设我为最佳答案哟
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 18:15:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 df3379 于 2019-7-30 14:29 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         do
  5.         {
  6.         float w,s,p;
  7.         double f;
  8.         printf("请输入吨数与公里数和运费(单价):");
  9.         scanf("%f %f %f",&w,&s,&p);
  10.         
  11.         if(s>0 && s<249){
  12.                f = p*w*s;

  13.        }else if(s>=250 && s<500){
  14.                 p = p*0.99;
  15.                 f = p*w*s;
  16.                
  17.         }else if(s>=500 && s<1000){
  18.                 p = p*0.97;
  19.                 f = p*w*s;
  20.                        
  21.         }else if(s>=1000 && s<2000){
  22.                 p = p*0.95;
  23.                 f = p*w*s;
  24.                        
  25.         }else if(s>=2000 && s<3000){
  26.                 p = p*0.98;
  27.                 f = p*w*s;
  28.                                
  29.         }else if(s>=3000){
  30.                 p = p*0.9;
  31.                 f = p*w*s;
  32.                                
  33.         }
  34.         printf("\n重量为:%.1f吨\n\n里程数为:%.1f公里\n\n运费为:%.2f元/公里\n\n",w,s,p);
  35.         printf("本次运输总价是: %.2f元\n\n=========================分隔线==================\n\n",f);
  36.         }
  37.             while('%f');
  38.         return 0;
  39. }
复制代码



                               
登录/注册后可看大图


变量定义时修改一下就行了!
主要问题在f变量修改为双精度。结果为单精度会出现数据溢出.
低于250公里的选项没有,补上就好。

希望设我为最佳答案哟
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-29 18:17:00 | 显示全部楼层
08行代码应该是-->%f
已经改了,但依然没用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 20:13:50 | 显示全部楼层
只改那个不够的。要这样写:
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         float w=0,s=0,p=0;
  5.         float f=0;
  6.         printf("请输入吨数与公里数和运费(单价):");
  7.         scanf("%f %f %f",&w,&s,&p);
  8.         
  9.         if(s>=250 && s<500){
  10.                 p = p*0.99;
  11.                 f = p*w*s;
  12.         }else if(s>=500 && s<1000){
  13.                 p = p*0.97;
  14.                 f = p*w*s;
  15.         }else if(s>=1000 && s<2000){
  16.                 p = p*0.95;
  17.                 f = p*w*s;
  18.         }else if(s>=2000 && s<3000){
  19.                 p = p*0.98;
  20.                 f = p*w*s;
  21.         }else if(s>=3000){
  22.                 p = p*0.9;
  23.                 f = p*w*s;
  24.         }else{
  25.                 p = p*0.8;
  26.                 f = p*w*s;
  27.         }
  28.         
  29.         printf("总价是: %f\n",f);
  30.         
  31.         return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 09:54:37 | 显示全部楼层
s<250 的情况没考虑,应该是你输入的s小于250,所以结果总是0.00
其他应该没什么问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 11:23:57 | 显示全部楼层
本帖最后由 Neverturnback 于 2019-7-30 11:35 编辑

可能输入s小于250了所以才会总是0.00,我编译运行过了,第二个数是250以上时,其它数不是0时都有结果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 11:33:51 | 显示全部楼层
总之先要赋初值,只要不是在函数内定义的,都要赋初值,不然它的值就是随机的。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 13:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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