当前位置: 代码迷 >> C语言 >> 一个函数的强制转换问题!
  详细解决方案

一个函数的强制转换问题!

热度:108   发布时间:2006-01-31 13:52:00.0
一个函数的强制转换问题!

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  

----------------解决方案--------------------------------------------------------
怎么没有人回答我的问题呢,
该不会大家都对这类的问题不感兴趣吧!
我真的很想知道为什么,那里不对?
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
我只是想知道int转换成float之后,为什么还会提示
floating point error!do main

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

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

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

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


----------------解决方案--------------------------------------------------------
不太明白,,说明白点好吗?
----------------解决方案--------------------------------------------------------
哎~~很简单的
看见 float chu(float a1,float b1)/*运行了一次之后提示floating point error!do main*/ 这句了没有?
把开头的float改为void就解决你的问题了。另外你的程序中存在大量逻辑错误和设计与实际情况不相符合的情况。

----------------解决方案--------------------------------------------------------
我不明白为什么呢?能具体一点吗?为什么改成void就行了,还有你说的逻辑错误具体是指那一点呢?
----------------解决方案--------------------------------------------------------
#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的情况,其结果为无理数,我看你怎么输入答案~
可能还有其他的,但是你先解决好这些问题吧~~

----------------解决方案--------------------------------------------------------
[QUOTE]而且我们会发现float和double都会出现错误,而用int或者long等就不会~~这又是为什么呢?
哎~~这个要从C语言函数是如何调用的说起了.....太久远啦~~~而且手上没有详细的资料~~不好乱说,怕误导你[/QUOTE]

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

所以,long 是错的。

而C99取消了此规定

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