解题思路:
首先进行读题,
企业发放的奖金根据利润提成。利润低于或等于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 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:668 |
简单的a+b (C语言代码)浏览:690 |
C二级辅导-统计字符 (C语言代码)浏览:528 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:545 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:466 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:568 |
WU-printf基础练习2 (C++代码)浏览:2061 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:646 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:701 |
母牛的故事 (C语言代码)浏览:594 |
FNSK 2023-09-26 14:40:37 |
应该是数据类型的问题,我g*0.1改g/10,结果就正常了