国家二级C语言机试(函数)模拟试卷1_第1页
国家二级C语言机试(函数)模拟试卷1_第2页
国家二级C语言机试(函数)模拟试卷1_第3页
国家二级C语言机试(函数)模拟试卷1_第4页
国家二级C语言机试(函数)模拟试卷1_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

家二级C语言机试(函数)模拟试卷

第1套

一、选择题(本题共35题,每题1.0分,共35分。)

1有以下程序#includcintf(intn){intt=0,a=5;if(n/2){inta=6;t+=a++;}else

{inta=7;t+=a++;}returnt+a++;}main(){ints=0,i=0;for(;i<2;i++)s+=f(i);

printf("%d\n”,s);}程序运行后的输出结果是()。

A、24

B、28

C、32

D、36

标准答案:A

知识点解析:一个源文件中如果外部变量和局部变量同名,则在该局部变量的作用

域内,该外部变量会被“屏蔽“,main。函数中调用两次f()函数,两次调用均进入

else选择支句,匚7,返回7+5=12,所以s=O+f(O)+f(1)=24,答案选A。

2、下列选项中,能够满足”只要字符串si等于字符串s2,则执行ST”要求的是

()0

A、if(strcmp(s2,sl)==0)ST;

B、if(sl==s2)ST;

C>if(strcpy(sl,s2)==1)ST;

D、if(sl-s2=0)ST;

标准答案:A

知识点解析•:C语言中,比较两个字符串只能使用字符串处理函数中的字符串比较

函数siremp(字符串1,字符串2),若若字符串1与字符串2相同则该函数返回0,

所以选项A)符合要求,答案选A)。

3、有以下程序#includeintfun(charp[][10]){intn=0,i;for(i=0;i<7;i++)

if(p[i][0]=T)n-H-;returnn;}main(){char

str[][10]={“Mon”,“Tue","Wed”,“Thu",“Fri”JSat”JSun”};printf(n%d\n",fun(str));}程序

执行后的输出结果是()。

A、2

B、1

C、3

D、0

标准答案:A

知识点解析:函数fun()的功能是统计字符串数组每个字符串首字母为?T?的字符串

个数,所以答案选A。

4、若有以下程序#includemain(){charw[20],a[5][IO]=|"abcdef,"ghijkl1',"mnopq",

"rstuv","wxyz");intp[6][2]={{0,1},{l,5},{0,0},{0,2},{1,4),{4,4)},i;for(i=0;i<6:

i++)w[i]=a[p[i][0]][p川[l]];puls(w);}则程序的输出结果是()o

A、black

ababj

C、ckbdl

D^caiis

标准答案:A

知识点解析:考查二维数组元素的引用。该段程序代码的作用是取二维数组p中的

元素对作为数组a的下标引用a中的元素,并用一维数组w保存。所以

w[0]=a[p[0][0]][p[0][l]]=a[0][l]=?b?,w[l]=a[p[l][0]][p[l][l]]=a[l][5]=?1?,同理

w[2]=a[0][0]=?a?,w[3]=a[0][2]=?c?,w[4]=a[l][4]=?k?,w[5]=a[4][4]=?\0?,所以

输出结果为“black",答案选A。

5、若有以卜程序#includevoidf(intx){if(x>=10){printf("%d-",x%10);f(x/10);}

elseprintf("%d",x);}main。{intz=123456;f(z);}则程序的输出结果是()«

A、6-5-4-3-2-1

B、6-5432

C、1-2-3-4-5-6

D、1-2-3-4-5-6-

标准答案:A

知识点解析:函数f()的功能是将数字x逆序输出,并在输出的数字之间加上间隔

符号?-?,所以答案选A。

6、若有以卜程序#includeinta=2;intf(intm){staticintn;n=0;n++;a++;return

n+m+a;}main(){intk;for(k=0;k<4;k++)printf("%d;;f(k));}则程序的输出结果是

()o

A、4,6,8,10,

B、4,7,10,13,

C、4,5,6,7,

D、3,579,

标准答案:A

知识点解析:静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一

直存在,但是该函数中在定义静态变量n时并没有对其初始化,接下来有个赋值语

句“n=0;”所以每次执行函数f()时,静态变量n都会先被赋值为0再自加1,所以输

出的f(0)=l+0+3==4,n=l»a=3;f(1)=1+1+4=6,n=l»a=4;f(2)=l+2+5=8»n=l,

a=5;f(3)=1+3+6=10,n=l,a=6«所以答案选A。

7、若有以卜程序#includeintf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>

a[n-l]?t:a[n-l];)elsereturna|0];}main(){inta[]={829,1,3,6,4,7,5};

primf("%d\n”,f(a,9));}则程序的输出结果是()。

A、9

B、I

C、8

D、5

标准答案:A

知识点解析:函数f()的功能是返回数组a中所有数字中最大的值,所以输出结果

为9,答案选A。

8、若有以下程序#includeintf(intm){staticintn=0;inta=2;n++;a++;return

n+m+a;}main(){intk;for(k=0;k<4;k++)printf("%d,",f(k));}则程序的输出结果是

()0

A、4,6,8,10,

B、4,7,10,13,

C>4,5,6,7,

D、3,579,

标准答案;A

知识点解析:静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一

直存在,而局部变量则是用时分配,用完释放。main。函数中调用四次f()函数,

f(0)=l+0+3=4,n=l,a=3;f(1)=2+1+3=6,n=2,a=3;f(2)=3+2+3=8»n=3»a=3;

f(3)=4+3+3=10,n=4,a=3。所以答案选A。

9、有以下程序#includeintfun(intx){intp;if(x==0||x==l)return(3);p=x-fun(x-

2);return(p);}main()(printf("%d\n",fun(9));)程序运行后的输出结果是()。

