C++ 实例 – 创建各类三角形图案(千字长文)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在编程学习的旅程中,图形化输出是检验逻辑思维和代码控制能力的重要方式。通过C++ 实例 – 创建各类三角形图案,开发者不仅能掌握循环结构、条件判断等核心语法,还能培养代码的抽象思维能力。三角形作为几何图形的基础形态,其图案的多样化输出能够帮助初学者理解代码的控制逻辑,同时为中级开发者提供优化算法的实践场景。本文将通过循序渐进的方式,结合实际案例,深入解析如何用C++创建不同形态的三角形图案。


基础知识回顾:循环与字符输出

在深入实例之前,我们需要先回顾几个关键知识点:

1. 循环结构

循环是重复执行代码块的机制,常见的有for循环和while循环。例如,要打印5行星号,可以用以下代码:

for (int i = 0; i < 5; ++i) {  
    cout << "*" << endl;  
}  

这里,i从0递增至4,每次循环打印一行星号,endl用于换行。

2. 字符输出与控制台定位

在C++中,通过cout输出字符时,每行末尾的endl会自动换行。若需在同一行输出多个字符,可以省略endl或使用'\n'控制换行位置。

3. 条件判断与空格填充

空格的合理使用是构建三角形的关键。例如,若需在星号前输出指定数量的空格,可以结合循环和条件语句实现:

for (int j = 0; j < spaces; ++j) {  
    cout << " ";  
}  

实例1:正三角形(等腰三角形)

目标效果

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

实现思路

  1. 确定行数:假设三角形有5行,则循环变量row从0到4。
  2. 计算每行的空格数:第row行的空格数为总行数减去当前行号,再减1。例如第0行空格数为5 - 0 - 1 = 4
  3. 计算星号数:每行的星号数为2 * row + 1。例如第0行星号数为1,第1行为3,依此类推。

完整代码

#include <iostream>  
using namespace std;  

int main() {  
    int rows = 5; // 三角形的行数  
    for (int row = 0; row < rows; ++row) {  
        // 输出空格  
        for (int space = 0; space < rows - row - 1; ++space) {  
            cout << " ";  
        }  
        // 输出星号  
        for (int star = 0; star < 2 * row + 1; ++star) {  
            cout << "*";  
        }  
        cout << endl;  
    }  
    return 0;  
}  

关键点解析

  • 嵌套循环:外层循环控制行数,内层循环分别处理空格和星号。
  • 数学规律:通过观察星号数量随行数变化的规律,推导出公式2 * row + 1

实例2:倒三角形(上尖下宽)

目标效果

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

实现思路

与正三角形相反,倒三角形的星号数量随行数递减。例如,第row行的星号数为2 * (rows - row) - 1

代码修改

只需调整星号的计算公式,并保持空格逻辑不变:

// 倒三角形的星号公式  
int starCount = 2 * (rows - row) - 1;  

实例3:空心三角形

目标效果

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

实现难点

空心三角形的中间区域需要输出空格。可以通过条件判断实现:

  • 首行和末行:直接输出全部星号。
  • 中间行:仅在两端输出星号,其余位置输出空格。

代码示例

#include <iostream>  
using namespace std;  

int main() {  
    int rows = 5;  
    for (int row = 0; row < rows; ++row) {  
        // 输出空格  
        for (int space = 0; space < rows - row - 1; ++space) {  
            cout << " ";  
        }  
        // 输出星号或空格  
        for (int col = 0; col < 2 * row + 1; ++col) {  
            // 判断是否为边缘位置  
            if (col == 0 || col == 2 * row || row == rows - 1) {  
                cout << "*";  
            } else {  
                cout << " ";  
            }  
        }  
        cout << endl;  
    }  
    return 0;  
}  

关键技巧

  • 条件判断:使用if-else语句区分星号和空格的位置。
  • 末行处理:当row == rows - 1时,输出完整星号行。

实例4:菱形图案

目标效果

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

实现思路

菱形由两个三角形拼接而成:上半部分为正三角形,下半部分为倒三角形。

代码逻辑

#include <iostream>  
using namespace std;  

void printTriangle(int rows, bool isUpper) {  
    for (int row = 0; row < rows; ++row) {  
        int currentRow = isUpper ? row : rows - row - 1;  
        // ... 空格和星号逻辑与正三角形相同 ...  
    }  
}  

int main() {  
    int rows = 5;  
    printTriangle(rows, true); // 上半部分  
    printTriangle(rows - 1, false); // 下半部分(排除重复的中间行)  
    return 0;  
}  

代码优化

通过函数封装和参数传递,避免重复编写相似代码。


实例5:数字三角形

目标效果

1  
232  
34543  
4567654  

实现思路

每行的数字模式可分为两部分:

  • 递增部分:从当前行号开始递增。
  • 递减部分:从当前行号的前一个数开始递减。

代码示例

#include <iostream>  
using namespace std;  

int main() {  
    int rows = 4;  
    for (int row = 1; row <= rows; ++row) {  
        int num = row; // 递增部分的起始数字  
        for (int col = 1; col <= row; ++col) {  
            cout << num;  
            num++;  
        }  
        // 递减部分(排除最后一个字符)  
        num -= 2;  
        for (int col = 1; col < row; ++col) {  
            cout << num;  
            num--;  
        }  
        cout << endl;  
    }  
    return 0;  
}  

实例6:其他变体:斜三角形

目标效果

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

实现方式

取消空格的计算,直接让每行的星号数递增。


结论

通过以上实例,我们系统地学习了如何用C++创建各类三角形图案。这些案例不仅展示了循环、条件判断等基础语法的运用,还涉及了代码优化和函数封装的实践。对于初学者,建议从简单图形入手,逐步增加复杂度;中级开发者则可尝试通过减少嵌套循环或使用数学公式来优化代码。

C++ 实例 – 创建各类三角形图案 的核心在于理解图形的数学规律,并通过代码将其转化为可视化结果。希望本文能激发读者的创造力,尝试设计更多独特的图形输出案例!

最新发布