admin 管理员组

文章数量: 1087139


2024年5月21日发(作者:反三角函数arc计算器)

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

(题后含答案及解析)

题型有:1. 选择题 2. 填空题

选择题(1-10、21-40每题2分,11-20每题1分,共70分)下列各题A、B、

C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位

置上。

1. 算法的空间复杂度是指

A.算法程序的长度

B.算法程序中的指令条数

C.算法程序所占的存储空间

D.执行算法需要的内存空间

正确答案:D

解析:算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的

时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个

算法所需要的内存空间。

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

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

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

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

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

正确答案:D

解析:在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦

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

3. 下列叙述中,不属于测试的特征的是

A.测试的挑剔性

B.完全测试的不可能性

C.测试的可靠性

D.测试的经济性

正确答案:C

解析:软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错

误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全

测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。

4. 下面关于对象概念的描述中,错误的是

A.对象就是C语言中的结构体变量

B.对象代表着正在创建的系统中的一个实体

C.对象是一个状态和操作(或方法)的封装体

D.对象之间的信息传递是通过消息进行的

正确答案:A

解析:对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应

关系,对象之间通过传递消息互相联系,来模拟现实世界中不同事物彼此之间的

联系,B)、C)、D)是正确的,对象的思想广泛应用于C++、Java等语言中,因

此A)错误。

5. 下列关于队列的叙述中正确的是

A.在队列中只能插入数据

B.在队列中只能删除数据

C.队列是先进先出的线性表

D.队列是先进后出的线性表

正确答案:C

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

作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的

一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组

织数据的。

6. 已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序

遍历序列是

A.acbed

B.decab

C.deabc

D.cedba

正确答案:D

解析:依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左

子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,

由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二

叉树的前序遍历序列为选项D)。

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

A.n+1

B.n-1

C.2n

D.n/2

正确答案:A

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

点数为n2,则n1=n2+1,所以该二叉树的叶子结点数等于n+1。

8. 设有如下三个关系表 下列操作中正确的是

A.T=R∩S

B.T=R∪S

C.T=R×S

D.T=R/S

正确答案:C

解析:对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m

元关系S,它们分别有p和g个元组,则R与S的笛卡尔积记为R×S,它是一

个m+n元关系,元组个数是p×q,由题意可得,关系T是由关系R与关系S进

行笛卡尔积运算得到的。

9. 下列叙述中,正确的是

A.用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联

B.用E-R图只能表示实体集之间一对一的联系

C.用E-R图只能表示实体集之间一对多的联系

D.用E-R图表示的概念数据模型只能转换为关系数据模型

正确答案:A

解析:两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可

以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概

念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因

此,容易向关系模型、网状模型和层次模型等各种模型转换。

10. 下列有关数据库的描述,正确的是

A.数据处理是将信息转化为数据的过程

B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变

C.关系中的每一列称为元组,一个元组就是一个字段

D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关

系的关键字,则称其为本关系的外关键字

正确答案:D

解析:数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据

的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项

B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属

性,对应存储文件中的字段,故选项C)叙述错误。

11. 下面各选项中,均是C语言合法标识符的选项组是

A.33 we auto

B._23 me _3ew

C._43 3e_ else

D.ER -DF 32

正确答案:B

解析:合法的标识符是由字母、数字和下画线组成,并且第一个字符必须为

字母或下画线,用户定义的标识符不能与关键字相同。选项A),数字不能为第

一个字母,auto为关键字;选项C)中,也是数字不能为第一个字母,else为关键

字;选项 D)中负号不合法。

12. 下面四个选项中,均是不合法的用户标识符的选项是

A.A P_0 do

B.float la0 _A

C.b-a goto int

D._123 temp int

正确答案:C

解析:C语言规定的标识符只能由字母、数字和下画线3种字符组成,第一

个字符必须为字母或下画线,并且不能使用C语言中的关键字作为标识符。选

项C)中goto和int是关键字,b-a中“-”不是组成标识符的3种字符之一;选项

