全国计算机等级考试C语言2级笔试题_第1页
全国计算机等级考试C语言2级笔试题_第2页
全国计算机等级考试C语言2级笔试题_第3页
全国计算机等级考试C语言2级笔试题_第4页
全国计算机等级考试C语言2级笔试题_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

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

文档简介

2007年4月全国等级考试题目

第25次(已经修改)

一、选择题

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。

(1-11题,软件技术基础单向选择题月)

1.下列叙述中正确的是()

A)算法的效率只与问题的规模有关,而与数据的存储结构无关

B)算法的时间复杂度是指执行算法所需要的计算工作量

C)数据的逻辑结构与存储结构是一一对应的

D)算法的时间复杂度与空间复杂度一定相关

[解析]根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相

关。数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间关系的,

是独立于计算机中的,数据的存储结构是研究数据元素和数据元素之间的关系如何在计算机

中表示,它们并非一一对应。算法的执行效率不仅与问题的规模有关,还与数据的存储结构

有关。

2.在结构化程序设计中,模块划分的原则是()

A)各模块应包括尽量多的功能

B)各模块的规模应尽量大

C)各模块之间的联系应尽量紧密

D)模块内具有高内聚度、模块间具有低耦合度

[解析]在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利

于提高软件模块的独立性,这也是模块划分的原则。

3.下列叙述中正确的是()

A)软件测试的主要目的是发现程序中的错误

B)软件测试的主要目的是确定程序中错误的位置

C)为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作

D)软件测试是证明软件没有错误

A

[解析]软件测试是为了发现错误而执行程序的过程,且为了达到好的测试效果,应该由独

立的第三方来构造测试,程序员应尽量避免检查自己的程序。

4.下面选项中不属于面向对象程序设计特征的是()

A)继承性B)多态性C)类比性D)封装性

c

[解析]面向对象程序设计的3个主要特征是:封装性、继承性和多态性。

5.下列对队列的叙述正确的是()

A)队列属于非线性表B)队列按“先进后出”原则组织数据

C)队列在队尾删除数据D)队列按“先进先出”原则组织数据

D

[解析]队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进

行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的•端称为队首(front)。队列

具有先进先出的特点,它是按“先进先出”的原则组织数据的,故本题答案为D)。

6.对下列二叉树进行前序遍历的结果为()

A)DYBEAFCZXB)YDEBFZXCAC)ABDYECFXZD)ABCDEFXYZ

C

[解析]二叉树前序遍历的含义是:首先访问根结点,然后按前序遍历根结点的左子树,最

后按前序遍历根结点的右子树,前序遍历二叉树的过程是一个递归的过程。根据题目中给出

的二叉树的结构可知前序遍历的结果是:ABDYECFXZ。

7.某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()

A)n+1B)n-1C)2nD)n/2

A

[解析]对于任何一棵二叉树T,如果其终端结点(叶子)数为nl,度为2的结点数为n2,则

nl=n2+l«所以该二叉树的叶子结点数等于n+1。

8.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()

A)并B)交C)投影D)笛卡儿乘积

B

[解析]在关系运算中,“交”的定义如下:设R1和R2为参加运用算的两个关系,它们具

有相同的度n,且相对应的属性值取自同一个域,则R1HR2为交运算,结果仍为度等于n

的关系,其中的元组既属于R1又属于R2。

根据定义可知,不改变关系表的属性个数但能减少元组个数的是交运算,故本题答案为

B)。

9.在E-R图中,用来表示实体之间联系的图形是()

A)矩形B)椭圆形C)菱形D)平行四边形

C

[解析]E-R模型可用E-R图来表示,它具有3个要素:①实体(型)用矩形框表示,框内为实

体名称。②属性用椭圆型来表示,并用线与实体连接。属性较多时也可以将实体及其属性单

独列表。③实体间的联系用菱形框表示。用线将菱形框与实体相连,并在线上标注联系的类

型。

10.下列叙述中错误的是()

A)在数据库系统中,数据的物理结构必须与逻辑结构一致

B)数据库技术的根本目标是要解决数据的共享问题

C)数据库设计是指在已有数据库管理系统的基础上建立数据库

D)数据库系统需要操作系统的支持

A

