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

下载本文档

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

文档简介

家二级C语言(函数和数组)机试模

拟试卷第1套

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

1、设有定义:intx[2][3];则以下关于二维数组X的叙述错误的是

A、数组x可以看作是由x[0]和x[l]两个元素组成的一维数组

B、可以用x[0]=0;的形式为数组所有元素赋初值0

C、元素x[0]可看作是由3个整型元素组成的一维数组

D、x[0]和x[l]是数组名,分别代表一个地址常量

标准答案:B

知识点解析:二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存

中的排列顺序是先存放第0行的元素,再存放第1行的元素……称这种存放顺序为

按行存放“可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若

干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如,

inta[4][3]={l,2,4,5};在编译时,系统将按a数组元素在内存中排列的顺序,

将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自

动补初值0。以上将给a数组第一行的元素和第二行的第一个元素依次赋予1、2、

4、5,其他元素的初值都为0。

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

A、1,3,5»

B、2,4,8,

C、3,5,7

D、3,6,9,

标准答案:D

知识点解析:函数fun()的作用是求出二维数组也[N]中每一行中的最大元素,所以

在main。函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一夕亍的

最大元素。

3、以下语句中存在语法错误的是

A、charss[][20]={"right?n};

B、char*ss[6];ss[l]="righi?";

,,

C、char*ss[]={"right?);

D、charss[6][20];ss[l]=',right?H;

标准答案:A

知识点解析:选项A中定义了二维数组ss,可以用于存储字符串,但是字符串的

存储不能通过赋值,仅可以初始化或者输入得到,而选项C和A)不同,选项C为

指针数组,对于指针变量可以保存常量字符串的地址。

4、下列叙述中正确的是

A、两个连续的单引号(")是合法的字符常量

B、可以对字符串进行关系运算

C、两个连续的双引号("”)是合法的字符串常量

D、空字符串不占用内存,其内存空间大小是0

标准答案:C

知识点解析:两个连续的双引号:”二是一个字符串常量,称为“空串”。

5、以下选项中,能正确进行字符串赋值的是

A、chars[5]={,A,,'B','C',D,E};

B、char*s="ABCDE,,;

C、chars[4][5]={"ABCDE”};

D、char*s;gets(s);

标准答案:B

知识点解析:对于选项A字符串中无法存放字符串结束标志、OL选项C每行仅

仅存放5个字符,同样的不能存放字符串结束标志,选项D中指针变量s没有实际

的内存空间,无法存放输入的字符串。因此正确的选项为B),相当于char*s;

s="ABCDE\把字符串常量的首地址存放到指针变量中存储。

6、有以下程序#includeintfun(chars[]){char*P=s:while(*P!=0)p++;return(p-

s);)main(){printfC^dXn",fun("OABCDEF"));)程序运行后的输出结果是

6

B、7

C、1

D、0

标准答案:B

知识点解析:函数fun的主要功能是计算字符串中实际字符的个数,因此主函数中

调用fun得到结果为7。

7、若有以下程序段charstr[4][l2]={"aa","bbb","ccccc","d"},*strp[4];inti;

for(i=0;i<4;i++)strp[i]=str[i];不能正确引用字符串的选项是

A、strp

B、str|O|

C、strp[3]

D^*strp

标准答案:A

知识点解析:程序段中定义指针数组*$印,含有4个元素,for循环sirp分别俣存

了二维数组str中的4个字符串的首地址,因此strp为二级地址,不能保存宁符串

的首地址,*strp或者slrp[O]中存放了字符串“aa”的首地址。所以不能正确引用字符

串的为选项A。

8、以下叙述中正确的是

A、下面的语句用赋初值方式来定义字符串,其中,'\0,是必须的char

strl[]={,s,,T,T,'\0'};

B、有定义语句:charstrl[]="strl";,数组strl将包含4个元素

C、字符串常量"strl”的类型是:字符串数据类型

D、字符数组的每个元素可存放一个字符,并且最后一个元素必须是、(T字符

标准答案:B

知识点解析:选项B中除了字符串中实际字符之外,还要存储字符串结束标志,

应为5个元素。在C语言中没有字符串数据类型,因此选项C不正确,选项D字

符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。

9、以下叙述中正确的是

A、charca[3][5]={”A“,”BB",'CCC'1);是不合语法的

B、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组

C、charca[][5]={“A“,“BB”,"CCC);是不合语法的

D、char*ca[3]={"A\"BB\"CCC"}»是不合语法的

标准答案:B

知识点解析:字符串数组,也就是一:维字符数组,其中每个元素为一,个字符

串,选项B的说法正确。选项A和C)对于ca的定义是正确的。选项D定义一个

指针数组,可以保存多个字符串的首地址。

10、以下叙述中正确的是

A、函数调用strlen(s):会返回字符串s实际占用内存的大小(以字节为单位)

B、两个字符串可以用关系运算符进行大小比较

C、当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和

D、C语言本身没有提供对字符串进行整体操作的运算符

标准答案:D

知识点解析:C语言中没有运算符可以处理字符串.耍调用"string库中的函数来处

理字符串,其中strlen函数主要测试字符串中实际字符的个数,比实际占用的内存

至少要少一个。Strcat(il,s2)函数用于连接两个字符串,是把字符串s2连接到si

的后而。

11、以下叙述中正确的是

A、不能用字符串常量对字符数组名进行整体赋值操作

B、字符串常量"Hell。”会被隐含处理成一个无名字符型数组,它有5个元素

C^charstr[7]="string!";在语法上是合法的,运行也是安全的

D、char*str;str="Hello,;与charstr口;str="Hellon;效果是一样的

标准答案:A

知识点解析:字符数组仅仅可以采用定义时初始化以及输入得到数据,在程序其他

部分不允许对其进行赋值。字符串常量中除了实际字符之外还有结束标志,选项B

错误,而选项C中,没有空间存放字符串结束标志,因此运行是不安全的。选项

D中第一个sir为指针,可以赋值,而后面的为数组,在程序中赋值出错。

12、以下叙述中正确的是

A、语句charstr[10]="string!";和charstr[10]={"string!”};并不等价

B、对于一维字符数组,不能使用字符串常量来赋初值

C、对于字符串常量"string!”,系统己自动在最后加入了、0,字符,表示串结尾

D、在语句charstr[]="string!”;中,数组str的大小等于字符串的长度

标准答案:C

知识点解析:在C语言中,字符串是借助于字符型一维数组来存放的,可以借助

在定义时初始化以及输入来把字符串存入数组,并规定以字符'\0'作为"字符串结

束标志"。'\(T是一个转义字符,称为空值,它的ASCH码值为0。’(F作为标志占

用存储空间,但不计入字符串的实际长度。在C语言中,系统在每个字符串的最

后自动加入一个字符c\(r)作为字符串的结束标志。

13、设有定义charstr口="Hello";则语句pr定又%d%d",sizeof(str),slrlen(stri);

的输出结果是

A、66

B、65

C、55

D、56

标准答案:B

知识点解析:sizeof主要用于测试变量所占的实际内存,而strlen函数主要测试字

符串中实际字符的个数,字符串"Hello”占有内存6个字节,而字符串中共有5个字

符。

14、设有定义语句:char*aa[2]={“abcd",“ABCD”};则以下叙述正确的是

A、aa数组的两个元素只能存放含有4个字符的一维数组的首地址

B、aa数组的值分别是字符串“abed”和“ABCD”

C、aa是指针变量,它指向含有两个元素的字符型数组

D、aa⑼存放了字符串“abed”的首地址

标准答案:D

知识点解析:题目中char*aa[2],定义了指针数组aa。有两个元素,aa[0]存放

“abed”地址,而aa⑴存放“ABCD”地址。

15、以下选项中,没有编译错误的是

A、charstr3[]={'d','e','b','u','g',,\0'};

B、charstrl|5|="pass",str2[6];str2=strl;

C、charname[IO];name="china";

D、charstr4[]:str4=*'helloworld";

标准答案:A

知识点解析:选项A是定义了字符数组str3[],并对其赋初值。选项B中语句

str2二strl非法,字符数经不能直接赋值。选项C,D)和选项B一致。

16、有以下程序main。{chara[5][10]={ltone","two^,"three","four","five");int

i,j;chart;for(i=0;i<4;i++)forO:i+1.j<5;j++)if(a[i][O]>a[j][O]){t=a[i][O];

a[i][O]=a[j][O];a[j][O]=t;}puts(a[l]);}程序运行后的输出结果是

A、fwo

B、owo

C、two

D、fix

标准答案:A

知识点解析:这个程序的执行过程是当i=0时,j=l,a⑼⑼=oa⑶⑼=f;置换

a[2][0]=Ca[3][O]=t;此时,a[2][0]=f,a[l][0]=t,再置换a[2][0]=i,a[l][0]=C;当i=3

时,j=4,a[3][O]=f=a43][O]=f;不置换:所以a[l]的结果为fwo。

17、设有定义:chars[81];inti=O;以下不能将一行(不超过80个字符)带有空格

的字符串正确读入的语句或语句组是

A、while((s[i-H-]=getchar())!=,\n,):s[i]=,\0\

B、scanf("%su,s);

C、gets(s);

D、do{scanf(”%c”,&s[i]);)while(s[i++]!='\n');s[i]=,\0,;

标准答案:B

知识点解析:本题考查标准输入输出函数和循环语句。gets(s)函数的作用是将输入

的字符读入字符串s,直到遇到回车。而scanf()函数接收字符串时的结束标志为回

车或者空格。

18、设有定义:charp[]={T,2,3),*q=p;以下不能计算出一个char型数据

所占字节数的表达式是

A、sizeoffp)

B、sizeof(char)

C^sizeof(*q)

D、sizeof(p[OJ)

标准答案:A

知识点解析:选项A计算的是p口字符数组首地址所占的内存字节数,返回值数组

中所有元素占有的空间。*q和p[0]分别表示数组p中下标为0的字符元素,选项B

和D)都可以计算char型数据占有的字节数。

19、有以下程序#include#includevoidmain(){char

str[][20]={,,One*World,,,,,One*Dream!"),*p=str[1];printf("%d,",strlen(p));

prinffC%s\n",p);}程序运行后的输出结果是

A、9,One*Dream!

B>10.One*Dream!

C^9,One*World

D、10,One*World

标准答案:B

知识点解析:在主函数中定义了二维字符数组str,并对它赋初值。定义字符指针

P,并把字符串str[l]的地址赋给它。所以这时字符指针p指向字符串

“one*Drcam!”,然后在两个输出语句中,分别输出这个字符串的长度10和字符串

本身。

2。、有以下程序#includcvoidmain(){charsLJ="012xy\U8s34f4w2";inti,n=0;

for(i=0;s[i]!=0;i++)if(s[i]>=,0,&&s[i]<=,9,)n++;prinlf("%d\n",n);}程序运

行后的输出结果是

A、0

B、7

C、3

D、8

标准答案:C

知识点解析•:在主函数中的for循环语句中,当s[i]的值不等于0〜9之间的数字

时,结束循环语句的执行。由字符数组s的初值可以得到for循环语句执行了三

次,所以变量n的值等于3。

21、以下不能将S所指字符串正确复制到t所指存储空间的是

A、for(i=0;t[i]=s[i];i-+);

B、while(*t==,-s){t++;s++;)

C、for(i=0J=0;t[i++]=s[j++];);

D、do{*t++=*s++;}while(*s);

标准答案:D

知识点解析:在选项D中.不能把.,所指字符串的结束标志符赋给字符串J

22、下列语句组中,正确的是

A、char*s;s="Olympic";

chars[7];s="Olympic";

C、char*s;s={"Olympic”};

D、chars[7];s={"Olympic");

标准答案:A

知识点解析:选项A中定义了指针变量s,通过赋值语句保存字符串常量的地址,

而字符数组绝对不能赋值,而只能初始化或者输入。

23、有以下程序main。{charch口="uvwxyz",*pc;pc=ch:printf(H%cha",

*(pc+5));)程序运行后的输出结果是

A、0

元素ch[5]的地址

C、z

D、字符y的地址

标准答案:C

知识点解析:在程序中语句pc=ch;的功能是字符指针pc指向字符串数组ch|]的地

址,而*(ps+5)表示字符串数组ch[]中第6个字符z。

24>有以下程序#includcvoidmain(){chars[]=("012xy"[;inti,n=0;for(i=0;

s[i]!=0;i++)if(s嘲>='a'a&&s[i]v='z,)n++;printf("%d\n',,n);}程序运行后的

输出结果是

A、0

B、3

C、5

D、2

标准答案:D

知识点解析:这段程序的功能求出字符串s中字符在小写字符a到z之间字符的个

数。在程序中字符串s的值为“012xy”,所以在7符串s中符合要求的字的个数等

于2。

25、以下能正确定义字符串的语句是

A、charstr="\x43";

B、charstr[]=H\O";

C^charstr=";

D、charstr[]={,\064?):

标准答案:B

知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存

放,不用一对大括号对括起来。

26、以下关于字符串的叙述中正确的是

A、两个字符串中的字符个数相同时才能进行字符串大小的比较

B、可以用关系运算符对字符串的大小进行比较

C、空串比空格打头的字符串小

D、C语言中有字符串类型的常量和变量

标准答案:c

知识点。析:C语言本身并没有设置一种类型来定义字符串变量,却允许使用“字

符串常量”。字符串常量是由双引号括起来的一串字符。任意两个字符串的大小比

较要调用字符串比较函数slrcmp(sl,s2)来进行,其比较的方法是依次对si和s2

中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字

符决定所在串的大小(比较字符大小的依据是其ASCII码值)。

27、若要求从键盘读入含有空格字符的字符串,应使用函数

A、getc()

gets()

C、getchar()

D^scanf()

标准答案:B

知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所

以用scanf()函数不能输入空格;getchar。函数用于输入字符,其调用形式为:

ch=getchan[),getchav。函数从终端读入一个字符作为函数值,把读入的一个字符

赋给变量ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入

Enter.键时,读入才开始执行。gets。函数的调用形式为:gets(str_adr),其中stjadr

是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指

针变量。gels()函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符

为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针。函数的功能是从

pf指定的文件中读入一个字符,并把它作为函数值返回。

28、有以卜程序#includemain(){chars口="abcde";s+=2;printf(u%d\n",

s[0]);}执行后的结果是

