| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:[求助]大家帮忙看下这两个程序到底有什么不同?
只看楼主 加入收藏
srluxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-2-16
收藏
 问题点数:0 回复次数:9 
[求助]大家帮忙看下这两个程序到底有什么不同?

在做谭浩强写的那本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);
}
就是把红字的部分给改了。其他地方一点没变。。
为啥呢?

2007-02-18 19:35
srluxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-2-16
收藏
得分:0 
还有个问题就是
我在定义变量的时候,用double定义的话,结果就是0。是怎么回事啊?
刚学C,问题可能比较幼稚,大家帮忙解决下,
谢谢大家了!
2007-02-18 20:00
srluxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-2-16
收藏
得分:0 
。。大家帮帮忙。在线急等,谢谢啊!
2007-02-18 21:00
zero442
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-26
收藏
得分:0 

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


还是不知道怎么会有这样的想法,但是我永远之爱你一个!!
2007-02-18 21:05
zero442
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-26
收藏
得分:0 
在没有定义的情况下,会自动定义为整型啊!!所以就是0

还是不知道怎么会有这样的想法,但是我永远之爱你一个!!
2007-02-18 21:07
srluxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-2-16
收藏
得分:0 
哦。了解了
谢谢了!
新春快乐
2007-02-18 21:54
srluxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-2-16
收藏
得分:0 
不过还有个问题啊,我在把第二个程序中
float I,bonus,I1,I2,I3,I4,I5;

定义的时候把float改成double的时候,
结果就变成0了。这是为什么啊?
2007-02-18 21:57
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分: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也是同样道理。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2007-02-19 09:44
srluxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-2-16
收藏
得分:0 

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

2007-02-19 20:13
ppm88
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1414
专家分:30
注 册:2007-1-28
收藏
得分:0 
楼主应该明白了,这还是数据类型的问题~~~

double

float
2007-02-19 20:49
快速回复:[求助]大家帮忙看下这两个程序到底有什么不同?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039218 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved