永发信息网

C语言函数程序.下面程序max函数放在main函数前和后为什么结果不一样?

答案:6  悬赏:70  手机版
解决时间 2021-02-27 15:44
  • 提问者网友:一抹荒凉废墟
  • 2021-02-26 15:10
#include
max(float x, float y)
{ float z;
z=x>y?x:y;
return(z);
}
void main()
{
float a,b;
int c;
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("Max is %d\n",c); }
若输入1.5,6.5,结果为Max is 6。为什么max函数放在main函数后结果就为Max is 1了呢?求高人指点
最佳答案
  • 五星知识达人网友:迟山
  • 2021-02-26 16:32
1、max没有明显制定返回值类型,编译器会默认返回值为int。

2、max放在main函数的开始,main函数会知道max函数的类型定义,知道需要传入两个参数,所以功能可以实现。

3、max放在main函数的后面,main函数就不知道max函数的类型定义,虽然代码里显示调用max函数并传入了参数a和b,但是编译器并不认为max有两个参数,仍然认为max没有参数,所以输入的1.5和6.5不会传给max,那么max计算的就不是楼主传入的最大值了。max函数运行时,得到的参数值堆栈里面的随机值,所以算出来了1。

具体的原因楼主可以看一下编译出来的汇编语言,就知道原因了。或者打一个断点在max函数里面,看看参数的值也是可以确定的。
全部回答
  • 1楼网友:不如潦草
  • 2021-02-26 19:21
什么叫 max函数放在main函数后
  • 2楼网友:荒野風
  • 2021-02-26 18:52
max里的叫形参,可以随便用哪个都一样的,大概你是新手,不知道什么是形参和实参吧~ 形参与实参的区别: 高级语言在设计程序模块时,模块名定义后,紧跟其后所定义的参数(括弧内)被称为形参(也称虚参)。当该模块被调用时,在主调模块中,出现在被调用的模块名后的参数被称为实参。实参代替虚参的过程被称为虚、实结合,也称换参。多数高级语言的换参是由编译系统来完成,比如c语言和fortran语言亦是如此。basic语言的换参则是由程序设计人员来完成的。如果只允许实参向虚参传递,则被称为“单向传递”,c语言的变量类虚、实结合即是“单向传递”。如果同时允许虚参向实参传递,这种传递被称为“双向传递”,fortran 语言定义的子程序即是如此。 当c语言的形参为数组时,形参不另辟存储单元,形参与实参共用内存存储单元。这样,可以节省内存。 c语言在定义函数的同时,对于有参函数,也同时定义了形参。在调用该函数的同时,也指明了实参。实参与形参在内存分别占有两套不同的存储单元(数组除外),但是形参只有在函数被调用过程中才分配存储单元,调用结束后形参占用的单元被释放。数组元素作为实参时,也做为变量来处理。
  • 3楼网友:舊物识亽
  • 2021-02-26 18:41
float  max(float x, float y) //你这里返回值类型没有写,默认会是int,导致返回的数据与实际数据不相符了! {   float z;     z=x>y?x:y;     return(z); } 你放到后面时,有没有进行函数声明? 如果没有,应该编译报错的!
  • 4楼网友:傲气稳了全场
  • 2021-02-26 17:39
首先c是int型,而返回值z是浮点型,所以结果变成了整数 再者,max()放在main()前,则不用在main()里申明,若放在后面,必须申明 我都试了下,没什么错误
  • 5楼网友:底特律间谍
  • 2021-02-26 16:56
//第一种方式:就是你的那种方式 float max(float x, float y) {     float z;  z = x > y ? x:y;  return z;}   int main() {     .....     c = max(a, b);       return 0; }   //第二种方式如下: float max(float x, float y);   int main() {     .....     c = max(a, b);       return 0; }   float max(float x, float y) {     float z;     z = x > y ? x:y;    return z; }  
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