小弟我写了一个求方差的C程序,但是在输完数据时,程序就出错退出,希望大家看一下哪里出错了!多谢

我写了一个求方差的C程序,但是在输完数据时,程序就出错退出,希望大家看一下哪里出错了!谢谢
本帖最后由 yjx879735513 于 2014-01-21 12:52:06 编辑
#include<stdio.h>
#define Max 1000
int number[Max];

int main(void)
{
int i = 0, sum = 0, j;
double s = 0, average = 0;
while(scanf("%d", &number[i]))
{
sum += number[i];
}
average = sum*1.0/(i-1);
for(j = 0; j < i; ++j)
{
s += (number[j] - average)*(number[j] - average);
}
s = (s/(1/j))*(s/(1/j));
printf("%.3lf\n", s);
return 0;
}

------解决方案--------------------
1.i一直没加,输入永远放在第一个数组,也就是i一直是0
2.所以导致j那个循环不会进去,直接发生除0异常,程序肯定crash了

可能隐患:
另外你这些除法要判断下是否可能发生除0的问题,比如
average = sum*1.0/(i-1);

------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

------解决方案--------------------
http://sourceware.org/gdb/current/onlinedocs/gdb/