C语言使用数组实现帕斯卡三角输出错误如何解决
问题修复说明
核心问题点
- 数组定义不合法:你初始声明的
static int par[0], rar[0]是长度为0的数组,C语言不允许使用0长度静态数组,后续写的par[r], rar[r]是逗号表达式,不会重新创建指定长度的数组,会触发数组越界访问,属于未定义行为。 - 输出逻辑错误:你将当前行的计算结果存在
rar数组中,但打印的是存储上一行数据的par数组,导致结果异常,这是你得到错误输出的直接原因。 - 数组同步逻辑冗余:不需要每次遍历全长度数组同步,只需要同步到当前行的最大索引即可。
修正后完整代码
#include <stdio.h> int main() { int r, i, j; printf("帕斯卡三角生成器\n-----------------\n请输入要生成的行数:"); scanf("%d", &r); // 采用C99支持的可变长度数组定义,若编译器不支持可改用malloc动态分配 int par[r], rar[r]; // 数组初始化 for(i = 0; i < r; i++){ par[i] = 0; rar[i] = 0; } for(i = 0; i < r; i++){ for(j = 0; j <= i; j++){ if(j == 0 || j == i) rar[j] = 1; else rar[j] = par[j] + par[j - 1]; // 直接打印当前行计算结果 printf("%d ", rar[j]); } printf("\n"); // 同步当前行数据到par数组,供下一行计算使用 for(int k = 0; k <= i; k++){ par[k] = rar[k]; } } return 0; }
测试效果
输入4时输出如下:
1 1 1 1 2 1 1 3 3 1
内容的提问来源于stack exchange,提问作者KAON
相关产品推荐
相关产品推荐