A、输出字符C的ASCII码

B、输出字符C

C、输出字符a的ASCII码

D、程序出错

标准答案:D

知识点解析:因为字符数组s口的数组名s表示的是一个地址常量。所以语句

“s+=2;”不能将指针存当前化置的基础上再向后移动两位。因而程序编译时出错。

29、有下列程序:fiin(charP[][10]){intn===0,i;for(i=0;i<7;i++)

if(p[i][0]=,T,)n++;returnn;}main()(charstr[][10]={"Mon\"Tue","Wed",

"Thu","Fri","Sat","Sun");printf(n%d\n",fun(str));}程序执行后的输出结

果是

A、1

B、3

C、0

D、2

标准答案:D

知识点解析:本题在主函数中定义了一个字符二维数组sgHlO],并用{“Mon”,

“True”,“Wed”,“Thu”,“Fri”,“Sat”,“Sun”}初始化。函数fun(charp口[10])的功能

是统计出中p[i|[0]等于字符,「的个数。所以fun(str)的功能是统计一周七天

中英文名称首字母为“T”的个数。因为字符串“True”和“Thu”的首字符是“T",所以

n=2o

家二级C语言(函数和数组)机试模

拟试卷第2套

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

1、有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)include

#includemain(){chara[10]=,'abc",b[10]="012",c[IO]=Hxyz";strcpy(a+1,b+2);

puts(strcat(a,c+1));}程序运行后的输出结果是

