#include <iostream>
using namespace std;
int main()
{
double dSalary,dTax,dNetIncome;
double dValue; //在模板基础上加一个变量,表示超出起征点的收入
double dRate, dOffset; //分别表示税率和速算扣除数
int iStep; //加入中间量“档次”,便于计算
cout<<"请输入您本月的收入总额(元):";
cin>>dSalary;
dValue=dSalary-3500;
if(dValue<=0.0)
dTax=0.0;
else
{
if (dValue<=1500)
iStep=1;
else if (dValue<=4500)
iStep=2;
else if (dValue<=9000)
iStep=3;
else if (dValue<=35000)
iStep=4;
else if (dValue<=55000)
iStep=5;
else if (dValue<=80000)
iStep=6;
else
iStep=7;
switch (iStep)
{
case 1: dRate=0.03, dOffset=0.0; break;
case 2: dRate=0.1, dOffset=105.0; break;
case 3: dRate=0.2, dOffset=555.0; break;
case 4: dRate=0.25, dOffset=1005.0; break;
case 5: dRate=0.3, dOffset=2755.0; break;
case 6: dRate=0.35, dOffset=5055.0; break;
case 7: dRate=0.45, dOffset=13505.0;
}
dTax = dValue * dRate - dOffset;
}
dNetIncome = dSalary-dTax;
cout<<"您本月应缴个人所得税 "<<dTax<<" 元,税后收入是 "<<dNetIncome<<" 元。\n";
cout<<"依法纳税,共享繁荣。谢谢使用!\n";
return 0;
}
运行结果:
心得体会:
课文原文有说:“‘case常量表达式’只是起语句标号作用,并不是在该处进行条件判断。”在这一点上,switch语句不同于if-else语句。case后面只是一个常量表达式,而不应出现条件表达式。故而加入iStep作为中间量,便于switch语句的表达。