c语言第8章函数

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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( )

相关文档
最新文档