逻辑错误?
老师说逻辑错误,可我运行了没出错啊#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;
}
题目是什么,和的总数不能超过100000? 夜雨de街灯 发表于 2016-5-4 16:28
题目是什么,和的总数不能超过100000?
题目应该就是捐款的不超过十万接着捐的那个题目,老师让我们找逻辑上的问题! MISSIVERSON 发表于 2016-5-4 16:31
题目应该就是捐款的不超过十万接着捐的那个题目,老师让我们找逻辑上的问题!
最后一次超过十万了,计算出来的平均数并不是十万以内捐款的平均数。
夜雨de街灯 发表于 2016-5-4 16:46
最后一次超过十万了,计算出来的平均数并不是十万以内捐款的平均数。
不懂
MISSIVERSON 发表于 2016-5-4 16:50
不懂
total最后一次超过十万了,然后用它来求十万以内平均捐款不对,所以判断语句位置要调 MISSIVERSON 发表于 2016-5-4 16:50
不懂
如果不是求十万以内捐款平均数,多一次也可以的话,你的逻辑也没错
其实我也不知道是不是这样,求证你老师,如果是这样回复我,给我个答案
其实我也不懂{:10_256:} 夜雨de街灯 发表于 2016-5-4 17:02
如果不是求十万以内捐款平均数,多一次也可以的话,你的逻辑也没错
其实我也不知道是不是这样,求证你老 ...
没答案,老师就让做这道题 把for循环写成do-while吧,然后每次scanf捐款的时候,就++i,再跳去判断while(total>=SUM)是否符合条件。个人认为如果说是逻辑问题,那就是你跳出循环的条件其实就是你满足了sum的值,跟i没有很大的关系,但是你把跳出循环的条件用if+break代替了,虽然没有错误,但是逻辑上的却有点怪 金石201 发表于 2016-5-6 16:02
把for循环写成do-while吧,然后每次scanf捐款的时候,就++i,再跳去判断while(total>=SUM)是否符合条件。个 ...
不太懂,你能详细说说么?
从逻辑的角度来讲,你可以这样想,这个程序是为了解决捐款达到SUM的数目对吧。也就是说,程序达到这个目的的时候,程序就可以结束了。当是你写出来的时候,是用条件语句跳出这个循环体去达到目的,所以主次可能有点颠倒吧。理论上这段代码是没问题的。但是你在for循环中,跳出循环体的判断条件是i<=1000,这种逻辑不是跟原来要解决的问题有点不一样吗?我们要跳出循环体的条件应该是sum达到一定的数目吧?这样的话才更符合逻辑。
页:
[1]