第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现
问题分析
输入:用户个人收入
输出:该用户要缴纳的个人所得税
约束:不允许使用过多的 if 语句
解答思路
最简单的方法是根据不同的税率区间,创建多个 if 语句来求解。但如此一来便会有 25 个 if 语句段,代码就显得太过冗余。
可以通过将判定条件都存入数组,编写统一性的代码来达到精简程序的目的。
代码实现
说明:为了描述简单,只列举了 5 个税率区间的情况。
1 #include <iostream> 2 3 using namespace std; 4 5 // 定义税率区间数组元素 6 struct tax_u { 7 int income_t; 8 int base; 9 double rate; 10 }; 11 12 int main(void) 13 { 14 // 创建并初始化税率区间数组 15 struct tax_u * t = new struct tax_u[5]; 16 t[0].income_t = 2200; 17 t[0].base = 0; 18 t[0].rate = 0; 19 t[1].income_t = 2700; 20 t[1].base = 0; 21 t[1].rate = 0.14; 22 t[2].income_t = 3200; 23 t[2].base = 70; 24 t[2].rate = 0.15; 25 t[3].income_t = 3700; 26 t[3].base = 145; 27 t[3].rate = 0.16; 28 t[4].income_t = 4200; 29 t[4].base = 225; 30 t[4].rate = 0.17; 31 32 // 获取用户收入 33 double income; 34 cout << "请输入你的收入:" << endl; 35 cin >> income; 36 37 // 判定用户收入所在税率区间 38 int i; 39 for (i=0; i<5; i++) { 40 if (income <= t[i].income_t) 41 break; 42 } 43 44 // 计算税率 45 double tax; 46 if (i==0) { 47 tax = 0; 48 } 49 else if (i>4) { 50 cout << "超出计算范围" << endl; 51 return 1; 52 } 53 else { 54 tax = t[i].base + (income - t[i-1].income_t); 55 } 56 57 // 打印结果 58 cout << "需缴纳个人所得税: " << tax << endl; 59 60 return 0; 61 }
小结
当检索区间比较大的时候,为了提高效率还可以用二分法检索。