1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
... (以此類推至第9行)
#include <stdio.h> // 注意:原答案誤用 stdlib.h,需改為 stdio.h
int main() {
int lin, col, space;
// 外層循環控制行號 (1~9)
for (lin = 1; lin <= 9; lin++) {
// 1. 計算並打印前導空格,實現居中對齊
// 每個算式佔7字符寬度("%d*%d=%-2d "),最後一行9個算式共63字符
// 當前行有 lin 個算式,佔 7*lin 字符
// 需前導空格數 = (總寬度 - 當前行寬度) / 2 = (63 - 7*lin) / 2
for (space = (63 - 7 * lin) / 2; space > 0; space--) {
printf(" ");
}
// 2. 打印當前行的乘法算式
// 第 lin 行有 lin 個算式:1*lin, 2*lin, ..., lin*lin
for (col = 1; col <= lin; col++) {
// %-2d 佔2字符左對齊,確保列對齊
printf("%d*%d=%-2d ", col, lin, col * lin);
}
// 3. 換行(打印兩個換行符增加行間距,視覺更像三角形)
printf("\n\n");
}
return 0;
}
"%d*%d=%-2d ":
9*9=81 含符號共 7 字符(如 9*9=81 末尾有空格)。%-2d 保證結果佔至少2字符、左對齊,單位數結果後補空格對齊。第 lin 行實際內容寬度 = 7 * lin。
為使其在 63 字符寬度內居中:
前導空格數 = (63 - 7 * lin) / 2
' ' 即可。printf("\n\n"); 打印兩個換行,增加行間距,使三角形輪廓更明顯、美觀。單換行也可,視終端字體比例調整。
#include <stdlib.h>?A: 筆誤。stdlib.h 提供內存管理、轉換等函數,本程序只用 printf,需 stdio.h。補充中已更正。
// 移除空格循環,直接打印算式
for (lin = 1; lin <= 9; lin++) {
for (col = 1; col <= lin; col++) {
printf("%d*%d=%-2d ", col, lin, col * lin);
}
printf("\n");
}
for (lin = 9; lin >= 1; lin--) { // 行號遞減
// 空格計算同理,或固定縮進
for (col = 1; col <= lin; col++) { ... }
}
| 場景 | 格式串關鍵 | 說明 |
|---|---|---|
| 列對齊 | %Nd (右對齊) / %-Nd (左對齊) | N 為最小寬度,不足補空格 |
| 浮點數精度 | %.Nf | 保留 N 位小數 |
| 八/十六進制 | %o / %x / %#x (帶前綴) | |
| 指針地址 | %p | 標準輸出指針格式 |
打印正三角形乘法表的關鍵在於:
(總寬 - 當前行寬)/2。這類「字符畫圖」題目是鍛鍊循環嵌套控制、格式化輸出、幾何邏輯轉代碼能力的絕佳練翐。