只不过是一道循环判断的问题,我没做好,方法也不对,能指点一下我的算法错在那里吗?
/*题目:企业发放的奖金根据利润提成。利润(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<iostream>
using namespace std;
main()
{
float money;
float itmoney1,itmoney2,itmoney3,itmoney6,itmoney10,itmoney;
cout<<"Enter your company this month's gain : ";
cin>>money;
if (0<money&&money<=100000)
{
itmoney1 = money*0.1;
cout<<"The conpany's bonus of this month is : "<<itmoney1<<endl;
}
else if(100000<money&&money<=200000)
{
itmoney2 = (money-100000)*0.075+100000*0.1;
cout<<"The conpany's bonus of this month is : "<<itmoney2<<endl;
}
else if(200000<money&&money<4000000)
{
itmoney3 = (money-200000)*0.05+100000*0.075+100000*0.1;
cout<<"The conpany's bonus of this month is : "<<itmoney3<<endl;
}
else if(400000<money&&money<=600000)
{
itmoney6 = (money-400000)*0.03+200000*0.05+100000*0.075+100000*0.1;
cout<<itmoney6<<endl;
}
else if(600000<money&&money<=1000000)
{
itmoney10 = (money-600000)*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1;
cout<<itmoney10<<endl;
}
else
{
itmoney = (money-1000000)*0.01+400000*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1;
cout<<itmoney<<endl;
}
return 0;
}
问题点数:0、回复次数:10Top
1 楼aceboy16(古人)回复于 2003-05-01 22:48:55 得分 0
思路好象没有错,但有一点希望考虑:
1、对输入的参数进行显式的数据类型转换“(float)money”且进行数据有效性验证
Top
2 楼aviofans(十月风筝)回复于 2003-05-01 23:21:44 得分 0
超过40万之后计算就发生错误,自己仔细再看看啊!我觉得算法没有错的!Top
3 楼flashmagic(乱码游魂)回复于 2003-05-02 16:27:51 得分 0
是这样的!!超过40万后就不对了,具体为什么我也没找出来!!Top
4 楼flashmagic(乱码游魂)回复于 2003-05-02 16:28:58 得分 0
#include<iostream>
using namespace std;
void main()
{
float money1,money2,money4,money6,money10,money;
float itmoney;
money1 = 100000*0.1;
money2 = money1 + 100000*0.075;
money4 = money2 + 200000*0.05;
money6 = money4 + 200000*0.03;
money10= money6 + 400000*0.015;
cout<<"Enter your company gain of this month : ";
cin>>itmoney;
if(0<itmoney&&itmoney<=100000)
money = itmoney *0.1;
else if(100000<itmoney&&itmoney<=200000)
money = (itmoney-100000)*0.075 +money1;
else if(200000<itmoney&&itmoney<=400000)
money = (itmoney-200000)*0.05+money2;
else if(400000<itmoney&&itmoney<=600000)
money = (itmoney-400000)*0.03+money4;
else if(600000<itmoney&&itmoney<=1000000)
money = (itmoney-600000)*0.015+money6;
else if(1000000<itmoney)
money = (itmoney-000000)*0.01+money10;
cout<<money<<endl;
}Top
5 楼tang2003(百无一用)回复于 2003-05-02 16:43:32 得分 0
is : "<<itmoney2<<endl;
}
else if(200000<money&&money<4000000)
这里------------------------------------*Top
6 楼dhfly(飞鸿)回复于 2003-05-02 18:29:31 得分 0
这是潭浩强的C课本上的题,有一本配套题解,可以看一下.Top
7 楼bigtea(企鹅)回复于 2003-05-03 04:28:08 得分 0
else if(200000<money&&money<4000000)
就是这里。Top
8 楼helpall(was jl)回复于 2003-05-03 06:09:20 得分 0
同志们啊,太复杂了吧! :-)
float getPrize(float sales) {
static float table[][2] = {
{0, 10.0},
{100000, 7.5},
{200000, 5.0},
{400000, 3.0},
{600000, 1.5},
{1000000, 1.0}
};
int size = sizeof(table)/sizeof(float)/2;
float result = 0.0;
for(int i = size-1; i>= 0; i--) {
if(sales <= table[i][0])
continue;
result += (sales - table[i][0]) * table[i][1] / 100.0;
sales = table[i][0];
}
return result;
}Top
9 楼Zark(金陵五月)回复于 2003-05-03 06:11:21 得分 0
又是粗心的老问题了.400000写成4000000了.楼主为什么不能设个断点,自已检查一下呢?
Top
10 楼shortppsy(小河)回复于 2003-05-03 08:46:36 得分 0
呵呵:)Top




