c语言第8章函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章函数
1.以下程序的输出结果是( )
A、6 9 9
B、6 6 9
C、6 15 15
D、6 6 15
int d=1;
fun(int p)
{ static int d=5;
d+=p;
printf("%d ",d);
return(d);
}
main( )
{ int a=3;printf("%d \n",fun(a+fun(d)));}
答案:C
注解:函数fun调用两次,第一次调用的实参是全局变量d的值1,在函数调用执行过程中,输出的是局部静态变量d;第二次调用的实参是第一次调用的返回值和变量a的和,输出的仍是局部静态变量d的值。注意静态变量的定义和初始化是在第一次使用时进行的,在以后的使用过程中,保留上一次的值,不再初始化。2.若有以下调用语句,则不正确的fun函数的首部是()
A、void fun(int m,int x[])
B、void fun(int s,int h[41])
C、void fun(int p,int *s)
D、void fun(int n,int a)
main( )
{ …
int a[50],n;
…
fun(n,&a[9]);
…
}
答案:D
注解:从主函数中fun函数的调用格式可以看出,fun函数的两个形参的类型,第一个形参是整型变量,第二个形参是变量的地址,则必须是数组名或者是指针。
3.有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是()
A、3
B、4
C、5
D、有语法错
答案:A
注解:该函数调用语句中,含有的实参分别是rec1,rec2+rec3表达式计算后的值和(rec4,rec5)逗号表达式计算后值。
4.有如下程序
int runc(int a,int b)
{ return(a+b);}
main( )
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
该程序的输出的结果是()
A、12
B、13
C、14
D、15
答案:D
注解:函数func第一次调用的返回值作为第二次调用的实参,第一次调用func(x,y)即func(2,5)的返回值是7,第二次调用func(7,z)即func(7,8)的返回值是15,所以r的值为15。
5.有如下程序
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是递归函数,递归终止条件是n<=2。则fib(3)的调用过程是:条件n>2成立,则再次调用fib(2)和fib(1),而fib(1)和fib(2)在函数调用时,不再递归调用,均返回2到它的上一级调用,即到调用fib(3)的执行过程,所以fib(3)调用返回值为4。
6.在C语言中,函数的隐含存储类别是()
A、auto
B、static
C、extern
D、无存储类别
答案:C
7.以下所列的各函数首部中,正确的是()
A、void play(var:Integer,var b:Integer)
B、void play(int a,b)
C、void play(int a,int b)
D、Sub play(a as integer,b as integer)
答案:C
注解:选项A、D不是C语言的函数定义格式,C语言在函数定义的函数头部,形参的定义是每一个形参都要有自己的关键字。
8.以下程序的输出结果是()
A、0
B、29
C、31
D、无定值
fun(int x,int y,int z)
{ z=x*x+y*y;}
main( )
{ int a=31;
fun(5,2,a);
printf("%d",a);
}
答案:C
注解:函数fun的调用时,参数传递是传值方式,所以形参值的变化并不会影响实参值的变化,故变量a的值保留原值。
9.当调用函数时,实参是一个数组名,则向函数传送的是()
A、数组的长度
B、数组的首地址
C、数组每一个元素的地址
D、数组每个元素中的值
答案:B
注解:函数调用时,参数是数组名或指针时,参数传递是传地址方式。
10.以下只有在使用时才为该类型变量分配内存的存储类说明是()
A、auto和static
B、auto和register
C、register和static
D、extern和register
答案:B
11.以下程序的输出结果是()
A、1
B、2
C、3
D、4
long fun( int n)
{ long s;
if(n= =1 || n= =2)s=2;
else s=n-fun(n-1)
return s;}
main( )
{ printf("%ld\n",fun(3));}
答案:A
注解:fun函数调用是递归调用,主函数中fun(3)调用的执行过程是:初始n=3,if语句的条件n= =1 || n= =2不成立,执行else子句,再次调用fun函数,s=3-fun(2),则此次执行过程中,if语句的条件n= =1 || n= =2成立,执行if后的子句s=2;,然后再返回到调用它的上一级函数fun(3),fun(3)调用再返回到主函数,返回值为1。
12.以下程序的输出结果是()
main( )
{ int num= 0;
while(num<=2)
{ num++;
printf("%d\n",num);
}
A、1
B、1
C、1
D、l
2 2 2
3 3
4
答案:B
注解:循环的执行过程是:(1)变量num的初值为0,则条件num<=2满足,执行循环体,输出num自增后的值1;(2)变量num的值变为1,条件满足,输出num自增后的值2;(3)变量num的值变为2,条件满足,输出num自增后的值3;(4)变量num的值变为3,条件不满足,则退出循环的执行。
13.以下程序的输出结果是()
int f( )
{static int i=0;
int s=1;
s+=i;i++;
return s;
}
main( )