zoukankan      html  css  js  c++  java
  • c语言100实例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,求应发放奖金总数?
    *程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
    *
    ***/
    
    double award(double a)
    {
        
        if (a < 0)
        {
            return 0;
        }
        //系统有默认的转化规则,就是从精度底的转化为精度高的,避免计算时精度的丢失
        //char  --> short  --> int ---> unsigned  --> long --> unsigned long --> float --> double
        double res = 0;
        double percent[6] = { 0.1, 0.075, 0.05, 0.03, 0.015, 0.01 };
    double step[6] = { 100000, 100000, 200000, 200000, 4000000, 0 }; //倒数第二个元素填写成了400万 导致与答案给的结果不符合
        //double step[6] = { 100000, 100000, 200000, 200000, 400000, 0 };
        //先考虑溢出问题
        /**
        if (0<a <= 100000)
        {
            res = a * 1 / 10;
        }
        else if (a<=200000)
        {
            res = 100000 * 1 / 10;
            res += (a - 100000) * 75 /1000;
        }
        else if (a<=400000)
        {
            res = a * 0.01;
        }
        else if (a<=600000)
        {
            res = a * 0.01;
        }
        else if (a<=1000000)
        {
            res = a * 0.01;
        }
        else
        {
            res = a * 0.01;
        }
    
        **/
        /**
        伪流程:
            判断是否达到10以上 没有计算然后退出
            减去10万的利润
            减去10万计算得出的利润
            假设200万
            190万  10万算利润
            180万  10万算利润
            160万 20万算利润
            140 万 20万算利润
            100 万 40万算利润
                    100万剩余算利润 最后的不在计算
    
            假设43万
            33 万 10万算利润
            23万  10万算利润
            3    20万算利润
                    3万剩余利润  <0
        **/
        double money;
        printf("传入参数的数值:%lf
    ",a);
        for (int i =0;i<6;i++)
        {
            money = a - step[i];//剩余的钱数
            if (money <= 0)
            {
                res += a * percent[i];
                printf("第%0.1d次:%lf
    ", i + 1,res);
                break;
            }
            else
            {
                a = money;//剩余的钱数先赋值给a为下次循环准备
                if (step[i] != 0)
                {    
                    res += step[i] * percent[i];
                    printf("第%0.1d次:%lf
    ", i + 1, res);
                }
                else
                {
                    res += a * percent[i];
                    printf("第%0.1d次:%lf
    ", i + 1, res);
                    break;
                }
                
            }
    
        }
        
    
        return res;
    }
    
    
    double award2(double i)
    {
        //面向过程 流程清晰
        double bonus1, bonus2, bonus4, bonus6, bonus10, bonus;
        
        bonus1 = 100000 * 0.1;
        bonus2 = bonus1 + 100000 * 0.075;
        bonus4 = bonus2 + 200000 * 0.05;
        bonus6 = bonus4 + 200000 * 0.03;
        bonus10 = bonus6 + 400000 * 0.015;
        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 if (i>1000000) {
            bonus = bonus10 + (i - 1000000)*0.01;
        }
        
        return bonus;
    }

    输入输出:

    int main()
    {
    printf("The number of bits in a byte %d
    ", CHAR_BIT);
    
        printf("The minimum value of SIGNED CHAR = %d
    ", SCHAR_MIN);
        printf("The maximum value of SIGNED CHAR = %d
    ", SCHAR_MAX);
        printf("The maximum value of UNSIGNED CHAR = %d
    ", UCHAR_MAX);
    
        printf("The minimum value of SHORT INT = %d
    ", SHRT_MIN);
        printf("The maximum value of SHORT INT = %d
    ", SHRT_MAX);
    
        printf("The minimum value of INT = %d
    ", INT_MIN);
        printf("The maximum value of INT = %d
    ", INT_MAX);
    
        printf("The minimum value of CHAR = %d
    ", CHAR_MIN);
        printf("The maximum value of CHAR = %d
    ", CHAR_MAX);
    
        printf("The minimum value of LONG = %ld
    ", LONG_MIN);
        printf("The maximum value of LONG = %ld
    ", LONG_MAX);
    
        printf("The maximum value of float = %f
    ", FLT_MAX);
        printf("The minimum value of float = %f
    ", FLT_MIN);
    
        printf("The maximum value of double = %f
    ", DBL_MAX);
        printf("The minimum value of double = %f
    ", DBL_MIN);
    
        double a;
    
    
        
        
        for (;;)
        {
            printf("你的净利润是:
    ");
            scanf("%lf", &a);
            printf("1函数利润提成%lf
    ", award(a));
            printf("2函数利润提成%lf
    ", award2(a));
        }
    return 0;
    }

      

  • 相关阅读:
    withDefaultPasswordEncoder() 过时弃用问题
    @Value不能给静态变量直接赋值问题
    java编程思想之垃圾收集
    阅读java编程思想之一切都是对象
    阅读java编程思想的总结(一)
    Idea连接服务器docker并部署代码到docker实现一键启动
    后端设置Cookie前端跨域获取丢失问题(基于springboot实现)
    win10安装docker并结合Idea2018.1部署springboot项目
    Idea用maven给springboot打jar包
    css纯数字或字母换行
  • 原文地址:https://www.cnblogs.com/BeautyFuture/p/6400536.html
Copyright © 2011-2022 走看看