A、bc2yz

B、a2yz

C^al2xyz

D、12yz

标准答案:B

知识点解析:程序执行strcpy(a+l,b+2)后,字符数组a的值为飞2",冉进行字符

串的连接strcat(a,c+1),此时字符数组a的值为“a2yz”。

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

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

A、main(){..........x=fun(2»10);...........[floatfun(inta,intb){...........}

B、floatfun(inta,intb){..........}main(){...........x=fun(i,j);...........}

C、floatfun(int,int);main(){x=fiin(2,10);}floatfun(inta,intb){}

D、main(){floatfun(inti,intj);..........x=fun(i,j);...........}floatfiin(inta»intb){............}

标准答案:A

知识点解析:C语言规定,函数必须先定义,后调用(雨数的返回值类型为int或

char时除外)。在选项A)中,调用的子函数在调用后面定义,所以不正确。在选项

B)、C)中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在

选项D)中,存主函数中先对子函数floatfun(inti,intj)进行了声明,然后进行调

用。

3、以下叙述中正确的是

A、用户自己定义的函数只能调用库函数

B、不同函数的形式参数不能使用相同名称的标识符

C、在C语言的函数内部,可以定义局部嵌套函数

D、实用的C语言源程序总是由一个或多个函数组成

标准答案:D

知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由

