C++第3次实验(基础班)—选择结构程序设计(参考答案)-项目1:个人所得税计算器


  1. #include <iostream>      
  2. using namespace std;    
  3. int main( )    
  4. {    
  5.     double dSalary,dTax=0,dNetIncome=0;  //请欣符合匈牙利命名法的变量名  
  6.     double dValue;   //在模板基础上加一个变量,表示超出起征点的收入  
  7.     cout<<"请输入您本月的收入总额(元):";    
  8.     cin>>dSalary;    
  9.     dValue=dSalary-3500;   //在起征点基础上考虑纳税   
  10.     if(dValue<=0.0)    
  11.         dTax=0.0;    
  12.     else    
  13.     {    
  14.         if(dValue<=1500)  
  15.             dTax=dValue*0.03-0.0;   //直接根据税率和速算扣除数计算  
  16.         else if(dValue<=4500)  
  17.             dTax=dValue*0.10-105.0;   
  18.         else if(dValue<=9000)  
  19.             dTax=dValue*0.20-555.0;    
  20.         else if(dValue<=35000)  
  21.             dTax=dValue*0.25-1005.0;   
  22.         else if(dValue<=55000)   
  23.             dTax=dValue*0.30-2755.0;    
  24.         else if(dValue<=80000)  
  25.             dTax=dValue*0.35-5505.0;    
  26.         else   
  27.             dTax=dValue*0.45-13505.0;    
  28.     }    
  29.     dNetIncome=dSalary-dTax;   //计算得到  
  30.     cout<<"您本月应缴个人所得税 "<<dTax<<" 元,税后收入是 "<<dNetIncome<<" 元。\n";    
  31.     cout<<"依法纳税,共享繁荣。谢谢使用!\n";    
  32.     return 0;    
  33. }    

参考2:在参考1基础上做些改进的解法

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>      
  2. using namespace std;    
  3. int main( )    
  4. {    
  5.     double dSalary,dTax = 0,dNetIncome = 0;  //请欣符合匈牙利命名法的变量名  
  6.     double dValue;   //在模板基础上加一个变量,表示超出起征点的收入  
  7.     double dRate, dOffset;  //分别表示税率和速算扣除数  
  8.     cout<<"请输入您本月的收入总额(元):";    
  9.     cin>>dSalary;    
  10.     dValue = dSalary - 3500;   //在起征点基础上考虑纳税   
  11.     if(dValue <= 0.0)    
  12.         dTax = 0.0;  //不需要交税  
  13.     else    
  14.     {    
  15.         if(dValue <= 1500)  
  16.             dRate = 0.03, dOffset = 0.0;   //这一组if语句用于得到税率和速算扣除数  
  17.         else if(dValue <= 4500)  
  18.             dRate = 0.1, dOffset = 105.0;   
  19.         else if(dValue <= 9000)  
  20.             dRate = 0.2, dOffset = 555.0;    
  21.         else if(dValue <= 35000)  
  22.             dRate = 0.25, dOffset = 1005.0;   
  23.         else if(dValue <= 55000)   
  24.             dRate = 0.3, dOffset = 2755.0;    
  25.         else if(dValue <= 80000)  
  26.             dRate = 0.35, dOffset = 5505.0;    
  27.         else   
  28.             dRate = 0.45, dOffset = 13505.0;    
  29.         dTax = dValue * dRate - dOffset;  //计算所得税,体会将“确定参数”与“计算”分开的好处:思路更明晰,不易在计算公式上犯大错  
  30.     }    
  31.     dNetIncome = dSalary-dTax;        //计算税后收入  
  32.     cout<<"您本月应缴个人所得税 "<<dTax<<" 元,税后收入是 "<<dNetIncome<<" 元。\n";    
  33.     cout<<"依法纳税,共享繁荣。谢谢使用!\n";    
  34.     return 0;    
  35. }    

参考3:下面是用switch语句完成的程序。如果感觉这样做还不如直接用if,这种看法也是对的,这种解法的意义也就仅在于练习switch了。

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>      
  2. using namespace std;    
  3. int main( )    
  4. {    
  5.     double dSalary,dTax = 0,dNetIncome = 0;  //请欣符合匈牙利命名法的变量名  
  6.     double dValue;   //在模板基础上加一个变量,表示超出起征点的收入  
  7.     double dRate, dOffset;  //分别表示税率和速算扣除数  
  8.     int iStep;       //用于确定交税的“档次”  
  9.     cout<<"请输入您本月的收入总额(元):";    
  10.     cin>>dSalary;    
  11.     dValue = dSalary - 3500;   //在起征点基础上考虑纳税   
  12.     if(dValue <= 0.0)    
  13.         dTax = 0.0;  //不需要交税  
  14.     else    
  15.     {    
  16.         //这一组if语句确定交税的档次  
  17.         if(dValue <= 1500)  
  18.             iStep = 1;  
  19.         else if(dValue <= 4500)  
  20.             iStep = 2;  
  21.         else if(dValue <= 9000)  
  22.             iStep = 3;  
  23.         else if(dValue <= 35000)  
  24.             iStep = 4;  
  25.         else if(dValue <= 55000)   
  26.             iStep = 5;  
  27.         else if(dValue <= 80000)  
  28.             iStep = 6;  
  29.         else   
  30.             iStep = 7;  
  31.   
  32.         //根据确定的档次,得到税率和速算扣除数,这样处理和问题中给出的列表形式有较好的对应  
  33.         //如果按照教材中的例子,通过类似c=s/n(n最大取500)的形式得到switch的<表达式>,下面的清单得列的很长  
  34.         switch(iStep)  
  35.         {  
  36.         case 1:  
  37.             dRate = 0.03, dOffset = 0.0;  break;   
  38.         case 2:  
  39.             dRate = 0.1, dOffset = 105.0;  break;  
  40.         case 3:  
  41.             dRate = 0.2, dOffset = 555.0;   break;  
  42.         case 4:  
  43.             dRate = 0.25, dOffset = 1005.0;  break;  
  44.         case 5:  
  45.             dRate = 0.3, dOffset = 2755.0;   break;  
  46.         case 6:  
  47.             dRate = 0.35, dOffset = 5505.0;   break;  
  48.         case 7:  
  49.             dRate = 0.45, dOffset = 13505.0;    
  50.         }  
  51.         dTax = dValue * dRate - dOffset;  //计算所得税,体会将“确定参数”与“计算”分开的好处:思路更明晰,不易在计算公式上犯大错  
  52.     }    
  53.     dNetIncome = dSalary-dTax;        //计算税后收入  
  54.     cout<<"您本月应缴个人所得税 "<<dTax<<" 元,税后收入是 "<<dNetIncome<<" 元。\n";    
  55.     cout<<"依法纳税,共享繁荣。谢谢使用!\n";    
  56.     return 0;    
  57. }    

猜你喜欢

转载自blog.csdn.net/macrohui2017/article/details/70331899