MISSIVERSON 发表于 2016-5-4 16:06:43

逻辑错误?

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

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

夜雨de街灯 发表于 2016-5-4 16:28:01

题目是什么,和的总数不能超过100000?

MISSIVERSON 发表于 2016-5-4 16:31:04

夜雨de街灯 发表于 2016-5-4 16:28
题目是什么,和的总数不能超过100000?

题目应该就是捐款的不超过十万接着捐的那个题目,老师让我们找逻辑上的问题!

夜雨de街灯 发表于 2016-5-4 16:46:26

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

最后一次超过十万了,计算出来的平均数并不是十万以内捐款的平均数。

MISSIVERSON 发表于 2016-5-4 16:50:14

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

不懂

夜雨de街灯 发表于 2016-5-4 16:59:54

MISSIVERSON 发表于 2016-5-4 16:50
不懂

total最后一次超过十万了,然后用它来求十万以内平均捐款不对,所以判断语句位置要调

夜雨de街灯 发表于 2016-5-4 17:02:58

MISSIVERSON 发表于 2016-5-4 16:50
不懂

如果不是求十万以内捐款平均数,多一次也可以的话,你的逻辑也没错
其实我也不知道是不是这样,求证你老师,如果是这样回复我,给我个答案
其实我也不懂{:10_256:}

MISSIVERSON 发表于 2016-5-5 17:03:47

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

没答案,老师就让做这道题

金石201 发表于 2016-5-6 16:02:28

把for循环写成do-while吧,然后每次scanf捐款的时候,就++i,再跳去判断while(total>=SUM)是否符合条件。个人认为如果说是逻辑问题,那就是你跳出循环的条件其实就是你满足了sum的值,跟i没有很大的关系,但是你把跳出循环的条件用if+break代替了,虽然没有错误,但是逻辑上的却有点怪

MISSIVERSON 发表于 2016-5-6 16:58:50

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

不太懂,你能详细说说么?

金石201 发表于 2016-5-6 19:55:43

从逻辑的角度来讲,你可以这样想,这个程序是为了解决捐款达到SUM的数目对吧。也就是说,程序达到这个目的的时候,程序就可以结束了。当是你写出来的时候,是用条件语句跳出这个循环体去达到目的,所以主次可能有点颠倒吧。理论上这段代码是没问题的。但是你在for循环中,跳出循环体的判断条件是i<=1000,这种逻辑不是跟原来要解决的问题有点不一样吗?我们要跳出循环体的条件应该是sum达到一定的数目吧?这样的话才更符合逻辑。
页: [1]
查看完整版本: 逻辑错误?