首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言打印正三角形九九乘法表:代碼實現與排版原理詳解

     編輯:C 語言問答

效果展示

                         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;
}

核心排版邏輯深度解析

1. 字符寬度規劃

  • 格式串 "%d*%d=%-2d ":
    • 最大算式 9*9=81 含符號共 7 字符(如 9*9=81 末尾有空格)。
    • %-2d 保證結果佔至少2字符、左對齊,單位數結果後補空格對齊。
  • 最後一行 (lin=9) 共 9 個算式 → 總寬度 = 9 × 7 = 63 字符。

2. 居中公式推導

第 lin 行實際內容寬度 = 7 * lin。

為使其在 63 字符寬度內居中:

前導空格數 = (63 - 7 * lin) / 2

  • 整數除法自動截斷,視覺影響可忽略。
  • 循環打印空格字符 ' ' 即可。

3. 雙重換行技巧

printf("\n\n"); 打印兩個換行,增加行間距,使三角形輪廓更明顯、美觀。單換行也可,視終端字體比例調整。

常見問題與變體

Q: 為什麼原答案用 #include <stdlib.h>?

A: 筆誤。stdlib.h 提供內存管理、轉換等函數,本程序只用 printf,需 stdio.h。補充中已更正。

Q: 如何改為左對齊(直角三角形)?

// 移除空格循環,直接打印算式
for (lin = 1; lin <= 9; lin++) {
    for (col = 1; col <= lin; col++) {
        printf("%d*%d=%-2d ", col, lin, col * lin);
    }
    printf("\n");
}

Q: 如何打印倒三角形?

for (lin = 9; lin >= 1; lin--) { // 行號遞減
    // 空格計算同理,或固定縮進
    for (col = 1; col <= lin; col++) { ... }
}

舉一反三:格式化輸出核心技巧

場景格式串關鍵說明
列對齊%Nd (右對齊) / %-Nd (左對齊)N 為最小寬度,不足補空格
浮點數精度%.Nf保留 N 位小數
八/十六進制%o / %x / %#x (帶前綴)
指針地址%p標準輸出指針格式

總結

打印正三角形乘法表的關鍵在於:

  1. 確定單元格固定寬度(格式串設計)。
  2. 計算總行寬(最後一行單元數 × 單元寬)。
  3. 動態計算前導空格實現居中 (總寬 - 當前行寬)/2。
  4. 嵌套循環控制行與列,按公式輸出內容。

這類「字符畫圖」題目是鍛鍊循環嵌套控制、格式化輸出、幾何邏輯轉代碼能力的絕佳練翐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved