前言:
一时摸鱼一时爽,摸完追作业火葬场QAQ
话不多说,赶紧开始第二题的练习。
之后的任务我打算每天都做一点,堆到最后做太烦了。现在先补完之前的任务,补完之后认真的制定一个计划表。
第二题
题目:
企业发放的奖金根据利润提成。
利润(I)低于或等于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%提成。
从键盘输入当月利润I,求应发放奖金总数?
我的思路
这道题是银行存息和水电阶梯收费奖金制度常见的类型。用数学建模则采用方程组的思想,在C中就选择分支结构来表达。
输入:当月利润I
输出:奖金总数
分析:
1、定义双精度浮点数I和奖金。
2、建立数学模型
3、运用条件分支语句
我的过程
#include<stdio.h>
int main()
{
double I;
double bonus,sun1,sun2,sun3,sun4,sun5;
sun1=100000*0.1;
sun2=sun1+100000*0.075;
sun3=sun2+200000*0.05;
sun4=sun3+200000*0.03;
sun5=sun4+400000*0.015;
printf("利润I为:");
scanf("%lf",&I);
if(I<=100000)
{bonus=I*0.1;}
else if(I>100000&&I<=200000)
{bonus=sun1+(I-100000)*0.075;}
else if(I>200000&&I<=400000)
{bonus=sun1+sun2+(I-200000)*0.05;}
else if(I>400000&&I<=600000)
{bonus=sun1+sun2+sun3+(I-400000)*0.03;}
else if(I>600000&&I<=1000000)
{bonus=sun1+sun2+sun3+sun4+(I-600000)*0.015;}
else if(I>1000000)
{bonus=sun1+sun2+sun3+sun4+sun5+(I-1000000)*0.01;}
printf("该利润下的奖金为:%lf",bonus);
return 0;
}
运行结果
总结
一开始我写代码的时候没有考虑到 输出转换符“%f”和“%lf” 的区别,而使用了%f 这使我在输出结果时因为小数点后的位数不够导致得到错误的结果。%f 的默认输出类型是float,而我定义的却是double类型的数据,应该用%lf 来表示。
在使用条件语句时,也可以用switch语句来替换,不过由于switch语句的表达式不能是实型数据,相比if-else多了一些条件限制。所以最常用的还是if 的分支语句。
在写代码之前,一定要先分析输入和输出,才能更加明确的思考下一个步骤。这题主要是运用了数学思维再加编程逻辑,只要在执行翻译代码之前的思维能清晰有条理,基本上编程都不会出现错误。