C 奇怪输出中的帕斯卡三角形

Pascal's triangle in C weird output

我正在尝试编写一个程序来显示 Pascal 的三角形直到用户输入的级别数。我们不允许使用阶乘法。我当前的代码是这样的:

#include <stdio.h>

void trianglePrint(const int numLevels);

int main() {
  int numLevels;

  printf("Please enter how many levels of Pascal's Triangle you would 
  like to see: ");
  scanf("%d", &numLevels);

  trianglePrint(numLevels);


  return 0;
}

void trianglePrint(const int numLevels) {
  int pascalTriangle[28][28];
  int i, j;

  for (i = 0; i < numLevels; ++i) {
    for (j = 0; j <= i; ++j) {
      if (i == 0 || i == 1 || j == 0 || j == numLevels) {
        pascalTriangle[i][j] = 1;
        printf("%d ", pascalTriangle[i][j]);
      }
      else {
        pascalTriangle[i][j] = pascalTriangle[i - 1][j - 1] + 
        pascalTriangle[i - 1][j];
        printf("%d ", pascalTriangle[i][j]);
      }
    }
    printf("\n");
  }

}

我们最多只能达到 28 个级别,这就是为什么我在两个维度上都使用大小为 28 的数组的原因。
这适用于大约 6 个三角形级别,但对于更大的级别,它会给出非常大的整数。我认为这是由于未初始化的数组造成的,但我不确定。有谁知道错误在哪里?

问题是您在 else 子句中使用它计算 pascalTriangle[i][j] 之前没有设置 pascalTriangle[i - 1][j]

如果你改变

if (i == 0 || i == 1 || j == 0 || j == numLevels)

if (i == 0 || i == 1 || j == 0 || j == i)

(感谢 Melpomene),然后所有对数组的访问都将在已经初始化的成员上结束。

这解决了奇怪的数字。

输出:

Please enter how many levels of Pascal's Triangle you would like to see: 6
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

Process returned 0 (0x0)   execution time : 2.264 s
Press any key to continue.

注:
初始化数组也是一个明智的预防措施。您可以使用有助于发现错误的值进行初始化,而不是隐藏它,例如42.

试试代码

void Pascal(int n)
    {
      int arr[n][n]; 


      for (int i = 0; i < n; i++)
      {

        for (int j = 0; j <= i; j++)
        {
          // First and last values in every row are 1
          if (i == j || j == 0)
               arr[i][j] = 1;
          else // Other values are sum of values just above and left of above
               arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
          printf("%d ", arr[i][j]);
        }
        printf("\n");
      }
    }