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

付费下载

下载本文档

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

文档简介

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

拟试卷1(共9套)

(共256题)

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

拟试卷第1套

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

1、有下列程序:include/*fun函数的功能是将a所指数组元素从大到小排序*/

voidfun(int*a,intn)main()(intt)i,j;{intc[10]={l,2,3,4,5,6,7,8,

9,0),i;for(i=0;i

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

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

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

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

标准答案:A

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

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

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

2、有以下程序#inchidemain(){imc⑹={10,20,30,40,50,60},*p,*s;

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

A、50

B、6

C、5

D、60

标准答案:c

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

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

3、以下叙述中正确的是

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

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

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

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

标准答案:C

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

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

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

将对其分配一片连续的存储空间进行连续存储。C君言中只能单个引用数组元素而

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

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

4、以下叙述中正确的是

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

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

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

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

存两个字符

标准答案:C

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

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

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

为:类型说明符数组名[常量表达式]二{值,值,…,卜。需要注意的是当所赋初

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

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

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

给出数组元素的个数。

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

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

语句a=&x:是非法的

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

D、表达式*&就1]是非法的,应该写成*(&(a[l]))

标准答案:B

知识点解析:定义语句x;”以后,数组名a表示了数组元素的首地

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

取址运算符,是互反运算符优先级相同,*&a"l和含义相同。

6、有以下程序#includemain。{inta[]={10,20,30,40),*p=a»i;fbr(i=0;

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

A、20

B、30

C、10

D、40

标准答案:B

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

组a中的元素的值不变<:

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

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

A、Howareyou

B、Hay!

C、Howareyou!

D、Howareyou!

标准答案:C

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

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

为Howareyou!o

8、若有以下程序#includemain(){inti,j=0;chara||="Howareyou!',,b|10];

,,

for(i=0;a[i];i++)if(a[i]=)b[j++]sa[i+l];printf("%s\n",b)?}则

程序的输出结果是

A、Howareyou

B、Hay!

C、Howareyou!

D、ay

标准答案:D

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

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

串”Howareyou!”中.第一个空格后面字符为第二个空格后面字符为y.

9、若有以卜程序#includechar*a="you",b[]="welcome#you#to#China!H;main(){int

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

j++){if(a|j]!=*p)break;p++;}if(a[j]=,\O'Jbreak:})printf("%s\

n",p);}则程序的输出结果是

A、#you#to#China!

B、me#you#to#China!

C、#China!

D、#to#China!

标准答案:D

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

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

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

10、以F能正确定义二维数组是

A^inta[][3];

B、inta[][3]={2*3};

C>inta[][3]={}

D>inta[2][3]={{l},{2},{3,4});

标准答案:B

知识点解析:C语言中定义二维数组,必须指定二维数组每一维的大小。选项A

没有指定数组a行的大小,错误;选项B,虽然没有指定行大小,但是可以通过大

括号里面的元素个数计算出行的大小为1,因此是正确的;选项C同样没有指定行

的大小,也不能通过元素个数计算行的个数,错误;选项D定义的是二行三列数

组,但是后面数据是三行,超出范围,所以错。

11、若有以下说明和语句intc[4][51,(*p)[5];p=c;能够正确引用c数组元素的

A^p+1

*(p+3)

C、*(p+l)+3

D、*(p[0]+2)

标准答案:D

知识点解析:本题考查数组和指针,在本题中c是二维数组,指针p指向二维数组

c,p其实是指向c数组的第一行。因此选项A中p+1指向c数组的第二行:选项

B中,p+3表示p指向c数组的第三行,因此*(p+3)表示取出c数组第三行首元素

的地址;选项C和选项B类似,表示取出数组c第二行首元素地址然后加3;选项

D中p[0]+2表示数组第一行第三列元素的地址,因此*(p[0]+2)是取出该元素的值。

12、若有定义语句:intk⑵[3],*pk[3];,则以下语句中正确的是

A、pk=k;

R、pk[O]=k[1][2]:

C、pk=k[0];

D、ok[]=k;

标准答案:B

知识点解析:本题考查多维数组和数组指针。k是一个二维数组,pk是一个指针数

组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A错误,

等号的左边是一个数组地址,不是变量:选项B是把元素赋值给pk[0]:选

项C中等号左边不是变量:选项D类型不匹配,pk[l]是指向一个整型对象,而k

是一个二维数组首地址。

13、若有定义语句:inta[3][6];,按在内存中的存放顺序,a数组的第10个元素

A、a[0][4]

B、a[l][3]

C、a|0]|3]

