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

C语言循环练习题求助:实现宽n高2n-1的星号三角形输出函数

解决C语言三角形输出问题的思路与代码

嘿,我刚看到你在Wikibooks学C语言时卡在了这个三角形输出的练习上——我之前练基础循环的时候也折腾过类似的题,给你梳理下清晰的思路和可行的代码方案吧!

首先明确需求:当宽度为n时,三角形总高度是2n-1,也就是先从1个*递增到n个,再递减回1个*(比如n=3时,会输出5行:1个*、2个*、3个*、2个*、1个*)。

方案一:拆分两段循环(直观易懂)

最容易理解的方式是把三角形分成上升段和下降段,分别用两个外层循环处理:

#include <stdio.h>

void printTriangle(int n) {
    // 上升段:从1个*到n个*,共n行
    for (int i = 1; i <= n; i++) {
        // 内层循环输出当前行的*
        for (int j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n"); // 每行结束换行
    }
    // 下降段:从n-1个*到1个*,共n-1行
    for (int i = n-1; i >= 1; i--) {
        for (int j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n");
    }
}

int main() {
    int n;
    printf("请输入三角形宽度n:");
    scanf("%d", &n);
    printTriangle(n);
    return 0;
}

代码解释:

  • 第一个外层循环i从1到n,控制上升段的行数,每行输出i个*;
  • 第二个外层循环i从n-1递减到1,控制下降段的行数,每行输出i个*;
  • 两段循环的总行数是n + (n-1) = 2n-1,完美符合高度要求。

方案二:单循环处理(更紧凑)

如果你想让代码更简洁,可以用一个外层循环覆盖所有2n-1行,通过判断当前行的位置来计算需要输出的*数量:

#include <stdio.h>

void printTriangle(int n) {
    int totalRows = 2 * n - 1;
    for (int row = 0; row < totalRows; row++) {
        int starCount;
        // 前n行是上升段,后n-1行是下降段
        if (row < n) {
            starCount = row + 1;
        } else {
            starCount = 2 * n - row - 1;
        }
        // 输出对应数量的*
        for (int j = 0; j < starCount; j++) {
            printf("*");
        }
        printf("\n");
    }
}

int main() {
    int n;
    printf("请输入三角形宽度n:");
    scanf("%d", &n);
    printTriangle(n);
    return 0;
}

常见坑点提醒

你之前遇到问题大概率是这几个原因:

  • 总循环行数算错:比如只写了n行,漏掉了后面的n-1行;
  • 下降段循环起始值错误:不小心从n开始,导致重复输出一次n个*;
  • 内层循环的计数逻辑搞混:比如把输出*的数量和行号的对应关系写错。

你可以对照上面的代码检查自己的实现,应该就能找到问题所在啦!

内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:28:45