C - 分段故障核心倾倒在隐士中


#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 为阵列保留空间。

相关内容

  • 没有找到相关文章

最新更新