D、a|l]|4]

标准答案:B

知识点解析:本题考查多维数组的定义和使用。a是一个二维数组,有3行6列。

即每行6个元素,a的第10个元素位于第二行的第四个位置,即

14、若有定义语句:inta[2][3],*p[3];,则以下语句中正确的是

A^p=a;

B、p|0]=a;

C、p[0]=a[l][2];

D、pLlJ=a;

标准答案:c

知识点3析:本题考查多维数组和数组指针。a是一个二维数组,p是一个指针数

组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A错误,

等号的左边是一个数组地址,不是变量;选项B数据类型不匹配,p[0]是指向一个

整型对象,而a是一个二维数组首地址;选项C正确,是把元素赋值给

p[0];选项D和选项B一样属于数据类型不匹配,p[l]是指向一个整型对象,而a

是一个二维数组首地址。

15、若有定义:inta[2][3]:,以下选项中对a数组元素正确引用的是

A、a[2][!l]

B、a[2][3]

C、a[0][3]

D、a[l>2][!l]

标准答案:D

知识点解析:本题考查数组的使用,C语言中数组的下标从0开始。本题中a是一

个二维数组,两个下标的范围分别是0—1和0-2。选项A中第一个下标越界,超

出了范围;选项B中第一个和第二个下标都超出了范围;选项C中第二个下标超

出范围:选项D中.1>2的值为0.!1的值为().因此选项D实际是访问a[0]啊,

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

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

B、intx⑵[3]={{1,2),{3,4),{5,6}}:

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

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

标准答案:B

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

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

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

数字进行赋初值。所以出现了边界的越界溢出而出错。

17、有以下程序#include#defineN4voidfun(imintb[]){inti;for(i=0;i

A、一12,—3,0,0,

B、一3,—1,1,3,

C、0,1,2,3,

D、一3,一3,一3,一3,

标准答案:B

知识点解析:fun函数的功能是求出二维数组a中第i行第i个元素与第N-1-i元素

的差,赋给b[i]。在主函数中,把实参二维数组x和一维数组y传递给形参a和

b,最后输出一维数组y中元素的值。

18、有以下程序#inchidemain(){intb[3][3]={0,1,2,0,1,2,0,1,2),i,j,

t=l;tor(i=0;K=i.j++)t+-bliJLbJLiJUJJ;pnntt("%d\n",t);}程序运行后的输出

结果是

A、3

B、1

C、9

D、4

标准答案:D

知识点解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,

每次执行变量t的累加时,二维数组元素b的第二下标的值与第一下标相同的道,

所以程序执行的过程为1=1十“1]川十“2][2]=1十I+2二4。

19、以下定义数组的语句中错误的是

A>intnum[][3]={{1,2),3,4,5,6};

B、intnum[]={1,2,3,4,5,6);

C>intnum[][4]={l,2,3,4,5,6);

intnum[2][4]={{l,2},{3,4},(5,6));

标准答案:D

知识点解析:在选项D的数组定义中,赋值号左边定义了一个2行4列的二维数

组.而在右边定义了一个3行2列的二维数组.

20有下列程序:main(){intx[3][2j={0},i;for(i=0;i<3;i++)scanf("%d",

x[i]);printf("%3d%3d%3dLn",x[0][0],x[0][l],x[l][0]);}若运行时输入:24

6,则输出结果为

A、200

B、240

C、204

D、246

标准答案:C

知识点解析:语句x[3][2]={0}表示将二维数组)的所有元素赋初值0,而循环语句

for(i=0;i<3;i++)scanf(n%d",x[i])表示对数组元素x⑼⑼、x[l]⑼、x⑵⑼赋

值。所以当运行程序时,输入246时,数组元素x[0][0]=2、x[l][0]=4.x[2][0]=6,

因此,输出数组元素x[0][0]=2、x[0][l]=0.x[l][0]=4的值204。

21、有以下程序程ncludeinifun(int(*s)[4],intn,intk){intm,i;m=s|O||k|;

for(i=l;im)m=s[i][k];returnm;)main(){inta[4][4]={{1,2,3,4),{IL12,

13,14),(21,22,23,24),{31,32,33,34)}:printf("%d\n",fun(a,4,

0));}程序的运行结果是

A、31

B、34

C、4

D、32

标准答案:A

知识点解析:函数funl(im(*s)[4],int,inik)的功能是返回二维数组第k列的最大

元素。在主函数中由于二维数组a[4][4]已经初始化,所以fun(a,4,0)的值是二维

数组a[][]第1列中的最大元素31。

22、有下列程序:main(){inta[4][4]={{l,4,3,2),{8,6,5,7),{3,7,2,

5),[4,8,6,1)),i,j,k,t:for(i=0;i<4:i++)forfj=0;j<3;j++)for(k=j+l;

k<4;k++)iffa[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

for(i=0;i<4;i++)printf("%d,H,a[i][i]);}程序运行后的输出结果是

A、8,7,3,1,

B、1,6,5»7,

C、4,7,5,2,

D、1,6,2,1,

标准答案:B

知识点解析:最外层的for语句的自变量i是列下标,而内部的两个for语句的自变

量i和k是行下标。所以由程序段可知,这是利用三重循环对二维数组a[4]⑷的元

素按列从小到大进行排序,所以最后排完序的结果为批4][4]={{1,4,2,I),{3,

6,3,2),{4,7,5,5},{8,8,6,7)),最后一个for语句的功能是输出数组

a[4][4]主对角线上的元素,因而输出为1,6,5,7o

23、有下列程序:main(){inti,t[][3]={9,8,7,6,5,4,3,2,1);for(i=0;

i<3;i++)printf("%d”,t[2-i][i]);}程序执行后的输出结果是

A、753

B、369

C>751

D、357

标准答案:D

知识点解析:由于在程序中定义了二维数组山[3]=[9,8,7,6,5,4,3,2,

1):由二维数组的存储方式按行存储,即初始化完第一行的所有列再初始化下一行

的元素。可知这是一个3行3列的二维数组,第一行的元素为{9,8,7),第二行

的元素为{6,5,4),第三行的元素为{3,2,l)o然后用for循环输出t⑵⑼、

t[t[0][2],它们的值分别为3、5、70

24、有下列程序:main(){inta[4][4]={{l,4,3,2),{8,6,5,7),{3,7,2,

5),[4,8,6,1}),i,k,t:for(i=0;i<3;i++)for(k=i+1;k<4;k++)if(a[i][i]

A、6,2,h1.

B、IL2,6,

C、2,3,4»6,

D、6,4,3,2,

标准答案:D

知识点解析:利用二重for循环对二维数组a[4][4]的主对角线上的元素[1,6,2,

1}实现按列从大到小排序,所以数组a[4][4]的值变为{{6,4,3,2,},{8,2,

5,7),{3,7,I,5),{4,8,6,1)),最后输出数组a[4][4]第一行上的元素,所

以输出结果为6,4,3,2o

25、若有定义:intw[3][5];则以下不能正确表示该数组元素的表达式是

A、*(*w+3)

B、*(*(w+l))

C、*(w+l)[4]

D、*(&w[0][0]+l)

标准答案:C

知火点解析:在C语言中,二维数组的名字表示的是二维数组的地址,对于二维

数组imw[3][5],可以认为w为一个一维数组,含有3个元素,而每个元素为一个

含有5个元素的一维数组。而(w+1)为一个含有两个元素的一维数组,首先和

(w+l)[4]结合非法,4超出了二维数组的边界,取值也就是非法的了。

26、以下错误的定义语句是

intx[4][3]={(l,2,3),(1,2,3},{1,2,3},{1,2,3));

B>intx[J[3J={{0),{1},{1,2,3)};

C、intxn[3]={1,2,3,4);

D、intx[4][]={{1,2.3}.{1.2.3}・{I.2,3).{I,2,3)):

标准答案:D

知识点解析:一维数组定义和初始化是允许省略行下标,不允许省略列下标。

27、以下叙述中正确的是

A、语句inta[4][3]={l,2,4,5};是错误的初始化形式

B、语句2,4,5);是错误的初始化形式

C、在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

D、语句inta|4][3]={{l,2),{4,5)};是错误的初始化形式

标准答案:C

知识点解析:在理解二维数组的时候,可以把一个二维数组看成是一个一维数组,

每个数组元素又是包含有若干个元素的一维数组,也就是具有行列的结构,二维数

组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也

可按行连续赋值。

28、设有定义: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。

29、有以下程序#includc#dcfincN3voidfun(inta[][N],intb[])main(){intij;{int

x[N][N]={l,2,3,4,5,6,7,8,9),y[N],i;for(i=0;i

1,3,5,

B、2,4,8,

C、3,5,7

D、3,6,9,

标准答案:D

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

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

最大元素。

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

拟试卷第2套

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

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

stdio.h>#include<string.h>main(){chara[10]="abc",b[lO]="OI2',,

c[10]="xyz";strcpy(a+1,b+2);puts(strcat(a,c+1));}程序运行后的输出结果是

A、bc2yz

B、a2yz

C^al2xyz

D、I2yz

标准答案:B

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

串的连接“strcat(a,c+l『,此时字符数组a的值为“a2vz”。

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

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

A^main(){.....x=fim(2,10);.....(floatfun(inta,intb){.....}

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

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

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

标准答案:A

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

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

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

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

用。

3、以下叙述中正确的是

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

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

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

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

标准答案:D

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

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

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

4、若有定义语句:chars[l0]=,rl234567\0\0";则strlen(s)的值是

A、8

B、7

C、9

D、10

标准答案:B

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

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

5、有以下程序#includeVstring.h>main(){charp[20]={,a\'b',5','d'),

q[]=Habc",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,再执行slrcpy(p+s【rlen(q),q)字符串复制函

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

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

p[]中,这时字符函数strlen(p)返回字符数组p[]的有效字符长度为6。

6、若有定义语句:char*sl="OKn,*s2="ok";以下选项中,能够输出“0K”的语句

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

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

C>if(strcmp(sl>s2)==l)puts(sl);

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

标准答案:A

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

果sl〈s2,返阿负数,如果sl==s2,返回0,如果sl>s2,返回正数,所以对于本

题来说,能够输出“OK”的语句是选项A)所指的语句。

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

#include<stdio.h>#include<ctype.h>voidfun(char*p){inti=0;while(p|i])

{if(p[i]=,,&&islower(p[i-l]))p[i—l]=p[i—1]—,a,4-'A,:i++;)}main(){char

sl[100]=nabcdEFG!";fun(sl);printfC%s\n",si);}程序运行后的输出结果是

A、AbCdEFg!

B、abcdEFG!

C>abcdEFg!

D、aBcDEFG!

标准答案:D

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

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

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

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

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

A、105

B、107

C、55

D、58

标准答案:C

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

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

9、有以下程序#include<stdio.h>inifun(inta,intb)main())if(b==O)retuma;

{printf("%d\n",fun(4;2));]elsereturn(fun(-a,-b));)程序的运行结果是

A、1

B、2

C、3

D、4

标准答案:B

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

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

值为2。

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

A、iffsl==s2)ST;

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

C^if(strcmp(s2,sl)==0)ST:

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

标准答案:c

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

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

11、若有以下说明和定义uniondt{inta;charb;doublec;Jdata;以下叙述中错

误的是

A、data的每个成员起始地址都相同

B、变量daia所占内存字节数与成员c所占字节数相等

C、程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000

D、data可以作为函数的实参

标准答案:C

知识点解析:本题主要考查联合的定义和使用.选项A)联合中每个成员起始地址

都是一样的,正确;选项B)联合的长度等于长度最长成员的长度,在data中,成

员c是double类型,长度为8个字节最长,因此data所占用字节数和成员c长度

一致。选项C)整型和double类型的存储格式不一致,整数5在内存中的存储格式

和浮点数5存储格式不一样,因此data,c输出不会是5.000000;选项D)联合和

结构体都可以作为函数实参。

12、以下关于函数的叙述中正确的是

A、每个函数都可以被其他函数调用(包括main函数)

B、每个函数都可以被单独编译

C、每个函数都可以单独运行

D、在一个函数内部可以定义另一个函数

标准答案:B

知识点解析:本题主要考查函数的定义和使用。选项A)错误,main函数可以调用

其他函数,但是其他函数不能调用main函数;选项B)正确;选项C)错误,只有

main函数可以单独运行,其他函数只能被调用;选项D)错误,C语言中不能在函

数内部定义函数。

13、在C语言中,函数返回值的类型最终取决于

A、函数定义时在函数首部所说明的函数类型

B、return语句中表达式值的类型

C、调用函数时主调函数所传递的实参类型

D、函数定义时形参的类型

标准答案:A

知识点解析:C语言中函数的返回值类型是由定义函数时在函数首部所声明的类型

确定的。

14、当用户要求输入的字符串中含有空格时,应使用的输入函数是

A、scanf()

B、getchar()

C、gets()

D、getc()

标准答案:C

知识点解析:本题考杳基本输入输出函数.选项A)中的scanf函数接收输入字符串

时会把空格当成结束符;选项B)中的gctchar是读取输出的一个字符,不能用作字

符串输入;选项C)中的gels满足要求;选项D)没有gelc函数。

15、avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最

多不超过10,则下列函数说明语句错误的是

A、intavg(int*a,intn);

B、intavg(inta[10],intn);

C>intavg(inta[],intn);

D、intavg(inta,intn);

标准答案:D

知识点解析:本题考查函数的定义。题目要求计算数组的平均值,因此函数必须获

取数组的地址(指针),即函数必须要有一个指针类型的参数,选项D)中函数参数都