A、7

B、5

C、9

D、4

标准答案:A

知识点解析:考查函数的递归调用。fun(9)=9-fun(7)=9-(7-fun(5))=2+(5-fun(3))=7-(3-

fun(1))=7,所以答案选A。

10、有以下程序#includefun(inta,intb){intstaticm=0,i=2;i=i+m+l;m=i+a+b;

returnm;)main(){intk=4,m=l,p;p=fun(k,m);printf("%d,H,p);p=fun(k,m);

printf("%d\n",p);}程序运行后的输出结果是()。

A、8,17

B、7/6

C、8,8

D、7,17

标准答案:A

14、以下叙述中正确的是()。

A、全局变量的存储类别可以是静态类

B、对于变量而言,“定义“和“说明”这两个词实际上是同一个意思

C、在复合语句中不能定义变量

D、函数的形式参数不属于局部变量

标准答案:A

知识点解析:全局变量可以用slatic修饰,限制该变量只能在当前文件有效而不能

被其他文件访问,选项A)正确;变量的说明只是向编译程序描述变量类型,但不

为该变量分配存储空间,变量的定义才为该变量分配存储空间,选项B)错误;在

语句块内可以定义变量,定义的变量为局部变量,选项C)错误;函数的形参相当

于在函数内部定义的一个变量,属于局部变量,选项D)错误;答案选A)。

15、有以卜程序#includeintfun(intn){inta;if(n=l)return1;a=n+fun(n-1);

return(a);)main(){printf("%d\nn,fun(5));)程序的输出结果是()。

A、15

B、14

C、10

D、9

标准答案:A

知识点解析:考查递归函数。函数fun()的功能是计算1到n之间的数字之和,所

以计算结果为15,答案选A。

16、有以下程序#includeintd=l;voidfun(intp){intd=5;d+=p++;printf("%d",

d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的输出结果是

()o

A、84

B、96

C、94

D、85

标准答案:A

知识点解析:函数的参数传递过程中,形参只是实参的一个副本,形参改变不能影

响到实参。若外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量

会被“屏蔽“。所以调用函数fun(a)时,使用的变量d为5,d=5+3=8,输出结果为

8;main。函数内,使用的为全局变量d,a值没有改变,d=1+3=4,输出结果为

4,所以答案选A。

17、有以下程序#inckideintfun(inta){intb=0;staticintc=3;a=(c++,b++);return

(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=fun(a++);printf("%d\n",k);}程序

的输出结果是()。

A、0

B、4

C、I

D、2

标准答案:A

知识点解析:函数fun。中语句“a=(c++,b++);”计算的结果始终为0,这是因为逗号

表达式的值为最后一个表达式,即“b++”的值,b为局部变量,每次调用时均初始

化为0,所以函数fun()的返回值始终为0,计算得k的值也为0,答案选A。

18>有以下程序#includcinta=l,b=2;voidfun1(inta,intb){printf("%d%d",a,

b);}voidfun2(){a=3;b=4;)main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程

序运行后的输出结果是()。

A、5634

B、3456

C、1256

D、5612

标准答案:A

知识点解析♦:在一个源文件中如果外部变量和局部变量同名,则在该局部变量的作

用域内,该外部变量会被“屏蔽”,所以函数funl()输出的为局部变量a、b的值:5

6;fun2()改变的是全局变量a、b的值,输出结果为34,答案选A。

