当前位置: 代码迷 >> C语言 >> [求助]大家帮忙看下这两个程序到底有什么不同?
  详细解决方案

[求助]大家帮忙看下这两个程序到底有什么不同?

热度:137   发布时间:2007-02-18 19:35:44.0
[求助]大家帮忙看下这两个程序到底有什么不同?

在做谭浩强写的那本C语言的一道题,是让根据利润提成奖金,
写了第一个不对,给改成第二个,发现对了,可是老是想不明白第一个为啥错。
第一个:
main()
{
int x;
long t;
float I,bonus,I1,I2,I3,I4,I5;
printf("I=");
scanf("%f",&I);
t=100000;
I1=t*(10/100);
I2=t*(7.5/100);
I3=2*t*(5/100);
I4=2*t*(3/100);
I5=4*t*(1.5/100);

if(I>=10*t) x=10;
else x=I/100000;
switch(x)
{
case 0 : bonus=I*(10/100);break;
case 1 : bonus=(I-t)*(7.5/100)+I1;break;
case 2 :
case 3 : bonus=(I-2*t)*(5/100)+I2+I1;break;
case 4 :
case 5 : bonus=(I-4*t)*(3/100)+I3+I2+I1;break;
case 6 :
case 7 :
case 8 :
case 9 : bonus=(I-6*t)*(1.5/100)+I4+I3+I2+I1;break;
case 10: bonus=(I-10*t)*(1/100)+I5+I4+I3+I2+I1;break;
}
printf("The bonus is %f.\n",bonus);
}
第二个:
main()
{
int x;
long t;
float I,bonus,I1,I2,I3,I4,I5;
printf("I=");
scanf("%f",&I);
t=100000;
I1=100000*0.1;
I2=100000*0.075;
I3=200000*0.05;
I4=200000*0.03;
I5=400000*0.015;
if(I>=10*t) x=10;
else x=I/100000;
switch(x)
{
case 0 : bonus=I*(10/100);break;
case 1 : bonus=(I-t)*(7.5/100)+I1;break;
case 2 :
case 3 : bonus=(I-2*t)*(5/100)+I2+I1;break;
case 4 :
case 5 : bonus=(I-4*t)*(3/100)+I3+I2+I1;break;
case 6 :
case 7 :
case 8 :
case 9 : bonus=(I-6*t)*(1.5/100)+I4+I3+I2+I1;break;
case 10: bonus=(I-10*t)*(1/100)+I5+I4+I3+I2+I1;break;
}
printf("The bonus is %f.\n",bonus);
}
就是把红字的部分给改了。其他地方一点没变。。
为啥呢?


----------------解决方案--------------------------------------------------------
还有个问题就是
我在定义变量的时候,用double定义的话,结果就是0。是怎么回事啊?
刚学C,问题可能比较幼稚,大家帮忙解决下,
谢谢大家了!
----------------解决方案--------------------------------------------------------
。。大家帮帮忙。在线急等,谢谢啊!

----------------解决方案--------------------------------------------------------

因为写法的不同就会不同啊!10/100的结果是0,而不是0.1啊!!


----------------解决方案--------------------------------------------------------
在没有定义的情况下,会自动定义为整型啊!!所以就是0
----------------解决方案--------------------------------------------------------
哦。了解了
谢谢了!
新春快乐
----------------解决方案--------------------------------------------------------
不过还有个问题啊,我在把第二个程序中
float I,bonus,I1,I2,I3,I4,I5;

定义的时候把float改成double的时候,
结果就变成0了。这是为什么啊?

----------------解决方案--------------------------------------------------------
I1=t*(10/100);
I2=t*(7.5/100);
I3=2*t*(5/100);
I4=2*t*(3/100);
I5=4*t*(1.5/100);

我就说这一个段
请看I1, I3, I4
I1 = t*(10/100) 就相当 I1 = t * 0 = 0.000000,因为根据运算优先级括号中先做10/100其中10被认为是整型,100也是整型,那么10/100就是两个整型数除法,得出的也是个整型数,即0.1被截去小数部分即为0,正确的修改方法I1 = t*(10.0/100),下面I3,I4也是同样道理。
----------------解决方案--------------------------------------------------------

恩,知道了。
谢谢了。
新春快乐!!


----------------解决方案--------------------------------------------------------
楼主应该明白了,这还是数据类型的问题~~~

double

float
----------------解决方案--------------------------------------------------------
  相关解决方案