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

下载本文档

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

文档简介

国家二级(C语言)笔试模拟试卷20

一、公共基础选择题(本题共70题,每题7.0分,共

10分。)

1、下列选项中不属于算法的特性的是

A、确定性

B、可行性

C、有输出

D、无穷性

标准答案:8

知识点解析:一个算法必须具有五个特性,即有穷性、确定性、可行性,有输入、

有输出.其中有穷性是指算法必须总是在执行完有穷步之后结束,而且每步都在有

穷时间内完成。D选项不是算法的特性。

2、下列叙述中正确的是

A、线性表是线性结构

B、栈与队列是非线性结构

C、线性链表是非线性结构

D、二叉树是线性结构

标准答案:1

知识点解析:所谓的线性结构是指:如果一个非空的数据结构满足下列两个条件,

即1)有且只有一个根结点;2)每一个结点最多有一个前件,也最多有一个后件.所

以同时满足两个条件的有队列,线性表、栈,而二叉树的结点可能存在两个后件,

不是线性结构。正确答案为A。

3、设有下列二叉树:对此二叉树中序遍历的结果为

A、ABCDEF

B、DAECF

C、BDAECF

D、DBEFCA

标准答案:4

知识点解析:叉树的遍历分为先序、中序、后序三种不同方式。本题要求中序遍

历,其遍历顺序应该为:中序遍历左子树访问根结点->中序遍历右子树.按

照定义,中序遍历序列是BDAECF,故答案为B。

4、结构化程序设计主要强调的是

A、程序的规模

B、程序的易读性

C、程序的执行效率

D、程序的可移植性

标准答案:2

知识点解析:按结构化程序设计方法设计出的程序具有明显的优点,即程序易于理

解、使用和维护,便于控制、降低程序的复杂性,便于验证程序的正确性,程序清

晰易读,可理解性好。所以答案为B。

5、在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部

特性,而对象的内部对外是不可见的”这一性质指的是对象的

A、分类性

B、标识惟一性

C、多态性

D、封装性

标准答案:8

知识点解析:从外面看只能看到对象的外部特性,而对象的内部,即处理能力的实

行和内部状态,指的是对象的封装性。

6、用黑盒技术测试用例的方法之一为

A、因果图

B、逻辑覆盖

C、循环覆盖

D、基本路径测试

标准答案:1

知识点解析:黑盒测试主要方法有等价值划分法、边界值分析法,错误推测法、因

果图法等.白盒测试的主要方法有逻辑覆盖、基本路径测试循环覆盖等。只有A

属于黑盒测试。

7、在进行单元测试时,常用的方法是

A、采用白盒测试,辅之以黑盒测试

B、采用黑盒测试,辅之以白盒测试

C、只使用白盒测试

D、只使用黑盒测试

标准答案:1

知识点解析:白盒测试是测试程序内部逻辑结构,黑盒测试只依据程序的需求规格

说明书,检查程序的功能是否符合它的功能说明。从程序内部的逻辑结构对系统进

行测试才是测试的根本,更容易发现和解决程序中的问题,因此单元测试时应该以

白盒测试为主,而黑盒测试为辅。

8、下面四个选项中,不属于数据库管理系统提供的数据语言的是

A、数据定义语言

B、数据查询语言

C、数据操纵语言

D、数据控制语言

标准答案:2

知识点解析:通常数据库管理系统提供的数据语言有数据定义语言、数据操纵语言

和数据控制语言。其中数据操纵语言负责数据的操纵,包括查询及增、删,改等操

作。所以查询语言属于数据操纵语言的一部分。

9、在关系数据库模型中,通常可以把()称为属性,其值称为属性值。

A、记录

B、基本表

C、模式

D、字段

标准答案:8

知识点解析:数据库表中字段转化为属性,把记录的类型转化为关系模式。

10、实体联系模型中实体与实体之间的联系不可能是

A、一对一

B、多对多

C、一对多

D、对零

标准答案:8

知识点解析:实体联系模型中实体与实体之间的联系有一对一(1:1),一对多戌多对

—(l:m或m:1),多对多(m:n)其中一对一是最常用的关系。

二、选择题(1分)(本题共10题,每题1.0分,共10

分。)

11、下列叙述中正确的是

A、C语言中既有逻辑类型也有集合类型

B、C语言中没有逻辑类型但有集合类型

C、C语言中有逻辑类型但没有集合类别

D、C语言中既没有逻辑类型也没有集合类型

标准答案:8

