关于C++的一个问题,少了一行输出的,结果居然就不一样?

#include<iostream.h>

const float PI=3.14159;
const int order=8;//阶数
const int N=256;//选取的点数

//注意数组越界问题

float autoC(float data[],int j)//自相关函数(0<=j<=p)
{
int n=j;

float Rij;
while (n<N)
{
Rij+=data[n]*data[n-j];
n++;
}
return Rij;

}

//E是E[i-1],signal为输入信号
float getK(int i,float E,float a[][order+1],float signal[])
//order-1为j最大值,是建立的数组列数最大值。a,E,k数组的第一元素不用
{
float ki,ar=0;

for (int j=1;j<i;j++)
ar+=a[i-1][j]*autoC(signal,(i-j));
ki=(autoC(signal,i)-ar)/E;
return ki;
}

int main(void)

{

float signal[N];//输入已测信号
for (int i=0;i<N;i++)
signal[i]=10*sin(PI*4/N*i);

float E[order+1],k[order+1];
float a[order+1][order+1];
for (int i=0;i<order+1;i++)
{
E[i]=0;
k[i]=0;
for (int j=0;j<order+1;j++) a[i][j]=0;
}

E[0]=autoC(signal,0);
k[1]=autoC(signal,1)/autoC(signal,0);
a[1][1]=k[1];

int i=1;
while (i<order)//order为阶数。
{
E[i]=(1-k[i]*k[i])*E[i-1];
i++;
cout<<i<<endl;//!!!!!!!!!!没有这一行输出结果会NaN ,为什么????????
k[i]=getK(i,E[i-1],a,signal);

a[i][i]=k[i];

for (int j=1;j<i;j++)//i阶的i-1个预测系数
{
a[i][j]=a[i-1][j]-k[i]*a[i-1][i-j];
}

}

cout<<endl<<endl;
for(int i=1;i<order+1;i++)
cout<<a[order][i]<<endl;

}
cout<<i<<endl;//!!!!!!!!!!没有这一行输出结果会NaN ,为什么????????
如果把这一行注释掉,输出就是NaN
没把它注释掉的话,结果正常。

我不知道你用的什么编译器,我用VC++6.0和VS2008都编译过了,要不要那句注释结果都一样 程序还有几个小问题帮你改了

#include<iostream>
#include<math.h>
using namespace std;

const double PI=3.14159;
const int order=8;//阶数
const int N=256;//选取的点数

//注意数组越界问题

float autoC(float data[],int j)//自相关函数(0<=j<=p)
{
int n=j;

float Rij = 0;
while (n<N)
{
Rij+=data[n]*data[n-j];
n++;
}
return Rij;

}
//E是E[i-1],signal为输入信号
float getK(int i,float E,float a[][order+1],float signal[])
//order-1为j最大值,是建立的数组列数最大值。a,E,k数组的第一元素不用
{
float ki,ar=0;

for (int j=1;j<i;j++)
ar+=a[i-1][j]*autoC(signal,(i-j));
ki=(autoC(signal,i)-ar)/E;
return ki;
}
int main(void)
{
float signal[N];//输入已测信号
for (int i=0;i<N;i++)
signal[i]=10*sin(PI*4/N*i);
float E[order+1],k[order+1];
float a[order+1][order+1];
for (int i=0;i<order+1;i++)
{
E[i]=0;
k[i]=0;
for (int j=0;j<order+1;j++) a[i][j]=0;
}
E[0]=autoC(signal,0);
k[1]=autoC(signal,1)/autoC(signal,0);
a[1][1]=k[1];
int i=1;
while (i<order)//order为阶数。
{
E[i]=(1-k[i]*k[i])*E[i-1];
i++;
cout<<i<<endl;//!!!!!!!!!!没有这一行输出结果会NaN ,为什么????????
k[i]=getK(i,E[i-1],a,signal);
a[i][i]=k[i];
for (int j=1;j<i;j++)//i阶的i-1个预测系数
{
a[i][j]=a[i-1][j]-k[i]*a[i-1][i-j];
}
}
cout<<endl<<endl;
for(int i=1;i<order+1;i++)
cout<<a[order][i]<<endl;
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-16
情况说的太模糊了。。。。
相似回答