D)中int是关键字,所以,均是不合法用户标识符的选项是C)。

13. 以下对C语言函数的有关描述中,正确的是

A.在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送

给实参

B.C函数既可以嵌套定义又可以递归调用

C.函数必须有返回值,否则不能使用函数

D.函数必须有返回值,返回值类型不定

正确答案:A

解析:C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函

数可以没有返回值,若有返回值,则返回值类型必确定。

14. 设变量已正确定义并赋值,以下正确的表达式是

A.x=y*5=x+z

B.int(15.8%5)

C.x=y+z+5,++y

D.x=25%5.0

正确答案:C

解析:求余运算符“%”两边的运算对象必须是整型;而选项B)和D)中“%”

两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)

中赋值表达式的两边出现相同的变量x,也是错误的;选项C)是一个逗号表达式,

所以正确答案为C)。

15. 现有定义int a;double b;float c;char k;,则表达式a/b+c-k值的类型为

A.int

B.double

C.float

D.char

正确答案:B

解析:双目运算中两边运算量类型转换规律: 运算数1 运算数2

转换结果类型 短整型 长整型 短整型->长整型 整型

长整型 整型->长整型 字符型 整型 字符型->整型

有符号整型 无符号整型 有符号整型->无符号整型 整型 浮点型

整型->浮点型 在a/b的时候,a、b的类型不一致,根据类型转换规则,把整

型转换成double类型,之后的加、减类似。转化规则为char,short→int→unsigned

→long→double←float。

16. 以下程序的运行结果是 int k=0; void fun(int m)

{m+=k;k+=m;printf(“m=%d k=%d”,m,k++);} main( ) { int i=4; fun(i++);

printf(“i=%d k=%dn”,i,k); }

A.m=4 k=5 i=5 k=5

B.m=4 k=4 i=5 k=5

C.m=4 k=4 i=4 k=5

D.m=4 k=5 i=4 k=5

正确答案:B

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

然后变量k增1等于5,变量i增1等于5,所以main( )函数的

“printf(“i=%dk=%dn”,i,k);”语句输出“i=5 k=5”。

17. 有以下程序段 int j;float y;char name[50]; scanf(“%2d%f%s”,&

j,&y,name); 当执行上述程序段,从键盘上输入55566 7777abe后,y的值为

A.55566.0

B.566.0

C.7777.0

D.566777.0

正确答案:B

解析:本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式

控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输

入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。

18. 设有: int a=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b) &&(n=c>d)

后,n的值是

A.1

B.2

C.3

D.4

正确答案:B

解析:本题考查逻辑与运算的运算规则。其规则是:当运算符前后两个条件

表达式都满足时,其最终结果才为真。当发现第一个表达式的值为假时,计算机

将不再执行后面表达式的运算。本题中,由于前一个表达式的值为“假”,所以

后面的表达式不再进行运算,因而n的值保持不变,仍为2。

19. 下列程序的运行结果是 #include “stdio.h” main( ) { int

x=-9,y=5,z=8; if(x<y) if(y<0) z=0; else z+=1;

printf(“%dn”,z);}

A.6

B.7

C.8

D.9

正确答案:D

解析:if…else语句的执行过程如下,首先计算if后面一对圆括号内表达式

的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后

的下一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行

if语句后的下一条语句。C语言的语法规定,else子句总是与前面最近的不带else

的if匹配,与书写格式无关,本题目的后一个if-else相当于嵌套在第一个if子

句里,相当于x=0时,z=z+1。

20. 若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的switch语句是

A.switch(x) {case 1.0:printf(“*n”); case 2.0:printf(“**n”);}

B.switch((int)x); {case 1:printf(“*n”); case 2:printf(“**n”);}

C.switch(a+b) {case 1:printf(“*n”); case 2+1:printf(“**n”);}

D.switch(a+b) {case 1:printf(“*n”); case c:printf(“**n”);}

正确答案:C

解析:C语言中,switch语句专用于实现多分支结构程序,其特点是各分支

