在C語言學習的初期,計算幾何圖形的基本屬性是掌握輸入輸出、數據類型與數學運算的經典切入點。本文將從最基礎的單一主函數實現,逐步延伸至模組化函數設計、常量定義最佳實踐,以及精度控制等進階技巧,幫助你建立扎實的編程思維。
#define 預處理指令定義常量(如圓周率 π)float、double)的選擇與格式化輸出(%.2f 保留兩位小數)scanf 格式化輸入讀取半徑數值C = 2πr、面積 S = πr²適合初學者理解基本 I/O 流程,直接在 main 中完成計算與輸出:
#include <stdio.h>
#define PI 3.1415
int main() {
float radius;
scanf("%f", &radius);
printf("%.2f\n%.2f\n", 2 * PI * radius, PI * radius * radius);
return 0;
}
關鍵細節: 使用 #define PI 3.1415 避免魔術數字;%.2f 確保輸出符合「保留兩位小數」的題目要求;換行符 \n 實現分行輸出。
將周長與面積計算拆分為獨立函數,符合「高內聚、低耦合」原則,便於後續擴展與測試:
#include <stdio.h>
#define PHI 3.14
float circumference(float r);
float area(float r);
int main() {
float r, c, s;
printf("input r= ");
scanf("%f", &r);
c = circumference(r);
s = area(r);
printf("\nc=%5.2f s=%5.2f", c, s);
return 0;
}
float circumference(float r) {
return 2 * PHI * r;
}
float area(float r) {
return PHI * r * r;
}
進階點: 函數原型聲明置於 main 之前;%5.2f 指定寬度為 5 字符(含小數點),輸出對齊更美觀。
針對精度要求較高的場景,採用 double 類型與更精確的 π 值:
#include <stdio.h>
#define PI 3.1415926
double circumference(double r) {
return 2 * PI * r;
}
double area(double r) {
return PI * r * r;
}
int main() {
double r, c, s;
printf("請輸入圓的半徑: ");
scanf("%lf", &r);
c = circumference(r);
s = area(r);
printf("圓的周長是%lf, 面積是%lf\n", c, s);
return 0;
}
避坑指南: scanf 讀取 double 必須用 %lf;printf 中 %f 與 %lf 通用,但建議統一用 %lf 語義更清晰。
| 錯誤類型 | 錯誤示例 | 正確寫法 | 說明 |
|---|---|---|---|
| 整型除法截斷 | 2 * 3.14 * r 中 2 為 int | 2.0 * PI * r 或常量定義為浮點 | 確保參與運算的字面量為浮點類型 |
| 格式符不匹配 | scanf("%d", &r) 讀取 float | scanf("%f", &r) | %d 對應 int,%f 對應 float,%lf 對應 double |
| 精度丟失 | 用 float 存儲大數值運算結果 | 優先使用 double | double 佔 8 字節,有效位數 15~16 位,遠高於 float 的 6~7 位 |
| 魔術數字 | 代碼中直接出現 3.14 | #define PI 3.14159 | 集中管理常量,便於修改與語義閱讀 |
M_PI(需 #define _USE_MATH_DEFINES 並包含 math.h)獲取系統提供的高精度 π.c/.h 文件,練習多文件編譯掌握這個看似簡單的題目,實則串聯了 C 語言「輸入→處理→輸出」的核心閉環,也是後續學習結構體、指針、文件操作等進階主題的基石。建議動手敲碼、對比不同版本輸出,體會「同一邏輯,不同表達」的工程權衡之美。