{
for(ii=0;ii<=100;ii++) //ii表示数据库中有ii行数据
{
ave[i][ii]=0; //设置初始平均值为0
tvap[i][ii]=0; //设置初始方差的平方为0
}
Total[i]=0; //设置统计各列中非0数据的数组为0
}
p=0;
m_pSet->Move(57);
for(ii=1;ii<=2;ii++) //读取前两行数据
{
p++;
data[1][p]=m_pSet->m_...;
...
data[15][p]=m_pSet->m_...;
m_pSet->MoveNext(); //读取15列数据
for(i=1;i<=15;i++)
{
if(data[i][p]>0)
{
Total[i]++; //当data[i][p]非0时,Total[i]累计一次
tave[i][p]=data[i][p]-ave[i][p-1];
ave[i][p]=ave[i][p-1]+tave[i][p]/Total[i]; //递推计算平均值
tvap[i][p]=tvap[i][p-1]+pow(tave[i][p],2)/Total[i];
vap[i][p]=sqrt((1-1/Total[i])*tave[i][p]); //计算方差
}
else
{
ave[i][p]=ave[i][p-1]; //当data[i][p]=0时,平均值选取上一次计算所得
vap[i][p]=vap[i][p-1]; //当data[i][p]=0时,方差选取上一次计算所得
}
}
这个数据库中,除了第二行数据中data[8][2]、data[9][2]、data[10][2]为0,其他值都为正数。
但是单步跟踪的时候发现
在i=1次循环时,ave[15][1]被赋值为1
在i=2次循环时,ave[15][2]被赋值为1,而之前已经设置ave[i][ii]=0
并且到ii=2的循环时,Total[1]变成了1+ave[15][1]的值,而非预想中的2.这个程序为什么会出现这样的问题?
3 个解决方案
#1
注意数组下标是从0开始的
ave[15][1]指的是第16行的第二个元素
然后程序开头的初始化:
for(i=1;i<=15;i++)//你确定ave有16行?
for(ii=0;ii<=100;ii++) //你确定ave有101列?
不知道我说的正不正确,总之我很晕……
ave[15][1]指的是第16行的第二个元素
然后程序开头的初始化:
for(i=1;i<=15;i++)//你确定ave有16行?
for(ii=0;ii<=100;ii++) //你确定ave有101列?
不知道我说的正不正确,总之我很晕……
#2
是数组的问题,一个是从0开始的一个是从1开始的
所以数值移位了
而且算式中间写错了一个
所以结果一直是错的
谢谢 linsj585
所以数值移位了
而且算式中间写错了一个
所以结果一直是错的
谢谢 linsj585
#3
呵,不用客气,找到错误就好
#1
注意数组下标是从0开始的
ave[15][1]指的是第16行的第二个元素
然后程序开头的初始化:
for(i=1;i<=15;i++)//你确定ave有16行?
for(ii=0;ii<=100;ii++) //你确定ave有101列?
不知道我说的正不正确,总之我很晕……
ave[15][1]指的是第16行的第二个元素
然后程序开头的初始化:
for(i=1;i<=15;i++)//你确定ave有16行?
for(ii=0;ii<=100;ii++) //你确定ave有101列?
不知道我说的正不正确,总之我很晕……
#2
是数组的问题,一个是从0开始的一个是从1开始的
所以数值移位了
而且算式中间写错了一个
所以结果一直是错的
谢谢 linsj585
所以数值移位了
而且算式中间写错了一个
所以结果一直是错的
谢谢 linsj585
#3
呵,不用客气,找到错误就好