清晰而直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达

式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,

各常量表达式各不相同。

21. 以下程序的输出结果是 main( ) { int a,i;a=0; for(i=1;i<5;i++)

{ switch(i) { case 0:case 3:a+=2;case 1:case

2:a+=3;default:a+=5;} }printf(“%dn”,a);}

A.31

B.13

C.10

D.20

正确答案:A

解析:本题考查用于多分支选择的switch语句,其一般形式为: switch(表

达式) { case常量表达式1:语句1; case常量表达式2:语句

2; … case常量表达式n:语句n; default:语句n+1; } 其

语义是:计算表达式的值,并逐个与其后的常量表达式值进行比较,当表达式的

值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续

执行后面所有case后的语句;如表达式的值与所有case后的常量表达式均不相

等时,则执行default后的语句。

22. 以下描述中正确的是

A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内

不能使用复合语句

B.do-while循环由d。开始,用while结束,在while(表达式)后面不能写分

C.在do-while循环体中,是先执行一次循环,再进行判断

D.do-while循环中,根据情况可以省略while

正确答案:C

解析:do-while语句的一般形式为:do循环体语句while(表达式);,其中循

环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作

为语句的结束,在do-while循环中,不可以省略while。

23. 若有以下程序 #include <stdio.h> int a[ ]={2,4,6,8}; main( )

{ int i; int *p=a; for(i=0;i<4;i++) a[i]=*p; printf(“%dn”,a[2]);}

上面程序的输出结果是

A.6

B.8

C.4

D.2

正确答案:D

解析:在C语言中,数组元素下标是从0开始的;指针变量p指向数组的

首地址。for循环语句中,指针变量 p始终指向数组的首地址,因而执行循环赋

值语句后数组各元素的值均变为2。

24. 以下数组定义中错误的是

A.int x[ ][3]={0};

B.int x[2][3]={{1,2},{3,4},{5,6}};

C.int x[ ][3]={{1,2,3},{4,5,6}};

D.int x[2][3]={1,2,3,4,5,6};

正确答案:B

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

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

定义。选项B) 等号右边分了3行,大于等号左边数组的行数2。

25. 已知字符’A’的ASCII码值是65,字符变量c1的值是’A’,c2的值是’D’。

执行语句printf(“%d,%d”,c1,c2-2) ;后,输出结果是

A.A,B

B.A,68

C.65,66

D.65,68

正确答案:C

解析:在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需

要以整型格式输出字符时,输出的也是ASCII码值。字符“A”和“D”的ASCII

码值分别为65和68。

26. 若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是

A.a[2][!1]

B.a[2][3]

C.a[0][3]

D.a[1>2][!1]

正确答案:D

解析:C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标

取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,

选项D)表示数组元素a[0][0]。

27. 下面程序的文件名为,在DOS下输入的命令行参数为:t to meet me

<回车> 则程序输出的结果是 #include “stdio.h” main(argc,argv) int

argc;char *argv[ ]; { int i; printf(“%dn”,argc);}

A.3

B.4

C.2

D.以上答案都不正确

正确答案:B

解析:argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指

针数组的指针。

28. 阅读下列程序段,则程序的输出结果为 #include “stdio.h” #define

M(X,Y)(X)*(Y) #define N(X,Y)(X)/(Y) main( ) { int a=5,b=6,c=8,k;

k=N(M(a,b),c); printf(“%dn”,k);}

A.3

B.5

C.6

D.8

正确答案:A

解析:带参数的宏定义命令行形式如下:#define宏名(形参表) 替换文本。

首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为 (a)*(b)/(C)。

29. 以下叙述中错误的是

A.改变函数形参的值,不会改变对应实参的值

B.函数可以返回地址值

C.可以给指针变量赋一个整数作为地址值

D.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL

正确答案:C

解析:函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对

应实参的值,选项A) 正确。指针类型的函数可以返回地址值,选项B)正确。在

