读书人

C语言100题二的有关问题

发布时间: 2012-02-04 15:43:08 作者: rapoo

C语言100题二的问题
我不知道大家平时是不是对此些小入门程序根本不关注,100例题中的题二中开头出现的BUG这么久了居然一直没有人改过来,而且一直光明正大的存在。当然,我第一次看到这个程序源码的时候不敢确信自己是对的,毕竟每份源代码资料上都是那么写的,以致于我不敢随便猜测。可总觉得有问题,即便是现在我也不敢完全相信自己的判断正确,从网上搜索了一下,每一个关于这个程序的大致上是相同的,没有人提出相反的意见。有些朋友提出来了但是没有去说明这个问题的对与错。这一点真的感到汗颜。为什么就没有人来关注一下这个小小的问题,而它可能真的就是有错误的。针对于像我这样的新手来说,真的是不敢随便怀疑“权威”的可靠性。
虽然我已经进行了运行测试,我把它也给改了过来。但我并不知道是不是正确的,原代码是否是正确无误的。我改了之后是否错误了。这一点我不知道。我想各位老手们仔细认真的考虑一下这个问题。如果原代码是正确的,请你们给我们讲解一下理由,如果是错误的,我希望下次你们能对新手们提出并声明一下,这么一个小小的问题对有经验的编程高手来说是算不得什么的,可是对于新开始学习尤其是自学的朋友来说是会走很多弯路的。就比如我。还望你们能针对于这个问题在下面给出正确的解释以供所有像我一样的朋友参考。多谢。

原代码与我修改后的附后。其实也不能说是我修改,很早就看到了只是怀疑问题的所在,也有许多朋友提出过但我没见人改过。我只是在测试的时候改了一下。我的机器INT类型支持太小,我全改为了LONG类型。而且我认为这也是个BUG。

【程序2】
题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      
2.程序源代码:
---------------------原来的----------------
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf( "%ld ",&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+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=bonus4+(i-400000)*0.03;
          else if(i <=1000000)
              bonus=bonus6+(i-600000)*0.015;
             else
              bonus=bonus10+(i-1000000)*0.01;
printf( "bonus=%d ",bonus);

-------------修改后的---------

main()
{
long int i;
long int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;

printf( "Enter:\n ");
scanf( "%ld ",&i);
while(i!=-1){
bonus1=100000*0.1;
bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;
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=bonus4+(i-400000)*0.03;
else if(i <=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf( "bonus=%ld\n ",bonus);
printf( "Enter:\n ");
scanf( "%ld ",&i);
}
getch ();
return 0;

}


我所认为的出现的问题在于:

bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;

---------------------------------------
bonus1=100000*0.1;


bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

上面的我认为正是问题的所在,为什么就没有改???



[解决办法]
恩 这的确是一个问题哦
没有想到你还蛮细心的哦
[解决办法]
还是用switch吧,太复杂了,没有BUG才怪呢?
[解决办法]
看书看经典

读书人网 >C语言

热点推荐