根據工齡與工作時長計算周薪:
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 }
salary:作為計算結果的暫存,兩函數共用,簡化返回值處理。工時 × 基礎時薪(工時-40) × 基礎時薪 × 1.5 + 40 × 基礎時薪float,主函數統一打印。%.2f 保留兩位小數,符合貨幣習慣。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; }