易妖游戏网
您的当前位置:首页全国计算机二级C语言模拟测试【含详细解析】 (19)

全国计算机二级C语言模拟测试【含详细解析】 (19)

来源:易妖游戏网


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

A. 快速排序法适用于顺序存储的线性表

B. 快速排序适用于链式存储的线性表

C. 链式存储的线性表不可能排序

D. 堆排序适用于非线性结构

正确答案:A你的答案:

解析:【解析】排序可以在不同的存储结构上实现,但快速排序法适用于顺序存储的线性表,不适用于链式存储的线性表。堆排序适用于线性结构,不适用于非线性结构。故本题选择A选项。

2.循环队列的存储空间为Q(1:50)。经过一系列正常的入队与退队操作后,front=rear=25。后又成功地将一个元素入队,此时队列中的元素个数为( )。

A. 50

B. 1

C. 26

D. 2

正确答案:B你的答案:

解析:【解析】当front=rear=25时可知队列要么为空要么队列满,题目中又成功地将一个元素入队,说明之前队列为空(为满时队列中无法入队元素),为空的队列入队一个元素后队列中元素个数为1。故本题选择B选项。

3.树的度为3,且有9个度为3的结点,5个度为1的结点,但没有度为2的结点。则该树总的结点数为( )。

A. 32

B. 14

C. 33

D. 19

正确答案:C你的答案:

解析:【解析】在树中,树中的节点数等于树中所有节点的度之和再加1。题干中树的度为3,有9个度为3的结点,5个度为1的结点,无度为2的结点,设有n个度为0的结点,则总结点数=9×3+5×1+0×2+n×0+1=33个。故本题选择C选项。

4.设栈与队列初始状态为空。首先A,B,C,D,E依次入栈,再F,G,H,I,J依次入队;然后依次出栈至栈空,再依次出队至队空。则输出序列为( )。

A. F,G,H,I,J,A,B,C,D,E

B. F,G,H,I,J,E,D,C,B,A

C. E,D,C,B,A,J,I,H,G,F

D. E,D,C,B,A,F,G,H,I,J

正确答案:D你的答案:

解析:【解析】栈称为“后进先出”表或“先进后出”的线性表;队列称为“先进先出”或“后进后出”的线性表。A,B,C,D,E依次入栈,则依次出栈顺序为E,D,C,B,A;F,G,H,I,J依次入队,则依次出队顺序为F,G,H,I,J。故输出顺序为E,D,C,B,A,F,G,H,I,J。故本题选择D选项。

5.属于结构化程序设计原则的是( )。

A. 模块化

B. 可继承性

C. 可封装性

D. 多态性

正确答案:A你的答案:

解析:【解析】结构化程序设计方法的原则包括:自顶向下、逐步求精、模块化、使用goto语句。B、C、D三项属于面向对象方法的特点。故本题选择A选项。

6.确定软件项目是否进行开发的文档是( )。

A. 需求分析规格说明书

B. 可行性报告

C. 软件开发计划

D. 测试报告

正确答案:B你的答案:

解析:【解析】可行性报告产生于软件定义阶段,用于确定软件项目是否进行开发。故本题选择B选项。

7.基本路径测试是属于( )。

A. 黑盒测试方法且是静态测试

B. 黑盒测试方法且是动态测试

C. 白盒测试方法且是动态测试

D. 白盒测试方法且是静态测试

正确答案:C你的答案:

解析:【解析】白盒测试法主要有逻辑覆盖、基本路径测试等。黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。基本路径测试根据软件过程性描述中的控制流确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条执行路径进行测试。因此基本路径测试属于动态测试。故本题选择C选项。

8.关系数据库中的键是指( )。

A. 关系的所有属性

B. 关系的名称

C. 关系的专用保留字

D. 能唯一标识元组的属性或属性集合

正确答案:D你的答案:

解析:【解析】在关系(二维表)中凡是能唯一标识元组的最小属性集称为该关系的键或者码。故本题选择D选项。

