函数调用后变量值未更新:薪资计算程序逻辑异常求助
薪资计算程序的问题修复
核心问题分析
- pay_rate函数逻辑完全混乱:
- 条件判断顺序颠倒,应该先判断工时是否超过40小时,再处理超额部分,而非先判断≤40的情况。
- temp初始化为0,导致后续
0 < temp的分支永远无法触发,因为初始值不满足条件。 - 工时计算逻辑错误:比如当hour≤40时,
temp = hour-40会得到负数,完全不符合后续判断超额工时的需求。
- total_pay函数逻辑错误:
总薪资不能用单一rate乘以总工时,因为不同时段的时薪不同,必须分段计算。
修复后的完整代码
#include <stdio.h> // 直接分段计算总薪资,逻辑更清晰 void calculate_total_pay(float hours, float* total_salary) { *total_salary = 0.0f; // 处理异常输入 if (hours <= 0) { printf("工时不能为负数或零\n"); return; } // 计算40小时内的基础薪资 if (hours <= 40) { *total_salary = hours * 12.5f; } else { // 先算40小时的基础薪资 *total_salary = 40 * 12.5f; float overtime = hours - 40; // 超额部分的前4小时按15元/小时计算 if (overtime <= 4) { *total_salary += overtime * 15.0f; } else { // 前4小时按15元,剩余超额部分按20元计算 *total_salary += 4 * 15.0f; *total_salary += (overtime - 4) * 20.0f; } } } int main() { float h, total_salary = 0; printf("Input worked hours: "); scanf("%f", &h); calculate_total_pay(h, &total_salary); printf("总薪资: %.2f\n", total_salary); return 0; }
调整关键点说明
- 合并原有的
pay_rate和total_pay函数为calculate_total_pay,因为分段时薪的场景下,单独计算单一rate没有意义,直接分段计算总薪资逻辑更清晰。 - 按「正常工时→超额前4小时→剩余超额工时」的顺序计算,逻辑符合薪资规则。
- 增加了异常输入判断,避免无效工时的计算错误。
内容的提问来源于stack exchange,提问作者Woody
相关产品推荐
相关产品推荐

