* ** *** **** *****
第 i 行列印 i 個星號 (i 從 1 到 5)。
#include <stdio.h>
int main() {
int rows = 5;
for (int i = 1; i <= rows; i++) { // 外層:控制行數
for (int j = 1; j <= i; j++) { // 內層:控制每行星號數
printf("*");
}
printf("\n"); // 換行
}
return 0;
}
using System;
class Program {
static void Main() {
int rows = 5;
for (int i = 1; i <= rows; i++) {
// 字串重複:new string('*', i) 比迴圈更簡潔高效
Console.WriteLine(new string('*', i));
}
// 進階:LINQ 一行寫法
// Enumerable.Range(1, rows).Select(i => new string('*', i)).ToList().ForEach(Console.WriteLine);
}
}
| 圖案名稱 | 輸出範例 (rows=5) | 核心邏輯 |
|---|---|---|
| 左對齊直角三角形 | *\n**\n***\n****\n***** | 第 i 行印 i 個 * |
| 右對齊直角三角形 | *\n **\n ***\n ****\n***** | 第 i 行印 (rows-i) 空格 + i 個 * |
| 等腰三角形 (金字塔) | *\n ***\n *****\n *******\n********* | 第 i 行印 (rows-i) 空格 + (2*i-1) 個 * |
| 倒置等腰三角形 | *********\n *******\n *****\n ***\n * | i 從 rows 遞減至 1 |
| 菱形 | 金字塔 + 倒置金字塔 (不重複中間行) | 兩段迴圈合併 |
| 空心三角形 | 邊緣印 *,中間印空格 | j==1 || j==2*i-1 || i==rows |
#include <stdio.h>
void print_pyramid(int rows) {
for (int i = 1; i <= rows; i++) {
// 印前導空格
for (int s = 1; s <= rows - i; s++) printf(" ");
// 印星號
for (int j = 1; j <= 2 * i - 1; j++) printf("*");
printf("\n");
}
}
int main() {
print_pyramid(5);
return 0;
}
printf("\n") / Console.WriteLine()。// C: 使用 memset / sprintf (較複雜,不如迴圈直觀)
// C#: new string('*', count) - 高效、可讀、標準庫優化
// Python: '*' * count
// C++: std::string(count, '*')
// Java: "*".repeat(count) (Java 11+)
列印星號圖案是**巢狀迴圈控制邏輯**的經典練習。核心在於:**外層迭代行、內層計算每行字元組成 (空格 + 星號)**。C# 等現代語言提供 new string(char, count) 等高階字串操作,能簡化內層迴圈、提升可讀性與效能。掌握「行號與字元數的數學關係」(如 2*i-1、rows-i) 是解決此類幾何圖案問題的關鍵。