19,有以下程序/includevoidfunc(intn){staticintnum=1;num+=n;printf(*'%d",

num);}main(){func(3);func(4);printf(',\nM);}程序运行后的输出是()。

A、48

B、45

C、35

D、34

标准答案:A

知识点解析:func。有一个静态变量num,静态变量的初始化只进行一次,其值在

程序运行过程中一直存在。调用func(3)时num被初始化为I,语句"num+=n;"计

算得num值为4,输出结果为4:调用func(4)时,num为I*一次计算的结果4.再次

计算num=8,输出结果为8,。答案选A。

20、有以下程序#inckidevoidf(intx[],intn){if(n>1){printf(H%d,",x[n-l]);f(x,n-

1);}elseprintf("%dj,x[0]);}main(){intz[6]={1,23,4,5,6};f(z,6);printf("\n");|程

序的运行结果是()。

A、6,543,2,1,

B、6,1,

C、2,34,5,6,1,

D、1,234,5,6,

标准答案:A

知识点解析:函数f()的功能是逆序输出x中前n个数据,所以答案选A。

21、有以卜程序#includeinta=2;intf(){staticintn=0;intm=0;n++;a++;m++;

returnn+m+a;}main(){intk;for(k=0;k<3;k++)printf("%d,'\f());printf("\n");}程

序的运行结果是()。

A、5,7,9,

B、5,6,7,

C、5,8,11,

D、5,5,5,

标准答案:A

知识点解析:静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一

直存在,而局部变量则是用时分配,用完释放。全局变量在当前文件内也是一直存

在的。main。函数中调用三次f()函数,f(0)=1+1+3=5,n=1,m=1,a=3;

f(1)=2+1+4=7,n=2,m=l,a=4;f(2)=3+1+5=9,n=3,m=l,a=5o所以答案选

Ao

22、有以下程序includevoidf(intx[],intn){if(n>1){f(&x[l],n-1);printf("%d;\

x[0]);}elseprintf("%d,",x[O]);}main(){intz[6]={1,2,3,4,56};f(z,6);printf("\n");}

程序的运行结果是()。

A、6,543,21,

B、1,1

C、1,1,1』,1,1,

D、1,2,34,5,6,

标准答案:A

知识点3析:函数f()的功能是逆序输出x中前n个数据,所以答案选A。

23、有以下程序#inckideinta=2;intf(){staticintn;intm;m=n=0;n++;a++;m++;

returnn+m+a;)main(){intk;for(k=0;k<3;k++)printf(n%d,",f());printf("\n");}程

序的运行结果是()。

A^5,6,7,

B、5,7,9,

C、5,8,11,

D、5,5,5,

标准答案:A

知识点解析:局变量在当前文件内也是一直存在的。而静态变量定义时的初始化只

运行一次,并且其值在程序运行过程中一直存在,函数f()在定义静态变量n时并

没有对其初始化,接下来有个赋值语句"m=n=0;”所以每次执行函数f()时,静态变

量n都会先被赋值为0再自加1,所以输出的f(0)=l+1+3=5,n=l,m=l,a=3;

f(l)=l+l+4=6,n=l,m=l,a=4;f(2)=l+l+5=7,n=l,m=l,a=5o所以答案选

Ao

24、有以F程序#includemain(){inti=l,j=3;printf("%d,n,i++);{inti=0;i+=j*2;

printf(H%d,%d,",i,j);)printf("%d,%d\n",i,j);}程序运行后的输出结果是()。

A、1,6,3,2,3

B、1,63,1,3

C、1,6,3,6,3

D、1,7,323

标准答案:A

知识点解析:不同作用域内若定义有同名的局部变量,则在其中一个局部变量的作

用域内,其他同名的局部变量会被“屏蔽”,规则一般是作用域小的变量“屏蔽”作用

域大的变量。在用{}引起来的复合语句块中,i值为6,输出结果为6,3,而在涪句

块外,i为2,输出结果为2,3,所以答案选A。

25、有以下程序#includcintfun(mta,intb){staticintm=0,i=2;i+=m+l;m=i+a+

b;returnm;}main(){intk=4,m=l,p;p=fun(k,m);printf("%dj,p);p=fun(k,m);

printf("%d\n”,p);}程序运行后的输出结果是()。

A、8,17

B、8,16

C、8,8

D、8,20

标准答案:A

知识点解析:静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一

直存在,所以第一次调用fun(k,m)时,p=fun(4,1)=m=8,静态变量

i=2+0+1=3,m=3+4+1=8;第二次调用fun(k,m)时,p=fun(4,l)=m=17,静态变量

i=3+8+l=12,m=12+4+l=17;输出结果为8,17。答案选A。

26、若有定义语句:charstrl[]="string,,,str2[8],*str3,str4[10]="string";,库函数

strcpy的功能是复制字符串,以下选项中错误的函数调用是()。

A、strcpy(str3,"HELLO!")

B、strcpy(str2,nHELLO!")

C、strcpy(strl,nHELLO!")

D、strcpy(str4,"HELLO!")

标准答案:A

知识点解析:字符指针必须指向一个地址,没有指向具体内存地址的指针不能作为

strcpy。的参数,答案选A。

27、当没有指定C语言中函数形参的存储类别时,函数形参的存储类别是()。

A、自动(auto)

静态(static)

C^寄存器(register)

D、夕卜部(extern)

标准答案:A

知识点解析:C语言中,当省略变量的存储类型时,局部变量的存储类别默认为

auto,所以答案选A。

28、有如下程序//includevoidconvert(charch){if(chv'D')convert(ch+l);

prin氓"%c”,ch);}main(){convert(,A,);printf("\n");}程序运行后的输出结果是

()o

A、DCBA

B、ABCD

C、A

D、ABCDDCBA

标准答案:A

知识点解析:函数convur。的作用是输出ASCII码在字母TV到字母ch之间的字

符,答案选A)。

29>有如下程序#includevoidget_put(){charch;ch=getchar();if(ch!='\n')

get_put();putchar(ch);}main(){get_put();printf("\n");)程序运行时,输入1234cpi

车〉,则输出结果是()。

A、4321

B、1234

C、4444

D、1111

标准答案:A

知识点解析:函数get_put()的作用是利用递归调用,优先输出最后一个输入的字

符,即逆序输出输入的字符串,答案选A。

30、有如卜程序#includeintsum(intdata){staticintinit=0;returninit+=data;}

main(){inti;for(i=l;i<=5;i++)printf(,,%d,,\sum(i));printf("\nn);}程序运行后的输

出结果是()。

A、1,3,6,10,15,

B、123,4,5,

C、0,0,0,0,0,

D、1,1,1,1」,

标准答案:A

知识点解析:静态变量在定义时的初始化只运行一次,并且其值在程序运行过程中

一直存在,所以函数sum。的作用是用静态变量init累加所有的调用sum。函数时传

入的参数值。for循环中传入的参数为123,4,5,所以输出的结果为1,3,6,10,15,答

案选Ao

31、有如卜程序#includeint*sum(intdata){staticintinit=0;init+=data;return

&init;)main(){inti,*p;for(i=l;i<=4;i++)sum(i);p=sum(0);printf("%d\n",*pi;}

程序运行后的输出结果是()。

A、10

B、0

C、1

D、15

标准答案:A

知识点解析:静态变量在定义时的初始化只运行一次,并且其值在程序运行过程中

一直存在,所以函数sum()的作用是用静态变量init累加所有的调用sum。函数时传

入的参数值。for循环中传入的参数为123,4,每次的计算结果为1,3,6,10。再次调

用函数sun(0)时返回值为10,答案选A。

32、有以下程序#includcvoidfac2(int);voidfacl(intn){printf("*n);if(n>0)fac2(n-

I);}voidfac2(intn){printf("#n);if(n>0)fac2(-n);)main(){facl(3);}程序的运行结

果是()。

A、*#帏

B、*##*

C、**##

D、*#*#

标准答案:A

知识点解析:考查函数的嵌套调用,嵌套调用顺序分别为:facl(3)、fac2(2)、

fac2(」)、fac2(0),每调用facl()输出一个””,调用fac2()输出一个”#“,所以答案选

Ao

33,有以下程序#includeintfun(intn){staticintt=l;inti=l;for(;i<=n;i++)t*=i;

returnt;)main(){intt=l,i;for(i=2;i<4;i++)t+=fun(i);printf(n%d\n",t);}程序的运行

结果是()。

A、15

B、11

C、8

D、4

标准答案:A

知识点解析:函数fun()调用两次,fun(2)中计算出的结果为2,由于函数fun()中有

一个静态变量t,静态变量在定义时的初始化只运行一次.并且其值在程序运行过

程中一直存在,所以第二次调用fun⑶时t=3,计算结果为12。主函数main()用局

部变量I累加两次调用结果,[初始值为1,所以最终t=15,答案选A。

34、有以下程序#includemain。{intfindmax(int,),m;;m=findmax(a,b,c);\}

intfindmax(intx,inty,intz){...}则以下叙述正确的是()。

A、在main函数中声明了findmax函数

在main函数中定义了findmax函数

C、在main函数中两次调用了findmax函数

D、在main函数内、外重复定义了findmax函数

标准答案:A

知识点解析:函数不能嵌套定义,但是可以在一个函数体内对另一个函数进行声

明,函数声明的一般形式为”类型说明符被调函数名(类型形参,类型形参…:r,所

以语句“intfindmax(int,int,int)”为对函数findmax。的声明,语句"m=findmax(a,b,c);"

为调用函数findmax。,在main。函数外是函数findmax。的定义。答案选A。

35、有以下程序#includevoidfun(intn){inti;if((i=n/10)!=0)fun(i);

putchar(n%10+,0,);}main()(fun(256);}程序运行后的输出结果是()。

A、256

B、652

C、2560

D、52

标准答案:A

知识点解析:函数fun()的功能利用递归调用的方式是将数字n的不同位提取出来

并按照从高位到低位的顺序将各位的数字以字符的形式输出,所以答案选A。

家二级C语言机试(函数)模拟试卷

第2套

一、选择题(本题共33题,每题1.0分,共33分。)

1、以下叙述中正确的是()。

A、调用函数时,函数名必须与被调用的函数名完全一致

B、函数调用时,不必区分函数名称的大小写

C、函数名允许用数字开头

D、在函数体中只能出现一次return语句

标准答案:A

知识点解析:调用函数的时候只有保证调用语句的函数名和被调函数的函数名、参

数列表一致才能保证调用的正确性,A)正确。C语言对大小写敏感,选项B)

错行用户自定义的函数名需要遵循用户标识符的命名规则,由字母、数字、下划线

组成并且第一个字符不能为数字,选项C)错。一个函数每次只能使用一个return

语句,但是该函数体中可以有多个返回点,也就是有多条relurn语句,每次只从其

中一点返回,选项D)错。答案选A)。

2、设有某函数的说明为int*func(inta[IO],intn);则下列叙述中,正确的是()。

A、说明中的a[10]写成明或*a效果完全一样

B、形参a对应的实参只能是数组名

C、func的函数体中不能对a进行移动指针(如a+-)的操作

D、只有指向10个整数内存单元的指针,才能作为实参传给a

标准答案:A

知识点解析:考查数组名作为函数参数。数组名作为函数参数时,只传递数组的首

地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数

组和实参数组长度也可以不同,选项D)错:a[10|.a[]、做形参都是接受实参

数组首地址,效果一样,A)正确。传递给形参的实参可以是数组名,还可以是指

向该数组的指针变量,选项B)错飞数组名可以看做一个指针常量,对其进行自加

自减运算相当于指针变量的自加自减,选项C)错,答案选A)。

3、有以下程序#includevoidfun(intx,inty,int*c,int*d){*c=x+y;*d=x-y;}

main())inta=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf("%d%d\n",c,d);}程序的