文件stdio.h中,NULL被定义为void型的指针,选项D)也正确。指针变量的值

只能是存储单元地址,而不能是一个整数,选项C)错误。

30. 有以下程序 #include <stdio.h> main( ) { FILE *fp;int

i,a[6]={1,2,3,4,5,6}; fp=fopen(“”,”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(“%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}。

31. 有下面程序段 #include “stdio.h” #include “string.h” main( )

{ char a[3][20]={{“china”},{“isa”},{“bigcountry!”}}; char k[100]={0},*p=k;

int i; for(i=0;i<3;i++) {p=strcat(p,a[i]);} i=strlen(p) ;

printf(“%dn”,i);} 则程序段的输出结果是

A.18

B.19

C.20

D.21

正确答案:B

解析:字符串连接函数strcat的调用形式如下:strcat(s1,s2)。此函数将s2所

指字符串的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的尾标,函

数返回s1的地址值。

32. 有以下程序 #include <stdio.h> void fun(int *a,int n)/*fun函数的

功能是将a所指数组元素从大到小排序*/ { int t,i,j; for(i=0;i<n-1;j++)

for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t;} } main( )

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

printf(“%d,”,c[i]); printf(“n”); } 程序的运行结果是

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

正确答案:D

解析:在本题中,主函数在调用fun( )函数进行排序时,传递的参数是c+4

和6,fun( )函数实现的功能是将数组c的第5个元素开始的6个元素依次进行从

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

33. 有以下程序 #include <stdio.h> int fun(char s[ ]) { int n=0;

while(*s<=‘9’&&*s>=‘0’) {n=10*n+*s-’0’;s++;} retum(n); } main( )

{ char s[10]={‘6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’}; printf(“%dn”,fun(s)); }

程序的运行结果是

A.9

B.61490

C.61

D.5

正确答案:C

解析:在fin函数中,while循环的功能是:逐个取字符数组s的字符判断其

是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位

将相应左移一个十进制位。当指针s指向数组的第3位时,循环条件不成立,循

环结束,返回n的值,输出n的值为61。

34. 以下函数返回a所指数组中最小的值所在的下标值 fun(int *a,int n)

{ int i,j=0,p; p=j; for(i=j;i<n;i++) if(a[i]<a[p]) ______;

return(p);} 在横线处应填入的是

A.i=p

B.a[p]=a[i]

C.p=j

D.p=i

正确答案:D

解析:该程序先判断a[i]<a[p],如果条件为真,则a[i]比当前设定的最小值

小(p保留的当前最小元素的下标),那么将i赋给p,即将比较过的最小元素下标

保留在p中,作为下面判断的标准。

35. 有以下函数 int aaa(char *s) { char *t=s; while(*t++); t--;

return(t-s); } 以下关于aaa函数的功能的叙述正确的是

A.求字符串s的长度

B.比较两个串的大小

C.将串s复制到串t

D.求字符串s所占字节数

正确答案:A

解析:循环开始前,指针t和s都指向字符串的起始位置,然后通过while

循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t

自减1,此时t指向的位置是字符串的结束标志“0”处,故t-s的值是字符串的

长度,并不包括结束标志。

36. 有以下程序 #include <stdio.h> #include <string.h> typedef

stmct{ char name[9];char sex;float score[2];}STU; void f(STU a) { STU

b={“Zhao”,’m’,85.0,90.0}; int i; strcpy(,) ; =;

for(i=0;i<2;i++) [i]=[i]; main( ) { STU c={“Qian”,’f’,95.0,92.0};

f(c);printf(“%s,%c,%2.0f,%2.0fn”,,,[0],[1]) ; } 程序

的运行结果是

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,f,95,92

D.Zhao,m,85,90

正确答案:A

解析:本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传

给函数f的参数只是结构变量c在栈中的一个副本,函数f的所有操作只是针对

这个数据副本进行的修改,这些都不会影响变量c的值。

37. 下列选项中错误的说明语句是

A.char a[ ]={‘t’,’o’,’y’,’o’,’u’,’0’};

B.char a[ ]={“toyou0”};

C.char a[ ]=“toyou0”;

D.char a[ ]=‘toyou0’;

正确答案:D

解析:通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的

相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。选项

B)和C)后面的“0”是多余的,在C语言中,系统会自动在字符串的结尾处加

