下面的程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?
(详细说明解答)
int f (int n,float m)
{
return (m+n)/4;
}
int main ()
{
float y=3;
printf ("%d\n",f(y,y+1));
return 0;
}
下面的程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?
(详细说明解答)
int f (int n,float m)
{
return (m+n)/4;
}
int main ()
{
float y=3;
printf ("%d\n",f(y,y+1));
return 0;
}
从主程序开始解释:
float y=3;
输入一个符点数3进入y,此处的3(int)被转化为3.0(float)。
——————————————————————
printf ("%d\n",f(y,y+1));
输出经过 f 函数处理过的结果,此处的 f 函数中的植如入参数被转化了↓
f(y,y+1) => f(3,3.0+1)
//我用3.0代表它还是一个符点数,而原本应该是3.0的第一个3已经转换成了整数。
在此中的 (m+n)/4 则又转换了一次↓
(m+n)/4 => (3.0+3)/4 => (3.0+3.0)/4 => 6.0/4.0 =>1.0
最后根据
int f (int n,float m)
所以1.0又被转换成了整数1。
printf ("%d\n",f(y,y+1));
的结果就为1。
return (m+n)/4返回值的类型为int
打印结果为1
f(y,y+1)-------->int f (int n,float m)
1:y(float)-->int,//不过不支持隐转换吧,这应该会出错
int f (int n,float m) { return (m+n)/4;//folat------>int 这里也不一定可以,(int)(m + n)/4; }
转换地方:
1、调用f()的时候,第一个参数需要将浮点数y转换为整形
2、f()内部返回的时候需要将浮点数m转换为整形
打印结果是:1
分析:传输参数的是整形的3和浮点数的4.0
在f()内部,n是3,m是浮点数4.0,当返回的时候m被强制转换为整形4
故返回(4+3)/4,而且是整形的,所以返回了1
即得打印结果1
谢谢采纳!
return (m+n)/4;此处虽然m的值为float,但函数返回值的类型为int,所以返回int型
f(y,y+1)第一个y将转化成int型
printf ("%d\n",f(y,y+1));中的f(y,y+1));中的第一个y被转换成int型
return (m+n)/4;中的m被转换成int型
按照程序的执行顺序来解释吧:
int f (int n,float m) //函数体 { return (m+n)/4;
} int main () //程序入口,开始分析代码 { float y=3; printf ("%d\n",f(y,y+1)); //输出,调用函数 int f(int n,float m),将float类型的 y,强制转换为 int,
//之后进入函数体部分 return 0; }
//改程序最终输出的是:1
^_^