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

      

  • 相关阅读:
    Understanding about Baire Category Theorem
    Isometric embedding of metric space
    Convergence theorems for measurable functions
    Mindmap for "Principles of boundary element methods"
    Various formulations of Maxwell equations
    Existence and uniqueness theorems for variational problems
    Kernels and image sets for an operator and its dual
    [loj6498]农民
    [luogu3781]切树游戏
    [atAGC051B]Three Coins
  • 原文地址:https://www.cnblogs.com/BeautyFuture/p/6400536.html
Copyright © 2011-2022 走看看