You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用一个循环打印楼梯图案?附现有代码求指导

用单个循环实现楼梯图案打印

完全可以用单个循环实现这个需求。你的原代码问题在于只在每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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:31:24