[解析]数据库设计(DatabaseDesign)是指根据用户的需求,在某一具体的数据库管理系统上

设计数据库的结构并建立数据库的过程;数据库技术的根本目标是要解决数据共享的问题:

数据库需要操作系统的支持;数据的物理结构又称数据的存储结构,就是数据元素在计算机

存储器中的表示及其配置。数据的逻辑结构是指数据元素之间的逻辑关系,它是数据在用户

或程序员面前表现的方式,在数据库系统中,数据的物理结构不一定与逻辑结构一致。

11.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。这属于算法的()

A)正当性B)可行性C)确定性D)有穷性

C

[解析]一个算法应当具有5个特性,即有穷性、确定性、可行性、有零个或多个输入以及

有一个或多个输出。算法的确定性是指:算法中每一条指令必须有确切的含义,读者理解时

不会产生二义性。并且在任何条件下,算法只有唯一的条执行路径,即对于相同的输入只

能得出相同的执行结果。

(12-50),C语言综合单向选择题

12.以下叙述中错误的是()

A)计算机不能直接执行用C语言编写的源程序

B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件

C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件

D)后缀为.obj和.exe的二进制文件都可以直接运行

D

[解析I一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,

然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标

程序不可以直接运行,它要和库函数或其它目标程序连接成可执行文件(后缀名为.exe)后方

可运行。故本题答案为D)。

13.按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()

A)大写字母B)连接符C)数字字符D)下划线

[解析]在C语言中,用户标识符命令规则规定:变量名只能由字母、数字或下划线3种字

符组成,且第一个字符必须为字母或下划线。在C语言中,大写字母和小写字母被认为是

两个不同的字符。据此规定A)、D)、C)三个选项是正确的,而B)选项是连字符,不在C语

言规定的命名变量标识符的范围内。

14.以下叙述中错误的是()

A)C语言是一种结构化程序设计语言

B)结构化程序由顺序、分支、循环三种基本结构组成

C)使用三种基本结构构成的程序只能解决简单问题

D)结构化程序设计提倡模块化的设计方法

C

[解析]结构化程序设计是指在程序的构成上只使用顺序、选择(即分支)和循环3种结构组成

的编程方式。它强调程序设计风格和程序结构的规范化,提倡清晰的结构。结构化程序设计

方法的基本思路,是把•个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在

人们容易理解和处理的范围内。结构化程序设计提倡模块化的设计方法。

15.对于一个正常运行的C程序,以下叙述中正确的是()

A)程序的执行总是从main函数开始,在main函数结束

B)程序的执行总是从程序的第一个函数开始,在main函数结束

C)程序的执行总是从main函数开始,在程序的最后一个函数中结束

D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束

A

[解析]一个C程序总是从main函数开始执行,而不论其在程序中的位置。在main函数中

可以调用程序中的其他函数,而其他函数却不可以调用main函数。程序最后再从main函

数中结束。

16.设变量均己正确定义,若要通过scanf("%d%c%d%c",&al,&cl,&a2,&c2);语句为

变量al和a2赋数值10和20,烦量cl和c2赋字符X和Y。以下所示的输入形式中正确

的是(注:口代表空格字符)()

A)10口X口20口Y<回车〉

B)10口X20口Y<回车>

C)10口X<回车>20口Y<回车>

D)10X<回车>20Y<回车〉

D

[解析]本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B)、C),输入的第一

个空格会作为字符赋值给变量cl,而不会被解释成分隔符。

17.若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确

表示该代数式的C语言表达式是()

A)sqrt(abs(nAx+eAX))B)sqrt(fabs(pow(n,x)+pow(x,e)))

C)sqrt(fabs(pow(n,x)+exp(X)))D)sqrt(fabs(pow(x,n)+exp(x)))

C

[解析]本题主要考查C语言的库函数。abs求整数的绝对值,fabs求双字节型的绝对值,

pow函数的原形是doublepow(doubleX,doubleY),潺x的y次方;exp函数的原形是double

exp(doubleX),求10的X次方;sqrt函数的原形是doublesqrt(doublex),为x的平方根。

故本题答案为C)。

18.设有定义:intk=O;,以下选项的四个表达式中与其他三个表达式的值不相同的是()

A)k++B)k+=1C)++kD)k+1

