| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1592 人关注过本帖
标题:一段神奇的c语言错误代码 求指点
只看楼主 加入收藏
huayasong
Rank: 2
来 自:江苏东台
等 级:论坛游民
帖 子:33
专家分:16
注 册:2011-1-26
收藏
得分:1 
编程外围人员路过。。。给新人打气。。
继续努力。。HOHO

进步就是每天坚持多懂一点。
成功就是每天进步百分之一。
2011-06-09 19:02
narutosusdo
Rank: 2
等 级:论坛游民
帖 子:45
专家分:25
注 册:2011-5-30
收藏
得分:0 
回复 10楼 ytmfdw
恩,谢谢了,我想学懂,这个5.0和5会产生什么区别,为什么会产生这样的区别?希望你可以回答
2011-06-09 19:42
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
收藏
得分:1 
以下是引用narutosusdo在2011-6-9 19:42:15的发言:

恩,谢谢了,我想学懂,这个5.0和5会产生什么区别,为什么会产生这样的区别?希望你可以回答

5.0/9会以符点数方式来整除,结果会是0。5555。5/9代表整数整除结果会是0,具体还是看例子比较清楚:

#include<stdio.h>
int main()
{
    printf("请输入一个华氏温度\n");
    float a,c,b,d;
    scanf("%f",&a);
    c=5/9*(a-32);
    printf("摄氏温度为%4.2f\n",c);
    printf("表达式5/9*(a-32);运算会按下面的方式进行");
    b=a-32;
    printf("a-32的结果为:%f\n",b)/*输入41,这里会得到9.0000000*/
    d=5/9;
    printf("5/9的结果为:%f\n",d);;/*这里会得到0.000000*/
     printf("%f",d*a);/*表达式5.0/9*(a-32)的最后结果为d*a即0.0000000乘9.0000000最后结果还是0.0000..,这就是为什么你的结果总是0的原因*/
}
 注意看整个表达式是怎么样被程序解析的,先计算什么,后计算什么。因为() 圆括号有最高级别,所以先计算(a-32);然后+-*/运算符有左结合性。所以计算5/9,再乘(a-32)的结果
然后你再换成5.0/9看看结果又是什么,其实可以做个最简单的测试:
  printf("%d",41-32);这个正常就是9。但是如果你改为printf("%d",41.0-32);结果就是0

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2011-06-09 21:03
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
收藏
得分:0 
还有你可以试试这个:
  printf("%f\n",41-32);
按照常归理解结果应该是9.000000,但是结果却偏偏变成了0.000000;数据类型混乱的结果。2个整型数41,32的结果依然是整数,但是却用符点数的%f的结果来显示了。处理这种情况最合适的方法就是进行强制类型转换,比如将上面的代码改为:
printf("%f\n",(float)(41-32));结果就变成了正常的浮点数9.000000了。

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2011-06-09 21:08
a9580643
Rank: 2
来 自:江西九江
等 级:论坛游民
帖 子:60
专家分:59
注 册:2011-4-21
收藏
得分:1 
scanf赋值号少了吧。!

花有重开日,人无在少年。
2011-06-10 04:01
lg888
Rank: 2
等 级:论坛游民
帖 子:13
专家分:46
注 册:2010-6-10
收藏
得分:1 
也不神奇吗
2011-06-11 11:41
weiwei555
Rank: 5Rank: 5
来 自:中国
等 级:职业侠客
帖 子:179
专家分:323
注 册:2011-3-4
收藏
得分:1 
改下就行了

#include<stdio.h>
int main()
{
    printf("请输入一个华氏温度\n");
    float a,c;
    scanf("%f",&a);    //你这里没加取地址符号(&),呵呵,下次可别忘了……
   c=5.0/9*(a-32);    //这里右边的表达式其中的某个数应写成浮点数的形式,如5写成5.0,如此,c得到的为浮点数
    printf("摄氏温度为%4.2f",c);
}



你说的:怎么设置输出的浮点数小数点位数?
    我说:可以这样输出, %m.nf,用这个格式输出-------指定输出的数据共占m列,其中有n 为小数。

你说的:还有,能设置输入的浮点数占位数和位数吗?
    我说:呵呵,这个嘛,我所知道的是不可以这样设置的…… 我也在学习



[ 本帖最后由 weiwei555 于 2011-6-11 22:55 编辑 ]
2011-06-11 22:54
劣质数轴
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:163
注 册:2010-11-19
收藏
得分:1 
回复 12楼 narutosusdo
5在编译器看来是整型(int),而5.0则是浮点型。
所以在编程时要计算5/9应该写成5.0/9或者5.0/9.0,要么就用强制转换(float)5/9
2011-06-12 00:35
gysd
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2011-6-1
收藏
得分:1 
scanf("%f",&a);
2011-06-12 21:30
tanfu126
Rank: 1
等 级:新手上路
帖 子:8
专家分:9
注 册:2011-5-13
收藏
得分:1 
&这个没有··
2011-06-12 22:51
快速回复:一段神奇的c语言错误代码 求指点
数据加载中...
 
   



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

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