作业帮 > 综合 > 作业

18. 有以下函数定义: int fun(,double a ,double b) { return a*b; }

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 03:29:25
18. 有以下函数定义: int fun(,double a ,double b) { return a*b; }
18. 有以下函数定义:
int fun(,double a ,double b)
{ return a*b;
} 若以下选项中所用变量都以正确定义并赋值,错误的函数调用时( )
A. if(fun(x,y)){.} B. z=fun(fun(x,y),fun(x,y));
C. z=fun(fun(x,y)*x,y) ; D.fun(x,y);
答案是D,为什么?
24 .下列程序的输出结果是()
#include"stdio.h"
#define SUB(X,Y)(X)* Y
main( )
{int a=3,b=4;
printf ("%d\n",SUB(a++,b++));}
A.12 B.15 C.16 D. 20 答案为A,是怎么算的?
25.下列程序的输出结果是()
#include"stdio.h"
int fun(int x,int y)
{static int m=0,i=2;
i+=m+1;
m=i+x+y;
return m;}
main( )
{int j=4,m=1,k;
k=fun(j,m); printf ("%d,",k);
k=fun(j,m); printf ("%d\n",k);
答案为8和17,不知道17是怎么算出来的?
首先说18题,这个函数是由返回值的,所以只有D不是赋值操作.24题:因为最后一句:
printf("%d/N",SUB(a++,b++));中的SUB不是函数而是预编译.它使SUB(a++,B++)在编译时变为:(a++)*b++,.所以这时的就是:3*45=12
25题:fun中的i,M为static变量,也就是静态变量,所以在函数Fun内是一直记录的,也就是知道程序结束才消失,而你主函数main中在第一次调用fun时结束时,fun中的i=3,m=8,所以这时返回值为8,而当第二次调用时fun内i=3,m=8.结束时:i=12,m=17.所以返回值为17
再问: 你好,非常感谢你的帮助!但还有几点想请教一下你: 18. 你说这个函数是有返回值的,只有D不是赋值操作?是什么意思还是不明白,题目中问的是错误的函数调用,你是说函数调用后要将返回值赋给一个变量才算正确的调用? 24. 因为最后一句: printf("%d/N",SUB(a++,b++));中的SUB不是函数而是预编译。它使SUB(a++,B++)在编译时变为:(a++)*b++,。所以这时的就是:3*45=12, 这个5是怎么来的?
再答: 不好意思,首先24题那个5我打错了。多打上的。18题中因为只有D没有赋值,并且返回值还是整形,要设计到数据转换,程序运行应该没问题,但在正规语法上是错误的。