A

[解析]因为“intk=0;",月以B)、C)、D)三个选项的表达式的值都等于1,而A)选项的表

达式的值等于0。这是因为“k++”这个表达式先进行取k值的运算,然后是k值自加1。

故本题答案为A)。

19.有以下程序,其中%u表示按无符号整数输出

main()

(

unsignedintx=0xFFFF;/*x的初值为+六进制数*/

printf("%u\n",x);

)

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

A)-lB)65535C)32767D)OxFFFF

B

[解析]"%u”格式符用来以+进制形式输出无符号整型变量,其取值范围是0—65535。本

题中无符号整型变量x=0xFFFF(+六进制)表示的是无符号整型变量的最大值65535。

20.设变量x和y均已正确定义并赋值。以下if语句中,在编译时将产生错误信息的是()

A)if(x++);B)if(x>y&&y!=0);

C)if(x>0)x-elsey++;D)if(y<0){;)elsex++;

C

[解析]C语言规定,在“if(表达式)语句l;else语句2;”这种形式的if语句中,在每一个else

前面有一个分号,整个语句结束处有一分号。在本题的C)选项中,else前面少了一个分号,

这样程序在编译时,会出现语法错误。

21.以下选项中,当x为大于1的奇数时,值为0的表达式是()

A)x%2==lB)x/2C)x%2!=0D)x%2==0

D

[解析]因为X的值为大于1的奇数,所以x除以2的余数等于1,因此,选项A)、C)中表

达式的结果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中表达式的

结果为假,即等于0。

22.以下叙述中正确的是()

A)break语句只能用于switch语句体中

B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环

C)break语句只能用在循环体内和switch语句体内

D)在循环体内使用break语句和continue语句的作用相同

C

[解析]break语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在switch语句

中,也可以出现在循环语句中。continue语句只是结束本次循环,即跳过本次循环体中余下

尚未执行的语句,接着再一次进行循环的条件判断。

23.有以下程序

main()

{intk=5,n=0;

do

{switch(k)

{case1:

case3:n+=l;k—;break;

default:n=0;k—;

case2:

case4:n+=2;k-;break;

)

printf(n%du,n);

}while(k>0&&n<5);

)

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

A)235B)0235C)02356D)2356

A

[解析]因为变量的初始值分别为“k=5,n=0",所以程序第一次进入循环时,执行default

语句,这时k=4,执行"case4:”这个分支,结果是“n=2,k=3",持|J出2:程序然后进行

第二次循环,这时“n=2,k=3”,执行"case3:”这个分支,结果是“n=3,k=2”,打印出3;

程序进行第三次循环,这时“n=3,k=2”,执行“case2:case4:”这两个分支,结果是“n=5,

k=l”,抒[1出5,这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束。因

此输出结果是235。

24.有以下程序

main()

{inti,j;

for(i=1;i<4;i++)

for(j=i;j<4;j++)

printf("%d*%d=%d",i,j,i*j);

printf("\n");

)

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

A)rM=11*2=21*3=32*1=22*2=43*1=3

B)Psl=l1*2=21*3=32*2=42*3=63*3=9

C)Psl=l1*2=22*2=41*3=32*3=63*3=9

D)PM=12*1=22*2=43*1=33*2=63*3=9

B

[解析]本题主要考查了for循环的嵌套。外层for循环的自变量i从1开始,每次循环后增1,

至到i等于3结束。内层循环的自变量j每次从i开始,每次循环后增1,至到j等于3结束。

在每次外循环开始后,内层循环在一行上先打印"i*j=两个乘数的积”,然后换行,下次循

环从下一行开始打印。

25.以下合法的字符型常量是()

A)^xl3,B),081'C)'65'D)"\n"

A

[解析]C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还

允许用以一个“\”开头的字符序列来表示字符常量。其中,形式“\ddd”表示1到3位8

进制数所代表的字符;形式“\xhh”砺1到2位16进制数所代表的字符。在本题中‘\xl3'

表示回车符,是一个字符常量;\081'用8进制数所代表的字符,但形式不正确,因为8

进制数所表示的字符中不会出现数字“8";'65'不是一个字符,而是一个+进制数字;“\n”

是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。

26.在C语言中,函数返回值的类型最终取决于()

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

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

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

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