上一个字符“0”作为串的结束标记。

38. 已知int a=1,b=3则a^b的值为

A.3

B.1

C.2

D.4

正确答案:C

解析:是按位异或运算,如果对应位不同则结果为1,相同则为0。

39. 下列程序的输出结果是 #include “stdio.h” #define M(x,y) x%y

main( ) { int a,m=12,n=100; a=M(n,m); printf(“%dn”,a--);}

A.2

B.3

C.4

D.5

正确答案:C

解析:带参数的宏定义命令行形式如下: #define宏名(形参表)替换文本

在编译的时候编译预处理程序用“替换文本”来替换宏,即M(n,m)被替换为n%m,

之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,

宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过

程中需要占用一些处理时间。

40. 有以下程序 #include <stdio.h> void fun(char *t,char *s)

{ while(*t!=0) t++; while((*t++=*s++)!=0); } main( ) { char

ss[10]=“acc”,aa[10]=“bbxxyy”; fun(ss,aa); printf(“%s,%sn”,ss,aa); } 程

序的运行结果是

A.accxyy,bbxxyy

B.acc,bbxxyy

C.accxxyy,bbxxyy

D.accbbxxyy,bbxxyy

正确答案:D

解析:本题中fun函数实现了字符串函数strcat的功能,将字符串aa连接到

字符串ss的末尾。调用fun函数时,形参t和s分别指向了字符串ss和aa,然

后通过一个while循环使t指向字符串ss的结束符的位置,第二个while循环将

字符串aa中的字符(包括结束符“0”)逐个复制到字符串ss的末尾处。

填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。注

意:以命令关键字填空的必须拼写完整。

41. 在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关

系,并且每一个______实际上对应一个处理模块。

正确答案:加工

解析:数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的

移动变换过程。其中的每一个加工对应一个处理模块。

42. 结构化程序设计的3种基本结构分别是顺序、选择和______。

正确答案:重复或循环

解析:结构化程序设计包括3种基本的结构:顺序结构、选择结构和重复结

构(循环结构),利用这 3种结构就足以表达出其他各种形式结构的程序设计方

法。利用循环结构,可以简化大量的程序执行。

43. 二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构

必须是

正确答案:顺序存储(顺序方式存储)

解析:二分法查找对表的要求是有序的顺序表,即第一要求是数据元素有序,

第二要求是按顺序方式存储。

44. 一个模块直接调用的其他模块的模块个数称为______。

正确答案:扇出

解析:在结构图中,调用一个给定模块的模块个数称为扇入,一个模块直接

调用的其他模块个数称为扇出。

45. 数据库系统中实现各种数据管理功能的核心软件是______。

正确答案:数据库管理系统

解析:数据库管理系统是数据库的管理机构,它是一种系统软件,负责数据

库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。

46. x、y、x均为int型变量,描述“x、y和z中至少有两个为正数”的表

达式是______。

正确答案:((x>0)&&(y>0))‖(x>0)&&(z>0)‖(y>0)&&(z>0))

解析:题目要求“x、y和z中至少有两个为正数”,即x、y和z这3个数

中必须有两个是正数,且这3个数中的哪两个数都有可能是正数,所以它们之间

是或的关系。

47. 与表达式a+=b等价的另一书写形式是______。

正确答案:a=a+b

解析:a+=b与a=a+b等价,作用是把变量a的值加b后再赋给变量a。

48. 下列程序的输出结果是______。 #include<stdio.h> main0

{intx=1,y=1,a=1,b=1; switch(x) {case1: switch(y) {case 0:a++;break;

case 1:b++;break; } case2: a++;b++;break; } printf(“a=%d,b

=%dn”,a,B); }

