C语言学习100列之002
【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于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%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0. 1;
bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i<=100000)
bonus=i*0.1;
else if(i<=200000)
bonus=bonus1+(i-100000)*0.075;
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
getch();
}
自写代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
double rates(long int);
long int I;
long int temp_I;
long int Iarr = { 0,100000,200000,400000,600000,1000000 };//设置阶段值
double sum = 0;
printf("请输入当月的利润:");
scanf("%ld", &I);
//float b = rates(I);
for (int i = 5; i >= 0; i--) //五个阶段的计算,从大到小
{
if (I > Iarr)//如果当月的利润 存在计算的阶段内
{
temp_I = I - Iarr;//利润-阶段范围 = 需要计算的奖金
sum = sum + (double)temp_I * rates(I); //从函数获取利率并计算
printf("高于%ld 利润结算范围,%ld元业绩 提成比例为:%.1lf%%计算奖金:%lf\n", Iarr, temp_I, rates(I) * 100, temp_I * rates(I));
I = I - (long int)temp_I;
}
}
printf("总奖金为:%lf\n", sum);
return 0;
}
double rates(long int a) {
if (a > 1000000)
{
return 0.001;
}
else if (a > 600000)
{
return 0.015;
}
else if (a > 400000)
{
return 0.030;
}
else if (a > 200000)
{
return 0.050;
}
else if (a > 100000)
{
return 0.075;
}
else
{
return 0.1000;
}
}
说明下:
这题文档中提供代码 似乎有问题,大家帮忙看看
我写的和他的输出答案不一样,为了更加直观。我把我的思路给打印出来。
小白路过学习了 小白从头开始 源码确实有错,bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;几个小数写错了,应该是0.075,0.05,0.03, 0.015
页:
[1]