这里我们想到了俩种方案:

        方法一:

                        直接使用四个if和else条件语句来解决问题

        方法二:

                        使用switch语句来判断

        先展示方法一的代码:

               

​
​
​
#include<stdio.h>

int main()
{
	double income,tax;       //一般都建议直接使用double
	printf("请输入您的收入\n");
	scanf("%lf",&income);
	if(income < 1000)        //判断收入是否小于1000
	{
		tax = 0;
	}
	else if(income>=1000 && income<2000) //收入是否在1000和2000之间(不包含2000)
	{
		tax = (income-1000) *0.05;
	}
	else if(income>=2000 && income<4000) //收入是否在2000和4000之间(不包含4000)
	{
		tax = (income-2000)*0.1+50;
	}
	else if(income>=4000 && income<6000) //收入是否在4000和六千之间(不包含6000)
	{
		tax = (income-4000)*0.15+250;
	}
	else                                 //其他情况的收入
	{
		tax = (income-6000)*0.2+550;
	}
	income -= tax;                   //税后收入income = income - tax
	if(tax==0)                       //判断数值是否想等要用"==",tax的值还是以前的值
                                     //如果用'='后,tax就变成0了,新手一般都在这容易出错
                                     //不用交税就输出不用交税,侮辱性极强
	{
		printf("您无需交税,实际收入为%.2f元",income);
	}
	else                                  //要交税就输出具体的税额
	{                
		printf("您应纳的税额为%.2lf,实际收入为%.2lf",tax,income);//保留俩位小数输出
                                                               //这里使用%f也可以,但是还是        
                                                               //建议一一对应使用%lf
	}
	
	return 0;
	
}

​

​

​

 

        方法二使用switch语句:

​
​
#include<stdio.h>

int main()
{     
	double income,tax;
	printf("请输入您的收入\n");
	scanf("%lf",&income);
	int x;
	x = (income<1000)?1:(income>=1000 && income<2000)?2:
		(income>=2000 && income<4000)?3:(income>=4000 && income<6000)?4:5;
		 		//这里我嫌弃代码长使用了条件表达式,但是我强烈建议不要使用不要使用!!
                //这里为了某人,我后面还是仔细讲了一下,大家麻烦不要嫌烦,可以选择观看
		switch (x)
		{
			case 1:        //这里case后面的数字是上面switch()里x的值
                           //这一点在上面已经处理过了
		 	    tax = 0;
				break;
			case 2:
				tax = (income-1000) *0.05;
				break;
			case 3:
				tax = (income-2000)*0.1+50;
				break;
			case 4:
				tax = (income-4000)*0.15+250;
				break;
			default:           //这里可以用case 5:也可以用defau:程序可以自己判断最后一种情况
				tax = (income-6000)*0.2+550;
				break;
		}
		income -= tax;
		switch (tax==0?1:2)  //这里判断tax是不是等于零等于零就是1,不是就是2
         {                   //再次强调判读是不是等于要用==,'='号是赋值只用一个tax就变成了
			case 1:
			    printf("您无需交税,实际收入为为%.2f元",income);
				break;
			default:         //这里和上面同理
		        printf("您应纳的税额为%.2f,实际收入为%.2f",tax,income);
				break;
		}
		
		 return 0;
		 
}

​

​

x = (income<1000)?1:(income>=1000 && income<2000)?2:
        (income>=2000 && income<4000)?3:(income>=4000 && income<6000)?4:5;

        这里对上面代码继续讲解,()代表了一个整体,我们用具体示例来讲解,如果我们收入是1100;显然不符合第一个?前的条件所以就不返回1,让x=1;那就继续对:后的内容判断,1100在1000到2000之间符合第二个?前的条件,所以判断到这就结束了,这时候就返回2,让x=2后;进入下面的switch(x)代码了,因为x=2,所以只执行case 2:后的代码,其他case就不执行了.

        至于&&符号,就相当于我们集合中的和and,||符号相当于集合中的或or,&&前后的条件都要符号,那么才是真,||前后只要满足一个就行了.

         这也是switch的一个优势,他不像if()语句一样一层层地判断,而是;直接跳到了自己的情况上,某种意义上减轻了计算机的负担;

更多推荐

C语言计算个人所得税