正确答案:a=2,b=3

解析:分析程序,程序从x=l语句开始执行,之后执行第一个switch语句,

switch(x)=switch(1),所以执行case1,casel语句中包含一个复合switch语句;这

时执行第二个switch语句,此时y=1,所以switch(y)= switch(1),因此执行case1,

将b加1,得到b=2,遇到break语句,退出第二个switch语句,则整个case 1

的复合语句执行完毕,由于在这个case 1的后面没有break语句使其退出第一个

switch语句,所以接着执行下列的case 2后面的语句,即将a、b各加1,得到a

=2,b=3。

49. C语言用于结构化程序设计的3种基本结构是______、选择结构和循

环结构。

正确答案:顺序结构

解析:结构化程序有3种基本结构,即顺序结构、选择结构(包括if语句和

switch语句)和循环结构(包括for语句、while语句、do…while语句)。

50. 下列循环的循环次数是______。 ihtk=2; while(k=0)

printf(“%d”,k); k--; printf(“n”);

正确答案:0

解析:解答本题需要注意表达式“k=0”,它是赋值表达式而不是关系表达

式,不论k为何值,表达式 k=0总会使k为0,所以不能进入循环。

51. 若有定义floatb[15],*p=b;,且数组b的首地址为200H,则p/13所指

向的数组元素的地址为______。

正确答案:252H

解析:要解答本题,首先要明白在对指针进行加、减运算时,数字”1”不是

十进制数的”1”,而是指”1”个存储单元长度。1个存储单元长度占存储空间的多

少,应该视具体情况而定,如果存储单元的基类型是int型,则移动1个存储单

元的长度就是位移2个字节;如果存储单元基类型是float型,则移动1个存储

单元的长度就是位移4个字节。所以旷13所指向的数组元素的地址为:

200H+(13*4)H=252H。

52. “printf(“%dn”,strlen(“t”‘023xABCn”));”语句的输出结果是______。

正确答案:6

解析:strlen( )函数的作用是计算字符串的长度并作为函数的返回值,这

里的长度不包括串尾的结束标志’0’。 ‘t’是转义字符,代表横向跳若干格:’’”

是转义字符,代表双引号:’023’只代表一个字符,而不管转义字符后面有几个

字符;’xAB’是以两位十六进制数AB表示的ASCII码字符,只代表一个字符;’n’

是转义字符,代表回车换行。 5个字符常量各代表一个字符,再加上字母C,

所以返回的长度是6。

53. 设有下列宏定义:#define A2 #define B A+3 则执行赋值语句:

t=b*2;t为血型变量后的值是______。

正确答案:8

解析:本题考查带参数的宏定义及相关运算。运算过程为:t=-B*2=A+3*2

=2+3*2=8。

54. 下列程序的功能是将字符串s中所有的字符c删除。请填空。 #include

<stdio.h> main( ) {char s[80]; int i,j; gets(S); for(i=

j0;s[i]!’0’;i++) if(s[i]!=’c’)______; s[j]=’0; puts(S); }

正确答案:s[j++]=s[i]

解析:循环开始后如果数组s中储存值与字符c相同,则i++直接跳过当前

值;如果不相同,则将当前值赋予数组指定位置,并通过.j++将下标加1,指

向下一元素要存储的位置。

55. 下列程序的运行结果是______。 #include<stdio.h> func(a,B)

{static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } main0

{intk=5,m=3,p; p=func(k,m); printf(“%d”,p); p=func(k,m);

printf(“%dn”,p); }

正确答案:11 23

解析:在主函数中第一次调用func子函数时,m=0,i=2,i=i+m+1=3,m=

i+a+b=3+5+3=11。因为在子函数中将m和i定义成了static类型,所以在子函

数中对m和i进行的改变,在下一次调用子函数时能进行保存,所以第二次调用

子函数时,m=11,i==3,则i=i+m+1=15,m=i+a+b=15+5+3=23。


本文标签: 解析 数据 函数 语句 数组