知识点解析:本题考核的知识点是c语言数据类型,在C语言中没有逻辑类型,

逻辑类型用整型来表示,故选项A和选项C不正确;C语言中没有集合类型,故

选项B不正确。所以,D选项为所选。

12、若以下选项中的变量已正确定义,则正确的赋值语句足

A、xl=26.8%3;

B、l+2=x2

C、x3=0x12;

D、x4=1+2=3;

标准答案:4

知识点解析:本题考核的知识点是C语言中对变量赋值的应用。赋值操作由赋值

运算符“=”来完成,一般形式为变量:表达式,赋值的方向为由右向左,即将“;”

右侧表达式的值赋给左侧的变量,执行步骤是先计算再赋值。选项A中运算符

"%”的运算对象必须为整数,而选项A中26.8不为整数,故选项A不正确;选项

B将一个变量赋值给一个表达式,这在C语言中是不允许的,故选项B不正确;

选项D中也是将一个常量3赋值给一个表达式,故选项D不正确;所以,4个选项

中选项C符合题意。

13、有以下程序main。{intm=3n=4,X;X=-m+-;x=x+8/++n;printf("%d\n",x);)

程序运行后的输出结果是

A、3

B、5

C、-1

D、-2

标准答案:8

知识点解析:本题考核的知识点是运算符的优先级。主函数中首先定义了整型变量

m、n和x,并给m和n赋初值为3和4,接着执行两条赋值语句,第一条x=m++

等价于x=-(m++),其值即为第二条x=x+X/++n等价于X=X+8/(++n),即为x=-

3+8/5=-2,因此最后输出x的值为-2。所以,4个选项中选项D符合题意。

A、T=RAS

B、T=RUS

C、T=RxS

D、T=R/S

标准答案:2

知识点解析:选项A、B、C分别进行交运算、并运算,笛卡尔积运算,选项D不

是关系运算。T由属于关系R以及关系S的元组组成,简单来说,就是s和R的元

组之和,是并运算,选项B正确。

15、设有定义:longx=-123456L;,则以下能够正确输出变量x值的语句是