A

[解析]在C语言中,应当在定义函数时指定函数值的类型,凡不加类型说明的函数,一律

自动按整型处理。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型

一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数类型为主。即函数

类型决定返回值的类型。

27.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中

的大写字母转换为对应小写字母的语句是()

A)c=(c-'A')%26+'a'B)c=c+32C)c=c-'A'+'a'D)c=('A'+c)%26-'a'

D

[解析]C语言中,字符数据参加运算时,实际上是其ASCII码参与计算。大写字母的ASCII

码比其对应的小写字母的ASCII码小31。因此要将大写字母转化为小写字母只需将其加上

32即可。所以选项B)、C)都符合条件,因为变量C中存储的是大写字母,所以"c」A"’的

值一定小于26,故选项A)与选项C)的含义相同。故本题答案为D)。

28.有以下函数

intfun(char*s)

{char*t=s;

while(*t++);

return(t-s);

)

该函数的功能是

A)比较两个字符串的大小

B)计算s所指字符串占用内存字节的个数

C)计算s所指字符串的长度

D)将s所指字符串复制到字符串t中

[解析]循环语句while(*t++);执行完时,指针变量t就指向了字符中结束符'\o'之后的位

置,所以语句return(t-s);返回的就是字符串s所用内存的字节个数。

29.设已有定义:floatX;,则以下对指针变量p进行定义且贝武初值的语句中正确的是()

A)float*p=1024;B)int*p=(float)x;C)floatp=&x;D)float*p=&x;

D

[解析]指针变量只能存储地址,选项A)错误。只有浮点型指针才能指向浮点型数据,选项

B)错误。在定义指针变量时必须加上星号"二逊C)错误。故本题答案为D)。

30.有以下程序

#include<stdio.h>

main()

{intn,*p=NULL;

*p=&n;

printf("Inputn:n);

scanf("%d",&p);

printf("outputn:”);

printf("%d\nn,p);

)

该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以卜语句正确的是()

A)intn,*p=NULL;B)*p=&n;C)scanf("%dn,&p)D)printf(n%d\nn,p);

A

[解析]指针变量在定义时需要加星号,而在赋值时则不用,故选项B)错误。本题中,scanf()

函数和printf()函数都是要对指针变量p指向的地址处的数据进行访问,不是变量本身。选

项C)中多了取地址运算符,选项D)中少了指针运算符。

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

由大到小排序。

voidf(intb|],intn,intflag)

{inti,j,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]=bU];b[j]=t;}

)

main()

{inta[10]={5,4,3,2,1,6,7,8,9,10},i;

f(&a[2],5,0);

f(a,5,1);

for(i=0;i<10;i++)

printf(n%d,",a[i]);

)

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

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(&a⑵,5,0);”语句的功能是对数组a[10]中从a⑵到a[6]的数宇(即

3,2,1,6,7)进行从大到小排序,这时数组a[10]中的数字序列变为{5,4,7,6,3,2,1,

8,9,10)oaf(a,5,1);”语句的功能是对数字序列{5,4,7,6,3,2,1,8,9,10}中的

5,4,7,6,3进行从小到大的排序,所以数组a|10]中的数字序列最终变为{3,4,5,6,7,

2,1,8,9,10}o

32.有以下程序

voidf(intb[])

{inti;

fbr(i=2;i<6;i++)

b[i]*=2;

)

main()

{inta[10]={l,2,3,4,5,6,7,8,9,10),i;

f(a);

for(i=0;i<10,i++)

printf(n%d,",a[i]);

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

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

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,10,12,14,16,9,10,

B

[解析]在main。中,f(a)语句的作用是对数组a[10]中从a⑵到a[5]的各个数字乘以2所以

数组或10]中的数字就变成了{1,2,6,8,10,12,7,8,9,10),最后在屏幕上输出。

33.有以下程序

typedefstruct}intb,p;}A;

voidf(Ac)/*注意:c是结构变量名*/

{intj;

cb+=l;

c.p+=2;

)

main()

{inti;

Aa={l,2};

f(a);

printf(u%d,%d\n",a.b,a.p);

)

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

A)2,3B)2,4C)1,4D)1,2

D

