-
题目:企业发放的奖金根据利润提成。
利润(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,求应发放奖金总数?
- 程序分析:利用数轴来分界,定位。注意类型的定义。
- 程序源代码:
#include <stdio.h> #include <stdlib.h> //获取利润 int get_i(); //获取奖金 int get_bonus(double i); //判断是否继续 int get_choose(); //主函数 int main() { get_i(); get_choose(); return 0; } int get_i(){ ///定义为双精度浮点型 double i,bonus; printf("请输入你的利润:(万)"); scanf("%lf",&i); ///scanf("%*[^\n]"); scanf("%*c"); ///第一个 scanf() 将逐个读取缓冲区中\n之前的其它字符,% 后面的 * 表示将读取的这些字符丢弃,遇到 ///\n字符时便停止读取。此时,缓冲区中尚有一个\n遗留,第二个 scanf() 再将这个\n读取并丢弃,这里的 ///星号和第一个 scanf()的星号作用相同。由于所有从键盘的输入都是以回车结束的,而回车会产生一个\n ///字符,所以将\n连同它之前的字符全部读取并丢弃之后,也就相当于清除了输入缓冲区。 scanf("%*[^\n]");scanf("%*c"); i = i * 10000; get_bonus(i); return 0; } int get_bonus(double i){ double bonus,bonus1,bonus2,bonus3,bonus4,bonus5; bonus1 = 100000 * 0.1; bonus2 = bonus1 + (100000 * 0.075); bonus3 = bonus2 + (200000 * 0.05); bonus4 = bonus3 + (200000 * 0.03); bonus5 = bonus4 + (400000 * 0.15); if (i<=100000){ bonus = i * 0.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 = bonus3 + (i - 400000) * 0.03; } else if (i <= 1000000){ bonus = bonus4 + (i - 600000) * 0.015; } else if (i>1000000){ bonus = bonus5 + (i - 1000000) * 0.01; } printf("奖金为:%g(元)\n",bonus); return 0; } int get_choose(){ char choose; printf("是否继续计算(y/n):"); scanf("%c",&choose); scanf("%*[^\n]");scanf("%*c"); if (choose == 'y' || choose == 'Y'){ main(); }else{ printf("%c",choose); } return 0; }
-
运行结果: