admin 管理员组

文章数量: 1086019


2024年4月22日发(作者:安装win2012r2教程)

全国计算机等级考试《二级C语言程序设计》模拟试卷三

[单选题]1.下列叙述中正确的是()。

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

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

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

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

参考答案:B

参考解析:采用不同的存储结构,数据处理效率是不同的,A项错误;算法的时

间复杂度是指算法在计算机内执行时所需时间的度量,空间复杂度是指算法在

计算机内执行时所需存储空间的度量,二者不一定相关,B项正确,D项错误;

数据的逻辑结构在计算机存储空间的存放形式称为数据的存储结构,二者并非

一一对应,C项错误。答案选择B选项。

[单选题]2.栈和队列的共同点是()。

A.都是先进后出

B.都是先进先出

C.只允许在端点处插入和删除元素

D.没有共同点

参考答案:C

参考解析:栈和队列都是操作受限的线性表,只允许在端点处进行插入和删

除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进

先出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除

操作,是一种“先进先出”的线性表。答案选择C选项。

[单选题]3.对于现实世界中事物的特征,在实体-联系模型中使用()。

A.属性描述

B.关键字描述

C.二维表格描述

D.实体描述

参考答案:A

参考解析:在实体-联系模型中,用属性来描述现实世界中事物的特征。答案选

择A选项。

[单选题]4.下列关于队列的叙述中正确的是()。

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

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

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

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

参考答案:C

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

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

删除的一端称为队首(front)。队列是按“先进先出”的原则组织数据的。答

案选择C选项。

[单选题]5.下列选项中属于面向对象设计方法主要特征的是()。

A.继承

B.自顶向下

C.模块化

D.逐步求精

参考答案:A

参考解析:面向对象设计方法的主要特征有封装性、继承性和多态性。而结构

化程序设计方法的主要原则有自顶向下、逐步求精、模块化、限制使用goto语

句。BCD三项是结构化程序的主要特征。答案选择A选项。

[单选题]6.关系表中的每一横行称为一个()。

A.元组

B.字段

C.属性

D.码

参考答案:A

参考解析:关系表中的每一行称为一个元组。每一列称为一个字段,又称一个

属性。惟一标识元组的最小属性值称为该表的键或码。答案选择A选项。

[单选题]7.下面对软件测试和软件调试叙述错误的是()。

A.严格执行测试计划,排除测试的随意性

B.软件调试的目的是改正软件错误

C.软件测试不需考虑测试成本

D.正确的执行测试用例

参考答案:C

参考解析:软件测试定义:使用人工或自动手段来运行或测定某个系统的过

程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间

的差别。软件测试的目的:发现程序中的错误。测试必须对整个软件总体进行

评估。软件测试需要考虑测试成本,软件测试成本也要计入软件开发成本中

去。答案选择C选项。

[单选题]8.在数据库中,数据模型包括数据结构、数据操作和()。

A.数据约束

B.数据类型

C.关系运算

D.查询

参考答案:A

参考解析:在数据库系统中的数据模型有三个要素:数据结构、数据操作和数

据的约束条件。答案选择A选项。

[单选题]9.负责数据库中查询操作的数据库语言是()。

A.数据定义语言

B.数据管理语言

C.数据操纵语言

D.数据控制语言

参考答案:C

参考解析:数据库语言包括:①数据定义语言,负责数据的模式定义与数据的

物理存取构建;②数据操纵语言,负责数据的操纵,包括增删改查等操作;③

数据控制语言,负责数据完整性、安全性的定义与检查以及并发控制、故障恢

复等功能。答案选择C选项。

[单选题]10.一般情况下,当对关系R和S进行自然连接时,要求R和S含有一

个或者多个共有的()。

A.记录

B.行

C.属性

D.元组

参考答案:C

参考解析:进行自然连接时要求两个关系具有相同列,即属性。答案选择C选

项。

[单选题]11.以下叙述正确的是()。

