谭浩强教授版《C程序设计》(第二版)P105 5.8企业发放的奖金根据利润提成。
利润I低于或等于10万元的,奖金可提10%;200000<I<=400000时,低于20万远的部分低按上述办法提成(下同)。高于20万元的部分5%提成;400000<I<=600000时,高于40万元的部分按3%提成;600000<I<=1000000时,高于60万元的部分按1.5%提成;I>1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
想了几天做不出来,后来参考了谭浩强教授版《C程序设计题解与上机指导》(第二版)P30,书上程序有错误,修改后如下:
#include<stdio.h>//P105 5.8企业发放的奖金根据利润提成。
int main()
{
float I,bonus,bon1,bon2,bon4,bon6,bon10;
printf("请输入奖金的数值:");
scanf("%f",&I);
fflush(stdin);
bon1=100000*0.1;//利润等于10W时的奖金
bon2=bon1+100000*0.075;//利润等于20W时的奖金
bon4=bon2+200000*0.05;//利润等于40W时的奖金
bon6=bon4+200000*0.03;//利润等于60W时的奖金
bon10=bon6+400000*0.015;//利润等于100W时的奖金
if(I<=100000)
{
bonus=I*0.1;printf("执行档次为:I<=100000,奖金为:%0.1f\n",bonus);
}
else if(I<=200000)
{
bonus=bon1+(I-100000)*0.075;printf("执行档次为:100000<I<=200000,奖金为:%0.1f\n",bonus);
}
else if(I<=400000)
{
bonus=bon2+(I-200000)*0.05;printf("执行档次为:200000<I<=400000,奖金为:%0.1f\n",bonus);
}
else if(I<=600000)
{
bonus=bon4+(I-400000)*0.03;printf("执行档次为:400000<I<=600000,奖金为:%0.1f\n",bonus);
}
else if(I<=1000000)
{
bonus=bon6+(I-600000)*0.015;printf("执行档次为:600000<I<=1000000,奖金为:%0.1f\n",bonus);
}
else
{
bonus=bon10+(I-1000000)*0.01;printf("执行档次为:I>1000000,奖金为:%0.1f\n",bonus);
}
return 0;
}
谭浩强教授版《C程序设计题解与上机指导》(第二版)P30,书上程序错误出现在:bon4和bon6的算法,写成了:
bon4=bon2+100000*0.05;//利润等于40W时的奖金
bon6=bon4+100000*0.03;//利润等于60W时的奖金
根据题意应该改为:
bon4=bon2+200000*0.05;//利润等于40W时的奖金
bon6=bon4+200000*0.03;//利润等于60W时的奖金
我刚开始在编写程序的时候犯了错误,比如234000这个数据,我刚开始是这样理解的:
234000=
(34000是利润小于10W的数据,提成10%)+
(10W符合利润等于10万元,按10%提成)+
(10W符合利润高于10万元,低于20万元,按7.5%提成)。
真是大误呀!真是大误呀!真是大误呀!
错的不像话呀!错的不像话呀!错的不像话呀!
正确的:
234000=
(10W是利润小于等于10W的数据,提成10%)+
(10W符合利润高于10W,小于等于20W,按7.5%提成)+
(34000符合利润等于高于20W,按5%提成)。
道理想通了其实不难。