一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之

间没有主从关系,不能嵌套定义函数。

4、若有定义语句:chars|10]="1234567\0\0";则st#n(s)的值是

A、8

B、7

C、9

D、10

标准答案:B

知识点解析:字符串长度函数strlen(s)表示计算出以s为起始地址的字符串的长

度,并作为函数值返回。这个长度值不包括串尾的结束标志

5、有以下程序#inchidemain(){charP[20]={'a,,5',5',5'},qlJ-'abc",

r[]="abcde";strcat(p,r);strcpy(p+strlen(q),q);printf("%d\n",strlen(p));}

程序运行后的输出结果是

A、9

B、11

C、6

D、7

标准答案:C

知识点解析:字符串连接函数strcat(p,r)的功能是把字符数组p[]和山连接起来,

此时字符数组p[]的有效字符长度为9。再执行sircpy(p十sirlen(q),q)字符串复制函

数,把字符数组q口复制到字符数组p[]从p[3]开始到p[5]数组位置中,由于字符数

组q口中的内容为字符串“abc”复制时把字符串结束标志、null,也复制到字符数组

pl/,这时字符函数st「1cn(p)返回字符数组的有效字符长度为6。

6、若有定义语句:charts1="OK",*s2=nok";以下选项中,能够输出“OK”的语句

A、if(strcmp(s1,s2)!=0)puts(sl);

B、if(strcmp(sl,s2)!=0)puts(s2);

C、if(strcmp(s1♦s2)==1)puts(s1);

D、if(strcmp(s1,s2)==0)puts(s1);

标准答案:A

知识点解析:字符串比较函数strcmp的功能是对si和s2所指字符串进行比较。如

果sls2,返回正数,所以对于本题米说,能够输出“OK”的语句是选项A)所指的语

句。

7、有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母

#include#includevoidfun(char*p){inti=0;\vhile(p[i]){if(p[i]=,,&&islower(p[i-

