流光 发表于 2021-11-30 13:58

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;
        }









}




说明下:
这题文档中提供代码 似乎有问题,大家帮忙看看
我写的和他的输出答案不一样,为了更加直观。我把我的思路给打印出来。






兔纸 发表于 2021-11-30 14:20

小白路过学习了

wxyrogue 发表于 2021-11-30 14:51

小白从头开始

kenxy 发表于 2021-11-30 15:11

源码确实有错,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]
查看完整版本: C语言学习100列之002