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

C語言計算球體積:for與while循環兩種實現詳解

     編輯:C 語言問答

問題需求

計算球體積 V = (4/3)πR³,半徑 R 從 1 開始到 100 結束,步長為 2。要求分別使用 for 循環和 while 循環兩種方式實現,並輸出半徑與對應體積。

核心公式與注意事項

  • 球體積公式:V = (4.0/3.0) * π * R³
  • π 取值建議使用 M_PI (需 #define _USE_MATH_DEFINES 並在 math.h 前) 或自定義常量 3.14159265358979323846,精度優於 3.14。
  • R³ 計算可用 pow(R, 3) 或直接 R*R*R (整數運算更精確高效)。
  • 輸出格式控制:半徑佔 2-3 位,體積保留小數點後 2-6 位,對齊美觀。

方案一:for 循環實現

for 循環結構緊湊,初始化、條件判斷、迭代增量一行完成,適合已知循環次數場景。

#include <stdio.h>
#include <math.h>

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

int main(void) {
    int r;
    double v;
    printf("Radius | Volume\n");
    printf("-------|----------------\n");
    for (r = 1; r <= 100; r += 2) {
        v = (4.0 / 3.0) * M_PI * r * r * r;  // 或 pow(r, 3)
        printf("%3d    | %12.4f\n", r, v);
    }
    return 0;
}

方案二:while 循環實現

while 循環將初始化與迭代分離,條件判斷在循環體前,邏輯更顯式,適合複雜終止條件。

#include <stdio.h>
#include <math.h>

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

int main(void) {
    int r = 1;
    double v;
    printf("Radius | Volume\n");
    printf("-------|----------------\n");
    while (r <= 100) {
        v = (4.0 / 3.0) * M_PI * r * r * r;
        printf("%3d    | %12.4f\n", r, v);
        r += 2;
    }
    return 0;
}

進階優化與最佳實踐

1. 避免整數除法陷阱

錯誤寫法:v = 4/3 * M_PI * r*r*r; → 4/3 整數除法結果為 1,導致體積偏小 25%。
正確寫法:v = 4.0/3.0 * M_PI * r*r*r; 或 v = (4.0/3.0) * M_PI * r*r*r; 強制浮點運算。

2. 宏定義規範

常量宏建議大寫:#define PI 3.14159,語句結尾不加分號,避免副作用。

3. 主函數規範

標準 C 要求 int main(void) 或 int main(int argc, char *argv[]),返回 return 0; 表示成功。

4. 代碼風格建議

  • 運算符兩側加空格:r += 2 而非 r+=2
  • 縮進統一 4 空格,大括號風格一致 (K&R 或 Allman)
  • 變量聲明盡量靠近首次使用處 (C99 標準)

運行結果示例

Radius | Volume
-------|----------------
  1    |      4.1888
  3    |    113.0973
  5    |    523.5988
...
 99    | 4064376.6391

總結

兩種循環在本題中等價,for 循環更簡潔,while 循環結構更清晰。關鍵在於掌握浮點運算精度、格式化輸出與規範編程習慣。實際開發中,優先選擇語義最清晰的循環結構,並嚴格遵循編碼規範。

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