输出结果是()。

A、71

B、43

C、34

D、00

标准答案:A

知识点解析:考查函数调用的参数传递。值传递过程中,形参只是实参的一个副

本,形参改变不能影响到实参,所以值传递是单向传递,只能由实参传给形参。地

址传递过程中,形参和实参指向同一个地址空间,两者的改变保持同步,所以在本

程序调用结束之后,c、d值发生了改变,c=7,d=l,输出结果为A)。

4^有以下程序#includcvoidfun(int*p,int*q){intt;t=*p;*p=*q;*q=t;*q=

*p;)main(){inta=0,b=9;fun(&a,&b);printf("%d%d\nH,a,b);)转序的输出结果

是()U

A、99

B、00

C、90

D、09

标准答案:A

知识点解析:考查函数调用的参数传递。该程序调用函数进行的是地址传参,地址

传递过程中,形参和实参指向同一个地址空间,两者的改变保持同步。函数fun()

的功能是将p和q指向的变量交换,之后将*p赋值给*q。main()函数实参传给*p为

0.*4为9c交换后*p为9.为().*「赋值给*q.则*p、*q均为9,输出结果为

A)o

5、有以下程序#includecharfun(char*c){if(*c<=,Z,&&*c>='A')*c-='A'-'a';

return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);

p++;}printf("\n");}若运行时从键盘上输入OPENTHEDOOR<回车,,程序的输