1]))p[i-l]=p[i-l]-,a,+,A,;i++;}}main(){charsl[100]="abcdEFG!H;fun(sl);

printfC%s\n,',si);}程序运行后的输出结果是

A、AbCdEFg!

B、abcdEFG!

C^abcdEFg!

D、aBcDEFG!

标准答案:D

知识点解析:函数fun(chai*p)的功能是如果p[i]指向的字符为空字符并且其前一个

字符是小写字母,则把小写字母变成大字母,所以在主函数中,执行fun(sl)后,

小写字母b,d都改成大字母。

8、若有以下定义和语句charsl[10]="abcd!”,*s2=*,\n123\\";printf("%d%d\

n",strlen(sl),strlen(s2));则输出结果是

A、105

B、107

C、55

D、58

标准答案:C

知识点解析:本题要注意的是转文字符的问题,在字符串s2中,有两个转义字

符,分别是回车换行符和反斜线。所以其字符串长度等于5。

9、有以下程序#includeintfun(inta,intb){if(b==0)returna;elsereturn(fun(-a,-

-b));)main(){PrintfC%d\n",fun(4,2));}程序的运行结果是

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:由程序可知函数fun(inta,intb)是一个递归函数。所以当t函数中调

用fun(4,2)时,其执行过程如下:fun(4,2)->fun(3,l)->fun(2,0),其返回值为

2o

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

A、if(sl==s2)ST;

B>if(strcpy(sl,s2)==l)ST;

C、if(strcmp(s2,s1)=O)ST;

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

标准答案:C

知识点解析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比

较函数sirempO,如果这个函数的返回值等于0,说明两个字符串相等。

11、以下叙述中正确的是

A、函数名代表该函数的入口地址

B、所有函数均不能接受函数名作为实参传入

C、函数体中的语句不能出现对自己的调用

D、如果函数带有参数,就不能调用自己

标准答案:A

知识点解析:函数形、实参传递的时候,要求对应位汽类型一致即可,如果实参为

函数名,可以定义相心的形参为指向函数的指针变量来获得该函数的入口地址,囚

此选项B)错误的,在C语言中允许进行递归调用,即自己调用自己,选项C)和选

项D)是错误的。

12、以下叙述中正确的是

A、函数既可以直接调用自己,也可以间接调用自己

B、任何情况下都不能用函数名作为实参

C、函数的递归调用不需要额外开销,所以效率很高

D、简单递归不需要明确的结束递归的条件

标准答案:A

知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由

一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调

用,甚至C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该

调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与

原来的解法相同,只是所处理的对象有规律地递增或递减,可.以应用这个转化过程

使问题得到解决,同时为了有效使用递归调用必定要有一个明确的结束递归的条

件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,

选项C)和选项D)不正确。函数名表名了函数的入口地址,如果函数的形参为指向

函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,

选项B)错误。

13、以下关于retum语句的叙述中正确的是

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

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

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

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

标准答案:R

知识点解析:return语句主要用于返回函数的值。在一个自定义函数中,可以根据

不同的情况设置多条reiurn语句返回函数的值。

14、己定义以下函数inifun(int*p)(return*p;}fun函数返回值是

A、不确定的值

B、一个整数

C、形参p中存放的值

D、形参p的地址值

标准答案:B

知识点解析:由函数inifun(int*p){retum*p;)的定义可知,返回值为整型指针变量

p所指向的数据。

15、以下叙述中错误的是

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

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

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

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

标准答案:C

知识点解析:函数值通过return语句返回,relurn语句的形式如下:retum表达式

或return(表达式);当程序执行到return语句时,程序的流程就返回到调用该函数

的地方,并带回函数值。在同一函数内,可以根据需要,在多处出现relurn语句,

在函数体的不同部位退出函数。无论函数体中有多少个relum语句,retum语句只

可能执行一次,返回一个函数值。retum语句中也可以不含有表达式,这时必须定

义函数为void类型,它的作用只是使流程返回到调用函数,并没有确定的函数

值。函数体内可以没有return语句,这时也必须定义函数为void类型,程序的流

程就一直执行到函数末尾的“}”,然后返回调用函数,也没有确定的函数值带回。

16、以下叙述中错误的是

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

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

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

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

标准答案:B

知识点解析:一个C程序中可以包含任意多个不同名的函数,但只能有一个主函

数。一个C程序总是从主函数开始执行。函数的值通过retum语句返回,return语

句中的表达式的值就是所求的函数值。在C语言中,数据只能从实参单向传递给

形参,称为“按值”传递。也即是说,当简单变量作为实参时,用户不可能在函数中

改变对应实参的值。

