c语言100实例2一个数据填写错误导致的问题论校验的重要性

小乔流水人家 小乔流水人家     2022-08-22     791

关键词:

/**
*题目:企业发放的奖金根据利润提成。
*利润(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;
}

 

  

 

论特定场景适合的设计模式之1:简单工厂模式(代码片段)

...简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例。 为什么要使用简单工厂模式原因很简单:解耦。A对象如果要调用B对象,最简单的做法就是直接new一个B出来。这么做有一个问题,假如C类和B类实现了同一个接... 查看详情

硬盘出现“资料crc错误”怎么办

...先暂停cpu,从硬盘传输数据到内存,然后恢复cpu。每传输一个数据就要中断一次cpu。dma则可以采用周期窃取方式,只占用一个cpu周期就可以把数据传输完毕。crc是循环冗余校验的意思,它会在要传输的数据后端加上若干位的校验... 查看详情

快速谓词导致错误无法识别选择器发送到实例 0x156c9580'

】快速谓词导致错误无法识别选择器发送到实例0x156c9580\\\'【英文标题】:swiftpredicateresultsinanerrorunrecognizedselectorsenttoinstance0x156c9580\'快速谓词导致错误无法识别选择器发送到实例0x156c9580\'【发布时间】:2015-11-0514:13:06【问题描述... 查看详情

由于错误处理承诺而导致的套接字挂断

...】:2021-11-1314:08:56【问题描述】:我有脚本可以将数据从一个平台移动到另一个平台。源数据库只允许在单个请求中获取100条记录。所以我创建了一个例程来批量获取100个,我猜它工作正常。现在我尝试处理每条100条记录并进行... 查看详情

运筹学-图论实例(代码片段)

图论中一些简单的计算,并用R语言实现。目录最短路问题Dijkstra算法R语言实现最大流与最小割割集的定义割集的容量最大流-最小割问题R语言实现最短路问题求连通图任意两点间总权最小的路Dijkstra算法对每一个顶点给出一... 查看详情

潇湘高考hash值校验失败怎么办

参考技术A解决方法如下:1、首先确认信息是否填写正确,如果输入的信息不对,就会出现填写错误的提示。2、如果信息等都填写正确,但一直出现异常情况,加载失败等等,可能是因为系统原因,可以等一回再重新试试看。3... 查看详情

tcp窗口扩展因子设置错误导致数据传输慢问题排查始末

...,正常情况下应该是50M/s左右。这个2个机房是跨地区的,一个在广东,一个在江苏。说明:这里为了表述,将用户在广东机房的服务器称为A服务器,江苏机房的服务器称为B服务器。将我自己在广东机房的服务顺称为C服务器,江... 查看详情

一文讲透crc校验码-附赠c语言实例

最近工作用到CRC校验,顺便整理本篇文章和大家一起研究。一、CRC概念1.什么是CRC?CRC(CyclicRedundancyChecksum)是一种纠错技术,代表循环冗余校验和。数据通信领域中最常用的一种差错校验码,其信息字段... 查看详情

返回实例导致“尝试引用已删除的函数”错误

】返回实例导致“尝试引用已删除的函数”错误【英文标题】:Returninstancecauses\'attemptingtoreferenceadeletedfunction\'error【发布时间】:2016-12-0701:25:23【问题描述】:在过去一两年使用C#之后,我的C++变得有点生疏了。我正在编写一个... 查看详情

c语言写的链表。明明没有错误,为啥编译器还会报错,?而且还爆出100+的错误,求解。

太长没有办法发过来,http://tieba.baidu.com/p/2077544469百度贴把的连接参考技术A就是前面和后面有点问题,直接用下面的替换掉对应的部分就行了。你去私信里复制代码吧,私信里复制粘贴后不是一整行。#include<malloc.h>#include<... 查看详情

序列求和

...来。本题另一个要值得注意的地方是答案的大小不在你的语言默认的整型(int)范围内,如果使用整型来保存结果,会导致结果错误。如果你使用C++或C语言而且准备使用printf输出结果,则你的格式字符串应该写成%I64d以输出longlong... 查看详情

接口测试常见bug

一、接口参数数据类型:1.数值型2.字符串类型3.数组或者链表类型4.结构体二、接口测试常见bug:1.特殊值处理不当导致程序异常退出或者崩溃2.类型边界溢出,导致数据读出和写入不一致3.取值边界外值未返回正确的错误信息4.... 查看详情

一个c语言运算符优先级导致的问题

检测某个数的某个二进制位是否为0,是常见的控制逻辑,如下代码所示:if(x&(1<<2)==0)printf("x的第2个二进制位为0\\n");然而实际上,上述代码永远不会执行printf,也就是说x&(1<<2)==... 查看详情

编程程序runtimeerror

...越界。之所以存在缓冲区溢出漏洞,一个主要的原因是C语言并不对数组下标进行界限检查。2、stackoverflow栈溢出栈这个东西在操作系统中通常用来维护一个函数的调用,C语言中在调用函数的时候会依懒一个“栈”这种数据结构... 查看详情

接口测试重点小计

...支付过20分钟订单自动取消栗子:针对状态转换分析比如一个打车订单,从乘客下单、司机抢单、到达起点、接上乘客、到达目的地,发起支付,支付,评价 查看详情

从产品开发测试论恋爱的不同阶段

1.产品的角度:  当两个人在一起本身就是一个错误时候,说明两个人在恋爱之前没有互相了解对方;没有互相做需求调研导致双方身心疲惫,心灵受到伤害。同时就涉及到需求变更(需求变更流程复杂),需求变更会导致感... 查看详情

导致C崩溃的数组大小[重复]

...布时间】:2015-06-2314:55:31【问题描述】:我正在努力用C语言制作大量结构数组。我需要该数组来容纳超过100万个结构实例。然而,当数组大小超过几十万时,程序就会崩溃。它的第一位运行良好,然后崩溃。我正在运行具有6GBRA... 查看详情

c语言,指针问题

int*p[100]和int(*p)[100]分别是什么意思呢?详细点最好还有这个,typedefint(*type1_t)(constchar*,int)和typedefinttype2_t(constchar*,int)是什么意思啊(1)int*p[100]是一个指向int型的指针数组,即:p是包含100元素的指针数组,指针指向的是int型。它可以... 查看详情