C语言 工资提成、利润奖金计算问题例题,switch语句例题

题目:

企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<L≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成
7.5%; 200000<L≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成; 400000<L≤600000元时,高于400000元的部分按3%提成;

600000<L≤1000000时,高于600000元的部分按1.5%提成; L>1000000时,超过1000000元的部分按1%提成。
从键盘输入当月利润L,求应发奖金总数。

输入:

(一个整数)当月利润

输出:

(一个整数)奖金

代码如下:

#include<stdio.h>
int main()
{
    
    
	int i,k,j;
	scanf("%d",&k);
	i=k/100000;
	if(i<10)
	{
    
    
	switch(i)
	{
    
    
		case 0:
			j=k*0.1;break;
		case 1:
			j=100000*0.1+(k-100000)*0.75;break;
		case 2:
		case 3:
			j=100000*0.1+100000*0.75+(k-200000)*0.05;break;
		case 4:
		case 5:
		    j=100000*0.1+100000*0.75+200000*0.05+(k-400000)*0.03;break;
		case 6:
		case 7:
		case 8:
		case 9:
			j=100000*0.1+100000*0.75+200000*0.05+200000*0.03+(k-600000)*0.015;break;
	}
}
    else if(i>=10)
    {
    
    
    j=100000*0.1+100000*0.75+200000*0.05+200000*0.03+400000*0.015+(k-1000000)*0.01;
}
printf("%d",j);
}

注意:

  1. 将很大的数先做除法,变成可用于选择的整数;
  2. break不能掉;
  3. 数字很大容易漏写0,每一层利润数对应的百分比要仔细看;

基于上面的第三点,我们可以在开头定义一个字符,用来表示100000,在计算时直接乘上几倍,就能减少出错。

优化后的代码如下:

#include<stdio.h>
#define Q 100000 
int main()
{
    
    
	int i,k,j;
	scanf("%d",&k);
	i=k/Q;
	if(i<10)
	{
    
    
	switch(i)
	{
    
    
		case 0:
			j=k*0.1;break;
		case 1:
			j=Q*0.1+(k-Q)*0.75;break;
		case 2:
		case 3:
			j=Q*0.1+Q*0.75+(k-2*Q)*0.05;break;
		case 4:
		case 5:
		    j=Q*0.1+Q*0.75+2*Q*0.05+(k-4*Q)*0.03;break;
		case 6:
		case 7:
		case 8:
		case 9:
			j=Q*0.1+Q*0.75+2*Q*0.05+2*Q*0.03+(k-6*Q)*0.015;break;
	}
}
    else if(i>=10)
    {
    
    
    j=Q*0.1+Q*0.75+2*Q*0.05+2*Q*0.03+4*Q*0.015+(k-10*Q)*0.01;
}
printf("%d",j);
}

猜你喜欢

转载自blog.csdn.net/m0_46735251/article/details/112972704