C语言输入10份薪资计算提成后如何获取最高实发工资
问题解决方法
你的猜测完全正确,当前代码仅存储了输入的原始销售薪资,后续计算最大值时也仅对原始薪资进行比较,因此无法得到实发薪资的最大值。有两种常用的解决思路:
方案1:新增数组存储所有实发薪资
适合需要后续保留、使用所有销售人员实发薪资的场景,修改点如下:
- 新增实发薪资存储数组:
int takehome[10]; - 第一次循环计算实发薪资时,将结果存入数组对应位置
- 第二次循环时遍历实发薪资数组比较最大值
修改后完整代码:
#include <stdio.h> int main() { int num[10]; int takehome[10]; // 新增存储实发薪资的数组 int i = 0; int largest; int com, totaltakehome; while(i < 10) { printf("Enter salesperson salary for week[%d]:", i + 1); scanf("%d", &num[i]); // 调整计算顺序避免整数除法精度损失:先乘后除 com = num[i] * 7 / 100; printf("Commision is %d\n", com); totaltakehome = 300 + com; takehome[i] = totaltakehome; // 存储实发薪资 printf("Total takehome is %d\n", totaltakehome); printf("\n"); i++; // 原代码漏了i自增,会导致死循环,此处补充该逻辑 } largest = takehome[0]; i = 0; while(i < 10) { if(takehome[i] > largest) { largest = takehome[i]; } i++; } printf("\nHighest takehome salary is : %d\n", largest); return 0; }
方案2:边输入边更新最大值
如果不需要保留所有实发薪资,仅需要得到最大值,可以省去额外数组和第二次循环,在输入计算的同时直接比较更新最大值,运行效率更高:
#include <stdio.h> int main() { int num; int i = 0; int largest = 0; int com, totaltakehome; while(i < 10) { printf("Enter salesperson salary for week[%d]:", i + 1); scanf("%d", &num); com = num * 7 / 100; printf("Commision is %d\n", com); totaltakehome = 300 + com; printf("Total takehome is %d\n", totaltakehome); printf("\n"); // 直接比较更新最大值 if(totaltakehome > largest) { largest = totaltakehome; } i++; } printf("\nHighest takehome salary is : %d\n", largest); return 0; }
额外优化提示
原佣金计算逻辑为num[i] / 100 *7,C语言中整数除法会向下取整,比如销售额为199时,199/100=1,最终佣金为7;调整为num[i]*7/100后,199*7=1393,1393/100=13,精度更符合7%佣金的计算要求。
内容的提问来源于stack exchange,提问作者NewCoder
相关产品推荐
相关产品推荐