[解析]本题考查的是函数调用时的数据传递问题。因为在调用函数f()时只是进行的值传递,

即单向传递,函数的调用及对形参的处理过程并不会引起实参数值的变化。故本题答案为

D)o

34.有以下程序

main()

{inta[4][4]={{L4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;

for(i=0;<4:i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(aU][i]>a[kJ[i]

{t=a[j][i];a[j][i]=a[k][i]=a[k][i]=t;}/*按列排序*/

for(i=0;i<4;i++)printf("%d,",a[i][i]);

)

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

A)1,6,5,7,B)8,7,3,1,

C)4,7,5,2,D)1,6,2,1,

A

[解析]本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来

实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列。最后输出

对角线上的元素值。故本题答案为A)。

35.有以下程序

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[k][k])

{t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}

for(i=0;i<4;i++)

printf(H%d,M,a[0][i]);

)

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

A)6,2,1,1,B)6,4,3,2,

C)1,1,2,6,D)2,3,4,6,

B

[解析]本题使用选择法对二维数组对角线上的元素按从大到小的顺序进行排列。最后输出

数组第•行的数据。故本题答案为B)。

36.有以下程序

voidf(int*q)

{inti=0:

fbr(;i<5;i++)

(*q)++;

)

main()

{inta[5]={l,2,3,4,5},i;

f(a);

fdr(i=O;i<5;i++)

printf(n%d,",a[i]);

)

程序运行后的输出结果是

A)2,2,3,4,5,B)6,2,3,4,5,

C)1,2,3,4,5,D)2,3,4,5,6,

B

[解析]调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一

个元素a[0]。在5次循环过程中,q始终指向a[0],因此a[0]的值增加了5。最后的输出结

果为“6,2,3,4,5”。

37.有以下程序

#inciude<string.h>

main()

{charp[20]={'a',K,'c\*d'},q[]=Mabc",r|]=,,abcden;

strcpy(p+strlen(q),r);

strcat(p,q);

printf(',%d%d\nu,sizeof(p),strlen(p));

)

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

A)209B)99C)2011D)1111

C

[解析]函数strlen()返回的是数组的实际长度,而sizeof返回的是数组定义的总长度。因为

字符数组p[20]定义为20字节长度,所以sizeof(p)的值为20。“strcpy(p+strien(q),r);”语

句的功能把字符数组r拷贝到字符数组p从p[3]开始到p[7]的位置中,这时字符数组p的有

效字符长度为8。然后再执行"strcat(p,q);”语句(字符串连接),即把字符数组q连接到字

符数组p后面,这时字符数组p的有效长度为11o

38.有以下程序

#include<string.h>

main()

{charp[20]={'a',V,'c',d},q[]="abcH,r[]=nabcde";

strcat(p,r);

strcpy(p+strlen(q),q);

printf(u%d\n",strlen(p));

)

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

A)9B)6C)11D)7

B

[解析]strcpy()函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串

结束标志‘\0'到p[6]中。函数strlen()返回的是字符串中不包括<\0,在内的实际长度,故

本题答案为B)。

39.有以下程序

#include<string.h>

voidf(charp[][10],intn)/*字符串从小到大排序*/

{chart[10];inti,j;

fbr(i=O;i<n-l;i++)

fbr(j=i+l;j<n;j++)

if(strcmp(p[i],p[j])>0)

{strcpy(t,p[i]);

strcpy(p[i],p[j]);

strcpy(p[j],t);

)

)

main()

{charp[5][10]={Mabc%naabdfg:,nabbdM,"dcdbe'1,“cd”};

f(P,5);

printf("%d\n",strlen(p[O]));

)

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

A)2B)4C)6D)3

C

[解析]本题中函数f()利用选择法对字符串数组p中的字符中按从小到大排序,字符串比较

的方法是:依次对S1和S2所指字符串对应位置上的字符两两进行比较,当出现第一对不

相同的字符时,即由这两个字符(ASCII码值)决定所在串的大小,因此最后在p[0]中存储的

是最小的字符串是“aabdfg"。最后用strlenO函数求得该字符串的长度为6。

40.有以下程序

voidf(intn,int*r)

{intrl=0;

if(n%3==0)rl=n/3;

elseif(n%5==0)rl=n/5;

elsef(-n,&rl);

*r=rl;

)