I7N有以下程序intadd(inta,intb){return(a+b);main(){intk,(*f)(),a=5,

b=10;f=add;}则以下函数调用语句错误的是

A、k=add(a.b):

B、k=(*D(a,b);

C、k=*f(a,b);

D、k=f(a,b);

标准答案:C

知识点解析:在语句“k=*f(a,b)”中,由于“()”的优先级高于“种,所以“*f(a,b);”

表示其返回类型为指针的带有两个整型参数的函数,而不是整型数值,因此选项

C)为错误的调用形式。

18、以下叙述中正确的是

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

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

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

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

标准答案:B

知识点解析:在标准C中,函数的定义形式为:函数返回值的类型名函数名(类型

名形式参数1,类型名形式参数2,…){说明部分语句部分)需要说明的是函数

名和形式参数都是由用户命名的标识符,在同一程序中,函数名必须惟一,形式参

数名只要在同一函数中惟一即可,与其他函数中的变量可以同名。relum语句的作

用是返回函数的值,在函数中可以出现多个或者没有。

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

句中正确的是

A、intfun(double,int);

B>inttun(double*x>intn);

C、intfun(double*,int*);

D^intfun(doublex,int*n);

标准答案:C

知识点解析:函数说明的一般形式为:类型名函数名(参数类型1,参数类型

2,....)。因为函数intfun(doublex[10],int*n)的第1个形式参数是一个双精度型

的一维数组,第2个参数是一个整型指针,并返回一个整型值。一维数组的名字表

示的是一维数组的地址。

20、以下选项中叙述错误的是

A、在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语

句内

B、C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值

C、C程序函数中定义的自动变量,系统不自动赋确定的初值

D、C程序函数的形参不可以说明为s〔atic型变量

标准答案:B

知识点解析:在函数定义的静态变量,只需要赋值1次,即可保存初始值,不需要

每次调用时都赋初始值。

21、有以下程序intf(intx);main(){intn=Lm;m=f(f(f(n)));printf("%d\n",

m);)intf(intx){returnx*2;}程序运行后的输出结果是

A、1

B、2

C、4

D、8

标准答案:D

知识点解析:程序考查了函数的调用。对于m=fl(f(f(n)));首先计算最内层的函数

调用f(n),执行f函数,得到返回值2,然后计算f(2),得到返回值为4,最后计算

f(4),得到计算结果为8。

22、有以卜程序#includeintfun(intx,inty){if(x==y)retum(x);elsereturn((x+y)/

2);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}程序

运行后的输出结果是

A、3

B、6

C、8

D、12

标准答案:B

知识点解析:fun(b,c)即fun(5,6),5!=6,所以返回(5+6)/2=5;fun(2*a,5)即

fun(8,5),8!=5,所以返回(8+5)/2=6。

23、有以下程序#inckideintf(intx,inty){retum((y-x)*x);)main(){inta=3,

b=4»c=5,d;d=f(f(a,b),f(a,c));pnntf("%d\n",d);}程序运行后的输出

结果是

A、10

B、8

C、9

D、7

标准答案:C

知识点解析:本题考查函数的嵌套调用。首先计算f(a,b)与f(a,c),f(a,b)=(b-

a)*a=3,f(a,c)=(c一a)*a=6,然后计算f(3,6)=(6.3)*3=9o

24、有以卜程序#includcdoublef(doublex);main(){doublea=0;inti;for(i=0;

i<30;i+=10)a+=f((do-uble)i);printf("%5.Of\n".a);)doublef(doublex)

{reLurnx*x+l;}程序运行后的输出结果是

A、401

B、500

C、503

D、1404

标准答案:C

知识点解析:由于函数f的作用是对形参x求平方再加1.所以在主函数中,循环

第一次执行后变量a的值等于1,第二次执行后,变量a的值等于102,第三次执

行后,变量a的值等于50等

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

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

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

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

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

标准答案:B

知识点解析:在C语言中,函数的实参单元与形参单元在内存中分配不同的存储

单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,

在被调用函数中对形参存储单元中的值进行运算,最后通过return语句把函数值返

回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。

