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

  • Post author:
  • Post category:其他



题目:

企业发放的奖金根据利润提成。利润低于或等于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);
}



版权声明:本文为m0_46735251原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。