第 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 }

小结

  当检索区间比较大的时候,为了提高效率还可以用二分法检索

posted on 2014-04-09 11:31  空山悟  阅读(174)  评论(0编辑  收藏  举报

导航