任务和代码
/*
*Copyright ©2017,CSDN学院
*All rights reserved.
*文件名称:main.c
*作 者:LP
*完成日期:2017年10月11日
*版 本 号:visual studio 2015
*问题描述:交税问题
*/
#include<stdio.h>
int main()
{
double dSalary, dTax = 0, dNetIncom = 0, a;
int t;
printf("请输入您本月的收入总额(元):");
scanf("%lf", &dSalary);
a = dSalary - 3500;
t = (a < 0) + (a < 1500) + (a < 4500) + (a < 9000) + (a < 35000) + (a < 55000) + (a < 80000);
switch (t)
{
case 7:
printf("不需要交税。");
break;
case 6:
dTax = a*0.03;
break;
case 5:
dTax = a*0.1 - 105;
break;
case 4:
dTax = a*0.2 - 555;
break;
case 3:
dTax = a*0.25 - 1005;
break;
case 2:
dTax = a*0.3 - 2755;
break;
case 1:
dTax = a*0.35 - 5505;
break;
case 0:
dTax = a*0.45 - 13505;
}
dNetIncom = dSalary - dTax;
printf("您本月应缴个人所扣税%.2f 元,税后收入是%.2f 元。\n", dTax, dNetIncom);
printf("依法纳税,共享繁荣。谢谢使用!\n");
return 0;
}
运行结果
心得
此题用if else语句之前已经有编写过,switch语句的逻辑实现和if 语句类似,但是switch()里面的数不能有太多的case项,不然会使程序显得非常的臃肿,于是结合视频学习过的知识,试着将各个case段的数除以一个公约数(雷同汽车公里邮费问题),因为数之间的跳跃仍然过大,就想到使用y=f(x)函数里面不同的x范围的表达方式,利用范围判断的真假来给定一个t值,从而让case缩减到和段数匹配的数目。