竹枫逐风


私信TA

用户名:twfplayer

访问量:3740

签 名:

等  级
排  名 2573
经  验 2243
参赛次数 1
文章发表 5
年  龄 20
在职情况 学生
学  校 咸阳师范学院
专  业 软件工程

  自我简介:

解题思路:

首先进行读题,

企业发放的奖金根据利润提成。利润低于或等于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分

35 人评分

  评论区

大佬,为啥去掉b这个字符,直接表示就错了呢?
2023-08-07 23:27:10
  • «
  • 1
  • »