https://www.runoob.com/cprogramming/c-exercise-example2.html
题目:企业发放的奖金根据利润提成。
利润(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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成双精度浮点(double)型。
实例
include<stdio.h>
int main()
{
double i;
double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
printf("你的净利润是:\n");
scanf("%lf",&i);
bonus1=1000000.1;
bonus2=bonus1+1000000.075;
bonus4=bonus2+2000000.05;
bonus6=bonus4+2000000.03;
bonus10=bonus6+4000000.015;
if(i<=100000) {
bonus=i0.1;
} else if(i<=200000) {
bonus=bonus1+(i-100000)0.075;
} else if(i<=400000) {
bonus=bonus2+(i-200000)0.05;
} else if(i<=600000) {
bonus=bonus4+(i-400000)0.03;
} else if(i<=1000000) {
bonus=bonus6+(i-600000)0.015;
} else if(i>1000000) {
bonus=bonus10+(i-1000000)*0.01;
}
printf("提成为:bonus=%lf",bonus);
printf("\n");
}
以上实例输出结果为:
你的净利润是:
120000
提成为:bonus=11500.000000
procedure TForm1.Button1Click(Sender: TObject);
var
//a,b,c,d,e,f,m,n,x,y,z,i:float;
{ DELPHI的浮点数声明不能用float,而是用real(8个字节),single(8个字节,单精度浮点),double(16个字节,双精度浮点)
浮点数据声明如下:
var i,j,k:real;
m,n:integer;
integer 转化为float是自动进行的.当把一个integer值赋给浮点型的变量时,DELPHI自动进行类型转换. }
a,b,c,d,e,m,i:real;
begin
m:=0; //m初始化为0,然后作为变量装填
i:=strtofloat(edit1.text); //编辑框输入120000
a:=100000*0.1; //100000打底,对应利润在100000-200000之间时引用,作为基数
b:= a+100000*0.075; //200000打底,对应利润在200000-400000之间时引用,作为基数
c:= b+200000*0.05;
d:= c+200000*0.03;
e:= d+200000*0.015;
if i<=100000 then
m:=i*0.1
else if i<=200000 then
m:=a+(i-100000)*0.075
else if i<=400000 then
m:=b+(i-200000)*0.05
else if i<=600000 then
m:=c+(i-400000)*0.03
else if i<=1000000 then
m:=d+(i-600000)*0.015
else if i>1000000 then
m:=e+(i-1000000)*0.01;
{
if i<=100000 then
m:=i*0.1;
if i<=200000 then
m:=a+(i-100000)*0.075;
if i<=400000 then
m:=b+(i-200000)*0.05;
// 以上这段证明了不使用else if 会导致之前的程序被覆盖,逻辑不严谨从而得出错误的结论。
}
showmessage(floattostr(m));
end;