解题思路:
首先进行读题,
企业发放的奖金根据利润提成。利润低于或等于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分
21 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复