for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= 9; ++j)
printf("%dx%d=%-3d ", i, j, i*j);
putchar('\n');
}
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= i; ++j) // j <= i 關鍵!
printf("%dx%d=%-3d ", i, j, i*j);
putchar('\n');
}
輸出:
1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 ...
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= 9; ++j) {
if (j < i) printf(" "); // 7空格佔位對齊
else printf("%dx%d=%-3d ", i, j, i*j);
}
putchar('\n');
}
輸出:
1x1=1 1x2=2 1x3=3 ... 1x9=9
2x2=4 2x3=6 ... 2x9=18
3x3=9 ... 3x9=27
%-3d:左對齊佔 3 位,保證列對齊。%2dx%2d=%-3d:雙數字對齊,適合大表。\t 分隔簡單但不同終端顯示寬度不同,推薦定寬格式。for(j=1;j<=9;j++)
if(j<=i) printf(" "); else printf("%d*%d=%d",i,j,i*j); // 邏輯反了,且缺換行控制
問題:j<=i 時打印空格,導致左下角留白;應為 j 打印空格 (右上三角) 或直接 j<=i 打印算式 (左下三角)。
for (int k = 1; k <= 81; ++k) {
int i = (k-1)/9 + 1;
int j = (k-1)%9 + 1;
if (j <= i) printf("%dx%d=%-3d ", i, j, i*j);
if (j == 9) putchar('\n');
}