#include<stdio.h>
int main()
{
int n, i, j;
float x[10] = { 0 }, fx[10] = { 0 }, f1x[10] = { 0 }, z[20] = { 0 }, q[20][20] = { 0 };
printf("Enter the number of initial valuesn");
scanf("%d", &n);
printf("Enter the x valuesn");
for (i = 0; i < n; i++);
scanf("%f", &x[i]);
printf("Enter the fx valuesn");
for (i = 0; i < n; i++);
scanf("%f", &fx[i]);
printf("Enter the f1x valuesn");
for (i = 0; i < n; i++);
scanf("%f", &f1x[i]);
for (i = 0; i < n; i++)
{
z[2 * i] = x[i];
z[(2 * i) + 1] = x[i];
q[2 * i][0] = fx[i];
q[(2 * i) + 1][0] = fx[i];
q[(2 * i) + 1][1] = f1x[i];
if (i != 0)
{
q[2 * i][1] = (q[2 * i][0] - q[(2 * i) - 1][0]) / (z[2 * i] - z[(2 * i) - 1]);
}
}
for (i = 2; i < (2 * n) + 1; i++)
{
for (j = 2; j < i; i++)
{
q[i][j] = (q[i][j - 1] - q[i - 1][j - 1]) / (z[i] - z[i - j]);
}
}
printf("nthe resultant matrix isn");
for (i = 0; i < (2 * n) + 2; i++)
printf(" %f ", q[i][i]);
}
当我运行程序并获取初始值的数量(例如 3(时,它要求 1 x,然后要求 fx 和 f1x 并给出分割错误.
内部循环中的增量值错误:
for (i = 2; i<(2 * n) + 1; i++)
{
for (j = 2; j<i; i++) <- this should be j
从而访问超出范围的内存。
如果您使用正确的缩进、代码格式并在选择/循环语句后始终使用大括号,您很快就会发现问题在于您在每个 for 循环之后键入的分号。
它根本不安全:
int n;
float x[10];
printf("Enter the number of initial valuesn");
scanf("%d",&n);
printf("Enter the x valuesn");
for(i=0;i<n;i++)
{
scanf("%f",&x[i]);
}
如果用户输入50
for n
,您将在循环中得到一个分割错误,因为x
只有10
值的空间。应考虑使用 malloc
为阵列保留空间。