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

C語言實現企業利潤提成計算:if-else與switch兩種分支結構對比

     編輯:C 語言問答

題目規則

利潤 I 分段提成:

  • I ≤ 100,000:10%
  • 100,000 < I ≤ 200,000:超出部分 7.5%
  • 200,000 < I ≤ 400,000:超出部分 5%
  • 400,000 < I ≤ 600,000:超出部分 3%
  • 600,000 < I ≤ 1,000,000:超出部分 1.5%
  • I > 1,000,000:超出部分 1%

方法一:if-else 鏈(直觀、易維護)


double bonus = 0;
if (I <= 100000) {
    bonus = I * 0.10;
} else if (I <= 200000) {
    bonus = 100000*0.10 + (I-100000)*0.075;
} else if (I <= 400000) {
    bonus = 100000*0.10 + 100000*0.075 + (I-200000)*0.05;
} else if (I <= 600000) {
    bonus = 100000*0.10 + 100000*0.075 + 200000*0.05 + (I-400000)*0.03;
} else if (I <= 1000000) {
    bonus = 100000*0.10 + 100000*0.075 + 200000*0.05 + 200000*0.03 + (I-600000)*0.015;
} else {
    bonus = 100000*0.10 + 100000*0.075 + 200000*0.05 + 200000*0.03 + 400000*0.015 + (I-1000000)*0.01;
}

方法二:switch 技巧(利用整數除法映射區間)


int idx = (I - 1) / 100000; // 將利潤映射到 0,1,2,3,4,5,6,7,8,9,10...
double bonus = 0;
switch (idx) {
    case 0:  bonus = I * 0.10; break;
    case 1:  bonus = 100000*0.10 + (I-100000)*0.075; break;
    case 2: case 3:  bonus = 100000*0.10 + 100000*0.075 + (I-200000)*0.05; break;
    case 4: case 5:  bonus = 100000*0.10 + 100000*0.075 + 200000*0.05 + (I-400000)*0.03; break;
    case 6: case 7: case 8: case 9:
        bonus = 100000*0.10 + 100000*0.075 + 200000*0.05 + 200000*0.03 + (I-600000)*0.015; break;
    default: // idx >= 10
        bonus = 100000*0.10 + 100000*0.075 + 200000*0.05 + 200000*0.03 + 400000*0.015 + (I-1000000)*0.01; break;
}

對比總結

維度if-elseswitch
可讀性高,邏輯直觀需理解映射技巧,case 合並易漏
性能順序判斷,最壞 O(n)編譯器常優化為跳轉表 O(1)
維護性修改區間只需改條件修改區間需重新推導 idx 映射
適用場景區間邊界不規則、邏輯複雜區間等寬、案例固定、極度追求速度

建議:業務邏輯優先用 if-else,確保正確性與可維護性;switch 適合編譯器可優化的熱路徑或狀態機。

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