C语言反向三角形图案绘制问题:输出不符预期求修正
修正代码实现反向数字三角形图案
预期输出
567898765 4567654 34543 232 1
当前错误输出
567898765 45678987654 3456789876543 234567898765432 12345678987654321
问题分析
你的代码核心问题在于数字递增循环(b的循环)固定写到9,递减循环(c的循环)固定从8开始,导致每一行都会完整输出从a到9再到a的序列。实际上每一行的数字范围应该随a缩小:
a=5时,数字从5到9再回到5(符合预期)a=4时,数字应从4到7再回到4,而非到9- 以此类推,每一行的最大数字应为
2*a -1
修正后的代码
#include <stdio.h> int main() { int a, b, c, s; for (a = 5; a >= 1; a--) { // 打印前置空格 for (s = a; s <= 4; s++) { printf(" "); } // 计算当前行的最大数字 int max_num = 2 * a - 1; // 递增序列:从a到max_num for (b = a; b <= max_num; b++) { printf("%d", b); } // 递减序列:从max_num-1到a for (c = max_num - 1; c >= a; c--) { printf("%d", c); } printf("\n"); } return 0; }
代码解释
- 前置空格:保留原逻辑,通过
s循环控制每一行的前置空格数量,实现右对齐效果 - 最大数字计算:新增
max_num变量,用2*a -1计算当前行的峰值数字,确保序列范围随a动态缩小 - 递增序列:从
a开始打印到max_num,完成上升段的数字输出 - 递减序列:从
max_num-1开始递减打印到a,和上升段衔接形成对称结构
内容的提问来源于stack exchange,提问作者Mohammad Ali
相关产品推荐
相关产品推荐

