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\n",a);
    for (int i =0;i<6;i++)
    {
        money = a - step[i];//剩余的钱数
        if (money <= 0)
        {
            res += a * percent[i];
            printf("第%0.1d次:%lf\n", i + 1,res);
            break;
        }
        else
        {
            a = money;//剩余的钱数先赋值给a为下次循环准备
            if (step[i] != 0)
            {
                res += step[i] * percent[i];
                printf("第%0.1d次:%lf\n", i + 1, res);
            }
            else
            {
                res += a * percent[i];
                printf("第%0.1d次:%lf\n", 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\n", CHAR_BIT);

    printf("The minimum value of SIGNED CHAR = %d\n", SCHAR_MIN);
    printf("The maximum value of SIGNED CHAR = %d\n", SCHAR_MAX);
    printf("The maximum value of UNSIGNED CHAR = %d\n", UCHAR_MAX);

    printf("The minimum value of SHORT INT = %d\n", SHRT_MIN);
    printf("The maximum value of SHORT INT = %d\n", SHRT_MAX);

    printf("The minimum value of INT = %d\n", INT_MIN);
    printf("The maximum value of INT = %d\n", INT_MAX);

    printf("The minimum value of CHAR = %d\n", CHAR_MIN);
    printf("The maximum value of CHAR = %d\n", CHAR_MAX);

    printf("The minimum value of LONG = %ld\n", LONG_MIN);
    printf("The maximum value of LONG = %ld\n", LONG_MAX);

    printf("The maximum value of float = %f\n", FLT_MAX);
    printf("The minimum value of float = %f\n", FLT_MIN);

    printf("The maximum value of double = %f\n", DBL_MAX);
    printf("The minimum value of double = %f\n", DBL_MIN);

    double a;

    for (;;)
    {
        printf("你的净利润是:\n");
        scanf("%lf", &a);
        printf("1函数利润提成%lf\n", award(a));
        printf("2函数利润提成%lf\n", award2(a));
    }
return 0;
}

  

时间: 2024-08-11 09:56:40

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

Linux实例/etc/fstab文件配置错误导致系统启动异常

Centos 7.3系统 问题现象: 阿里云ECS升级配置后重启,SSH连接不上.登录控制台远程连接ECS,出现以下界面.  提交工单阿里云反馈:https://help.aliyun.com/knowledge_detail/41460.html 问题原因: 一般是因为/etc/fstab文件中写入了错误的文件系统或者磁盘的分区信息不正确. 解决方法: 看到阿里云官方文档后突然想起来,前段时间挂载过一块云盘.然后查看/etc/fstab 文件.发现设备名字冲突了,当时挂载时没有注意  尴尬.注

C语言优化实例:消除多级指针的间接访问

如果一个多层次的数据结构达到两级或者两级以上,举例如下: struct A{ int array_member[100]; //其他数据成员 }; struct B{ struct A *a_ptr; //其他数据成员 } 那么通过B类型的指针b_ptr访问A类型的array_member的某一个元素array_member[0]则需要使用b_ptr->a_ptr->array_member[0]这种多级指针的形式.如果一个函数中多次用到这个变量的话,可以采用一个临时变量保存这个多级指针:in

转载-从信息论角度论证为什么汉语是世界上最先进的语言--引用多项实验数据

[转载]从信息论角度论证为什么汉语是世界上最先进的语言–引用多项实验数据 作者:汉语计算机应用研究小组(笔名:冷酷的哲学?) 一.语言水平高低的评判准则 口语,实际上是一种通讯协议.就是说,语言实际上是把人的思想通过发音器官变成一串频率不同.波形不同的声波,然后被另一个体的听觉器官和相关的脑部组织重新转变回思想.通讯协议,就是一个规则,一个规定了应该如何把思想/信息转变为易于传输的信号的规则 计算机上,通讯协议有两个基本评判标准:[传输效率]和[抗噪能力] 传输效率:在单位时间里,按照该通讯协议

day20 java 语言中的读取写入数据(一)

day20  java 语言中的读取写入数据(一) 一.io概述 io数据流的读写功能,在实际的生活中也很常见,比如文件的上传.下载,日志的自动更新等都与io读写密切相关.io又被分为了读取数据和写入数据两个大的功能.下面就来看看读取数据的几种类. 二.读取数据的几种方式 读取数据被分为了字节流读取数据,和字符流读取数据两种. (一):字符输入流: 1.fileReader类.是字符流读取数据 2.BufferedReader类.带有缓冲流读取数据 (二):字节输入流: 1.FileInputS

《Go语言入门》第一个Go语言Web程序——简单的Web服务器

概述 上一篇讲了 <Go语言入门>第一个Go语言程序--HelloWorld,接下来讲一下Go语言Web开发入门必修课:第一个Go语言Web程序--简单的Web服务器. 与其它Web后端语言不同,Go语言需要自己编写Web服务器. 有关本地环境的搭建与基础学习,请参考: <Go语言入门>如何在Windows下安装Go语言编程环境 Go语言Web应用:IBM的云平台Bluemix使用初体验--创建Go语言 Web 应用程序,添加并使用语言翻译服务 Web服务器代码 Google在ht

在一组降序排列的数组中插入一个数据,插入后,数组中数据依然按降序排列

分析: 1.数组固定,是一个倒序的数组 2.插入一个数据,这个数据插在哪呢,要比较,与数组中所有的元素比较,这里需要一个循环,因为是降序的数组,所以当第一次遇到比自己小的,那么这个位置就是要插入的位置 3.因为上一步被占了位置,那么从这个插入的数据开始,后面的原本的数据都得向右移一位 /** * */ package com.cn.u4; import java.util.Scanner; /** * @author Administrator *向有序数组中插入学员成绩 * 在一组降序排列的数

php实例之mysql数据备份

本代码实现了表结构和数据完全分开,默认有一个文件会记录所有表的结构,然后表中数据的备份 如果超过分卷的大小则会分成多个文件,不然则一个文件 备份:表结构和数据完全分开,默认有一个文件会记录所有表的结构,然后表中数据的备份 如果超过分卷的大小则会分成多个文件,不然则一个文件,参考了别人的代码,不过写的嘛,差强 人意,以后慢慢改吧... 代码如下: <?php /* * Created on 2014 * Link for [email protected] * This is seocheck b

C语言优化实例:循环中减少判断

为了让编译器更好地优化循环,应该尽量让循环中减少判断,方法之一是将判断语句整合进表达式.还是这个例子: for (int i = 0; i < 1000*10; i++) { sum += data[i/1000][i%10]; } 假如我们需要加一个判断,只有非负整数才需要作求和运算: for (int i = 0; i < 1000*10; i++) { if (data[i/1000][i%10] >= 0) sum += data[i/1000][i%10]; } 下面将这个判断

php处理数据库数据,每处理一个数据返回客户端显示当前状态的方法。

php处理大量数据,每处理一个数据返回客户端显示当前状态的方法. 类似于dedecms生成静态页 想法: 客户端发送请求 服务器端接受请求,开始统计所需处理的数据量 将所需处理数据按一定规则排列,发送到服务器处理端 服务器处理端处理了第一个数据,将处理结果经过一定处理后发送给客户端 客户端接收到结果,自动将处理结果显示并发送到服务器 服务器接收到处理结果 将它转发到服务器处理端 处理端继续处理结果... 循环4-7步骤,直到处理完毕 实验过程: 1.创建数据库和表 create database