是整型,错误。

16、以下叙述中正确的是

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

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

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

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

标准答案:A

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

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

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

项D)是错误的。

17、以下叙述中正确的是

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

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

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

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

标准答案:A

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

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

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

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

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

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

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

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

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

选项B)错误。

18、以下关于return语句的叙述中正确的是

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

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

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

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

标准答案:B

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

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

19、已定义以下函数inifun(int*p){rctum*p;}fun函数返回值是

A、不确定的值

B、一个整数

C、形参p中存放的值

D、形参p的地址值

标准答案:B

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

量p所指向的数据。

20、以下叙述中错误的是

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

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

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

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

标准答案:C

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

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

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

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

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

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

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

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

21、以下叙述中错误的是

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

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

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

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

标准答案:B

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

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

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

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

改变对应实参的值。

22、在函数调用过程中,如果函数如funA调用函数funB,函数funB又调用了函

数如funA,则

A、称为函数的直接递归调用

B、称为函数的间接递归调用

「、称为函数的循环调用

D、C语言中不允许这样的递归调用

标准答案:B

知识点解析:本题考查涕归的概念,C语言中函数可以直接或间接调用自身,称为

递归调用。本题中funA调用funB,然后funB又调用funA,即funA间接调用了

自身。

23、程序中对fun函数有如下说明voidfun();此说明的含义是