出结果是()。

A^openthedoor

B、oPENtHEdOOR

C、OPENTHEDOOR

D^OpenTheDoor

标准答案:A

知识点解析:考查地址芍参。函数fun()的作用是将字符c由大写转为小写,地址

传参中,形参的改变和实参的改变保持同步,所以本程序将输入的字符转为对应的

小写形式:openthedoor,答案选A。

6、有以下程序#includeintf(intx);main(){inta,b=0;for(a=0;a<3;a+=l){b+=

f(a);putchar('A'+b);}}intf(intx){returnx*x+l;}程序运行后输出结果是()«

A、BDI

B、BCD

C、ABE

D、BCF

标准答案:A

知识点解析:考查函数的返回值。三次a的值分别为0、1、2,对应的函数返回值

为1、2、5,b累加后为1、3、8字符参与运算时等同于让其对应的ASCII码参与

计算,然后对应输出字符或其ASCII码值,?A?+b后分别为?B?、?D?.?1?,答案

选Ao

7、有以下程序#include#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i

A、3,6,9,

B、1,3,5,

C、2,4,8,

D、3,5,7

标准答案:A

知识点解析:考查数组名作为函数参数。数组名作为函数参数属于地址传参,形参

和实参为同一数组,变叱同步。函数fun()中,用两层循环寻找a中每一行数据的

最大值,并将其赋值给b,函数调用结束后,数组y[N]中存储的就是x[N]中每一

行的最大值,分别是:3、6、9,答案选A。