main()

{intm=7,r;

f(m,&r);

printf(u%dM,r);

)

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

A)2B)1C)3D)0

A

[解析]本题考查了函数的递归调用。在f函数中,当m=7时;程序执行&H);”语

句,递归调用f(6,&rl),程序执行,l=n/3;”语句,BPrl=6/3=2,然后执行“*=rl;"语

句,所以输出结果为2。

41.有以下程序

main(intargc,char*argv[])

{intn=0,i;

for(i=1;i<argc;i++)

n=n*10+*argv[i]-'O';

printf(n%d\nn,n);

)

编译连接后生成可执行文件tt.exe。若运行时输入以下命令行tt12345678。程序运行

后的输出结果是()

A)12B)12345C)12345678D)136

D

[解析]运行时输入该命令后,参数argc的值为4,字符串数组argv[l]、argv[2]>argv[3]分

别为“12”、“345”、“678”,然后取这3个参数的第一个字符,将其转化成原来的数字并组

合成一个新的三位数。

42.有以下程序

inta=4;

intf(intn)

{intt=0;staticinta=5;

if(n%2)

{inta=6;t+=a++;}

else

{inta=7;t+=a++;}

returnt+a++;

)

main()

{ints=a,i=0;

fbr(;i<2;i++)s+=f(i);

printf(n%d\nH,s);

)

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

A)24B)28C)32D)36

B

[解析]本题考查的是变量的作用域问题。程序中定义了多个变量a,全局变量、静态变量和

局部变量分别在自己的作用域中参与运算。在main()函数中首先执行“s+=f(0);”语句,而

f(0)返回值为12,所以第一次循环结束s的值等于4+12=16;第二次开始时,当执行f(l)时,

在f⑴中执行uif(n%2){inta=6;t+=a++;}”和"returnt+a++;”这两条语句,所以f⑴的

返回值等于12。再在主函数中执行"s+=f(l)「语句,也就是16+12=28。

43.有一个名为init.txt的文件,内容如下:

#defineHDY(A,B)A/B

#definePRINT(Y)printf(ny=%d\nn,Y)

有以下程序

#include"init.txt,,

main()

{inta=l,b=2,c—3,d=4,k;

k=HDY(a+c,b+d);

PRINT(k);

)

下面针对该程序的叙述正确的是()

A)编译出错B)运行出错C)运行结果为y=0D)运行结果为y=6

D

[解析]本题考查的是带参数的宏定义。不仅要进行简单的字符替换,还要进行参数替换。

根据宏替换的规则,本题在进行替换宏HDY时,没有像所希望的那样将HDY(a+c,b+d)

替换成(a+c)/(b+d),而是替换成了“a+c/b+d”,因此结果k为6。

44.有以下程序

main()

(

charch[]=MuvwxyzM,*pc;

pc=ch;

printf(*'%c\n”,*(pc+5));

)

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

A)zB)0C)元素ch[5]的地址D)字符y的地址

A

[解析]将字符串的地址赋值给字符指针变量后,指针就指向了该字符串的第一个字符,即

所以*(p+5)指向的字符是30

45.有以下程序

structS{intn;inta[20];};

voidf(structS*p)

{inti,j,t;

fbr(i=O;i<p->n-l;i++)

fbr(j=i+l;j<p->n;j++)

if(p->a|i|>p->a|j])

{t=p->a[i];p->a[i]=p->a[j];p->a|j]=t;}

)

main()

{inti;

structSs={10,{2,3,1,6,8,7,5,4,10,9}};

f(&s);

for(i=0;i<s.n;i++)

printf(n%d,n,s.a[i]);

)

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

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

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

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

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

A

[解析]本题中,在调用函数f()时,实参是结构体变量s的地址,所以在函数中对形参的改

变会影响到实参的数值。函数f()实现的功能是把结构体的成员数组中的值按从小到大顺序

进行排列。

46.有以下程序

structS{intn;inta[20];};

voidf(int*a,intn)

{inti;

fbr(i=O;i<n-l;i++)a[i]+=i;

main()

{inti;

structSs={10,{2,3,1,6,8,7,5,4,10,9});

f(s.a,s.n);

fbr(i=O;i<s.n;i++)

printf(n%d,n,s.a[i]);

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

A)2,4,3,9,11,11,18,9,

B)3,4,2,7,9,8,5,11,10,

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

