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

C語言分支練習:員工工資計算(加班費區分新老員工)

     編輯:關於C語言

題目需求

根據工齡與工作時長計算周薪:

  • 新員工(工齡 < 5 年):基礎時薪 30 元,超 40 小時部分按 1.5 倍計薪。
  • 老員工(工齡 ≥ 5 年):基礎時薪 50 元,超 40 小時部分按 1.5 倍計薪(注:加班費基數仍為 30 元)。
  • 異常數據:工作時長 < 0、工齡 < 0、周工時 > 168(7×24)直接退出。

代碼實現

 1 /* B11-分支-11. 計算工資(15) */
 2 /* 未全部通過 */
 3 
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 
 7 float salary = 0;
 8 
 9 void newStaff(int *worktime)
10 {
11     if (*worktime <= 40)
12         salary = (*worktime) * 30;
13     else
14         salary = (*worktime - 40) * 30 * 1.5 + 40 * 30;
15     printf("%.2f\n", salary);
16 }
17 
18 void oldStaff(int *worktime)
19 {
20     if (*worktime <= 40)
21         salary = (*worktime) * 50;
22     else
23         salary = (*worktime - 40) * 30 * 1.5 + 40 * 50;
24     printf("%.2f\n", salary);
25 }
26 
27 int main()
28 {
29     int workTime = 0, workYear = 0;
30     int *worktime = &workTime, *workyear = &workYear;
31 
32     scanf("%i %i", workyear, worktime);
33 
34     if (*worktime < 0 || *workyear < 0) exit(0);
35     if (*worktime > (7 * 24)) exit(0);
36 
37     if (*workyear < 5)
38         newStaff(worktime);
39     else
40         oldStaff(worktime);
41 
42     return 0;
43 }

邏輯解析

  1. 指針參數傳遞:主函數將局部變量地址傳給計算函數,函數通過解引用修改/讀取值。
  2. 全局變量 salary:作為計算結果的暫存,兩函數共用,簡化返回值處理。
  3. 分段計算公式:
    • 正常工時:工時 × 基礎時薪
    • 加班工時:(工時-40) × 基礎時薪 × 1.5 + 40 × 基礎時薪
  4. 老員工加班費基數為 30:題目隱含規則,體現「同工同酬」於加班部分。

潛在問題與優化

  • 全局變量耦合:建議改為函數返回 float,主函數統一打印。
  • 精度輸出:%.2f 保留兩位小數,符合貨幣習慣。
  • 邊界測試:恰好 40 小時、負數、超大工時等邊界情況需覆蓋。
  • 代碼復用:提取通用計算邏輯為 calcSalary(baseRate, worktime),以基礎時薪為參數,消除重複代碼。

重構示例

float calcSalary(int baseRate, int worktime)
{
    if (worktime <= 40)
        return worktime * baseRate;
    return (worktime - 40) * 30 * 1.5 + 40 * baseRate;
}

int main()
{
    int workTime, workYear;
    scanf("%d %d", &workYear, &workTime);
    if (workTime < 0 || workYear < 0 || workTime > 168) return 0;

    float salary = (workYear < 5) ? 
        calcSalary(30, workTime) : calcSalary(50, workTime);
    printf("%.2f\n", salary);
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved