【问题标题】:Pascal half pyramid using array使用数组的帕斯卡半金字塔
【发布时间】:2020-04-06 19:42:53
【问题描述】:

我是新手,我的问题是我无法使用数组打印帕斯卡半金字塔。 我知道如何在没有数组的情况下使用此代码:

int i, j;
for (i = 1; i <= 5; ++i) {
  for (j = 1; j <= i; ++j) {
    printf("%d ", j);
  }
  printf("\n");
}

当我尝试使用具有相同逻辑的数组来执行此操作时,我无法将其打印出来:

#define N 11
int main() {
  int pin[N][N];
  for (int i = 1; i < 5; i++) {
    for (int j = 1; j < i; j++) {
      printf("%d", pin[i][j]);
    }
    printf("\n");
  }
}

我认为这是我的错 --> printf("%d" , pin[i][j]); 但我想不通。

【问题讨论】:

  • 打印时pin[i][j]会有什么价值?
  • @vapan 你的代码不使用数组也是错误的,先看看pascal's triangle是什么。
  • 除了不初始化矩阵之外,请注意数组索引在 C(以及所有类似 C 的语言)中是从零开始的,这意味着您的矩阵可以正确访问索引 [0][0] 到 @987654327 @。现在您正在访问(未初始化的)索引[1][1][4][4]。如果您要拥有一个 5x5 矩阵,请使用 pin[5][5] 声明它并使用 for (int i = 0; i &lt; 5; i++)
  • 你想要一个帕斯卡三角形还是第一个程序的输出?
  • 对不起,正确的是“帕斯卡半金字塔”,我以为帕斯卡三角形是一样的。

标签: c arrays loops


【解决方案1】:

在您的第二个程序中,数组pin 中没有存储任何值。一个简单的解决方案是首先存储数据,同样的方法,你在第一个程序中打印它,在数组中,然后打印它。

在这个循环中,我存储在第一个程序中打印的数据,在 pin 中,唯一的一点是因为数组索引从 0 开始,所以您也从 0 开始循环并改用 j++ j:

    int pin[N][N];
    //store data
    for (int i = 0; i < 5; ++i) {
        for (int j = 0; j < i+1 ; ++j)
        {
            pin[i][j] = j + 1;
        }
    }

这是带有打印数据的完整代码:

#define N 11
int main() {
    int pin[N][N];
    //store data
    for (int i = 0; i < 5; ++i) {
        for (int j = 0; j <= i; ++j)
        {
            pin[i][j] = j + 1;
        }
    }
    //print data
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ", pin[i][j]);
        }
        printf("\n");
    }
}

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2021-11-28
    • 2023-01-26
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    相关资源
    最近更新 更多