您的位置:首页 > 其它

第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现

2014-04-09 11:31 344 查看
问题分析

  输入:用户个人收入

  输出:该用户要缴纳的个人所得税

  约束:不允许使用过多的 if 语句

解答思路

  最简单的方法是根据不同的税率区间,创建多个 if 语句来求解。但如此一来便会有 25 个 if 语句段,代码就显得太过冗余。

  可以通过将判定条件都存入数组,编写统一性的代码来达到精简程序的目的。

代码实现

  说明:为了描述简单,只列举了 5 个税率区间的情况。

#include <iostream>

using namespace std;

// 定义税率区间数组元素
struct tax_u {
int income_t;
int base;
double rate;
};

int main(void)
{
// 创建并初始化税率区间数组
struct tax_u * t = new struct tax_u[5];
t[0].income_t = 2200;
t[0].base = 0;
t[0].rate = 0;
t[1].income_t = 2700;
t[1].base = 0;
t[1].rate = 0.14;
t[2].income_t = 3200;
t[2].base = 70;
t[2].rate = 0.15;
t[3].income_t = 3700;
t[3].base = 145;
t[3].rate = 0.16;
t[4].income_t = 4200;
t[4].base = 225;
t[4].rate = 0.17;

// 获取用户收入
double income;
cout << "请输入你的收入:" << endl;
cin >> income;

// 判定用户收入所在税率区间
int i;
for (i=0; i<5; i++) {
if (income <= t[i].income_t)
break;
}

// 计算税率
double tax;
if (i==0) {
tax = 0;
}
else if (i>4) {
cout << "超出计算范围" << endl;
return 1;
}
else {
tax = t[i].base + (income - t[i-1].income_t);
}

// 打印结果
cout << "需缴纳个人所得税: " << tax << endl;

return 0;
}


小结

  当检索区间比较大的时候,为了提高效率还可以用二分法检索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