A、fun函数无返回值

B、fun函数的返回值可以是任意的数据类型

C、fun函数的返回值是无值型的指针类型

D、指针fun指向一个函数,该函数无返回值

标准答案:A

知识点解析:本题主要考察函数的声明,voidfun()表示fun函数没有输入参数,函

数返回void表示函数无返回值。

24、程序中若有如卜说明和定义语句charfun(char*);main()

{char*s=',one,,,a[5]={0},(*f1)()=fun,ch;....}以下选项中对函数fun的正确调

用语句是

A、(*fl)(a);

B、*fl(*s);

C^fun(a);

D、ch=*fl(s);

标准答案:A

知识点解析:本题主要考查函数调用和函数指针的使用。根据定义fl是一个函数

指针,且指向fun函数,因此可以使用函数指针来调用函数。使用函数指针调用函

数的时候使用*运算符,即*fl和fun是一样的,fun函数有参数,通过fl调用fun函

数写法为:(*fl)(a),括号是必须的,这样才能保证各部分正确结合。

25、以下程序的主函数中调用了其前面定义的fun函数#includeVstdio.h>main()

{doublea[15],k:k=fun(a);....}则以下选项中错误的fun函数首部是

doublefun(doublea[15])

B、doublefun(double*a)

C^doublefun(doublea()

D、doublefun(doublea)

标准答案:D

知识点解析:本题考查函数的定义和调用。根据对fun函数的调用可知,fun函数

的返回值为double类型的,输入参数是一个double类型的地址(指针),因此选项

D)错误。

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

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

A、k=add(a,b);

R、k=(*f)(a,b):

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

D、k=f(a,b);

标准答案:C

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

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

C)为错误的调用形式。

27、以下叙述中正确的是

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

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

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

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

标准答案:B

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

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

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

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

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

28>若有以下函数首部加£'111180此怕*[10],泊3*n)则下面针对此函数的函数声明

语句中正确的是

A、intfun(double,int);

13、mttun(double*x,intn);

C、intfun(double*,ini%);

D、intfun(doublex,int*n);

标准答案:C

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

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

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

示的是一维数组的地址。

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

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

句内

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

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

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

标准答案:B

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

每次调用时都赋初始值。

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

拟试卷第3套

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

1有以下程序inif(in【x);main(){intn=l,m;m=f(f(f(n)));prinif("%d\n",

m);)intflintx){returnx*2;)程序运行后的输出结果是

A、1

B、2

C、4

D、8

标准答案:D

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

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

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

2、有以下程序#include<stdio.h>intfun(intx,inty)main(){if(x==y)return(x);

