4.2函数
一、选择题
【例3】(2000年4月)下列程序执行后的输出结果是( )。
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{
printf("%c",st[i]);
if(i<3){i+=2;func2(i);}
}
void func2(int i)
{
printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
main()
{int i=0;func1(i); printf("\n");}
A. hello B. hel
C. hlo D. hlm
【答案】C
【考点解析】这道题中两个函数里面都发生了嵌套调用,过程如下,i=0,调用func1(0)函数输出st[0],i=2,调用func2(2)输出st[2],i=4,调用func1(4)输出st[4]。
【例4】(2000年9月)有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是( )。
A. 3 B. 4
C. 5 D. 有语法错
【答案】A
【考点解析】函数的实际参数是以逗号分隔开的,题目中rec2+rec3是算术表达式作为一个参数,(rec4,rec5)是逗号表达式作为一个参数。
【例6】(2000年9月)有如下程序
long fib(int n)
{
if(n>2) return(fib(n-1)+fib(n-2));
else return(2);
}
main()
{ printf("%d\n",fib(3)); }
该程序的输出结果是( )。
A. 2 B. 4
C. 6 D. 8
【答案】B
【考点解析】题目中fib(3)=fib(2)+fib(1)=2+2=4。
【例7】(2000年9月)在C语言中,函数的隐含存储类别是( )。
A. auto B. static
C. extern D. 无存储类别
【答案】C
【考点解析】在C语言中,如没有特别说明函数的隐含存储类别都是extern类型。
【例8】(2000年9月)有以下函数
char fun(char *p)
{ return p; }
该函数的返回值是( )。
A. 无确切的值。 B. 形参p中存放的地址值。
C. 一个临时存储单元的地址。 D. 形参p自身的地址值。
【答案】B
【考点解析】题目中,p是一个字符型指针作为形式参数,在调用函数的时候存放实际参数的地址,所以返回是返回p中存放的地址而不是p自身的地址。
【例10】(2001年4月)当调用函数时,实参是一个数组名,则向函数传送的是( )。
A. 数组的长度。 B. 数组的首地址。
C. 数组每一个元素的地址。 D. 数组每个元素中的值。