【C语言 经典练习2】

题目

企业发放的奖金根据利润提成。

利润低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
利润20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%;
利润 60万到100万之间时,高于60万元的部分,可提成1.5%; 高于100万元时,超过100万元的部分按1%提成。

思路分析

根据题目要求。经营利润在不同的阶段,用不同的提成率。按照题目要求作出思路整理如下

(1)低于10w提成10%
(2) 10w ~ 20w提成7.5%
(3)20w ~ 40w提成5%
(4)40w ~ 60w提成3%
(5)60w ~ 100w提成1.5%
(6)100w ~提成1%

根据题目可知,若对不同阶段的利润进行计算。我们需要使用 IF() 语句来对不同阶段的利润进行判断以此计算出对应的提成。

(一)

对于6种不同的情况,需要使用6个IF()语句进行判断。
profit 作名词时意为利润

	if(profit<=100000){
		bonus = profit*0.1;
	}
	else if(profit<=200000){
		bonus = 100000*0.1 + (profit - 100000)*0.075;
	}	
	else if(profit<=400000){
		bonus = 100000*0.075 + 100000*0.1 + (profit - 200000)*0.05;
	}
	else if(profit<=600000){
		bonus = 200000*0.05 + 100000*0.075 + 100000*0.1 + (profit - 400000)*0.03;
	}
	else if(profit<=800000){
		bonus = 200000*0.03 + 200000*0.05 + 100000*0.075 + 100000*0.1 + (profit - 600000)*0.015;
	}
	else if(profit>=1000000){
		bonus = 4000000*0.015 + 200000*0.03 + 200000*0.05 + 100000*0.075 + 100000*0.1 + (profit - 1000000)*0.01;		
	}

(二)

在上述的代码中不妨发现各 IF()语句中有许多重复的计算,会对我们的变成带来不必要的麻烦。我们可以通过定义的方式来避免这么多的麻烦,并提高程序的可读性,同时也为后续的校验降低了一些难度。

	int bound0 = 0;
	int bound1 = 100000*0.1;//利润不大于10w奖金提取10% 
	int bound2 = bound1 + 100000*0.075;//利润介于20w,超出10w部分奖金提取7.5%
	int bound3 = bound2 + 200000*0.05;//利润介于40w,超出20w部分奖金提取5%
	int bound4 = bound3 + 200000*0.03;//利润介于60w,超出40w部分奖金提取3%
	int bound5 = bound4 + 400000*0.015;//利润介于80w,超出60w部分奖金提取1.5%
	int bound6 = bound5;//利润高于100w,超出100w部分奖金提取1%

(三)

在接下来的代码中我们就可以利用创建参数的方式简化代码。

	if(profit<=100000){
		bonus = bound0 = profit*0.1;
	}
	else if(profit<=200000){
		bonus = bound2 = bound1 + (profit - 100000)*0.075;
	}	
	else if(profit<=400000){
		bonus = bound3 = bound2 + (profit - 200000)*0.05;
	}
	else if(profit<=600000){
		bonus = bound4 = bound3 + (profit - 400000)*0.03;
	}
	else if(profit<=800000){
		bonus = bound5 = bound4 + (profit - 600000)*0.015;
	}
	else if(profit>=1000000){
		bonus = bound6 = bound5 + (profit - 1000000)*0.01;		
	}

(四)

将最终的代码整合并,实现其功能。

#include<stdio.h>

int main() 
{
	int profit = 0; //利润 
	int bonus = 0; //奖金
	
	int bound0 = 0;
	int bound1 = 100000*0.1;//利润不大于10w奖金提取10% 
	int bound2 = bound1 + 100000*0.075;//利润介于20w,超出10w部分奖金提取7.5%
	int bound3 = bound2 + 200000*0.05;//利润介于40w,超出20w部分奖金提取5%
	int bound4 = bound3 + 200000*0.03;//利润介于60w,超出40w部分奖金提取3%
	int bound5 = bound4 + 4000000*0.015;//利润介于80w,超出60w部分奖金提取1.5%
	int bound6 = bound5;//利润高于100w,超出100w部分奖金提取1%
			
	printf("请输入利润\n");
	scanf("%d",&profit);
	
	//利润不大于10w奖金提取10% 
	if(profit<=100000){
		bonus = bound0 = profit*0.1;
	}
	//利润介于20w,超出10w部分奖金提取7.5%
	else if(profit<=200000){
		bonus = bound2 = bound1 + (profit - 100000)*0.075;
	}	
	//利润介于40w,超出20w部分奖金提取5%
	else if(profit<=400000){
		bonus = bound3 = bound2 + (profit - 200000)*0.05;
	}
	//利润介于60w,超出40w部分奖金提取3%
	else if(profit<=600000){
		bonus = bound4 = bound3 + (profit - 400000)*0.03;
	}
	//利润介于100w,超出60w部分奖金提取1.5%
	else if(profit<=800000){
		bonus = bound5 = bound4 + (profit - 600000)*0.015;
	}
	//利润高于100w,超出100w部分奖金提取1%
	else if(profit>=1000000){
		bonus = bound6 = bound5 + (profit - 1000000)*0.01;		
	}
		
	printf("奖金为%d",bonus);
	return ; 
}

运行结果

请输入利润
8888888
奖金为172388元
--------------------------------
Process exited after 5.028 seconds with return value 14
请按任意键继续. . .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值