A.计算机只接收由0和1代码组成的二进制指令或数据

B.计算机只接收由0和1代码组成的十进制指令或数据

C.计算机可直接接收并运行C源程序

D.计算机可直接接收并运行任意高级语言编写的源程序

参考答案:A

参考解析:二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器

件。例如,电路中有无电流,有电流用1表示,无电流用0表示。类似的还比

如电路中电压的高低,晶体管的导通和截止等;二进制数运算简单,大大简化

了计算中运算部件的结构,故选项A正确、B错误。计算机能直接执行的只有机

器语言程序。选项C、D错误。答案选择A选项。

[单选题]12.下列叙述中错误的是()。

A.一个C语言程序只能实现一种算法

B.C程序可以由多个程序文件组成

C.C程序可以由一个或多个函数组成

D.一个C函数可以单独作为一个C程序文件存在

参考答案:A

参考解析:一个C程序可以有一个或多个程序文件,也可以有一个或多个函

数,所以一个C语言程序可以实现多种算法,答案选择A选项。

[单选题]13.以下合法的转义字符是()。

A.'x41'

B.'0x41'

C.'X41'

D.'0X41'

参考答案:A

参考解析:转义字符以反斜杠''开头,后面跟一个字符或一个八进制或十六进

制数表示。十六进制转义字符是由反斜杠''和字母x及随后的1~2个十六进

制数字构成的字符序列。答案选择A选项。

[单选题]14.表达式a+=a-=a=9的值是()。

A.0

B.-9

C.18

D.9

参考答案:A

参考解析:a+=a-=a=9计算顺序为a+=(a-=(a=9)),首先a=9,a-=9,即a=a-

9=9-9=0;最后a+=0,即a=a+0=0+0=0。答案选择A选项。

[单选题]15.以下选项中,当x为大于1的奇数时,值为0的表达式是()。

A.x%2==0

B.x/2

C.x%2!=0

D.x%2==1

参考答案:A

参考解析:当x为大于1的奇数,x%2==1,则表达式x%2==0为假(即值为

0),答案选择A选项。

[单选题]16.若有定义语句:

int x=12,y=8,z;

在其后执行语句:

z=0.9+x/y;

则z的值为()。

A.1

B.1.9

C.2

D.2.4

参考答案:A

参考解析:由于x,y,z都是整型数据,所以x除以y的值为整型数值1,之后

1和0.9相加得到1.9,再转换为整型数1赋给整型变量z。答案选择A选项。

[单选题]17.有以下程序段

int m=33,n=66;

m=m^n; n=n^m; m=m^n;

执行上述语句后,m和n的值分别是()。

A.m=66,n=33

B.m=33,n=66

C.m=66,n=66

D.m=33,n=33

参考答案:A

参考解析:^为按位异或运算,是双目运算符,参与运算的两个二进制位相同,

则结果的该位为0;参与运算的两个二进制位不同,则结果的该位为1。首先将

m和n表示成对应的二进制,33 = 00100001B,66 = 01000010B,执行m=m^n,

得m = 00100001 ^ 01000010 = 01100011B;执行 n=n^m,得n = 01000010 ^

01100011 = 00100001B = 33;执行 m=m^n,得m = 01100011 ^ 00100001 =

01000010B = 66;因此语句实现了m和n的交换。答案选择A选项。

[单选题]18.设有定义:double x=2.12;,以下不能完整输出变量x值的语句

是()。

("x=%5.0fn",x);

("x=%fn",x);

("x=%lfn",x);

("x=%0.5fn",x);

参考答案:A

参考解析:printf函数控制字符%f输出float类型,%lf输出double类型。格

式控制%,表示数据输出总的宽度为m位,其中小数部分占n位。当数据的

小数位多于指定宽度n时,截去右边多余的小数,并对截去的第一位小数做四

舍五入处理;而当数据的小数位少于指定宽度n时,在小数的右边补零;当m

