我必须编写一个程序来减轻我们为物理实验室工作寻找线性曲线拟合的负担。 我的程序正确计算sigma xi和sigma(xi ^ 2)。我使用类似的代码来计算其余的几个值。 但之后,它将所有值显示为0。 我无法在其余部分发现任何错误,因为我之前使用的代码相同。
我正在附加cpp文件。Cpp file here
样品部分给出值0
float * yl;
yl= new float[N];
cout << "Enter values for Y (total "<<N<<")\n"<<endl;
for(j=1;j<N+1;j++)
{
cin >> yl[i];
}
sigyi=0;
for(o=1;o<N+1;o++)
{
sigyi=sigyi+yl[o];
}
但是这个正常工作
float * xl;
xl= new float[N];
cout << "Enter values for X (total "<<N<<")\n"<<endl;
for(i=1;i<N+1;i++)
{
cin >> xl[i];
}
sigxi=0;
for(l=1;l<N+1;l++)
{
sigxi=sigxi+xl[l];
}
请帮助我。
答案 0 :(得分:1)
首先,您发布的代码段都不正确。工作的外观是不够的。代码在合法的边界之外访问,而在C ++中,这意味着任何事情都可能随时发生。它有时可能会起作用,有时也可能不起作用。
然而,第一个片段可能看起来不起作用的最直接原因是,当您将循环声明切换为使用i
时,您错误地重用了索引j
:
for(j=1;j<N+1;j++) // <--- j
{
cin >> yl[i]; // <--- i
}
这是预先设定循环索引是不好的做法的原因之一。您应该始终在循环中声明循环变量。如果你这样做了,那么你在i
循环中意外使用的外部范围内就不会有任何j
。