9.商品销售的售货单和商品之间的联系是( )。

A. 多对多

B. 一对多

C. 多对一

D. 一对一

正确答案:A你的答案:

解析:【解析】一张售货单可以有多种商品的记录,一种商品也可以出现在多张售货单上。因此售货单和商品之间的联系是多对多。故本题选择A选项。

10..定义学生选修课程的关系模式如下:

SC (S#, Sn, C#, Cn, G,Cr)(其属性分别为学号、姓名、课程号、课程名、成绩、学分)

则对主属性部分依赖的是( )。

A. (S#,C#)→G

B. S#→Sn

C. (S#,C#)→S#

D. (S#,C#)→C#

正确答案:B你的答案:

解析:【解析】关系SC中的主键是(S#,C#),但S#(学号)单独就可以决定Sn(姓名),存在着对主属性的部分依赖。故本题选择B选项。

11.下面说法正确的是( )。

A. 结构化程序的基本结构有三种,分别是循环结构、选择结构和顺序结构

B. 计算机只能执行顺序结构的C语言源程序

C. 循环结构无法使用N-S流程图描述

D. 一般称含有20条以内语句的算法为简单算法,超过20条则不可能是简单算法

正确答案:A你的答案:

解析:【解析】结构化程序的基本结构为循环结构、选择结构和顺序结构,选项A正确;计算机可以执行循环结构、选择结构和顺序结构的C语言程序,选项B错误;循环结构可以使用N-S流程图描述,选项C错误;算法复杂度是指算法在编写成可执行程序后,运行时所需要的时间资源和内存资源,并不是指算法语句的多少,选项D错误;本题答案为A。

12.下面说法正确的是( )。

A. 只要程序使用基本结构编写,运行时就不会出错

B. MAIN()函数是每一个C语言程序必须定义的

C. 任何函数只能有一种基本结构

D. 任何复杂问题都可以只使用三种基本结构来解决

正确答案:D你的答案:

解析:【解析】程序错误分为语法错误和逻辑错误,使用基本结构编写的程序不能保证其没有语法或逻辑错误,选项A错误;是main()不是MAIN(),选项B错误;函数可以有多种基本结构,选项C错误;根据结构化编程的思想,三种基本结构组成的算法可以解决任何问题,选项D正确;本题答案为D。

13.以下选项中,合法的C语言常量是( )。

A. C++'

B. 1.0

C. \"\\0.\\0

D. 2B

正确答案:B你的答案:

解析:【解析】在C语言中,字符型常量必须用单引号括起来且字符型常量只能为一个字符;字符串常量必须双引号括起来;整型常量可以用十进制、八进制和十六进制形式表示,八进制以数字0开头,十六进制以0x(0X)开头;小数为浮点型常量,故选项A、C、D错误,选型B正确;本题答案为B。

14.以下选项中,合法的C语言实数是( )。

A. .9E0

B. E22

C. 0.41E

D. .8e0.01

正确答案:A你的答案:

解析:【解析】C语言实数表示法实型常数的用法E(也可以用e)之前必须有数字,e或E后面的指数必须为整数,选项B、C、D错误,选项A正确;本题答案为A。

15.设a,b,c是整型变量,以下选项中的赋值表达式错误的是( )。

A. a = 1 = (b = 1) = 1

B. a = (b = 0) * (c + 0)

C. a = b = c * 0

D. a = 1 % (b = c == 9) + 46

正确答案:A你的答案:

解析:【解析】=为赋值运算符,其左侧应该为一个可以被修改的值,其左值可为变量,但是算术表达式与常量不可做其左值,右值无特殊要求,选项B、C、D正确,选项A错误;本题答案为A。

16.有如下程序

#include

main()

{

char *msg = \"Hello\";

int x = 012;

printf(\"%s,X=%d.\\n\

}

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

A. Hello,X=11.

B. He,X=13.

C. HelX=121.

D. Hello,X=013.

正确答案:A你的答案:

解析:【解析】给变量x赋初值为012,0开头表示改值为八进制数值,%d是按照十进制整数形式输出,所以应将八进制数值转化为十进制数值在进行计算输出,012转化为十进制形式为10,打印x+1=11,因此选项B、C、D错误,选项A正确;本题答案为A。

17.对于 if(表达式) 语句,以下说法正确的是( )。

A. “表达式”的值只能是整数值

B. 在“表达式”中不能调用返回整数的函数

C. 在“表达式”中不能含有函数调用

D. “表达式”可以是算术表达式

正确答案:D你的答案:

解析:【解析】C语言规定,if(表达式)语句中的“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式,允许函数调用,但调用函数的返回值必须符合要求,因此选项A、B、C错误,选项D正确;本题答案为D。

18.有如下程序

#include

main()

{

int a = 0, b = 4;

if (a++)

{

if (b++) printf(\"T\");

}

else

printf(\"F\");

printf(\":a=%d,b=%d\\n\

}

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

A. F:a=1,b=4

B. F:a=0,b=4

C. T:a=1,b=5

D. T:a=0,b=5

正确答案:A你的答案:

解析:【解析】C语言中0为假,非0即为真,第一个if语句中a++为先使用a后其自增1,所以此时a++值为0,即为假,执行else语句,b的值未改变,最后输出a、b,a自增后应为1,b不变应为4,选项B、C、D错误,选项A正确;本题答案为A。

19.有如下程序

#include

main()

{

int i, data;

scanf(\"%d\

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

{

if (data % i)

printf(\"%d-\

else

continue;

}

}

程序运行时,从键盘输入:10<回车>后,程序输出结果为(。 )

A. 2-5-

B. 2-3-4-5-

C. 0-1-

D. 3-4-

正确答案:D你的答案:

解析:【解析】%为取余运算符,结果为余数,continue为结束本次循环,不影响之后的循环,从键盘输入10,i=2,10%2为0即为假,执行else语句,跳出本次循环,继续向下执行循环;i=3,10%3为1,为真,执行if语句,输出3-,继续执行;i=4时,10%4为真,输出4-,继续循环;i=5时,10%5=0条件为假,循环结束。输出结果为3-4-,选项A、B、C错误,选项D正确;本题答案为D。

20.有如下程序

#include

main()

{

int i, data;

scanf(\"%d\

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

{

if (i > data)

break;

else

printf(\"%d,\

}

}

程序运行时,从键盘输入:10<回车>后,程序输出结果为(A. 0,1,2,3,4,5,6,7,8,9,

B. 0,

C. 1,3,5,7,9,

。 )

D. 0,2,4,6,8,

正确答案:A你的答案:

解析:【解析】break为跳出循环操作,当从键盘输入10时,利用循环将i从0依次增加到10,并与10进行比较,若i>10为假则输出i,若为真则结束循环,输出结果为0,1,2,3,4,5,6,7,8,9,选项B、C、D错误,选项A正确;本题答案为A。

21. 有如下程序

#include

main()

{

if ('\\0' == 0) printf(\"<1>OK\");

if ('0' == 0) printf(\"<2>OK\");

if ('z' > 'A') printf(\"<3>OK\");

}

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

A. <1>OK<3>OK

B. <1>OK

C. <2>OK

D. <2>OK<3>OK

正确答案:A你的答案:

解析:【解析】根据ASCII码表,字符'\\0'表示一个字符串结束的标志,ASCII码为0,字符‘0’对应的ASCII码为48,字符‘z’对应的ASCII码为122,字符‘A’对应的ASCII码为65,通过if条件判断可知,因此选项B、C、D错误,选项A正确;本题答案为A。

22.有如下程序

#include

main()

{

int i;

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

putchar('A' + i*2);

}

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

A. A012

B. ABC

C. ACE

D. AA

正确答案:C你的答案:

解析:【解析】根据ASCII码表,字符‘A’对应的ASCII码为65,putchar()函数功能为将字符输出到输出设备,当i=0时,字符‘A’不变,输出,当i=1、2时,字符A转化为对应的ASCII码与i进行计算并将该结果转化为对应的字符,即为C、E,所以输出结果为ACE,选项A、B、D错误,选项C正确;本题答案为C。

23.有如下程序

#include

int mul_mod(int a, int b, int c)

{

return (a * b) % c;

}

main()

{

int i;

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

printf(\"%d\

}

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

A. 11111

B. 12345

C. 01234

D. 00000

正确答案:D你的答案:

解析:【解析】mul_mod()函数的功能为将传入的a、b、c三个参数, a*b然后对c取余,利用循环将(0,14,2)(1,14,2)(2,14,2)(3,14,2)(4,14,2)5对参数分别传入函数进行计算,结果都为0,选项A、B、C错误,选项D正确;本题答案为D。

24.有如下程序

#include

int test(int *data)

{

return --(*data);

}

main()

{

int data = 12;

test(&data);

printf(\"%d,\

data = test(&data);

printf(\"%d,\

}

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

A. 11,10,

B. 12,11,

C. 11,12,

D. 12,12,

正确答案:A你的答案:

解析:【解析】--为自减运算符,--i未在使用i之前对i的值进行减1操作,将data的地址传入test()函数,返回值为该值减1,第二次继续调用该函数将data再次传入,所以两次的输出结果为11,10,选项B、C、D错误,选项A正确;本题答案为A。

25.有如下程序

#include

void change(int array[], int len)

{

for (; len>=0; len--)

array[len] *= 2;

}

main()

{

int array[5] = {2,3};

change(array, 4);

printf(\"%d\

}

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

A. 3

B. 5

C. 6

D. 2

正确答案:C你的答案:

解析:【解析】将数组array[]和4传入change()函数,该函数类型为void,即为没有返回值,意在对数组里的元素进行加倍的操作,因为数组中元素array[0]=2、array[1]=3其他元素系统自动为其赋值为0,所以在循环调用结束后array[0]=4、array[1]=6,选项A、B、D错误,选项C正确;本题答案为C。

26.下面的说法正确的是( )。

A. char x, *y, **str; 同时定义了三个变量,是合法的语句

B. 数组说明符的一对方括号中只能使用整数常量

C. 单精度值可以作为数组下标

D. 若有定义 float arr[2]; 则 printf(\"%f\是合法的语句

正确答案:A你的答案:

解析:【解析】C语言中几个变量可以同时定义,选项A正确;数组说明符的一对方括号中可以使用整型常量和整型符号常量两种常量表达式,选项B、C、D错误;本题答案为A。

27.对于函数声明

void fun(int a[1], int *b);

以下叙述中正确的是( )。

A. 函数参数 a, b 都是指针变量

B. 声明有语法错误,参数 a 的数组大小必须大于1

C. 调用该函数时,形参a仅复制实参数组中第一个元素

D. 调用该函数时,a的值是对应实参数组的内容,b的值是对应实参的地址

正确答案:A你的答案:

解析:【解析】将数组作为参数传递时,传递的是该数组中首元素的内存地址,所以该函数声明中的int a[1],这里的a退化为指针变量,b也为指针变量,选项A正确;该声明无语法错误,选项B错误;C选项中,调用该函数时,形参a接受的是实参传入的地址,不是数组的第几个元素,选项C错误;调用该函数时,a、b的值对应的实参是地址,选项

D错误;本题答案为A。

28.设有如下程序段

int a[2] = {0};

int b[] = {0, 0, 1};

char c[] = {\"A\

char d = \"\\0\";

以下叙述中正确的是( )。

A. a、b的定义合法,c、d的定义不合法

B. 所有定义都是合法的

C. 只有d的定义不合法,其余定义均合法

D. 只有a的定义合法,其余定义均不合法

正确答案:C你的答案:

解析:【解析】一维数组可以只为其中部分元素赋初值,其他元素系统会为其赋初值0,所以a定义合法;数组在定义时可以不指定数组长度,所以b、c定义合法;d为字符变量,

应用单引号引起来,d不合法;本题答案为C。

29.以下涉及字符串数组、字符指针的程序段,没有编译错误的是( )。

A. char *str, name[3]; str = \"name\";

B. char *str, name[5]; name = \"name\";

C. char str1[7] = \"prog.c\\0\

D. char line[10]; line = \"/****/\";

正确答案:A 你的答案:

解析:【解析】先定义指针变量str,name字符数组,然后给字符串数组赋初值,选项A正确;因为name为数组名是常量不能给常量赋值,选项B错误;C选项中str1和str2都是字符数组名,为常量,不能相互赋值,选项C错误;D选项中,line也是字符数组名为常量,不能为其赋值,选项D错误;本题答案为A。

30.有如下程序

#include

#include

main()

{

int len = strlen(\"\\0\123456\");

printf(\"%d\

}

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

A. 1

B. 0

C. 8

D. 10

正确答案:B你的答案:

解析:【解析】strlen()函数用来计算字符串的长度,‘\\0’为字符串结束的标志,当调用strlen()函数计算\\0\123456时,因为第一个字符为‘\\0’,计算就结束了,所以输出该字符串的长度为0,选项A、C、D错误,选项B正确;本题答案为B。

31.有如下程序

#include

void convert(int d)

{

if (d < 10)

{

printf(\"%d\

convert(d+1);

}

}

main()

{

convert(6);

}

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

A. 1234

B. 6666

C. 79

D. 67

正确答案:D你的答案:

解析:【解析】convert()函数的功能为将传进来的参数通过递归调用(在自身函数中调用自身)依次加1输出直到其大于或等于10,传入参数6,输出67,选项A、B、C错误,选项D正确;本题答案为D。

32.有如下程序

#include

#include

main()

{

char a[4] = \"23\

printf(\"%d\\n\

}

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

A. 17

B. 15

C. 12

D. 18

正确答案:C你的答案:

解析:【解析】strlen()函数的功能为计算字符串的长度,sizeof()函数的功能为返回一个对象或者类型所占的内存字节数,一个字符型数据所占用的内存字节数为1,字符串占用的内存字节数为字符串字符数乘以字符型所占用的内存字节。因为字符串数组a[]中只有一个字符串\"23\",strlen(a)的值为2; sizeof(a)的值为4;‘\\0’为转义字符为字符串的结束标志,不计入字符串长度,但是会计入内存字节数。语句“*b = \"10\\0\"”,赋值时系统在字符串结尾处自动加上’\\0’,所以strlen(b)的值为2;sizeof(b)的值为4;选项A、B、D错误,选项C正确;本题答案为C。

33.有如下程序

#include

void get_put()

{

char ch;

ch = getchar();

if (ch != '\\n') get_put();

if (ch != '\\n') putchar(ch);

}

main()

{

get_put();

}

程序运行时,输入AB<回车>,则输出结果是( )。

A. BA

B. BB

C. A

D. ABAB

正确答案:A 你的答案:

解析:【解析】【解析】main()函数调用get_put()函数,get_put()是递归函数,每次使用getchar()读入一个字符存放到ch中,若ch不是字符’\\n’,递归调用自身,然后调用putchar()函数输出该字符。当输入AB\\n(<回车>)时,直到读入的字符是’\\n’,输出回车符,然后回到上一层递归,逆序输出各个字符,输出结果为:<回车>BA,所以本题答案为A。

34.有如下程序

#include

int sum(int data)

{

static int S = 0;

S = S + data;

return S;

}

main()

{

int i;

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

printf(\"%d,\

}

程序运行后的输出结果是(A. 1,3,6,

B. 0,1,2,

C. 1,2,3,

D. 1,3,5,

正确答案:A 你的答案:

解析:【解析】函数中,用static来声明变量,为静态局部变量,静态局部变量在内存的静态存储区中占据着永久性存储单元,退出函数时,变量不会消失,下一次调用时,值仍然存在。利用循环将1,2,3三个参数依次传入sum()函数,当1传入时计算得出S=1,因为S用static声明,所以其值不会消失,下次函数调用时此值仍为1;当下次调用时,2传入,S=1+2=3;当3被传入是,s=3+3=6,选项B、C、D错误,选项A正确;本题答案为A。

35.下面关于编译预处理命令,正确的是( )。

A. #define char CHAR

B. #Define E 0.0000034

C. ##define FALSE 0

D. #define DIM 26

正确答案:D你的答案:

解析:【解析】无参宏定义的一般格式:#define 标识符 语言符号字符串,其中:“define”

为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串(格式串是用双引号括起来的字符串)等,选项A、B、C错误,选项D正确;本题答案为D。

36.设有以下程序段

struct student

{

float w;

char g;

char nm[10];

} rec, *ptr;

ptr = &rec;

若要输出结构体变量rec的nm成员,以下选项中写法错误的是(A. printf(\"%s\

B. printf(\"%s\

C. printf(\"%s\

D. printf(\"%s\

正确答案:A你的答案:

解析:【解析】引用成员可用以下3种方式:结构体变量名.成员名;指针变量名->成员名;(指针变量名).成员名。“.”称为成员运算符,“->”称为结构指向运算符。选项B、C、D错误,选项A正确;本题答案为A

37.有如下程序

#include

struct book

{

char name[10];

float price;

};

main()

{

struct book prog[2] = {{\"c++\

printf(\"%s:%5.2f\\n\

}

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

A. java:36.00

B. c++:36.0

C. java:23:59

D. c++:23.6

正确答案:A你的答案:

解析:【解析】 “->”为结构指向运算符,以指针形式访问结构体成员,proj为结构体数组的第一个元素,prog+1为访问结构体数组中的第二个元素,因此访问的成员为java,36.0,将36.0以5.2f格式输出,即为36.00,选项B、C、D错误,选项A正确;本题答案为A。

38.有如下程序

#include

#include

struct S

{

char name[10];

};

main()

{

struct S s1, s2;

strcpy(s1.name, \"1\\0\");

strcpy(s2.name, \"ABC\");

s1 = s2;

printf(\"%s\

}

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

A. 1ABC

B. ABC

C. 1ABC\\0

D. A

正确答案:B你的答案:

解析:【解析】strcpy()为字符串复制函数,两次调用strcpy()函数将字符串\"1\\0\"、\"ABC\"分别复制到结构体数组s1.name、s2.name中,然后又把结构体s2赋给s1,最后输出s1.name数组,此时s1.name数组中的元素应为ABC,选项A、C、D错误,选项B正确;本题答案为B。

39.有如下程序

#include

main()

{

int a = 16, b;

b = (a >> 4) % 1;

printf(\"%d,%d\\n\

}

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

A. 16,1

B. 17,1

C. 16,0

D. 17,0

正确答案:C你的答案:

解析:【解析】>>代表右移运算符,把一个整型数的所有位向右移动指定的位数,移动到右边界之外的多余二进制位会被丢弃,16的二进制表示为00010000,向右移动4位为00000001,十进制为1,1%1为0,所以b=0,选项A、B、D错误,选项C正确;本题答案为C。

40.下面说法正确的是( )。

A. 文件指针变量的值是文件当前正在处理的字节地址

B. 文件指针变量的值是文件中包含的字符个数

C. 文件指针的类型是一种指针类型

D. 文件指针的类型是结构体类型

正确答案:C你的答案:

解析:【解析】文件指针变量的值是文件所在的地址,选项A、B错误;文件指针也是一种指针,属于指针类型。不是结构体类型,选项C正确,D错误;本题答案为C。

因篇幅问题不能全部显示,请点此查看更多更全内容