小于有效位数时,整数部分输出所有有效数字并且自动对齐,小数部分按照n

指定位数输出。A项按照float格式输出数据,宽度为5位,保留小数0位,输

出为2,不能完整输出x。B项按照float格式输出数据,输出为2.120000。C

项按照double格式输出数据,输出为2.120000。D项按照float格式输出数

据,保留小数位数为5,输出为2.12000。答案选择A选项。

[单选题]19.有以下程序

#include

main()

{

int x=1, y=0;

if (!x) y++;

else if (x==0)

if (x) y+=2;

else y+=3;

printf("%dn", y);

}

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

A.0

B.2

C.1

D.3

参考答案:A

参考解析:在该题中,选择结构的表达式都不成立,所以整个选择语句都没有

执行,y值没有发生改变,答案选择A选项。

[单选题]20.有以下程序

#include

main()

{

int a,b;

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

{

scanf("%d", &b);

switch(b)

{

default: printf("%d,", ++b);

case 1: printf("%d,", ++b);

case 2: printf("%d,", ++b);

}

}

}

执行时输入:1 2 3 <回车>,则输出结果是()。

A.2,3,3,4,5,6,

B.2,3,4,

C.2,2,3,4,4,4,

D.2,3,4,3,4,4,

参考答案:A

参考解析:考查C语言中的switch-case语句。执行switch-case语句时,一

定会先进行匹配,匹配成功则执行当前case语句,再根据是否有break,判断

是否继续输出,或是跳出判断。程序中输入1时,与case 1匹配成功,执行后

面的输出语句,输出2,且此时b=2,因为后面没有break语句,继续执行下一

条输出语句,输出3。继续输入2时,与case 2匹配成功,执行后面的输出语

句,输出3。输入3时,没有可匹配的case语句,执行default语句,输出

4,b变为4;后面没有break语句,继续执行case 1后的输出语句,输出5,b

变为5;同理继续执行case2后面的输出语句,输出6。答案选择A选项。

[单选题]21.有以下程序

#include

main()

{

int a=-1, b=-1;

for(; ++a;)++b;

printf("%d,%dn", a, b);

}

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

A.0,-1

B.0,0

C.-1,-1

D.结果不确定

参考答案:A

参考解析:这是对for循环的基本考查,C语言中for循环的形式:for(表达式

1;表达式2;表达式3),本题中表达式1和表达式3为空语句。程序执行过程

为:定义整型变量a、b并赋初值,执行for循环,执行控制语句++a,a先自增

变为0再使用,不满足控制条件,跳出循环。因此b并未改变,最后输出0,-

1。答案选择A选项。

[单选题]22.有如下程序

#include

main()

{

int i = 1;

for (printf("%d",i); i<4; i++)

printf("%d",i);

printf("n");

}

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

A.0123

B.123

C.1123

D.001

参考答案:C

参考解析:for语句的一般形式为“for(表达式1;表达式2;表达式3){循环体

语句}”,其执行流程是先计算表达式1,之后计算表达式2,根据表达式2的

值来判定是否进行循环,若为真,则执行循环体,循环体执行完毕之后再计算

表达式3的值。整个循环过程中,表达式1只会执行一次,而表达式2、3以及

循环体每次循环都会执行,答案选择C选项。

[单选题]23.有以下程序

#include

main()

{

int i,array[6] = {1,5,0,4};

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

printf("%d,",array[i]&4);

printf("n");

}

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

A.0,4,0,4,0,

B.1,5,0,4,0,

C.1,5,5,4,0,

D.1,2,1,2,0

参考答案:A

参考解析:本函数的功能是将数组中所有元素与4进行与运算,首先将元素转

换为二进制,然后和二进制数100(十进制4)进行与运算,第一个元素为

001&100即为000。也就是0,同理可得答案分别为0、4、0、4、0,注意第五

位按照0进行运算。答案选择A选项。

