编程珠玑第三章习题1

原创 2016年06月01日 15:24:33

问题:

1. 本书行将出版之时,美国的个人所得税分为5种不同的费率,其中最大的费率大约为40%。以前的情况更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方式来计算1978年的美国联邦所得税。税率分别为0.14,0.15,0.16, 0.17, 0.18,·····。此后的费率增幅大于0.01.有何建议? 

	
if income <= 2200
    tax = 0
else if income < 2700
    tax =        .14 * (income - 2200)
else if income <= 3200
    tax = 70   +   .15 * (income - 2700)
else if income <= 3700
    tax = 145 +   .16 * (income - 2200)
else if income <= 4200
    tax = 225 +  .17 * (income - 2200)
.....
else 
   tax = 53090 + .70 * (income - 102200)
参考代码:
// Pearls3_1.cpp : Defines the entry point for the console application.
//编程珠玑第二版 习题3.1
//主要思路:用一个表来保存税收所有的税率选项,表的每一项包含三部分:该等级的下界,基本税收,超出下界的税率
//然后根据公式计算出工资属于表的第几项,再根据项中的税率选项计算出应缴的税

#include "stdafx.h"
#include<iostream>
#include<assert.h>
#define N 5

using namespace std;

struct tax{
	double bound;//该等级的下界
	double base;//基本税收
	double rate;//超出下界的税率
};

tax taxTable[N];

void CreateTable()//构建税收表
{
	taxTable[0].bound = 0;
	taxTable[0].base = 0;
	taxTable[0].rate = 0;
	taxTable[1].bound = 2200;
	taxTable[1].base = 0;
	taxTable[1].rate = 0.14;
	for (int i = 2; i < N; ++i)
	{
		taxTable[i].bound = taxTable[i - 1].bound + 500;
		taxTable[i].rate = taxTable[i - 1].rate + 0.01;
		taxTable[i].base = taxTable[i - 1].base + taxTable[i - 1].rate * 500;
	}
}

double calculate_tax(double income)
{
	assert(income <= 4200);
	int index = (income - 2200+500-1) / 500;
	cout << "打印当前的计算公式:" << endl;
	cout << taxTable[index].base << " + " << taxTable[index].rate << " * (income - " << taxTable[index].bound << ")" << endl;
	return taxTable[index].base + taxTable[index].rate*(income - taxTable[index].bound);
}
int _tmain(int argc, _TCHAR* argv[])
{
	CreateTable();
	cout << "请输入工资收入(income):";
	int income;
	while (cin >> income){
		cout << "tax = " << calculate_tax(income) << endl;
		cout << "请输入工资收入(income):";
	}

	return 0;
	return 0;
}<span style="color:#ff0000;">
</span>

参考:

编程珠玑之第三章习题2

问题描述: 问题解析: 1、如果咨询研究其规律,会发现其输入的km的a的值由上面公式就可以递推到! 2、研究其性质,会发现a[1] = c[k+1]是永远不会变得,那么由a[1]就可以向后推得知a...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年01月15日 23:54
  • 1041

编程珠玑之第三章习题6

问题描述: 6.编写一个“格式信函发生器”,使之可以通过数据库中的每条记录来生成定制的文档(这常常称为“邮件归并”特性)。设计简短的模板和输入文件来测试程序的正确性。 问题解析: 1、“格式...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年02月05日 16:35
  • 700

编程珠玑 第二版 第三章 习题答案

Exercise 1、在网上看到很多人都是先用数组来
  • spencerzou
  • spencerzou
  • 2014年05月27日 17:39
  • 1321

编程珠玑之第三章习题8

习题描述: 8.[S.C.Johnnson]七段显示设备实现十进制数字:                       的廉价显示。七段显示通常如下编号:                       ...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年02月08日 15:45
  • 910

编程珠玑:第三章 数据决定程序结构 习题解答

一.题目描述:本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联...
  • tangli555
  • tangli555
  • 2016年09月13日 21:44
  • 328

编程珠玑之第三章习题1

问题描述: 1. 本书行将出版之时,美国的个人所得税分为5种不同的费率,其中最大的费率大约为40%。以前的情况更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方式来计算1978年的美...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年01月14日 15:37
  • 691

编程珠玑第三章习题

1.使用二分搜索来搜索大于等于income的最小的lower_limit #include "stdafx.h" #include using namespace std; int bina...
  • cattylll
  • cattylll
  • 2011年12月27日 14:00
  • 1179

编程珠玑之第三章习题3

问题描述: 3. 编写一个“banner”函数,该函数的输入为大写字母,输出为一个字符数组,该数组以图形化的方式表示该字母。 问题解析: 1、如果编写一个通用的以26个字母为参数,输出为该字母的图形化...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年01月17日 21:27
  • 965

编程珠玑之第三章习题4

问题描述: 4.编写处理如下日期的函数:给定两个日期,计算两者之间的天数;给定一个日期,返回值为周几;给定月和年,使用字符数组生成该月的日历。 问题解析: 解决方案: 心得疑惑:...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年01月30日 11:27
  • 569

编程珠玑之第三章习题7

习题描述: 7.常见的字典允许用户查找单词的定义。习题2.1描述了允许用户查找变位词的字典。设计查找单词的正确拼写的字典和查找单词的押韵词的字典。讨论具有以下功能的字典:查找整数序列(例如:1,1,...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年02月08日 15:32
  • 706
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程珠玑第三章习题1
举报原因:
原因补充:

(最多只允许输入30个字)