{inta=4,b=5,c=6;elseretum((x+y)/2);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。

3、有以下程序#includeVstdio.h>main()intf(intx,inty){inta=3,b=4,c=5,

d:{return((y-x)*x)?)d=f(f(a,b),f(a,c));printf("%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=9。

4、有以下程序#include<stdio.h>doublef(doublex);main()doubleffdoubleX)

{doublea=0;inti;{returnx*x+l;}for(i=0;i<30;i+=10)a+=f((doublc)i);

primf("%5.Of\n%a);}程序运行后的输出结果是

A、401

B、500

C、503

D、1404

标准答案:C

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

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

行后,变量a的值等于503。

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

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

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

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

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

标准答案:B

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

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

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

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

6、有以下程序voidfunijnta,intb,intc){a=b;b=c;c=a;}main(){inta=10,

b=20,c=30;fun(a>b,C);printf("%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调用

以后,值没有变化。

7、有以下程序#includeVstdio.h>intf(intx);main()intf(intx){inta,b=0;

{returnx*x+l;)for(a=0;a<3;a++){b=b+f(a);putchar('A'+b);})

A、BCD

B、BDI

C>ABE

D、BCF

标准答案:R

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

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

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

若有以下程序voidf(intx)main(){intZ=123456;{if(x>=10)f(z);){printfC1%

d-H,x%10);f(x/10);}elseprintf(H%d",x);}则程序的输出结果是

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

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

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

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

标准答案:A

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

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

9、以下与函数「seek(fp,OL,SEEK_SET)有相同作用的是

A^feof(fp)

B、ftell(fp)

C、fgelc(fp)

D、rewind(fp)

标准答案:D

知识点解析:本题主要考查文件系IO函数的使用,「seek函数用于设置文件指针的

位置,feof函数用于判断是否已经到了文件结束,ftell函数返回文件指针的当前位

置,fgctc从文件读取一个字符,rewind函数将文件指针重新指向文件开始。题目

当中fseek(fp,OL,SEEK_SET)表示把文件指针移动到文件的开始位置0,和

rewilld函数功能一致。

10、以下程序的功能是:给「输入数据后计算半径为r的圆面积s。程序在编译时

出错main。/"Beginning*/{intr;floats;scanf("%d",r);s=*7t*r*r;

printf("s=%f\n",s):}出错的原因是

A、注释语句书写位置错误

B、存放圆半径的变量r不应该定义为整型

C、输出语句中格式描达非法

D、计算圆面积的赋值语句使用了非法变量

标准答案:D

知识点解析:本题考查了C语言的基本输入输出函数。选项A)错误,代码里面的

注释是正确的,"/*”和“*/”配对;选项B)错误,「变量定义为整型是可以的;选

项C)输出语句格式正确;选项D)正确,计算s的时候s="*r*r使用了未定义变量

北。

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

时,进行由大到小排序voidf(intb[],inln,intflag)main(){inti,j,t;{int

a[10]={5.4,3.2.I.6.7.9,10).i:for(i=0:iVn-1:i++)

5,0);f(a,5,1);for(j=i+l;j<n;j++)for(i=0;i<10;i++)printf(”%d,“,

a[i]);if(flag?b[i]>b[j]:b[i]<b[j])){t=b[i];b[i]=b[j];b[j]=t;}}程序运行后的输

出结果是

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

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,8,7,6,5,4,3,2,1,

标准答案:B

知识点解析:本题主要考查函数的调用。在main函数中,两次调用f函数进行排

序,f函数有三个参数,第一个参数是数组地址,第二个参数是需要排序的数据个

数,第三个参数指定排序依据。第一次调用f函数的时候,从第三个元素开始对5

个元素进行从大到小的排序,因此调用f函数转换数组a的值分别为:5,4,7,

6,3,2,I,8,9,10;第二次调用f函数对数组a的前5个元素进行从小到大的

排序,因此排序完成后数组a的值变成:3,4,5,6,7,2,1,8,9,10。

12、有以下程序,其中k的初值为八进制数的ncludeVstdio.h>>main(){int

k=011;printf("%d\n",k++);}程序运行后的输出结果是

A、12

B、11

C、10

D、9

标准答案:D

知识点解析:本题主要考查基本数据类型和格式化输出函数printf。变量k的初值

为011,表示8进制的11,十进制值为9,printf输出k++的值,++在k的后面表

示先使用后自增,因此输出的值为9。

13^有以下程序#inckide<stdio.h>intfun(intx){intp;

if(x==0IIx==l)rcturn(3);p==x-fun(x-2);rcturn(p);}=main。{printf。%d\n”,

fun(9));}程序运行后的输出结果是

A、5

B、9

C、4

D、7

标准答案:D

r3或者

知识点解

温馨提示

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

评论

0/150

提交评论