A、printf("x=%d\nn,x);

printf("x=%ld\n",x);

C、printf(nx=%8dL\nH,x);

D、printf("x=%LD\n",x);

标准答案:2

知识点解析:本题考查的知识点是输出语句printf。的基本用法。x为一个长整型的

变量,而且是一个十进制的数,它的输出控制符是%Id”,所以排除选项A和选项

C;由于C语言中是区分大小写的,“Id”中的“d”不能为大写,故排除选项D。4个

选项中B正确。

16^有以下程序main(){inti;for(i=0;i<3;i++)switch(i){case0:prinft("%d",i);case

2:prinft("%d',,i);default:prinft(',%d,',i);))程序运行后的输出结果是

A、22111

B、21021

C、122

D、12

标准答案:4

知识点解析:本题考核的知识点是for循环和switch语句的混合应用。程序中for

循环了三次,第一次i=0,执行switch语句中case。:分支,直到遇到default语

句,退出switch,这里共执行?三个输出语句分别输出0,0,0,第二次循环i=l,

switch语句中没有匹配的分支,故只执行default语句输出1,退出switch语句;第

三此循环i=2,从switch语句中的case2:开始执行,共执行了两个输出语句输出

2、2c最后输出的结果为000122.所以.4个选项中选项「符合题意.

17、有以下程序main(){inti=l,j=l,k=2;if((j++||k++)&&i++)printf

(”%d,%d,%d\n”,i,j,k);执行后输出的结果是

A、1,1,2

B、2,2,1

C、2,2,2

D、2,2,3

标准答案:4

知识点解析:本题考核的知识点是if语句的应用。首先计算if语句后面的表达式

值,先计算运算符&&前面括号里的“II”运算.在“II”运算中先计算j++,值为10

的值为2),为真,后面的k++将不再计算,k的值依旧为2。计算&&后面的表达式

i++,值为l(i的值变为2)。整个表达式的值为真,所以执行后面的输出语句,最

后输出的i,j和k的值为2,2和2.所以,C选项为所选。

Ix>0

0x・0

18、有一函数7以下程序段中不能根据x值正确计算出y值的是

A、if(x>0)y=l;elseif(x==O)y=0;elsey=-l;

B、y=0;if(x>0)y=l;elseif(x<0)y=-l;

C^y=0;if(x>=0);if(x>0)y=l;elsey=-l;

D、if(x>=0)if(x>0)y=l;elsey=0;elsey=-l;

标准答案:4

知识点解析:本题考查的知识点是if语句的嵌套使用.首先检查订与else的配

对,然后再分析各分支实现的功能.选项A描述的意思是:在x>二O情况下,则

y为1,否则;在x=O时,y为0,剩下的xVO时,y为-1,满足本题中函数的要

求:选项B描述的意思时:初始化y的值为0,在x>0时,给y重新赋值为1,否

则,在xVO时,给y重新赋值为-1,满足本题中函数的要求;选项C描述的意思

是:在x>0情况下,如果x>0,则y为1,否则即“c==0”时,y为・1:剩下的xV

0时,y为。.可见答案C实现的结果不是给定的表达式。选项D中描述的意思

是:在x>=0的情况下,如果x>=0,就给y赋值为1,否则就给y赋值为0,在

不是x>=0的其他情况下,就给y赋值为-1,满足本题中函数的要求.所以4个选

项中C为所选。

19、以下叙述中正确的是

A、调用prinlf函数时,必须耍有输出项

B、使用putchar函数时,必须在之前包含头文件stdio.h

C、在C语言中,整数可以以十二进制、八进制或十六进制的形式输出

D、调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码

标准答案:2

知识点解析:本题考查了C语言的一些基本概念.printf()函数可以只有控制项而

没有输出项,例如:printfC'Hello!");,所以选项A不正确。C语言中不支持整数

以十二进制输出,因此选项C不正确。gctchar。函数从键盘读入一个字符,而不管

该字符为数字还是字母,因此输入ASCH码的话,只能读到第1个数字字符,所

以选项D不正确。故应该选择B,pulchar是C语宫中的库函数,使用时必须包含

sMio.ho

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

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

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

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

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

标准答案:2

知识点解析:本题考查函数的一些概念.main()函数是一个程序的主函数,它由系

统调用,所以选项A不正确。一个C语言源程序文件可以只包含一个函数,每个

源文件都可以被单独编译成。obj文件,最后链接成可执行文件。因此每个函数都

可以被单独编译,选项B正确。一个C程序必须从主函数main()开始运行,其他

函数只能是直接或间接被main。函数调用才能得以运行,因此选项C错误。C语言

不支持函数的嵌套定义,所有函数只能是全局函数,所以选项D错误。故应该选

择B。

三、选择题(2分)(本题共30题,每题1.0分,共30

分。)

21、以下程序段中与语句k=a>b?(b>c?l:0):0;功能等价的是()。

A、if((a>B)&&(b:>C))k=l;elsek=0;

B、if(a>B)II(b>C)k=l;elsek=0;

C>if(a<=B)k=0;elseif(b<=e)k=I;

D、if(a>B)k=l;elseif(b>C)k=l;elsek=0;

标准答案:1

知识点解析:分析题目中给出的表达式可知,如果a>b和b>c同时成立,k=l,

否则k=0。所以,4个选项中选项A符合题意。

22、有以下程序:#include<stdio.h>main(){inty=9;for(;y>0;y-)if(y%3==0)

printf("%d",-y);)程序的运行结果是()。

A、741

B、963

C、852

D、875421

标准答案:4

知识点解析:本题首先令y为9,然后通过一个for循环,当y还大于0则循环,

每次循环让y递减1。循环体中是一条if语句,通过%运算符计算每当y能被3整

除的时候,输出-y的值,即先将y减1,然后输出y的值。故当y等于9、6、3时

会输出,输出值分别为8、5、20所以应该选择C。

23已定义以下函数;intfun(inl*p){relurn*p;}fun函数返回值是()。

A^不确定的值

B、一个整数

C、形参p中存放的值

D、形参p的地址值

标准答案:2

知识点解析:题目中fun()函数的返回表达式是*p,所以选项C、D不为所选,而

应该是形参p所指内容的值,因为p为int型指针,所以该值是一个整数。故应该

选择Bo

24、以下程序的输出结果是()。main(){inta=5,b=4,c=6,d;printf("%d\n",d=a>b?(a

>c?a:C):(B));}

A、5

B、4

C、6

D、不确定

标准答案:4

知识点解析:本题中的printf()函数中的输出表达式,首先计算括号内的条件表达

式,它的值为6(a>c?a:c中a>e即5>6为假故该表达式的值为c的值即为6),然

后再计算外面表达式(等价于a>b?6:B)的值,同理可得该表达式的值为6,将值6

赋值给d,因此最后输巴该表达式的值为6,所以,4个选项中C为所选。

25、有以下程序:mam(){inti=10,j=l;printf(,,%d,%d\n,\i-,++j);}执行后输出的

结果是()。

A、9,2

B、10,2

C、9」

D、10,1

标准答案:2

知识点解析:++、-运算符在变量之前是先使变量的值加1或减1,然后再使用变

量的值:如果在变量之后则先使用变量之前的值,再把变量的值加1或减1。显

然,程序中表达式的值为10,“十十『'的值为2,所以最后输出的值为10和2,

所以,B选项为所选。

26、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()。

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

B、函数调用可以作为一个函数的实参

C、函数调用可以出现在表达式中

D、函数调用可以作为一个函数的形参

标准答案:8

知识点解析:在C语言中规定:有返I川值的函数调用,可以作为表达式或表达式

的一部分,也可以作为一条语句,故选项A和选项C正确;而有返回值的函数调

用只能作为一个函数的实参(即将其返回值传给相应的形参),而不能作为形参(因为

行参是在函数定义时说明的),故选项B正确选项D不正确。所以,4个选项中选

项D符合愿意。

27、有以下函数定义:voidfun(intn,doubx){……}若以下选项中的变量都已正

确定义并赋值,则对函数fun的正确调用语句是()。

A、fun(inty,doublem);

B、k=fun(10,12.5);

C^fun(x,n);

D、voidfum(n,x);

标准答案:4

知识点解析:选项A中应将y和m前面的函数的类型说明符去掉,故选项A不正

确;选项B中函数传了2个参数,其中一个为整型一个为浮点型,而fun()函数在

定义时声明的2个参数,一个为整型一个为双精度型,其参数类型不一致,故选项

B不正确;选项D在调用函数时,不应该再声明其返回类型,故选项D不正确。

所以,4个选项中选项C符合题意.

28、有以下程序:fun(intx){intp;if(x==OIIx=l)retum(3);p=x-fun(x-2);return

p;}main(){printf(H%d\n",fun(7);)执行后的输出结果是()。

A、7

B、3

C、2

D、0

标准答案:4

知识点解析:本题的fun()函数在x等于。或1时返回3,而在其余情况下返回x-

(r-喊》=1)

fun(X-2),所以本题的递归算法可以这样来表示:|^Mr)=r-AMx-2)(-0由*1>在主

函数中输出的结果是fun(7),而fun(7)=7-fun(5)=7-(5-fiin(3))=7-(5-(3-fun(1)))=7-(5-

(3-3))=7-(5-0)=7-5=2o或本题应该选择Co

29、有以下程序:main(){inta[3][3],*p.i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;

for(i=0;i<3;i++)printf("%d,,,a|IJ|iJ);}程序运行后的输出结果是().

A、012

B>123

C、234

D、345

标准答案:8

知识点解析:本题中定义的二维数组a[3]⑶中9个元素在内存中的排列顺序是:

a[0][0],a[0][l],a[0][2],a[l][0],a[l][l],a[l][2],a[2][0],a[2][l],a[2][2]o在

主函数中,首先定义了二维数组a[3][3],然后定义了一个指针p指向数组a的第1

个元素a|0]⑼在第一个for循环中,依数组a在内存中的排列顺序为其元素赋从

0〜8九个值,然后用第二个for循环依次输出⑼,三个元素的

值。所以,4个选项中选项D符合题意。

30、设函数fun的定义形式为voidfun(charch,floatx){…}则以卜对函数fun的调

用语句中,正确的是(),

A、fun(”abc”,3.0);

B、t=fun(,D;16.5);

C、fiin(,65\2.8);

D、fun(32,32);

标准答案:8

知识点解析:题目中定义的函数fun()有两个参数,一个是字符型变量ch,另一个

是浮点型变景x,函数类型是void即无返回值。选项A调用fun的第1个参数是字

符串常量与字符变量不匹配,所以不正确。选项B是有返回值函数的调用形式,

不正确。选项C的第1个参数是错误的字符常量,字符常量是用单引号括起来的

-个字符(是转义字符可能有多个字符),故也不正确。选项D使用两个整型常量调

用fun这在C语言中是允许的。因为整型到字符型可以自动转换,整型到浮点型也

可以自动转换。故应该选择D。

31、若有定义;imw[3][5];,则以下不能正确表示该数组元素的表达式是()。

A、*(*w+3)

B、*(w+l)[4]

C、*(*(w+l))

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

标准答案:2

知识点解析:通过一维数组名或指向维数组元素的指针来引用数组元素有两种写

法:a国和*(a+i),它们是等价的。这是一种运算符之间的等价转换,就好像a-(b-

C)等价于a-b+c一样。知道了这种转换,我们可以将之扩展到二维数组甚至任意维

数组上来。因为H运算符的结合性是从左至右的,所以等价于(w[i][j],此时

可以先将任意一个口运算符转换为指针形式为:(*(w+i)[j]或*(w[i]+j),或者同时转

换:*(*(w+i)+j)。上述几种形式都完全等价于w式用。选项A中,*(*w+3)可以看

成*(*(w+0)+3),即w[0][3],是正确的。选项B小,因为口运算符的优先级高于*运

算符,所以*(w+l)[4]等价于*((w+l)[4]等价于*(*((w+l)+4)),即*(*(w+5)+0),它等

价于w[5][0],很明显它超过数组的范围了,故不正确。选项C等价于是

下确的。选项D中,&w[0][0]是数组w第1个元素的地址,它等价于

&*(*(w+0)+0),外面的&和*可以抵消,就好像先乘以个数,然后再除以这个数一

样。所以,&w[0][0]等价于*(w+0)+0。BP*Wo所以原式就变为*(*w+l)等价于

w[O][l],这个也是合法的。综上所述,本题应该选择B。

32、有以下程序:voidf(intb[]){inti;for(i=2;i<6;i++)b[i]*=2;|main(){int

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

后的输出结果是()。

A、1,2345678910.

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

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

D、1,2,6,8/0,12』4』6,9/0,

标准答案:2

知识点解析:本题中,f()函数通过一个for循环语句,将传入数组的元素从下标2

到下标5每个自乘以2。因此,调用结束时,数组a中的内容为

{1,2,6,8,10,12,7,8,9,10},故本题应该选择B«

33、有以下程序:intfun1(doubleA){returna*=a;)intfun2(doublex,doubley)

{doublea=0,b=0:a=funl(x);b=funl(y);return(int)(a-B);}main(){doublew:

w=fun2(l.l,2.0);……}程序执行后变量w中的值是()。

A、5.21

B、5

C、5

D、0

标准答案:4

知识点解析:在funl()函数中只有一条retum语句,返回的是表达式a*=a的值,该

值等于a*a。但是,由于funl()函数的返回值类型被定义为im,所以返回值被取

整,即funl()函数实现的是求一个双精度数平方的整数部分。在fun2()函数中,分

别对两个参数调用funl{)函数,然后将两个返回值相加、取整后返回。所以,程序

执行后,w中的值是[1.12]+⑵02]=1+4=5(中括号代表截尾取整)。又因为w被定义

为double型,所以变量w中的值应该为一个双精度值5.0。故应该选择C。

34、以下能正确定义一维数组的选项是()。

A、intnum[]:

#defineN100intnum[N];

C、intnum[0..100|;

D、intN=100;intniim[N];

标准答案:2

知识点解析:选项A定义数组时省略了长度,而C语言中规定,只有在定义并同

时进行初始化时,数组的长度才可以省略,数组的长度为初始化时候的成员个数,

故选项A错误;在C语言中规定,数组的长度必须是一个整数或整型常量表达

式,故选项C不正确:定义时数组的长度不能使用变显表示,故选项D不正确,

所以,4个选项中选项B符合题意。

35、有以下程序:#defmeP3voidP(intx){return(p*x*x);}main()

{pritnf("%d\n”,F(3+5);}程序运行后的输出结果是(),

A、192

B、29

C、25

D、编译出错

标准答案:8

知识点解析:本题是一道陷阱题,考生如果没注意到F()函数被定义为void类型的

话,很容易错选为选项A,其实应该选择选项D,编译出错。

36、有以下程序:mam(){chars[]="ABCD",*p;for(p=s+l;p<

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

A、ABCDBCDD

B、ABCD

C、BCD

D、BCDCDD

标准答案:8

知识点解析:本题中首先定义一个字符数组s,井将字符串“ABCD”存到数组s

中,定义了一个字符指针变量P,在接下来for循环中,循环体共执行了三次,第

一次p指向s[l],所以此时输出的p所指的字符串的值为BCD,第二次循坏p指向

s|2],所以此时输出的p所指的字符串的值为CD,第三次循环p指向s[3],因此此

时输出的p所指的字符串的值为D。所以,4个选项中选项D符合题意。

37、有以下程序:voidfunl(char*p){char*q;q=p;while(*q!='\0'){(*q)++;

q++;}}main(){chara||=)"Program"),*p;p=&a[3];funl(p)printf("%s\n'\A);}程序

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

A、Prohsbn

B、Prphsbn

C、Progsbn

D、Erogram

标准答案:1

知识点解析:在函数funl()中,首先将形参p的内容存入临时指针q中,然后使用

一个while循环,当q所指内容不是字符串结束标志”'(T时,让q所指内容增1,然

后将指针q增1指向下一个位置。所以函数funl()实现的功能是:将传入字符串的

所有字符自增1。主函数,指针p在被传入funl()函数之前,初始化指向的是宇符

数组a的第4个元素,所以最终输出的结果应该是Prohsbn。故应该选择A。

38、有以下程序:#include<studio.h>#defmeF(X,Y)(X)*(Y)main(){inta=3,

b=4,printf("%d\n",F(a++,b++)):)程序运行后的输出结果是().

A、12

B、15

C、16

D、20

标准答案:1

知识点解析:在程序中先用表达式将宏替换掉,则输出语句中的表达式为

(a++)*(b++),而a++的值为3,b++的值为4。因此最后的值为3*4=12。所以,4个

选项中选项A符合题意。

39、以下语句或语句组中,能正确进行字符串赋值的是()。

A、char*sp;*sp="right!”;

B、chars[10];s="right!H;

C、chars[10];*s="right!H;

D、char*sp="right!";

标准答案:8

知识点解析:在选项A中,首先定义了一个字符指针sp,然后将个字符串赋给甲

所指的地址,这是错误的。因为sp是一个未经初始化的野指针,不知其指向哪

儿,往一个不确定的地址中写数据很容易让程序出错。选项B首先定义了一个字

符数组,然后将一个字符串赋给数组名,这是错误的。因为数组名是一个指针常

量,不可以被改变。选项C首先定义了一个字符数组,然后将一个字符串赋给数

组的第一个元素,这也是错误的。因为字符串在表达式中相当于一个常字符指针,

将一个指针值赋给一个字符型变量是行不通的。选项D是定义一个字符指针sp,

同时使其指向一个字符串常量,即将个常字符型指针赋给sp。这是可行的。所

以,4个选项中选项D符合题意。

40、若有定义"int*p[3];”,则以下叙述中正确的是()。

A、定义了一个基类型为ini的指针变量p,该变量具有3个指针

B、定义了一个指针数组p,该数组含有3个元素,每个元素都是基类型为int的指

C、定义了一个名为*p的整型数组,该数组含有3个int类型元素

D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有3个血类型元

标准答案:2

知识点解析:指针数组也是一种数组,所有有关的概念都适用于它。但它与普通的

数组又有区别,它的数组元素是指针类型,只能用来存放地址。其格式为:存储类

型数据类型*指针数组名[长度1],其含义为:定义了一个长度1的数组,其中数组

元素为相应存储类型的指针,对比定义可知,选项A、C和D都不正确,所以,4

个选项中选项B符合题意。

41、有以下程序:intfa(intx){returnx*x;}intfb(intx){returnx*x*x;}int

f(int(*f1)(),int(*f2)(),intx)returnC2(x)-fl(x);)main(){inti;

i=f(fa,fb,2);printf("%d\n",i);}程序运行后的输出结果是()°

A、1268

B、8621

C、8162

D、8612

标准答案:4

知识点解析:函数f()有3个形式参数fl、和x,其中fl、t2是指向函数的指针

变量。在main。函数中执行了函数调用从而使f()的形式参数fl指向了

fa,形式参数f2指向了把实参2传给了行参变量x。函数f()中的return语句中

的相当于“fb(2)-fa(2)”(fb⑵的返回值为2*2*2=8,fa(2)返回值为2*2=4)即(8-4),值

为4。函数f()执行后把返回值4赋给了i,输出i的值是4。所以4个选项中C正

确。

42>有以下程序:main(){inta[][3]={{1,2,3),{4,5,0)),(*pa)[3],i;pa=a;for(i=0;i<

3;i++)if(i<2)pa|l][i|=pa[l][i]-l;elsepa[l][i|=l;

printf("%d\n",a[0][1]+a[1][1]+a[1][2]);}执行后输出结果是().

A、7

B、6

C、8

D^无确定值

标准答案:1

知识点解析:本题定义了一个指向由3个元素组成的一维数组的指针变量pa,通

过赋值让它指向具有2行3列的数组a,此时用指针变量pa,表示数组元素

的形式是pa[im][j])。for循环执行了3次;第一次i值为0,执行pa[1][0]=pa[1]]0卜

1,执行后的值变为3;第二次i值为1,执行执行后

的值为4;第三次i值为2,执行pa[l]⑵=1,执行后a[l]⑵的值变为1。故

prinff语句输入的值为2+4+1=7。所以,A选项为所选。

43、有以下函数:fun(char*a,char*b){while((*a!=,\0,)&&(*b!=,\0,)&&(*a=*b))

{a++;b++;}retum(*a-*b);}该函数的功能是()。

A、计算a和b所指字符串的长度之差

B、将b所指字符串复制到a所指字符串中

C、将b所指字符串连接到a所指字符串后面

D、比较a和b所指字符串的大小

标准答案:8

知识点解析:本题要求阅读的代码是一个函数,阅读之前先要看清函数的定义,该

函数有两个参数,都是字符指针,这说明它接收的是两个字符串。该函数没有定义

返回类型,C语言规定函数的返回类型为int时可以省略,所以切不可将其看成是

无返回类型的void型函数,它是int型函数。函数体中除了返回语句外,只有一条

while循环语句,该循环的循环条件为(*a!=)(r)&&〔*b!=,\(r)&&(*a==*B),即当a

和b所指处都不是字符结束符'(T并且a和b所指处的内容相等时执行循环。而循

环体中只是简单地将指外a和b同时往后移动1位,循环结束后返回a所指内容减

去b所指内容的差。换个角度去考虑,也就是说当字符串a或b中有一个结束了或

者是它们的相同位置小有一个字符不同时,则返回该位置两个字符之差。若两者长

度相同而且所有对应字符都相同的话,最后返问的是、0-八0,=0,否则的话就返回两

个字符串第一对不相同的字符之差。这时应该可以看出来,这个函数实现的是对两

个字符串的比较。所以,4个选项中D正确。

44、有以下程序:voidfun(int*a,inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;i++;

j—;fun(a,ij);}}main(){intx[]={2,6J,8},i;fun(x,0,3);for(i=0;i<4;i++)

printf("%2d",x[i]);printf("\"n);}程序运行后的输出结果是().

A、I268

B、8621

C、8162

D、8612

标准答案:4

知识点解析:函数fun()中用了一个if语句,当数组下标i小于数组下标j时,交换

数组元素a[i]和a[j]的值,并使i值加1,j值减1。其功能就是把数组a中从下标i

到j的元素首尾互换。主函数中定义一个数组,在定义该数组的时候缺省了定义长

度,定义的同时将其初始化赋值,所以该数组的长度为初始化该数组时的元素的个

数即4,接着调用「un(a、0.3),其中将a数组的第一个元素的下标0和最后一个元素

的下标3传给了函数fun(),故执行完该函数后,数组a中的元素首尾互换,因此

最后依次输出的数组a中值为8,1,6和2,所以,4个选项中选项C符合题意。

45、以卜.程序的输出结果是()。#include<stdio.h>#include<string.h>mam()

{charb1[8]=nabcdefg",b2[8],*pb=b1+3;while(-pb>=bl)strcpy(b2,pB);

printf("%d\n",strlen(b2));}

A、8

B、3

C、1

D、7

标准答案:8

知识点解析:首先定义了两个字符数组bl和b2,并用一个字符串给bl赋初值,

然后定义了一个字符型由针变量pb,通过赋初值使它指向bl|3]。接着执行while

循环,该循环执行了3次:第一次判断条件"__pb>=bl”,使pb的值为“bl+2”,执

行“strepy(b2,pB);”后,b2中的内容为“cdcfg":第二次判断条件“--pb>=bl",使

pb的值为“bl+1”,执行“strcpy(b2,pB);”后b2的内容为“bede兔”第三次判断条件

“―pb>=bl”使pb的值为“bl”,执行“strcpy(b2,pB):”后b2的内容为“abcdefg”。

最后输出b2数组中存放的字符串长度,显然是7。(这里还有一个关键点:就是每

当执行一次while循环判断条件,就执行一次“--pb”,他使得指针pb自减1,即前

移一位)所以,4个选项中D为所选。

46、有以下程序;main。{intx=3,y=2,z=l;printf("%d\n',,x/y&~z);}程序运行

后的输出结果是()。

A、3

B、2

C、I

D、0

标准答案:8

知识点解析:在prinftO函数的表达式中,前面表达式的值为1(3/2=I)表示为二

进制为00000001,而按位取反运算符“〜”国优先级高于按位与运算符“&”,先计算

后面的取反运算符“〜”。z的二进制表示为00000001,取反后为11111110,员

后进行即"00000001&U111110”可知结果为00000000,故最后的值为0,所

以,4个选项中选项D符合题意。

47、设有如下定义:structss{charname[10]intage;charsex;}std[3],*p=std;

下面各输入语句中错误的是()。

A^scanf("%d",&(*p).age);

B、scanf("%st",&std.namc);

C、scanf("%c”,&sld[O].sex);

D^scanf("%c",&(p->sex));

标准答案:2

知识点解析:选项A中“&(*p).age”代表的是std[O].age的地址,是正确的,选项C

也是正确的,选项D先用指针变量引用结构型的成员sex,然后取它的地址,也是

正确的,选项B中的“std.namc”是错误的引用,因为std是数组名,代表的是数组

的首地址,地址没有成员“name"。所以B选项为所选。

48、有以下程序:main(){unsignedchara,b,c;a=0x3;b=a|Ox8;c=b<<1;

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

A、-1112

B、-19

C、1224

D、1122

标准答案:8

知识点解析:将a的值转换为二进制位:00000011,再与0x8的二进制“0000

1000”位与,得到结果“00001011”赋值给b,b的值为11,再将b左移一位得到;

00010110,赋值给c,c的值为22,所以最后输出的b,c的值位11,22。所以4

个选项中D正确。

49、以下与函数fseek(fp,OL,SEEK_SE乃有相同作用的是()。

A、feof(fp)

B、ftell(fp)

C、fgetc(fp)

D、rewind(fp)

标准答案:8

知识点解析:题目中fseek(「p,OL,SEEK_SET)的作用将文件指制定位到文件开始。

feof(fp)的作用是判断文件指针是否已到文件结尾,因此选项A不对。ftell(fp)的作

用是获取当前文件指针的位置,因此选项B不对。fgetc(fp)的作用是从文件中读取

一个字节,因此选项C不对。rcwind(fp)的作用是将文件指针重定位到文件开头,

所以应该选择D。

50、设有以下说明语句:typedefstruet{intn;charch[8];}PER;则下面叙述中正

确的是()。

A、PER是结构体变量名

R、PFR是结构体类型名

C>typedefstruct是结构体类型

D、struct是结构体类型名

标准答案:2

知识点解析:本题通过typedef在定义一个结构体类型的同时,把它白定义成类型

名PER,故PER是结构体类型名。所以,4个选项中B为所选。

四、公共基础填空题(本题共5题,每题7.0分,共5

分。)

51、实现算法所需的存储单元多少和算法的工作量大小分别为算法的【】。

标准答案:空间复杂度和时间复杂度

知识点解析:算法的复杂性是指对一个在有限步骤内终止算法和所需存储空间大小

的估计。算法所需存储空间大小是算法的空间复杂性,算法的计算量是算法的时间

复杂性。

52、数据结构包括数据的逻辑结构、数据的【】以及对数据的操作运算。

标准答案:存储结构

知识点解析:数据结构包括3个方面,即数据的逻辑结构、数据的存储结构及对数

据的操作运算。

53、一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了

软件的【】。

标准答案:可重用性

知识点解析:继承的优点:相似的对象可以共享程序代码和数据结构,从而大大减

少了程序中的冗余,提高软件的可重用性。

54、面向对象的模型中,最基本的概念是对象和【】。

标准答案:类

知识点解析:面向对象模型中,最基本的概念是对象和类。对象是现实世界中实体

的模型化;将属性集和方法集相同的所有对象组合在一起,可以构成一个类。

55、软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和预防性

维护o

标准答案:完善性

知识点解析:软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护

和预防性维护。完善性维护是指为了满足用户对软件提出的新功能与性能要求,需

要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件

的可维护性。

五、填空题(本题共7题,每题分,共7分。)

56、下面程序的输出是[]omain(){intarr[10],i,k=0;for(i=0;i<10;i++)arr[i]=i;

for(i=l;i<4;i++)k+=arr[i]+i;printf(',%d\n"k);)

标准答案:12

知识点解析:本题通过第一个for循坪将数组air[0]-air[9]分别赋值为0-9,通过第

二个for循环的三次循环累加,求出结果为1

温馨提示

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

最新文档

评论

0/150

提交评论