D)1,3,6,8,7,5,4,10,9,

[解析]本题中,在调用函数时将结构体变量的两个成员作为实参,其中的成员数组a实际

向函数f()传递的是该数组的地址,因此在函数f()中所对应的形参发生改变时,该数组内的

数据也会发生改变。函数f()实现的功能是将成员数组中的前9个元素分别加上该元素的下

标,作为新的元素。

47.有以下程序段

typedefstructnode{intdata:structnode*next:}*NODE;

NODEp;

以下叙述中正确的是()

A)p是指向structnode结构变量的指针的指针

B)NODEp;语句出错

C)p是指向structnode结构变量的指针

D)p是structnode结构变量

C

[解析]在C语言中,typedef用于说明一种新的类型名,本题中的node被定义为一种结构体

类型名,NODE被定义为指向这种结构体变量的指针,我们可以用它来定义一个指向该类型

结构体变量的指针。

48.有以下程序

main()

(

unsignedchara=2,b=4,c=5,d;

d=alb;

d&=c;

printf(',%d\nu,d);

)

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

A)3B)4C)5D)6

[解析]本题考查的内容是按位与和按位或运算符的使用,由运算规则可知,d的最终结果为

49.有以下程序

#include<stdio.h>

main()

{FILE*fp;

intk,n,a[6]={1,2,3,4,5,6};

fp二fopen("d2.dat",”w");

fprintf(fp,H%d%d%d\nn,a[0],a[l],a[2]);

fprintf(fp,"%d%d%d\nM,a[3],a[4],a[5]);

fclose(fp);

fp=fopen("d2.dafH,"rn);

fscanf(fp,n%d%dn,&k,&n);

printf(n%d%d\n",k,n);

fclose(fp);

)

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

A)12B)14C)1234D)123456

D

[解析]将有6个元素的整型数组分两行输出到一个文件中,因为输出的都是数字并且每行

都没有分隔符,所以当再对其进行读取操作时,每•行都会被认为是一个完整的数,而换行

符则作为它们的分隔符。故本题答案为D)。

50.有以下程序

#include<stdio.h>

main()

{FILE*fp;

inti,a[6]={l,2,3,4,5,6};

fp=fopen(,'d3.datM,"w+b");

fwrite(a.sizeof(int),6,fp);

fseek(fp,sizeof(int)*3,SEEK_SET);

/*该语句使读文件的位置指针从文件头向后移动3个int型数据*/

fread(a,sizeof(int),3,fp):

fclose(fp);

for(i=0;i<6;i++)

printf(n%d,",a[i]);

}

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

A)4,5,6,4,5,6,B)1,2,3,4,5,6,

C)4,5,6,1,2,3,D)6,5,4,3,2,1,

A

[解析]首先利用fwrite函数将数组a中的数据写到文件中,接着fseek函数的功能是读文件

的位置,指针从文件头向后移动3个int型数据,这时文件位置指针指向的是文件中的第4

个int数据“4”。然后fread函数将文件fp中的后3个数据4,5,6读到数组a中,这样就

覆盖了数组中原来的前3项数据。最后数组中的数据就成了{4,5,6,4,5,6),故本题答

案为A)o

二、填空题

请将每一个空的正确答案写在【1】至【20】序号的横线上。

(1-5,软件技术基础填空题)

1.在深度为7的满二叉树中,度为2的结点个数为【1】.

63

[解析]根据二叉树的性质,一棵深度为k的满二叉树有2k-l个结点,所以深度为7的满二

叉树有27-1=127个节点;又因为在任意一棵二叉树中,若终端结点的个数为n0,度为2的

结点数为n2,贝iJnO=n2+l,即所以总节点数为n0+n2=2n2+l=127,所以n2=63,即度为2

的结点个数为63,所以⑴应填入63。

2.软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于【2】测试。

黑箱或黑盒

[解析]黑箱测试是根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部

结构和处理过程。常用的黑箱测试技术分为等价类划分、边界分析、错误猜测以及因果图等。

