鱼C论坛

 找回密码
 立即注册
查看: 2480|回复: 10

逻辑错误?

[复制链接]
发表于 2016-5-4 16:06:43 | 显示全部楼层 |阅读模式

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

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

x
老师说逻辑错误,可我运行了没出错啊
  1. #include <stdio.h>
  2. #define SUM 100000
  3. int main()
  4. {  float amount,aver,total;   int i;
  5.     for (i=1,total=0;i<=1000;i++)                     
  6.    { printf("please enter amount:");
  7.       scanf("%f",&amount);
  8.       total= total+amount;                        
  9.       if (total>=SUM) break;                              
  10.    }
  11.    aver=total / i ;

  12. printf("num=%d\naver=%10.2f\n",i,aver);            
  13.    return 0;
  14. }

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-4 16:28:01 | 显示全部楼层
题目是什么,和的总数不能超过100000?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-4 16:31:04 | 显示全部楼层
夜雨de街灯 发表于 2016-5-4 16:28
题目是什么,和的总数不能超过100000?

题目应该就是捐款的不超过十万接着捐的那个题目,老师让我们找逻辑上的问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-4 16:46:26 | 显示全部楼层
MISSIVERSON 发表于 2016-5-4 16:31
题目应该就是捐款的不超过十万接着捐的那个题目,老师让我们找逻辑上的问题!

最后一次超过十万了,计算出来的平均数并不是十万以内捐款的平均数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-4 16:50:14 | 显示全部楼层
夜雨de街灯 发表于 2016-5-4 16:46
最后一次超过十万了,计算出来的平均数并不是十万以内捐款的平均数。

不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-4 16:59:54 | 显示全部楼层

total最后一次超过十万了,然后用它来求十万以内平均捐款不对,所以判断语句位置要调
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-4 17:02:58 | 显示全部楼层

如果不是求十万以内捐款平均数,多一次也可以的话,你的逻辑也没错
其实我也不知道是不是这样,求证你老师,如果是这样回复我,给我个答案
其实我也不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 17:03:47 | 显示全部楼层
夜雨de街灯 发表于 2016-5-4 17:02
如果不是求十万以内捐款平均数,多一次也可以的话,你的逻辑也没错
其实我也不知道是不是这样,求证你老 ...

没答案,老师就让做这道题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-6 16:02:28 | 显示全部楼层
把for循环写成do-while吧,然后每次scanf捐款的时候,就++i,再跳去判断while(total>=SUM)是否符合条件。个人认为如果说是逻辑问题,那就是你跳出循环的条件其实就是你满足了sum的值,跟i没有很大的关系,但是你把跳出循环的条件用if+break代替了,虽然没有错误,但是逻辑上的却有点怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-6 16:58:50 | 显示全部楼层
金石201 发表于 2016-5-6 16:02
把for循环写成do-while吧,然后每次scanf捐款的时候,就++i,再跳去判断while(total>=SUM)是否符合条件。个 ...

不太懂,你能详细说说么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-6 19:55:43 | 显示全部楼层
从逻辑的角度来讲,你可以这样想,这个程序是为了解决捐款达到SUM的数目对吧。也就是说,程序达到这个目的的时候,程序就可以结束了。当是你写出来的时候,是用条件语句跳出这个循环体去达到目的,所以主次可能有点颠倒吧。理论上这段代码是没问题的。但是你在for循环中,跳出循环体的判断条件是i<=1000,这种逻辑不是跟原来要解决的问题有点不一样吗?我们要跳出循环体的条件应该是sum达到一定的数目吧?这样的话才更符合逻辑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 05:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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