8、有以下程序#includeintk=5;voidf(int*s){*s=k;}main(){intm=3,*p=&m;f(p);

printf(・%d,%d”,m,*p);)程序的运行结果是()。

A、5,5

B、3,3

C、3,5

D、5,3

标准答案:A

知识点解析:考查地址,专参。地址传参过程中形参和实参指向同一个地址空间,两

者的改变保持同步。被调函数f()将k值赋给了指针s指向的变量,所以函数调用

结束之后,m和*p均为5,答案选A。

9、有以下程序include#defineN4voidfun(inta[][N]){intb[N][N],i,j;for(i=0;i

A、13,10,7,4,

B、1,6,11,16,

C、4,7,10,13,

D、1,5,9,13,

标准答案:A

知识点解析:考查二维数组名作为函数参数,被调函数的功能是把数组a逆序的列

与行互换,函数调用结束后,x[N][N]为x[N][N]={{13,9,5,1},{14,10,6,2},

{1511,7,3},{16,12,8,4}},输出对角线的数据为:13,10,7,4,答案选A。

10、有以卜程序#includevoidfun(inta[],inin){inti,j=O,k=n-l,b[10];for(i=0;i

A、10,8,6,42135,7,9,

B、10,9,8,7,6,5,4,3,2,1,

C、123,4,5,6,7,8,9,10,

D、1,3,5,7,9,10,8,6,4,2,

标准答案:A

知识点解析:考查数组名作为函数参数。数组名作为函数参数属于地址传参,形参

和实参为同一数组,变叱同步。被调函数fun()的功能是将数组a下标为偶数的存

放在数组b的前半部分,数组a下标为奇数的逆序存放在数组b的后半部分,然后

把数组b赋给a。所以输出结果为A)。

11、以下关于C语言函数参数传递方式的叙述正确的是()。

A、数据只能从实参单向传递给形参

B、数据可以在实参和形参之间双向传递

C、数据只能从形参单向传递给实参

D、C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双

向传递,可视情况选择及用

标准答案:A

知识点解析:C语言中,数据只能从实参单向传递给形参,形参作为实参的一个副

本被实参赋值。所以值芍参过程中形参不会对实参造成影响;地址传参过程中是形

参仍然作为实参的副本被赋值,但是指针变量的值为其指向变量的地址,形参实参

指向同一段内存地址,所以对其指定的数据的修改能保持同步,形参指针变量的指

向改变也是不能影响实参指针变量的指向的。答案选Ao

12>有以下程序#includcintk=5;voidf(int*s){s=&k;)main(){intm=3,*p=&m;

f(p);printf("%d,%d\n",m,*p);}程序的运行结果是()<»

A、3,3

B、5,5

C、3,5

D、5,3

标准答案:A

知识点解析:考查函数,'专参。C语言中,数据只能从实参单向传递给形参,指针作

为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影

响实参指针变量的指向。结果不变,答案选A。

13、下列叙述中正确的是()。

A、在C程序的函数中不能定义另一个函数

B、在C程序中main函数的位置是固定的

c、c程序中所有函数之间都可以相互调用

D、每个C程序文件中都必须要有一个main函数

标准答案:A

知识点解析:在C程序中,main函数的位置可以任意,而且不管main函数位置怎

么变化,程序都会以main函数作为入口,选项B)错误;每个C程序(而不是每

个C程序文件)必须有且只能有一个main函数,选项D)错误;main函数不能被

调用,选项C)错误;函数的定义不能放在另一个函数体内,但是声明可以,所以

答案选A)。

14、以下叙述正确的是()。

A、C语言函数可以嵌套调用,例如:fun(fun(x))

B、C语言程序是由过程和函数组成的

C、C语言函数不可以单独编译

D、C语言中除了main函数,其他函数不可作为单独文件形式存在

标准答案:A

知识点解析:一个C语言程序由一个或多个函数组成,选项B)错误;一个C程

序可以有一个或多个程序文件,每个程序文件可以有一个或多个函数,并且每个程

序文件可以单独编译,所以选项C)、D)错误;函数之间可以相互调用,函数体

内调用自身的函数为递归函数,答案选A)。

15、有以下程序#includeintml(intx,inty){returnx<=y?x:y;)intm2(intx,inty)