26、有以卜.程序voidfun(inla,intb,intc){a=b;b=c;c=a;)main(){int

a=10,b=20,c=30;fun(a,b,c);printf(n%d,%d,%d\n",c,b,a);}程

序运行后的输出结果是

A、10,20,30

B、20,30,10

C、30,20,10

D、0,0,0

标准答案:C

知识点解析:函数fun中采用了变量作为参数,那么参数传递以后,形参a,b,c

的变化对于实参a,b,c是没有影响的,因此主函数中a,b,c的值经过fun调用

以后,值没有变化。

27、有以下程序#includcintf(intx);main(){inta>b=0;for(a=0;a<3;a++)

{b=b+f(a);putchar(,A,+b);}}intf(intX){returnx*x+l;}

A、BCD

B、BDI

C、ABE

D、BCF

标准答案:B

知识点解析:在函数main。中,第一次执行for循环时,b的值等于1,此时输出字

母B;第二次执行for循环时,b的值等于3,此时输出字母D:第三次执行for循

环时,b的值等于8,此时输出字母I。

28、若有以下程序voidf(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-5-4-3-2-1-

「、1-2-3-456

D、1-2-3-4-56

标准答案:A

知识点解析:函数f的主要功能为逆置输出整数x的每一位数据,如果z的值为

123456,逆置输出的结果为6-5-4-3-2-1。

国家二级C语言(函数和数组)机试模

拟试卷第3套

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

1、有以下程序#include<stdio.h>voidfun(inla,intb){intt;t=a;a=b;b=t;}main()

{intc[10]=[1,234,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++)printf("%d;',c[i]);printf("\nu);}程序的运行结果是

A、2,143,65870,9,

B、0,9,8,7,65,4,3,2,1,

C、1,2,3,4,5,678,9,0,

D、0,1,2,345,6,7,8,9,

标准答案:C

知识点浦析:c语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传

递,只由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配

存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单

元仍保留并维持原值。由此可知,在本题中,函数fun(inta,intb)的功能是实现形

参整形变量a和b值的互换。当在主函数中调用fun(c[i],c[i+l])时,把实参变量c[i]

和c[i+l]的值赋给形参变量a和b,执行完函数时,形参变量a和b

的值发生了互换,实参变量c[i]和c[i+l]的值并没有发生互换,所以输出的值为

1,2,3,4,5,6,7,8,9,0。

2、有下列程序:main(){inti,s=O,t[]={1,2,34,5,6,7,8,9);for(i=0;i<9;i+=2)s+

=*(t+i);prinif("%d\n",s);)程序执彳了后的输出结果是

A、20

B、45

C、36

D、25

标准答案:D

知识点解析:本题在主函数中定义了一维整型数组2,345,6,7,8,9};然后在

for循环语句中自变量i从0开始,每次自加2,执行s+=*(l+i)语句,因为C语言规

定数组名代表数组的首地址,也就是第•个元素的地址。因此*(t+i)代表数组的第

ill个元素。所以程序运行的结果是口315719=25,即变量s的值等于25。

3、下列选项中,能正确定义数组的语句是

A、intnum口;

B、intN=2008;intnum[N];

C、intnum[O..2OO8];

D、#defineN2008intnum[N];

标准答案:D

知识点解析:在定义一维数组时,数组的下标应该是一个确定的整数值。要注意的

是在定义二维数组时,其第一维下标可以省略,但第二维下标不能省略。

4、若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是

A、#definen5inta[2*n];

B、inta[5+5];

C、#defineN10inta|N];

D、intn=10,a[n];

标准答案:D

知识点解析:在C语言中,定义一维数组的语句形式为:类型名数组名[整型常量

表达式]。在选项D中,n是一个整型的变量。

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

时,进行由大到小排序。voidf(intb[],intn,intflag){intij,t;for(i=0;i<n-l;i++)

for(j=i+l;j<n;j++)if(flag?b[i]>b[j]:b[i]<b[j]){t=b[i];b[i]=b[j];b[j]=t;}}main(){int

a[10]={5,4,3,2,l,6J,8,9,10},i;f(&a[2],5,0);f(a,5,l);for(i=0;i<10;i++)

pnntt("%d,",aLiJ);)程序运行后的输电结果是

A、123,4,5,6,7,8,9/0,

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

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

D、10,9,876,5,4,3,2,1,

标准答案:B

知识点解析:主函数中进行了两次f函数的调用。第一次传递给形参数组b的地址

为元素a[2]的地址,n接收数据位5,因此数组b中元素为3,2,1,6,7,此时flag的

值为0,进行由大到小排序,而数组b和实参数组a共用一段存储空间,第一次调

用结束以后,数组a的值为5,4,7,6,3,2,1,8,9,10。第二次调用f函数,形参数组凄收

实参数组a的首地址,取5个元素,由小到大排序:调用结束以后,数组a的值为

3,4,5,6,7,2,1,8,9,10o

6、有以下程序#include<stdio.h>main(){int

s[12]={l,2,3,4,4,3,2,l,l,l,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=l;i<

5;i++)printf("%d,\c[i]);printf("\nM);}

A、4332

B、2344

C、1234

D、1123

标准答案:A

知识点解析:本题考查for语句的循环控制,首先定义了两个数组并赋予了初始

值,第一个for循环语句循环12次遍历s数组的各个元素,将中的原素值作为

c口数组中的下标,使相应的值自加。例如当i=0,c[s[0]]++为c[l]++,其值变为

1,当执行i=l,2,…11后,c[l]、c[2]、c[3]、c[4]分别为4、3、3、2,故选项A为

正确的运行结果。

7、彳j下列程序:#include<stdio.h>voidfun(int*a,intn)/*fun函数的功能是将a所

