| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2784 人关注过本帖
标题:一个函数的强制转换问题!
只看楼主 加入收藏
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
 问题点数:0 回复次数:40 
一个函数的强制转换问题!

float chu(float a1,float b1)/*运行了一次之后提示floating point error!do main*/
{float c=0.00,z=0.00;
printf("%f/%f=",a1,b1);
scanf("%f",&z);
c=a1/b1;
if(c==z)
{printf("%f/%f=%f\t正确!",a1,b1,z);

}
printf("错误!\n");

}
int yusuang(int a,int b,int n)
{int c,z,a1,b1;
switch(n)
{case 1:{printf("%d+%d=",a,b);
scanf("%d",&z);
c=a+b;
if(c==z)
{printf("%d+%d=%d\t正确!\n",a,b,z);
break;
}printf("错误!\n");break;
}
case 2:{printf("%d-%d=",a,b);
scanf("%d",&z);
c=a-b;
if(c==z)
{printf("%d-%d=%d\t正确!\n",a,b,z);
break;
}printf("错误!\n");break;
}
case 3:{printf("%d*%d=",a,b);
scanf("%d",&z);
c=a*b;
if(c==z)
{printf("%d*%d=%d\t正确!\n",a,b,z);
break;
}printf("错误!\n");break;
}
case 4: {a1=(float)a;
b1=(float)b;
chu(a1,b1);
break;
}


} }


#include <time.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
main()
{int x,y,i,n,t;
while (1)
{printf("欢迎你使用四则运算单独训练单元:\n");
printf("1、加法\n2、减法\n3、乘法\n4、除法\n5、退出\n");
scanf("%d",&n);
if(n==5) break;
printf("连续五题:\n");
for(i=0;i<5;i++)
{randomize();
x=random(100);
y=random(100);
yusuang(x,y,n);
}getch();
}
}
什么原因呢?我觉得不可能啊

搜索更多相关主题的帖子: 函数 float int scanf 
2006-01-31 13:52
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
怎么没有人回答我的问题呢,
该不会大家都对这类的问题不感兴趣吧!
我真的很想知道为什么,那里不对?

2006-01-31 16:22
jhosua
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2005-12-31
收藏
得分:0 

狂汗!! 你这也叫提问啊 眼睛都看花了 没兴趣


2006-01-31 16:48
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
我只是想知道int转换成float之后,为什么还会提示
floating point error!do main

2006-01-31 17:47
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

[QUOTE]a1=(float)a[/QUOTE]

你把int型的a提升为float型,然后又赋给int型的a1.
???

这种转换应该不用强制
case 4: {
chu(a,b);
break;
}


2006-01-31 19:29
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
不太明白,,说明白点好吗?

2006-02-01 08:31
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
哎~~很简单的
看见 float chu(float a1,float b1)/*运行了一次之后提示floating point error!do main*/ 这句了没有?
把开头的float改为void就解决你的问题了。另外你的程序中存在大量逻辑错误和设计与实际情况不相符合的情况。

淘宝杜琨
2006-02-01 10:34
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
我不明白为什么呢?能具体一点吗?为什么改成void就行了,还有你说的逻辑错误具体是指那一点呢

2006-02-01 12:10
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
#include <stdio.h>
float func(float a)
{
float c = a ;
/* return c; 如果在这里加上这句就对了*/
}

void main()
{
printf("%f",func(1));
}

这个小程序可以重现你的错误

我们就拿这个小程序来分析。很明显,函数被声明为float类型但是却没有任何的return语句出现在函数中,这样会出现什么情况呢?
而且我们会发现float和double都会出现错误,而用int或者long等就不会~~这又是为什么呢?
哎~~这个要从C语言函数是如何调用的说起了.....太久远啦~~~而且手上没有详细的资料~~不好乱说,怕误导你

我说的逻辑错误是指:
if(c==z)
{printf("%f/%f=%f\t正确!",a1,b1,z);

}
printf("错误!\n");

这里,无论答案是对还是错都会输出 错误~
还有 c==z这样的判断理论上是正确的,可是实际上很可能会出现1/7的情况,其结果为无理数,我看你怎么输入答案~
可能还有其他的,但是你先解决好这些问题吧~~

淘宝杜琨
2006-02-01 13:08
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[QUOTE]而且我们会发现float和double都会出现错误,而用int或者long等就不会~~这又是为什么呢?
哎~~这个要从C语言函数是如何调用的说起了.....太久远啦~~~而且手上没有详细的资料~~不好乱说,怕误导你[/QUOTE]

C89标准规定,如是没有显式地定义一个函数的返回类型,则默认此函数的返回类型为int

所以,long 是错的。

而C99取消了此规定

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-02-01 13:14
快速回复:一个函数的强制转换问题!
数据加载中...
 
   



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

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