天涯明月刀太白pve连招:当返回值return与函数类型不同时?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/16 00:03:30
main()
{float a,b;int c;
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("Max is %d\n",c);}
max(float x,float y)
{float z;
z=x>y?x:y;
return(z);}
正确运行结果:
输入1.5,2.5
Max is 2/*可能是教科书出错了,运行了几次总是错误,不知道哪儿错了?*/
注意结果必须正确..错误在于程序(你们的运行结果都把原结果改了),不过不审谢谢

c应该定义为float,而且输出格式不是%d,而是%f
函数max也要定义成float
main()
{float a,b,c;
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("Max is %f\n",c);}
float max(float x,float y)
{float z;
z=x>y?x:y;
return(z);}

#include <stdio.h>
main()
{float a,b,c;
float max(float,float);
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("Max is %f\n",c);}
float max(float x,float y)
{float z;
z=x>y?x:y;
return(z);}

没有错误 系统会对不同类型的数据进行相应的转换,当高精度的数据赋给低精度数据时,按位截取。例如:2.5如果是float类型的话,把它给int类型的数据赋值,则变为2,不是四舍五入,直接截掉小数位;double类型赋给float类型是情况也是类似。如果是低精度的数据赋给高精度的则在不足的位置补0。和不同类型数据间的混合运算时类似的,手头有谭浩强的《c程序设计(第二版)》的话在3.7节。

按照提问者给出的代码,运行结果是正确的,c=max(a,b); 句将max函数的返回值的整数部分赋值给了c,此处编译器一般会给出一个warning;如果想得出正确的结果,需要将c定义成fllat型。
main()
{
float a,b,c;
scanf("%f,%f",&a,&b);
printf("Max is %f\n",max(a,b));
}
float max(float x,float y)
{
return x>y?x:y;
}