【c语言|菜鸟教程】经典100例(2)

题目:

    企业发放的奖金根据利润提成。

  • 利润低于或等于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%提成。

从键盘输入当月利润,求应发放奖金总数?

解题思路:

       首先,通读题目之后发现解题需要利润和奖金两个变量,通过在命令行中输入当月的利润,得到并且输出奖金数。程序的关键在于根据利润分级计算奖金,当遇到这种很多分支条件的题目时,我首先想到的是利用switch-case语句来实现逻辑,但是发现利用利润对10进行取整,得到的常量与题目判断条件不符合。所以,我最后选择 if-else if多分支来进行判断。

下面我列出在编写代码时比较容易忽视的点:

1、利润和奖金都不一定是正数,要符合实际问题背景,因此定义为浮点型数据比较合理。

2、以代码中的第一个if-else if为例,当第一个if不满足时,其实已经隐含了利润大于10万元,在下面的else if中就没有必要书写这个条件。

程序代码:

#include <stdio.h>
int main(int argc, char *argv[])
{ 
    float lr, jj;
    printf("请输入当月利润(单位:万元):");
    scanf("%f",&lr);
    if(lr <= 10){
        jj = lr * 0.1;
    }
    else if(lr <= 20){
        jj = (lr - 10) * 0.075 + 10 * 0.1;
    }
    else if(lr <= 40){
        jj = (lr - 20) * 0.05 + 10 * 0.075 + 10 * 0.1;

    }
    else if(lr <= 60){
        jj = (lr - 40) * 0.03 + 20 * 0.05 + 10 * 0.075 + 10 * 0.1;  
    }
    else if(lr <= 100){
        jj = (lr - 60) * 0.015 + 20 * 0.03 + 20 *0.05 + 10 *0.075 + 10 * 0.1; 
    }
    else{
        jj = (lr - 100) * 0.01 + 40 * 0.015 + 20 * 0.03 + 20 *0.05 + 10 *0.075 + 10 * 0.1;
    }
    printf("当月的奖金为:%f万元\n",jj);
    return 0;
} 

运行结果: 

请输入当月利润(单位:万元):9.8
当月的奖金为:0.980000万元
请输入当月利润(单位:万元):67
当月的奖金为:3.455000万元
请输入当月利润(单位:万元):777
当月的奖金为:10.720000万元

改进思路:  

1、首先,可以在代码中加入是否键入有效数据的判断,例如:当用户输入的数据为负数(当然本题中如果有负数的利润也较为合理)、用户输入字符型数据(可以利用scanf的返回值进行判断)。判断后可以利用goto语句、return语句等让用户重新输入或者直接结束程序。

2、代码中对每一个奖金的计算式子比较长,可以参考菜鸟教程网站的例子,定义多个变量来简化书写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值