3.在数据库系统中,实现各种数据管理功能的核心软件称为[31o

数据库管理系统(DBMS)

[解析]数据库管理系统(DatabaseManagementSystem)简称DBMS,对数据库进行统••的管理

和控制,以保证数据库的安全性和完整性。它是数据库系统的核心软件。

4.软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测试

属于【4】阶段。

开发

[解析]软件生命周期(SDLC,软件生存周期)是软件的产生直到报废的生命周期,周期内有

问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级

到废弃等阶段,其中的编码和测试属于开发阶段。

5.在结构化分析使用的数据流图(DFD)中,利用【在对其中的图形元素进行确切解释。

数据字典

[解析]数据字典(DataDictionary,简称DD)就是用来定义数据流图中的各个成分的具体含

义。数据字典的任务是对于数据流图中出现的所有被命名的图形元素在数据字典中作为一个

词条加以定义,使得每一个图形元素的名字都有一•个确切的解释。

6.执行以下程序后的输出结果是[6】。

main()

{inta=10;

a=(3*5,a+4);printf("a=%d\n",a);

a=14

[解析]本题考查的是的表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数

据14赋值给a,根据printf()函数内的输出格式控制串,最后的输出结果应为“a=14”。

7.当执行以下程序时,输入1234567890〈回车,,则其中while循环体将执行【7】次。

#include<stdio.h>

main()

{charch:

while((ch=getchar())=='O')prinft(,'#M);

0

[解析]通过getchar。函数来取得从键盘输入的数据,再判断其是否是字符'0',如果是,则

执行一次循环,因为从键盘输入的1234567890都是整型数,不是字符.所以while循环执

行的条件始终不成立,循环体执行的次数为0。

8.以下程序的运行结果是【8】。

intk=0;

voidfun(intm)

{m+=k;

k+=m;

printf(Mm=%dk=%dn,m,k++);

)

main()

{inti=4;

fun(i++);

printf(ui=%dk=%d\nM,i,k);

)

m=4k=4i=5k=5

[解析]由于在main。函数中,变量i=4,所以就调用fun(4)则输出“m=4k=4"。然后变量k

增1等于5,变量i增1等于5,所以main。函数的<<printf("i=%dk=%d\n”,i,k);”语句输出

“i=5k=5'5

9.以下程序的运行结果是[9】。

main()

{inta=2,b=7,c=5;

switch(a>0)

{case1:switch(b<0)

{case1:printf("@H);break;

case2:printf(“!“);break;

}

case0:switch(c==5)

{case0:printf("*");break;

case1:printf('1#");break;

case2:printf("$");break;

)

default:printf(n&n);

)

printf(n\nn);

#&

[解析]表试"c==5”的值为真,所以表达式的值等于1,因此输出符号‘#、懒行,bleak”,

继而去执行""default:printf("&");"语句,输出符号“&”。

10.以下程序的输出结果是【10】。

#include<string.h>

main()

{printf(n%d\nH,strlen(nIBM\nO12\l\\M));}

9

[解析]本题的字符串中共有9个字符,它们分别是T,\n',T,T,",W,

其中“\n”表示换行,“\\”表示反斜杠字符所以本题的最后输出结果为9。

II.已定义charch=芍,;inti=l,j;,执行j!=ch&&i++以后,i的徜为【11】。

[解析]在执行逻辑表达式“j=!ch&&i++”时,首先判断j=!ch的值,因为‘&=F'"不为0,

所以"j=!ch=0",

编译系统便不再计算表达式“i++”的值,i的值不变,仍为lo

12.以下程序的输出结果是【12】。

#include<string.h>

main()

{chara[]={'\r,^2',\3',M',AO');

printf("%d%d\n",sizeof(a),strlen(a));

)

54

[解析]字符串处理函数strlen。返回的是字符数组的实际长度,不包括字符申结束标志'\0'。

而sizeof运算符则计算的是字符数组的总长度,包括串末尾的结束标志。

13.设有定义语句:inta[][3]={{0},{1}{2}};,则数组元素a[ll⑵的值是【13】。

0

[解析]本题考查的是二维数组初始化问题。题中对数组的a[0][0],a⑴⑼,a⑵⑼3个元素

分别赋值为0,1,2,其余的元素都自动贝武0

温馨提示

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

评论

0/150

提交评论