如何仅用一个循环打印楼梯图案?附现有代码求指导
用单个循环实现楼梯图案打印
完全可以用单个循环实现这个需求。你的原代码问题在于只在每4个字符后换行加空格,但没有根据行号调整每行的空格和星号分布,导致输出的是对齐的星号而非楼梯。
修正后的代码(以4行递减楼梯为例)
#include <stdio.h> int main() { int total_chars = 16; // 4行×4列的总字符数 int row_length = 4; for (int i = 0; i < total_chars; i++) { int row = i / row_length; int col = i % row_length; // 列号小于(总行数-1-行号)时输出空格,其余位置输出* if (col < (row_length - 1 - row)) { printf(" "); } else { printf("*"); } // 每行末尾输出换行符 if (col == row_length - 1) { printf("\n"); } } return 0; }
代码逻辑说明
- 用
total_chars控制总打印字符数,row_length定义每行的字符数量。 - 通过
i / row_length计算当前所在行号,i % row_length计算当前行内的列位置。 - 根据行号动态调整空格和星号的位置:第
row行的前(row_length -1 - row)个位置输出空格,剩余位置输出星号,形成楼梯递减效果。 - 当列号到达每行末尾时,自动换行。
如果需要递增楼梯(第一行1个*,第四行4个*),只需修改判断条件为col >= row,代码如下:
#include <stdio.h> int main() { int total_chars = 16; int row_length = 4; for (int i = 0; i < total_chars; i++) { int row = i / row_length; int col = i % row_length; if (col >= row) { printf("*"); } else { printf(" "); } if (col == row_length - 1) { printf("\n"); } } return 0; }
内容的提问来源于stack exchange,提问作者LogicExpression
相关产品推荐
相关产品推荐

