我正在尝试使用二维数组在 C 中绘制帕斯卡三角形。
我认为出了问题与我读取或写入数组的方式有关。当我在(第一个)for 循环中查找数字时,我正在做的事情似乎有效,但在它之外不起作用?
我是在用 Python 编写一些代码之后才想到这个的,并且是 C 的新手
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int n, i , j;
int x[n][n];
n = 4;
for (j=0; j<n; j++)
{
for(i=0; i<n; i++)
{
if (i == 0)
{
x[0][j] = 1;
printf("\n(%d, %d)", i,j);
}
if (i != 0)
{
x[i][j] = 0;
}
printf("%d", x[i][j]);
}
}
printf("\n\n(x[0][0]) %d", x[0][0]);
printf("\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < (n); j++)
{
if (j == 0)
{
printf("\n%d ", x[i][j]);
}
else
{
x[i][j] = x[i-1][j-1] + x[i][j-1];
printf("%d ", x[i ][j ]);
}
}
}
printf("\n");
return;
}
任何帮助将不胜感激
最佳答案
我在第二组循环中看到的一个关键问题是以下行:
x[i][j] = x[i-1][j-1] + x[i][j-1];
如果 j == 0,则可以避免这种情况,但如果 i == 0,则不能。例如,当 j == 1 但 i == 0 时,您将尝试访问数组中 x[-1][ 处的位置0] 位于数组分配的内存之外。
我认为您特别想将第二组循环更改为如下所示:
for(i = 0; i < n; i++)
{
for(j = 0; j < (n); j++)
{
if ((i == 0) || (j == 0))
{
printf("\n%d ", x[i][j]);
}
else
{
x[i][j] = x[i-1][j-1] + x[i][j-1];
printf("%d ", x[i ][j ]);
}
}
}
请注意,内部 if 条件已从 if (j == 0) 更改为 if ((i == 0) || (j == 0)) 以防止索引超出数组范围。
关于c - 我想知道我在 C 中如何错误地读取(或写入)数组中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770663/