gpt4 book ai didi

c - C中的多个if语句

转载 作者:行者123 更新时间:2023-12-04 10:31:26 25 4
gpt4 key购买 nike

假设我想在考虑员工的工作年限和 child 数量后计算他的 net_salary。我不想使用嵌套的 if 语句,因为这会使我需要进行的检查数量变得复杂。

double base_salary, net_salary;
int nmbr_kids, nmbr_years;

if(nmbr_kids >= 1 && nmbr_kids <3){
net_salary = base_salary + 200;
}
else if(nmbr_kids >= 3 && nmbr_kids <4){
net_salary = base_salary + 400;
}
else if (nmbr_kids >= 4){
net_salary = base_salary + 600;
}
else{
net_salary = base_salary;
}
/* now I want to account for the number of years worked by the employee and update accordingly his net_salary */

if(nmbr_years >= 1 && nmbr_years <3){
net_salary = net_salary + 200;
}
else if(nmbr_years >= 3 && nmbr_years <4){
net_salary = net_salary +400;
}
else if(nmbr_years >= 4){
net_salary = net_salary + 600;
}
else{
net_salary = net_salary;
}

是否有更好、更紧凑的方法来完成上述操作?还是我看问题的方式不对?

最佳答案

第一个序列可以修改为:

if (nmbr_kids == 0)
net_salary = base_salary + 0;
else if (nmbr_kids < 3)
net_salary = base_salary + 200;
else if (nmbr_kids < 4)
net_salary = base_salary + 400;
else
net_salary = base_salary + 600;

这里的关键思想是消除条件。原来必须检查范围的两端,因为没有首先处理 0 个 child 的情况。

或者,您可以定义一个数组:

double kids_bonus[] = { 0, 200, 200, 400, 600, 600, 600, 600 };
enum { NUM_KIDS_BONUS_VALUES = sizeof(kids_bonus) / sizeof(kids_bonus[0]) };

int eff_kids = nmbr_kids;
if (eff_kids >= NUM_KIDS_BONUS_VALUES)
eff_kids = NUM_KIDS_BONUS_VALUES - 1;
net_salary = base_salary + kids_bonus[eff_kids];

或者,使用 min功能:

static inline int min(int x, int y) { return (x < y) ? x : y; }

int eff_kids = min(nmbr_kids, NUM_KIDS_BONUS_VALUES - 1);
net_salary = base_salary + kids_bonus[eff_kids];

当然,如果你对 child 的数量有上限,你可以简单地创建一个足够大的数组。

你的原始状态else if (nmbr_kids >= 3 && nmbr_kids < 4)最好写成 else if (nmbr_kids == 3) ,当然。

第二种情况也可以使用相同的策略。

关于c - C中的多个if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com