酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++打印星号直角三角形详解及代码演示

好的,这是一个非常基础的C++编程题目,用来练习循环和输出控制。我来为你提供完整的解决方案和详细的解释。 ## 📝 题目分析 我们需要根据输入的行数 `n`,打印一个直角三角形图案。这个图案的规则是: - **第1行**:1个星号 `*` - **第2行**:2个星号 `**` - **第3行**:3个星号 `***` - 以此类推... 最终形成一个“左对齐”的直角三角形。 ## 💻 解决方案 下面是完整的C++代码实现: ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 读取行数 // 外层循环控制行数 for (int i = 1; i <= n; i++) { // 内层循环控制每行打印的星号数量 for (int j = 1; j <= i; j++) { cout << "*"; } // 每行结束后换行 cout << endl; } return 0; } ``` ## 🔧 代码解析 **核心思路**:使用两个嵌套的 `for` 循环。 1. **外层循环** (`for (int i = 1; i <= n; i++)`): - 变量 `i` 代表当前行数,范围从1到 `n`。 - 每次迭代代表打印一行。 2. **内层循环** (`for (int j = 1; j <= i; j++)`): - 变量 `j` 控制当前行打印的星号数量。 - **关键在于**:循环次数等于当前行数 `i`,因此每行星号数量递增。 3. **换行**:每打印完一行的星号后,使用 `cout << endl;` 换行。 **时间复杂度**:O(n²),因为总共打印了 `1+2+...+n = n(n+1)/2` 个字符。 ## 🧪 输入输出示例 ### 示例1 **输入**: ``` 3 ``` **输出**: ``` * ** *** ``` ### 示例2 **输入**: ``` 5 ``` **输出**: ``` * ** *** **** ***** ``` ## ⚠️ 注意事项与优化 1. **边界处理**:题目保证 `1 ≤ n ≤ 30`,因此不需要特殊处理 `n=0` 或负数的情况。 2. **性能考虑**:对本题而言,直接使用 `cout` 输出即可,因为数据规模非常小。但如果需要大规模输出,可以考虑: - 使用 `printf` 或 `puts` 加速(但对于本题没有必要) - 预先构造一行字符串,然后循环输出(避免频繁的I/O操作) 3. **代码风格**: - 使用 `using namespace std;` 简化代码,但注意在大型项目中可能会导致命名冲突。 - 变量命名清晰,`i` 和 `j` 是循环变量的常见约定。 ## 🚀 扩展练习 如果你掌握了基础版本,可以尝试以下变体: ```cpp // 变体1:右对齐的直角三角形(前面加空格) #include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { // 打印空格,使星号右对齐 for (int k = 1; k <= n - i; k++) { cout << " "; } for (int j = 1; j <= i; j++) { cout << "*"; } cout << endl; } return 0; } ``` **这个变体输入5的输出为**: ``` * ** *** **** ***** ``` ## 📚 学习建议 - 这类“打印图案”的题目是练习嵌套循环的经典题型,建议亲手在IDE或在线编译器中运行代码,观察每一步的执行过程。 - 尝试其他变体:倒直角三角形、等腰三角形、菱形等,以便加深对循环控制的理解。 如果你有任何疑问,欢迎继续追问! ######[AI写代码神器 | 917点数解答 | 2026-08-29 20:07:40]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]