C语言实现金字塔形数字图案遇问题:输出与预期不符求解决
修正金字塔形数字图案的C语言代码
你需要实现的金字塔形数字图案预期输出如下:
1 1 2 1 1 2 3 2 1
原代码运行后输出不符合预期,实际结果为:
1 333 55555
原代码问题分析
- 数字输出逻辑错误:第二个
for循环固定输出2*i-1,导致每行都是相同数字,无法生成从1递增到当前行号再递减回1的序列。 - 排版格式缺失:未控制数字间的间距,也未正确计算每行前置空格数,导致金字塔错位。
修正后的代码
#include<stdio.h> int main() { int n, i, j, k; printf("Enter the number of lines "); scanf("%d", &n); for(i = 1; i <= n; i++) { // 打印前置空格,保证金字塔居中 for(j = 1; j <= 3*(n - i); j++) printf(" "); // 打印1到当前行号的递增序列 for(k = 1; k <= i; k++) printf("%3d", k); // 打印当前行号-1到1的递减序列 for(k = i - 1; k >= 1; k--) printf("%3d", k); printf("\n"); } return 0; }
代码说明
- 前置空格:通过
3*(n-i)计算每行需要的前置空格数,配合%3d的数字格式,确保整体排版居中。 - 数字序列:拆分为两个循环,先递增到当前行号,再递减回1,完全匹配预期的图案结构。
- 格式控制:
%3d让每个数字占3个字符,自动补充空格,保证数字间的间距一致,形成整齐的金字塔。
内容的提问来源于stack exchange,提问作者Vedant Laad
相关产品推荐
相关产品推荐

