C++ 实例 – 创建各类三角形图案(详细教程)

C++ 实例 – 创建各类三角形图案

在学习 C++ 的过程中,你可能已经掌握了基本的变量、循环和条件语句。接下来,真正让你感受到编程魅力的,往往是那些“看得见、摸得着”的输出效果。比如,用简单的嵌套循环,打印出各种漂亮的三角形图案——直角三角形、等腰三角形、倒三角、空心三角……这些不仅锻炼了逻辑思维,也让你体会到控制输出的“掌控感”。

今天,我们就来深入实践一个经典又实用的 C++ 实例:创建各类三角形图案。无论你是初学者,还是已经学过一段时间的中级开发者,这篇文章都能帮你从“会写”到“理解透”。


理解三角形图案的构建逻辑

在动手写代码之前,先问自己一个问题:一个三角形,是由什么构成的?

答案是:行和列。每一行由若干个字符(通常是 *# 或空格)组成,而每行的字符数量和排列方式,决定了三角形的形状。

我们可以把每一行想象成一条“传送带”,上面摆放着要输出的字符。而外层循环负责“启动传送带”,内层循环负责“在传送带上摆放字符”。

举个例子,打印一个 5 行的直角三角形:

*
**
***
****
*****
  • 第 1 行:输出 1 个 *
  • 第 2 行:输出 2 个 *
  • ...
  • 第 5 行:输出 5 个 *

是不是很清晰?这背后就是 for 循环的规律:外层循环控制行数,内层循环控制每行的字符数


创建直角三角形(左对齐)

这是最基础的三角形,也是理解其他形状的起点。

#include <iostream>
using namespace std;

int main() {
    int n = 5;  // 定义三角形的行数

    // 外层循环:控制行数,从第 1 行到第 n 行
    for (int i = 1; i <= n; i++) {
        // 内层循环:控制每行输出多少个星号
        for (int j = 1; j <= i; j++) {
            cout << "*";  // 输出一个星号
        }
        cout << endl;  // 换行,进入下一行
    }

    return 0;
}

代码解析

  • i 是当前行号,从 1 开始,到 n 结束。
  • j 是当前行要输出的星号数量,和 i 相等。
  • cout << endl; 是换行操作,确保每行独立显示。

这个结构就像“工厂流水线”:外循环是“生产线”,内循环是“装配工”,每轮装配 i 个零件(星号),然后换下一条生产线。


创建倒置直角三角形(右对齐)

现在我们来反转一下,让三角形“倒过来”——顶点在下,底边在上。

*****
****
***
**
*

关键在于:每行的星号数量从 n 开始,逐行减少

#include <iostream>
using namespace std;

int main() {
    int n = 5;

    // 外层循环:从第 n 行到第 1 行
    for (int i = n; i >= 1; i--) {
        // 内层循环:输出 i 个星号
        for (int j = 1; j <= i; j++) {
            cout << "*";
        }
        cout << endl;
    }

    return 0;
}

重点in 递减到 1,每行输出的星号数也相应减少。这就像“收尾工作”——从最后一行开始,逐步收起零件。


创建等腰三角形(居中对齐)

等腰三角形是视觉上最“美观”的一种。它需要在星号前加空格,让星号居中。

例如,5 行的等腰三角形:

    *
   ***
  *****
 *******
*********

规律是:

  • 第 i 行需要 n - i 个空格(左侧空格)
  • 然后是 2*i - 1 个星号(中间星号)
#include <iostream>
using namespace std;

int main() {
    int n = 5;

    for (int i = 1; i <= n; i++) {
        // 输出左侧空格:每行减少一个空格
        for (int j = 1; j <= n - i; j++) {
            cout << " ";  // 一个空格
        }

        // 输出星号:奇数个,从 1 开始,每次加 2
        for (int k = 1; k <= 2*i - 1; k++) {
            cout << "*";
        }

        cout << endl;  // 换行
    }

    return 0;
}

技巧提示2*i - 1 是一个经典的奇数生成公式。第 1 行 1 个星,第 2 行 3 个,第 3 行 5 个……完美匹配等腰三角形的对称结构。


创建倒置等腰三角形

现在我们把等腰三角形倒过来,顶点在上,底边在下。

*********
 *******
  *****
   ***
    *

思路和倒置直角三角形一样:外层循环从 n1

#include <iostream>
using namespace std;

int main() {
    int n = 5;

    for (int i = n; i >= 1; i--) {
        // 左侧空格:随着行号减小,空格数增加
        for (int j = 1; j <= n - i; j++) {
            cout << " ";
        }

        // 星号数量:从 2*n-1 开始,逐行减 2
        for (int k = 1; k <= 2*i - 1; k++) {
            cout << "*";
        }

        cout << endl;
    }

    return 0;
}

观察:虽然循环方向变了,但逻辑结构保持不变。这说明——改变顺序,不改变结构,是编程中常见的思维模式


创建空心等腰三角形

这是进阶挑战!我们只在边框上输出星号,内部为空。

例如 5 行的空心等腰三角形:

    *
   * *
  *   *
 *     *
*********

关键点:

  • 第一行:只有 1 个星号(顶点)
  • 中间行:首尾是星号,中间是空格
  • 最后一行:全是星号(底边)
#include <iostream>
using namespace std;

int main() {
    int n = 5;

    for (int i = 1; i <= n; i++) {
        // 左侧空格
        for (int j = 1; j <= n - i; j++) {
            cout << " ";
        }

        // 星号部分
        for (int k = 1; k <= 2*i - 1; k++) {
            // 第一行或最后一行:全部输出星号
            if (i == 1 || i == n) {
                cout << "*";
            }
            // 中间行:首尾输出星号,中间为空格
            else if (k == 1 || k == 2*i - 1) {
                cout << "*";
            } else {
                cout << " ";  // 中间空格
            }
        }

        cout << endl;
    }

    return 0;
}

难点解析:这里引入了条件判断 if,控制星号的输出位置。就像“建筑工人”在墙上只画边框,内部不填色。这种“边界判断”在图形处理中非常常见。


三角形图案的通用规律总结

类型 外层循环 内层循环 1(空格) 内层循环 2(星号)
直角三角形 i = 1n j = 1i
倒置直角 i = n1 j = 1i
等腰三角形 i = 1n j = 1n-i k = 12*i-1
倒置等腰 i = n1 j = 1n-i k = 12*i-1
空心等腰 i = 1n j = 1n-i 条件判断输出星号

这个表格可以帮助你快速对照结构,理解每种三角形的差异。记住:循环控制行,条件控制列


如何调试和优化?

当你第一次运行代码,发现图案不对时,不要慌。可以:

  1. 打印中间变量:在循环中加 cout << "i=" << i << " j=" << j << endl; 查看当前行和列。
  2. 缩小规模测试:把 n 设为 3,手动验证每行输出是否正确。
  3. 逐层验证:先保证空格对齐,再保证星号数量正确。

C++ 实例 – 创建各类三角形图案,看似简单,实则融合了循环、条件、输出控制、数学规律等多重知识。它像一座小桥,连接了“语法”与“逻辑”,让你从“写代码”走向“想问题”。


结语

编程的本质,不是记住语法,而是用逻辑去控制输出。当你能熟练写出各种三角形,说明你已经掌握了嵌套循环的核心思想。

从直角三角形起步,到等腰、倒置、空心,每一步都是思维的升级。这些代码虽小,但它们是你未来构建复杂程序的基石。

别忘了,每一个伟大的程序,都始于一个小小的 *

继续练习吧,让代码在屏幕上“生长”出更多美丽的图案。