解题思路:

首先进行读题,

企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;

600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。

由题意可得:

当利润低于或等于10万时,                          b=g×0.1;

当利润高于10万低于20万时,                      b=10000+(g-100000)×0.075;//其中10000为未超出100000部分的提出,就是100000*0.1的部分。

当利润高于20万低于40万,                        b=17500+(g-200000)*0.05);

利润高于40万低于60万,                            b=27500+(g-400000)*0.03);

利润高于60万低于100万,                          b=33500+(g-600000)*0.015);

当利润高于100万时,                                 b=39500+(g-1000000)*0.01);

其中b代表奖金总数,m代表利润。


此处采用switch语句选择对应公式

利用m=g/100000,取10万位数,即可快速匹配到需要的公式。


注意事项:

switch 是选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,

基本格式如下:

 switch(表达式){  case 整型数值 1: 语句 1; 
 case 整型数值 2: 语句 2;  ......  case 整型数值 n: 语句 n; 
 default: 语句 n+1; }

它的执行过程是: 

1) 首先计算“表达式”的值,假设为 m。 

2) 从第一个 case 开始,比较“整型数值 1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句 1”一直执行到“语句 n+1”,而不管后面的 case 是否匹配成功。 

3) 如果“整型数值 1”和 m 不相等,就跳过冒号后面的“语句 1”,继续比较第二个 case、第三个 case……一旦 发现和某个整型数值相等了,就会执行后面所有的语句。假设 m 和“整型数值 5”相等,那么就会从“语句 5”一 直执行到“语句 n+1”。 4) 如果直到最后一个“整型数值 n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。


需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句,也就是说如果没有输入break“跳出”,则会执行该分支后所有分支的语句,在本题中为了能够正确执行对应的公式,只在临界数值上设立了分支语句和break“跳出”。


break 是 C 语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会 执行整个 switch 后面的代码。


由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加 break;语句。 

最后需要说明是:

case 后面必须是一个整数,或者是结果为整数的表达式,不能包含任何变量。


在参考代码中case 0:分支。所对应的公式实际只能计算利润小于10万时的奖金,实际上利润在等于10万时,奖金的计算是由case 1:分支所对应的公式计算的, 其他分支同理。


参考代码:

#include<stdio.h>
int main()
{
    int m,g,b;
    scanf("%d",&g);
    m=g/100000;
    switch(m)
    {
        case 0:printf("%d",b=g*0.1);                     break;
        case 1:printf("%d",b=10000+(g-100000)*0.075);       break;
        case 2:
          case 3:printf("%d",b=17500+(g-200000)*0.05);        break;         
          case 4: 
          case 5:printf("%d",b=27500+(g-400000)*0.03);        break;
          case 6:
          case 7:
          case 8:
          case 9:printf("%d",b=33500+(g-600000)*0.015);       break;
          case 10:
          default:printf("%d",b=39500+(g-1000000)*0.01);       break;
    }
      return 0;
}


点赞(0)
 

0.0分

21 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

FNSK 1年前 回复TA
@想吃德芙 应该是数据类型的问题,我g*0.1改g/10,结果就正常了
想吃德芙 1年前 回复TA
大佬,为啥去掉b这个字符,直接表示就错了呢?