{returnx<=y?y:x;}intfun(inta,intb){returna+b;)main(){intx=2,y=3,z=l;

printf("%d\n”,fun(ml(x,y),m2(y,z)));}雇序的运行结果是()。

A、5

B、6

C、4

D、3

标准答案:A

知识点解析:函数ml()返回两个参数中较小的数值,函数m2。返回两个参数中较

大的数值,函数fun()返回两个参数之和,所以

fun(m1(x,y),m2(y,z))=fun(m1(2,3),m2(3,1))=fun(2,3)=5,答案选A。

16、有以下程序#includcintf(intx);main(){intn=l,m;m=f(f(f(n)));

printf("%d\n",m);}intf(intx){returnx*2;}程序运行后的输出结果是()。

A、8

B、2

C、4

D、1

标准答案:A

知识点解析:考查函数的递归调用。m=f(f(f(n)))=f(f(2))=f(4)=8,答案选A。

17、有以下程序#includevoidfun(inta[],intn){inti,t;for(i=0;i

A、321678

B、876543

C、1098765

D、345678

标准答案:A

知识点解析:函数fun()的功能是把数组a中的前n个元素逆序排列,所以调用函

数fun(k,5)结束后,数组k中的数据为{5,4,3,2,1,6,7.8,9,10},输出数组第3个到第8

个元素之间的数据为选项A)。

18、有以下程序#include[defineN4voidtun(intmtb[]){inti;tor(i=0;i

A、-3,-1,1,3,

B、-12,-3,0,0,

C、0,1,2,3,

D、-3,-3,-3,-3,

标准答案:A

知识点解析:函数点n()的功能是计算b[i]:b[0]=a[0][0]-a[0][3]=-3,b[l]=a[l][l]-

a[l][2]=-l,b[2]=a[2][2]-a[2][l]=l,b[3]=a[3][3]-a[3][0]=3,所以计算得到的y值为

选项A)。

19、有以下程序#includeintfun(intx,inty){if(x!=y)return((x+y)/2);elsereturn

(x);}main(){inta=4,b=5,c=6;printf(u%d\nn,fun(2*a,fun(b,c)));}程序运行后

的输出结果是()。

A、6

B、3

C、8

D、12

标准答案:A

知识点解析:考查函数的调用c输出结果为fun(2*a,fun(h,c))=fun(8,5)=6.答案选

Ao

20、有以下程序#inckideintf(intx,inty){return((y-x)*x);)main(){int

a=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf("%d\n”,d);}程序运行后的输出结果是()

A、9

B、10

C、8

D、7

标准答案:A

知识点解析:考查函数的返回值。d=f(f(a,b),f(a,c))=f((b-a)*a,(c-a)*a)=f(3,6)=(6-

3)*3=9,所以答案选A。

21、有以卜程序#includevoidfun(inta,intb){init;t=a;a=b;b=t;}main(){int

c[10]={1,2,3,4,5,6,7,8,9,0),i;for(i=0;i<10;i+=2)fun(c|i],c[i+l]);for(i=0;i<10;i++)

primf("%d,”,c[i]);printf("\iT);}程序的运行结果是()。

A、1,2,345,6,7,8,9。

B、2,143,6,5,870,9,

C、09876,5,4,3,21,

D、0,1,2,3,4,5,6,7,89

标准答案:A

知识点解析:函数fun()属于值传参,形参的变化不会影响实参,所以函数调用结

束后,数组c没有任何变化,输出结果为选项A)0

22、有以下程序#includedoublef(doublex);main(){doublea=0;inti;for(i=0;i<30;

i+=10)a+=f((double)i);printf("%3.0f\n",a);}doublef(doublex){returnx*x+l;}

程序运行后的输出结果是()。

A、503

B、401

C>500

D、1404

标准答案:A

知识点解析:考查函数的返回值。main。函数中for循环执行三次,

a=a+f(0)+f(10)+f(20)=503,输出时控制输出宽度为3,小数点后保留位数为0位,

所以答案选A。

23、若有以下函数首部intfun(doublex[10],int*n)则下面针对此函数的函数声明语

句中正确的是()。

A^intfun(double*,int*);

B、intfun(double,int);

C、intfun(double*x,intn);

D^intfun(doublex,int*n);

标准答案:A

知识点解析:考查数组名作为函数参数。数组名可以看做一个指针常量,作为函数

参数属于地址传参,和指针传参的形式是一样的。在声明函数时,形参名称可以省

略但是形参的类型不可以省略,所以答案选A。

24、有以下程序#include#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i

A、1,0,7,0,

B、1,2,34

C、145,9,

D、3,4,8,10,

标准答案:A

知识点解析:二维数组赋初值的时候没有赋值的元素默认为0。函数「un()将数组a

中的主对角线上的元素赋值给数组b,所以输出结果为1,070,答案选A。

25、以下关于return语句的叙述中正确的是()。

A、一个自定义函数中可以根据不同情况设置多条return语句

B、一个自定义函数中必须有一条return语句

C、定义成void类型的函数中可以有带返回值的return语句

D、没有return语句的自定义函数在执行结束时不能返回到调用处

标准答案:A

知识点解析:自定义的函数可以有返回值也可以没有返回值,有返回值的函数可以

带有多条return语句,但是每次只选择其中一条退出。没有返回值的函数的类型用

void标示,此时函数体内可以没有return语句。不管函数有无返回值,函数调用时

