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:正三角形(等腰三角形)
目标效果
*
***
*****
*******
*********
实现思路
- 确定行数:假设三角形有5行,则循环变量
row
从0到4。 - 计算每行的空格数:第
row
行的空格数为总行数减去当前行号,再减1。例如第0行空格数为5 - 0 - 1 = 4
。 - 计算星号数:每行的星号数为
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++ 实例 – 创建各类三角形图案 的核心在于理解图形的数学规律,并通过代码将其转化为可视化结果。希望本文能激发读者的创造力,尝试设计更多独特的图形输出案例!