谭浩强 第5版 第4章 第10题

时间:2024-01-26 13:00:37
企业发放的奖金根据利润提成。(利润用“x”代替)
  • x ≤100000元的,奖金可提成10%
  • 100000< x ≤200000元部分,按7.5%提成
  • 200000< x ≤400000元部分,按5%提成
  • 400000< x ≤600000元部分,按3%提成
  • 600000< x ≤1000000元部分,按1.5%提成
  • 1000000< x 部分,按1%提成。
要求:
  1. 从键盘输入当月利润 x ,输出应发奖金总数
  2. 使用if语句编写程序。
  3. 使用switch语句编写程序。
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

double Bonus(int i)
{
	int a = 0;
	double money = 0;
	int rem = 0;

	//看有几个10万
	//注意这里是向下取整,待会儿还要把余数进行计算
	a = i / 100000;
	rem = i % 100000;

	//把不同阶段的10万进行不同的奖金制度(最低档10万及以下,最高档100万以上)
	//因为金额是向下兼容的(20万必然包含10万)
  //所以我们中间不设置break,直接让它一直累积到底
	switch(a)
	{
	case 10:
		money += 100000 * 0.015;
	case 9:
		money += 100000 * 0.015;
	case 8:
		money += 100000 * 0.015;
	case 7:
		money += 100000 * 0.015;
		
	case 6:
		if (a >= 6)
		{
			money += rem * 0.015;
		}
		money += 100000 * 0.03;
	case 5:
		money += 100000 * 0.03;
	case 4:
		if (a >= 4 && a < 6)
		{
			money += rem * 0.03;
		}
		money += 100000 * 0.05;
	case 3:
		money += 100000 * 0.05;
	case 2:
		if (a >= 2 && a < 4)
		{
			money += rem * 0.05;
		}
		money += 100000 * 0.075;
	case 1:
		if (a >= 1 && a < 2)
		{
			money += rem * 0.075;
		}
		money += 100000 * 0.1;
		break;

	//利润不够10万时
	default:
		if (a < 1)
		{
			money += rem * 0.1;
		}
		break;
	}
	return money;
}

int main()
{
	int i = 0;
	double money = 0;

	printf("请输入本月的利润,单位为元:");

	//输入
	scanf("%d", &i);

	//计算奖金
	money = Bonus(i);

	//输出
	printf("本月应发奖金为%.2lf元\n", money);
	
	return 0;
}