使用for循环编写打印空心数字图案序列的C程序
解决空心数字图案的C程序编写及代码调试
原代码的问题
- 外层循环变量更新错误:
for (i = 1; i <= a + 1; a++)中误用a++替代i++,会导致循环无法正常终止,且循环次数完全不符合需求。 - 多层嵌套循环逻辑与目标图案无关,当前代码会重复打印数字序列,无法实现空心效果。
正确实现代码
#include <stdio.h> int main() { int a; scanf("%d", &a); int total = a + 1; // 总数字个数,输入5时对应6个数字 // 打印顶部连续数字行 for (int i = 1; i <= total; i++) { printf("%d", i); } printf("\n"); // 打印中间空心行 for (int i = 2; i <= a; i++) { // 打印行首数字 printf("%d", i); // 打印中间空格,数量为总数字数减2(去掉首尾两个数字的位置) for (int j = 0; j < total - 2; j++) { printf(" "); } // 打印行尾数字,从顶部序列末尾往前对应位置取值 printf("%d\n", total - (i - 1)); } // 打印底部倒序连续数字行 for (int i = total; i >= 1; i--) { printf("%d", i); } printf("\n"); return 0; }
代码逻辑说明
- 顶部行:通过循环从1遍历到
a+1,打印连续递增的数字序列。 - 中间空心行:
- 循环范围从2到
a,对应输入5时的2-5行。 - 每行开头打印当前行号
i,中间填充足够空格保证空心效果,结尾打印与行首对称的数字(即顶部序列末尾往前数第i-1个数字)。
- 循环范围从2到
- 底部行:通过循环从
a+1倒序遍历到1,打印连续递减的数字序列。
测试示例
输入:5
输出:
123456 2 5 3 4 4 3 5 2 654321
内容的提问来源于stack exchange,提问作者raghul s
相关产品推荐
相关产品推荐

