【C语言及程序设计】项目1-24-4:个人所得税计算器if语句版

对比笔者和老师的code

笔者:

 1 // 个人所得税计算器if语句版.cpp: 
 2 问题描述:https://blog.csdn.net/sxhelijian/article/details/43918271
 3 //
 4 
 5 #include "stdafx.h"
 6 
 7 
 8 int main()
 9 {
10     double dSalary, dTax = 0, dNetIncome = 0;
11     printf("请输入您本月的收入总额(元):");
12     scanf_s("%lf", &dSalary);
13     // 下面求解应缴个人所和税dTax和税后收入dNetIncome  
14 
15     if (dSalary <= 3500)
16     {
17         dTax = 0;
18         dNetIncome = dSalary;
19     }
20     else
21     {
22         if (dSalary <= 5000)
23         {
24             dTax = (dSalary - 3500) *3.0 / 100 - 0;
25             dNetIncome = dSalary - dTax;
26         }
27         else
28         {
29             if (dSalary <= 8000)
30             {
31                 dTax = (dSalary - 3500) *10.0 / 100 - 105;
32                 dNetIncome = dSalary - dTax;
33             }
34             else
35             {
36                 if (dSalary <= 12500 )
37                 {
38                     dTax = (dSalary - 3500) *20.0 / 100 - 555;
39                     dNetIncome = dSalary - dTax;
40                 }
41                 else
42                 {
43                     if (dSalary <= 38500)
44                     {
45                         dTax = (dSalary - 3500) *25.0 / 100 - 1005;
46                         dNetIncome = dSalary - dTax;
47                     }
48                     else
49                     {
50                         if (dSalary <= 58500)
51                         {
52                             dTax = (dSalary - 3500) *30.0 / 100 - 2755;
53                             dNetIncome = dSalary - dTax;
54                         }
55                         else
56                         {
57                             if (dSalary <= 83500)
58                             {
59                                 dTax = (dSalary - 3500) *35.0 / 100 - 5505;
60                                 dNetIncome = dSalary - dTax;
61                             }
62                             else
63                             {
64                                 dTax = (dSalary - 3500) *45.0 / 100 - 13505;
65                                 dNetIncome = dSalary - dTax;
66                             }
67                         }
68                     }
69                 }
70             }
71         }
72     }
73 
74 
75     printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);
76     printf("依法纳税,共享繁荣。谢谢使用!\n");
77     return 0;
78 }

 

老师:

 1 #include <stdio.h>  
 2 int main ( )  
 3 {  
 4     double dSalary,dTax=0,dNetIncome=0; //请欣符合匈牙利命名法的变量名  
 5     double dValue;   //在模板基础上加一个变量,表示超出起征点的收入  
 6     double dRate, dOffset;  //分别表示税率和速算扣除数  
 7     printf("请输入您本月的收入总额(元):");  
 8     scanf("%lf", &dSalary);  
 9     // 下面求解应缴个人所和税dTax和税后收入dNetIncome  
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     printf("您本月应缴个人所和税 %.2lf 元,税后收入是 %.2lf 元。\n", dTax, dNetIncome);  
33     printf("依法纳税,共享繁荣。谢谢使用!\n");  
34     return 0;  
35 }  

 

感想:

1.这个问题非常简单,所以笔者的code还算凑合,但是老师的code明显更优(更容易阅读与维护),因为其中体现了“模块化”的编程思维(我感觉这类似 C++的面向对象的思维,即OOP),所以小问题也蕴含着大道理;

 

2.程序中的bug 基本上可以分成三种:语法错误、运行错误、逻辑错误。其中最棘手的错误是逻辑错误。

但事实上,语法错误中也有一种非常棘手的错误,那就是 编译器不会报错的语法错误,程序规模一大,极其难以排查,如

if( x = 100 )

if(); //单分支

这些错误,有些聪明的编译器(如vs的最新版)也能查出来,但不聪明的就不会提示出来了。要避免这样的错误,只有靠经验与养成良好的编程习惯(convention)。

if( 100 == x )

if(){
}
 //单分支

 

 

 

 

 

=

转载于:https://www.cnblogs.com/miyazakehime/p/9123102.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值