指数组元素从大到小排序*/{intfor(i=0;i<n-l;j++)for(j=i+l;jVn;j++)if(a[i]<

a[j]){t=a[i];a[i]=a[j];a[j]=t;)}main(){intc[10]={l,2,3,4,5,6,7,8,9,0),i;fun(c+4,6);

for(i=0;i<IO;i++)printf("%d;',cli]);printf("\n");}程序的运行结果是

A、1,2,3,4,9,876,5。

0,9,8,7,6,5,123,4,

C、098,7,6,5,4,321,

D、123,4,5,6,7,8,9,0,

标准答案:A

知识点解析:fun。函数的功能是对数组a口的元素从大到小进行排序。所以在主函

数执行fun(c+4,6)语句时,将从数组c的第5个元素开始的后6个元素进行从大到

小排序。排序之后,数组c的内容变为{123,4,9,8,7,6,5,0}。

8、有以下程序#include<stdio.h>main(){inic[6]={10,20,30,40,50,60),*p,*s;p=

c;s=&c[5];printf("%d\n",s-p);}程序运行后的输出结果是

A、5。

B、6

C、5

D、60

标准答案:C

知识点解析•:主函数中指针变量p指向数组as保存了数组最后一个元素的地

址,那么s-p为两个地址之间的元素差5。

9、以下叙述中正确的是

A、一条语句只能定义一个数组

B、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式

C、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单

D、在引用数组元素时,下标表达式可以使用浮点数

标准答案:C

知识点解析:数组的定义格式:类型说明符数组名[整型常量表达式],…;可以同时

定义多个类型相同的数组,之间以逗号分隔开,数组的类型表明了数组中元素的数

据类型,数组中所有元素的类型相同,数组经过定义以后就可使用,编译程序将对

其分配一片连续的存储空间进行连续存储.「语言中只能单个引用数组元素而不能

一次引用整个数组。引用格式为:数组名[下标],引用元素时,需要注意下标只能

为整型常量或整型表达式。

10、以下叙述中正确的是

A、语句inta[]={0};是不合法的,遗漏了数组的大小

B、语句chara[2]={"A","B“};是合法的,定义了一个包含两个字符的数组

C、语句inta[8]={0};是合法的

D、语句chara[3|;a="AB”;是合法的,因为数组有三个字符空间的容量,可以保

存两个字符

标准答案:C

知识点解析:当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存

储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。

数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式

为:类型说明符数组名[常量表达式目值,值,…,值};需要注意的是当所赋初值多

于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一个初

值必定赋给下标为。的元素,然后按这些数值的排列顺序赋初值,只能给元素逐个

赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不给出

数组元素的个数。

11、如果定义floata[10],x;则以下叙述中正确的是

A、表达式a+1是非法的

B、语句a=&x;是非法的

C、三个表达式a[l]、*(a+l)、表示的意思完全不同

D、表达式举&a[lj是非法的,应该写成率

标准答案:B

知识点解析:定义语句floata[10],x;以后,数组名a表示了数组元素的首地址,是

常量在程序中不能更改,因此选项A是的描述是正确的。而指向运算符和取址运

算符,是互反运算符优先级相同,*&对1]和*(&对1])含义相同。

12、有以下程序#include<stdio.h>main(){inta[]={10,20,30,40),*p=a,i;for(i=0;i<

=3;i++){a[i]=*p;p++;}printf("%d\nM,a[2]);}程序运行后的输出结果是

A、20

B、30

C、10

D、40

标准答案:B

知识点解析:因为指针变量p的初始值指向数组a,所以执行for循环语句后,数

组a中的元素的值不变,

13、若有以下程序main(){inti,j=0;chara[]="Howareyou!";for(i=0:a[i];i++)if

(a[i]!='?)a[j++]=a[i];a|j尸\0';printf(M%s\n",a);}则程序的输出结果是

A、Howareyou

B、Hay!

C、Howareyou!

D、Howareyou!

标准答案:C

知识点解析:主函数中利用for循环访问字符串的每一个字符,判断当前字符是否

为空格,如果是空格则删除。因此删除字符串"Howareyou!”中空格以后,字符串

为Howareyou!o

14>若有以下程序#include<stdio.h>main(){inti,j=0;chara[]="Howareyou!1',

b[10];for(i=0;a[i];)if(a[i]=,')b[jH]=a[i+]];b[j]=,\O,;printf(M%s\nM,b);)则

程序的输出结果是

A、Howareyou

B、Hay!

C^Howareyou!

D、ay

标准答案:D

知识点解析:主函数中利用for循环访问字符串a的每一个字符,判断当前字符是

否为空格,如果是空格则保存该空格后面的一个字符存放到字符数组b中。在字符

串“Howareyou!”中,第一个空格后面字符为3,第二个空格后面字符为了。

15、若有以下程序#includcchar*a="you",b[]="wclcomc#you#to#China!";main()

{inti,j=0;char*p;fbr(i=0;b[i]!=,\0,;){if(*a==b[i]){p=&b[i];for(j=0;

a[j]!=,\O,;j++){if(a[j]!=*p)break;p++;}if(a[j]='\O')break;}}printfC%s\n",p);)

则程序的输出结果是

A^#you#to#China!

B、me#you#to#China!

C、#China!

D、#to#China!

标准答案:D

知识点解析•:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,

如果含有则退出,字符有针p指向该匹配子串后面的位置,利用printf函数输出则

从该位置开始一直输出到字符串b的结尾。

16、以下数组定义中错误的是

A>intx[][3]={0};

B>intx[2][3]={{l,2},{3,4},{5,6}};

C.intx[][3]={{l,2,3},{4,5,6));

D.intx[2][3]={1,2,34,5,6};

标准答案:D

知识点解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行

的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定

义。在选项A中赋值号左边定义了一个3行2列的二维数组,而右边用2行3列的

数字进行赋初

温馨提示

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

评论

0/150

提交评论