都会先保存该函数的当前被调位置,函数调用结束后再返回到被调位置继续向下执

行,所以答案选A。

26、已定义以下函数intfun(int*p){return*p;}fun函数返回值是()。

A、一个整数

B、不确定的值

C、形参p中存放的值

D、形参p的地址值

标准答案:A

知识点解析:该函数的类型说明符为ini,所以返回的是一个整型数据,答案选

Ao

27、以下叙述中错误的是()。

A、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值

B、用户定义的函数中可以没有return语句

C、用户定义的函数中若没有return语句,则应当定义函数为void类型

D、函数的return语句中可以没有表达式

标准答案:A

知识点解析:自定义的函数可以有返回值也可以没有返I川值,有返回值的函数可以

带有多条return语句,但是每次只选择其中一条退出,即每次只返回一个函数值,

选项A)错误。没有返回值的函数的类型用void标示,此时函数体内不需要有

return语句,或者可以用没有表达式的return语句"return;”返回,选项B)、C)、

D)描述正确,答案选A)。

28、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是

()O

A、函数的形参和实参分别占用不同的存储单元

B、形参只是形式上的存在,不占用具体存储单元

C、同名的实参和形参占同一存储单元

D、函数的实参和其对应的形参共占同一存储单元

标准答案:A

知识点解析:函数传参过程中,其实是把实参的数据复制一份传给形参,实参和形

参都是局部变量,在程序运行到相应的定义语句的时候才分配存储空间,所以两者

占用不同的存储单元,所以答案选A。

29、以下叙述中错误的是()。

A、函数形参的值也可以传回给对应的实参

B、函数调用可以作为一个独立的语句存在

C、若函数有返回值,必须通过relum语句返回

D、C程序必须由一个或一个以上的函数组成

标准答案:A

知识点解析:参数传递过程中,形参只是实参的一个副本,形参改变不能影响到实

参,所以形参的值不能造回给对应的实参,选项A)错误。其他几个选项的表述正

确,答案选A)。

30、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0

时,进行由大到小排序。#inckidevoidf(intb[],intn,intflag){inti,j,t;for(i=0;

ibUl:b[i]

A、3,4,5,6,7,2,1,8,9,10,

R、1,2,3,4,5,6,7,8,9,10,

C、5,4,3,2,1,6,7,8,9,10,

D、10,9,8,7,6,5,4,3,21,

标准答案:A

知识点解析:根据题意说明,被调函数”f(&a[2],5,0);“将数组a的第3个元素到第

7个元素进行从大到小排序,执行完毕后。10]={5,4,7,6,3,2,1,8,9,10};被调函数

将数组a的第1个元素到第5个元素进行从小到大排序,执行完毕之后

a[10]={3,4,5,6,721,8,9,10),所以输出结果为选项A)。

31、有以卜程序#includeintfun1(doublea){return(int)(a*=a);)intfun2(doublex,

doubley){doublea=0,b=0;a=funl(x);b=funl(y);return(int)(a+b);}main(){double

w;w=fun2(l.l,2.0);printf("%4.2f\w);)程序执行后输出结果是()。

A、5.00

B、5

C、5.21

D、0.0

标准答案:A

知识点解析:考查函数的嵌套调用。

w=fun2(1.1,2.0)=(int)(a+b)=(int)(funl(l.l)+fun1(2.0))=(int)(1.1*1.1+2.0*2.0)=5,所以

答案选A。

32、有以下程序#includevoidf(intb[]){inti;for(i=2;i<6:i++)b[i]*=2;)maim;)

{inta[10]={1,2,3,4,5,6,7,8,9,10),i;f(a);for(i=0;i<I0;i++)printf("%dj,a[i]);}程序

运行后的输出结果是()。

A、1,2,6,8,10,12,7,8,9,10,

B、1,2,3,4,5,6,7,8,9/0,

C、1,2,3,4,10,12,14,16,9,10,

D、1,2,6,8,10,12,14J6,9,10,

标准答案:A

知识点解析:函数f()的功能是把数组b中第3个到第6个元素的值均乘以2,所以

答案选A。

33有以下程序#inckideintfun(chars[]){intn=0;while(*s<=>=,0,)

{n=10+n++s-,0,;s十十;}return(n);}main(){char

s[10]={'6',T,4,",'9','O',printf("%d\n”,fun(s));}程序的运行结果

是()。

A、61

B、61490

C、9

D、5

标准答案:A

知识点解析:函数fun()的功能是输出字符数组s中第一个非数字字符前的数字,

所以答案选A。

国家二级C语言机试(函数)模拟试卷

第3套

一、选择题(本题共34题,每题1.0分,共34分。)

1、若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数

值,以下选项中错误的程序是()。

A、main(){.......x=fiin(2,10);.........}floatfiin(inta,intb){.......}

floatf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论