题目
以下程序的输出结果是 ______.# include<stdio.h> int func (int a,int b ) ( static int m = 1,i=2; i+= m ; m = i + a + b ; return m ; ) int main(void) ( int k = 3 , m = 1 , p ; p = func ( k , m ) ; printf ( "%d" , p ); p = func ( k , m ); printf ( "%d",p) ; return 0 ;)
以下程序的输出结果是 ______.
# include<stdio.h>
int func (int a,int b )
{
static int m = 1,i=2;
i+= m ;
m = i + a + b ;
return m ;
}
int main(void)
{ int k = 3 , m = 1 , p ;
p = func ( k , m ) ;
printf ( "%d" , p );
p = func ( k , m );
printf ( "%d",p) ;
return 0 ;
}
题目解答
答案
在C语言中,有3种方式调用函数,
①函数表达式,以函数返回值参与表达式的运算,这种方式,要求调用的函数有返回值,例如,a=max(x.y)是一个赋值表达式,把max函数的返回值赋给变量a,
②函数语句,函数调用的一般形式加上分号即构成函数语句,这种调用方式一般不需要返回值,例如,“hello();”
③函数实参,函数作为另一个函数调用的实际参数出现,这种情况就是把该函数的返回值作为实参进行传送,要求该函数必须有返回值。例如,m=max(x.max(y.z));既把max(y.z)调用的返回值又作为外层max函数的实参来使用。
所以该程序最后输出714.
故本题填714。
解析
步骤 1:函数func的第一次调用
在第一次调用func(3, 1)时,静态变量m和i的初始值分别为1和2。i += m,即i = 2 + 1 = 3。然后m = i + a + b,即m = 3 + 3 + 1 = 7。因此,第一次调用返回值为7。
步骤 2:函数func的第二次调用
在第二次调用func(3, 1)时,静态变量m和i的值分别为7和3。i += m,即i = 3 + 7 = 10。然后m = i + a + b,即m = 10 + 3 + 1 = 14。因此,第二次调用返回值为14。
步骤 3:输出结果
第一次调用func(3, 1)后,p的值为7,因此printf("%d", p)输出7。第二次调用func(3, 1)后,p的值为14,因此printf("%d", p)输出14。
在第一次调用func(3, 1)时,静态变量m和i的初始值分别为1和2。i += m,即i = 2 + 1 = 3。然后m = i + a + b,即m = 3 + 3 + 1 = 7。因此,第一次调用返回值为7。
步骤 2:函数func的第二次调用
在第二次调用func(3, 1)时,静态变量m和i的值分别为7和3。i += m,即i = 3 + 7 = 10。然后m = i + a + b,即m = 10 + 3 + 1 = 14。因此,第二次调用返回值为14。
步骤 3:输出结果
第一次调用func(3, 1)后,p的值为7,因此printf("%d", p)输出7。第二次调用func(3, 1)后,p的值为14,因此printf("%d", p)输出14。