[单选题]24.以下数组定义中错误的是()。

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

x[][3]={0};

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

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

参考答案:D

参考解析:A项正确,在给二维数组赋初值时可以不用行花括号对;B项正确,

对于二维数组,第一维的大小可以省略,计算规则是元素的个数除以第二维的

大小向上取整,定义1行3列的数组,里面的元素全部是零;C项正确,第一维

的大小由所赋初值的行数来决定,定义2行3列的数组;D项错误,应该是

x[3][2]。答案选择D选项。

[单选题]25.关于地址和指针,以下说法正确的是()。

A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量

B.可以取一个常数的地址赋值给同类型的指针变量

C.可以取一个表达式的地址赋值给同类型的指针变量

D.可以取一个指针变量的地址赋值给基类型相同的指针变量

参考答案:A

参考解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是

不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允

许这样做,编译会出错,B项错误;表达式的值存储在临时变量中,内存中存在

专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不

允许这样做,编译会出错,C项错误;可以取一个指针变量的地址,但是指针变

量的地址属于指针,只能赋值给指针类型的指针变量,D项错误。答案选择A选

项。

[单选题]26.对于函数声明

void fun(float array[], int *pdiv);

以下叙述正确的是()。

A.函数参数 array, pdiv 都是指针变量

B.函数声明有语法错误,参数 array 缺少数组大小定义

C.调用函数时,array数组中将存储从实参中复制来的元素值

D.调用函数时,array数组的元素和pdiv都是按值传送

参考答案:A

参考解析:考察函数声明的具体规则。当把数组名作为函数实参时,它会自动

被转换为指针,所以array和ptr都是指针,A项正确。用一维数组作为函数的

形参时,可以不指定数组具体大小,用二维数组作为函数的形参时,可以忽略

数组中一维的大小,但必须指定第二维的大小,B项错误。调用函数时,将实参

数组首地址赋给指针array,而不是传递整个数组元素,C项错误。调用函数

时,array与ptr都是按地址传送的,D项错误。答案选择A选项。

[单选题]27.下列定义数组的语句中,正确的是()。

x[];

N=10; int x[N];

x[0..10];

D.#define N 10

int x[N];

参考答案:D

参考解析:一维数组定义格式是:类型名

数组名[整型常量表达式]。D项正确,它使用预处理宏定义,N可以看做是常

量。A项错误,没有指明数组的长度;B项错误,数组长度不能由变量指明;C

项错误,数组长度应该整型常量表达式。答案选择D选项。

[单选题]28.有以下程序

#include

main()

{

int b[3][3] = {0,1,2,0,1,2,0,1,2},i,j,t = 1;

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

for(j = i;j <= i;j++)t+=b[i][b[j][i]];

printf("%dn",t);

}

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

A.4

B.3

C.1

D.9

参考答案:A

参考解析:本题中,两层for循环等价于t = t + b[0][b[0][0]] +

b[1][b[1][1]] + b[2][b[2][2]] = 1+ b[0][0] + b[1][1] + b[2][2] = 1+

0+ 1+ 2 = 4。答案选择A选项。

[单选题]29.若有定义:

char s[30] = {0};

运行时输入:

This is a sdiving.<回车>

则以下不能正确读入整个字符串:

This is a sdiving.

到字符数组 s 中的语句组是()。

("%s",s);

(s);

(i=0;(c=getchar())!= 'n';i++)s[i] = c;

D.i=0;while((c=getchar())!='n')s[i++] = c;

参考答案:A

参考解析:scanf函数用格式控制符%s读取字符串时,不能接受空格、制表符

Tab、回车。即在读入This is a string时,读到第一个空格时结束。最后s

中的内容是This。答案选择A选项。

[单选题]30.有以下程序:

#include

#define N 4

void fun(int a[][N])

{

int i;

for(i=0; i

a[0][i] += a[N-1][N-1-i];

}


本文标签: 数据 输出 答案 选择 解析