python企业发放的奖金根据利润提成_c语言与企业发放的奖金根据利润提成

3e3c57ad5f8f08ac008868065e72e6dc.png

图控大叔

构图传递思想

阅读从未如此简单!!!

01

前言

       昨天有个同学(把他当成我的粉丝)找我,说代码出现了bug,并且把源码发我看看。我打开之后才发现,那是与《企业发放的奖金根据利润提成》有关的程序计算,我看了看,改了改,最后找出了问题,并且整理了出来。

02

源码分析

       以下是修正过的代码,那位同学出现的错误将在注释中提到。有两种写法,一种是手动输入利润,另一种是设置提成阈值使程序自动结束。

/*【程序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,求应发放奖金总数?
*/

#include 
#define BASE 10000
volatile int flag = 1;
volatile double I =0;

double case_get(double i);

int main(int argc, char const *argv[]){
  /* code 手动输入利润*/    
  volatile double count = 0;
  double i = 0;

    flag =1;
    printf("请输入当月利润I:\n");
    scanf("%lf",&I);
   
    count =0;
    printf("\n");
    while(flag)
    {

      printf("目前利润是 %lf 万\n",I/BASE);
      count +=case_get(I/BASE);
      printf("累计提成是is %lf \n\n",count);
    }
    
  return 0;
}

double case_get(double i){
  printf("%s\n",__FUNCTION__);
  if(i>100)
  {
    I -= (i-100)*BASE;
    return (i-100)*BASE*0.01;
  }
  else if(i>60)
  {
    I -= (i-60)*BASE;
    return (i-60)*BASE*0.015;
  }
  else if(i>40)
  {
    I -= (i-40)*BASE;
    return (i-40)*BASE*0.03;
  }
  else if(i>20)
  {
    I -= (i-20)*BASE;
    return (i-20)*BASE*0.05;
  }
  else if(i>10)
  {
    I -= (i-10)*BASE;
    return (i-10)*BASE*0.075;
  }
  else
  {
    flag = 0;
    return i*BASE*0.1;
  }
}
/*
  【程序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,求应发放奖金总数?
*/

#include 
#define BASE 10000
volatile int flag = 1;
volatile double I =0;

double case_get(double i);

int main(int argc, char const *argv[]){
  /* code 设置提成阈值使程序自动结束*/    
  volatile double count = 0;
  double i = 0;
  double money =0;
  while(1)
  {
    flag =1;

    money = money+10000;
    I = money;
/*
  那位同学说一直不能超过10万
  问题出在了这里,因为此时的I是全局变量,
  而下面case_get函数也在对I进行更改
  一开始的写法是:I = I + 10000;
  因此采用临时变量就可以解决
*/ 
    count =0;
    //printf("now I is %lf \n",I);
    while(flag)
    {
      //printf("I is %lf \n",I);
      //printf("目前是%lf万 \n",I/BASE);
      count +=case_get(I/BASE);
      //printf("目前利润%lf万 提成累加为 %lf \n",money,count);
    }
    
    //printf("get is %lf \n",count);
    if(count >= 39600)
    {
      printf("最后结果 目前利润%lf万 提成累加为 %lf \n",money,count);
      break;
    }
   }


  return 0;
}

double case_get(double i){
  //printf("%s\n",__FUNCTION__);
  if(i>100)
  {
    I -= (i-100)*BASE;
    return (i-100)*BASE*0.01;
  }
  else if(i>60)
  {
    I -= (i-60)*BASE;
    return (i-60)*BASE*0.015;
  }
  else if(i>40)
  {
    I -= (i-40)*BASE;
    return (i-40)*BASE*0.03;
  }
  else if(i>20)
  {
    I -= (i-20)*BASE;
    return (i-20)*BASE*0.05;
  }
  else if(i>10)
  {
    I -= (i-10)*BASE;
    return (i-10)*BASE*0.075;
  }
  else
  {
    flag = 0;
    return i*BASE*0.1;
  }
}

以下是CSDN平台上一位博主的写法,那位同学说博主的写法更加简单,不像他的那么麻烦。但是我觉得他的更好,二次修改方便,比如说:如果在某段利润范围更改提成比例,他的代码更改起来速度更快9d8d5a200fb47af5421c61ef6a07f406.png!!

#include

/*
这是CSDN平台一位博主的写法
*/
int main(){
    double I,J;
    printf("请输入当月利润:");
    scanf("%lf",&I);
    if(I<=100000)
      J=I*0.1;
    else if(I<=200000)
      J=100000*0.1+(I-100000)*0.075;
    else if(I<=400000)
      J=100000*0.1+(200000-100000)*0.075+(I-200000)*0.05;
    else if(I<=600000)
      J=100000*0.1+(200000-100000)*0.075+(400000-200000)*0.05+(I-600000)*0.03;
    else if(I<=1000000)
      J=100000*0.1+(200000-100000)*0.075+(400000-200000)*0.05+(600000-400000)*0.03+(I-600000)*0.015;
    else
      J=100000*0.1+(200000-100000)*0.075+(400000-200000)*0.05+(600000-400000)*0.03+(1000000-600000)*0.015+(I-1000000)*0.01;
    printf("应得的奖金是:%f\n",J);
    return 0;
}
————————————————
版权声明:本文为CSDN博主「AKK188888881」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AKK188888881/java/article/details/104360135

03

结尾

       本次推文到这里就要结束了,如果读者在编程中遇到了bug,也可以到后台给小编留言哦!

       《图控大叔》,与您一起进步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值