无纸化真考试题库第37套
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无纸化真考试题库第37套
1.算法的时间复杂度是指
A) 设计该算法所需的工作量
B) 执行该算法所需要的时间
C) 执行该算法时所需要的基本运算次数
D) 算法中指令的条数
参考答案:C
算法的时间复杂度是指执行算法所需要的计算工作量。
它与算法程序执行的具体时间并不一致,因为算法执行的具体时间受到所使用的计算机、程序设计语言以及算法实现过程中许多细节的影响。
算法的计算工作量是用算法所执行的基本运算次数来度量的。
故选C选项2.设循环队列存储空间为Q(1:50),初始状态为front=rear=50。
经过一系列入队和退队操作后,
front=rear=25,则该循环队列中元素个数为
A) 26
B) 25
C) 24
D) 0或50
参考答案:D
循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
循环队列长度为50,由初始状态为front=rear=50可知此时循环队列为空。
入队运算时,首先队尾指针rear进1(即rear+1),然后在队尾指针rear 指向的位置插入新元素。
特别的,当队尾指针rear=50+1时,置rear=1。
退队运算时,排头指针front进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=50+1时,置front=1。
若经过运算,front=rear可知队列空或者队列满,则队列中有0或者50个元素。
故选D选项
3.某棵树的度为4,且度为4、3、2、1的结点数分别为1、2、3、4,则该树中的叶子结点数为
A) 11
B) 9
C) 10
D) 8
参考答案:A
由题目可以知道,若四种度的结点分开成子树,共包含结点(4+1)+2×(3+1)+3×(2+1)+4×(1+1)=30个,当组合成一棵树时,任选一个度不为0的结点作为根结点,则新的树结点个数为30-2-3-4=21个,则该树中叶子结点个数为21-1-2-3-4=11。
故选择A选项。
4.设某二叉树的前序序列与中序序列均为ABCDEFGH,则该二叉树的后序序列为
A) HGFEDCBA
B) EFGHABCD
C) DCBAHGFE
D) ABCDEFGH
参考答案:A
二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。
二叉树的前序序列与中序序列相同,说明此树结点没有左子树,且第一个节点A为根节点,而后序遍历中根节点应在最后被访问,即节点A在最后出现,由此推断出后序遍历为HGFEDCBA,故A选项正确
5.下列叙述中正确的是
A) 二分查找法适用于任何存储结构的有序线性表
B) 二分查找法只适用于顺序存储的有序线性表
C) 二分查找法适用于有序循环链表
D) 二分查找法适用于有序双向链表
参考答案:B
二分法查找也称拆半查找,能使用二分法查找的线性表必须满足两个条件:顺序存储结构以及线性表有序。
循环链表和双向链表都不是顺序存储结构,故B选项正确。
6.下列序列中不满足堆条件的是
A) (98,95,93,96,89,85,76,64,55,49)
B) (98,95,93,94,89,85,76,64,55,49)
C) (98,95,93,94,89,90,76,64,55,49)
D) (98,95,93,94,89,90,76,80,55,49)
参考答案:A
若有n个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆:大根堆,所有结点的值大于或等于其左右子结点的值;小根堆,所有结点的值小于或等于其左右子结点的值。
B、C、D选项属于大根堆,A选项由于98>95,判断属于大根堆,但95<96,不满足条件,不是堆,故选择A选项
7.下面属于面向对象方法中对象基本特点的是
A) 多态性
B) 方法唯一性
C) 可修改性
D) 灵活性
参考答案:A
对象的基本特点如下:
由上表可知,本题选A选项
8.下面可以作为软件需求分析工具的是
A) 包图
B) 程序流程图
C) PAD图
D) 数据流程图(DFD图)
参考答案:D
需求分析方法可以分为结构化分析方法和面向对象的分析方法,结构化分析工具包括:数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等。
选项B中的程序流程图和选项C中的PAD图是过程设计工具,选项A中的包图用于UML面向对象建模。
故选D选项
9.数据库的数据模型分为
A) 层次、关系和网状
B) 网状、环状和链状
C) 大型、中型和小型
D) 线性和非线性
参考答案:A
数据库的数据模型分为层次、关系和网状三种。
其中:
用树形结构表示实体及其之间联系的模型称为层次模型,模型中结点是实体,树枝是联系,从上到下是一对多的关系。
用网状结构表示实体及其之间联系的模型称为网状模型,它是层次模型的扩展,表示多个从属关系的层次结构,呈现一种交叉关系。
关系模型的数据结构非常单一,在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。
故本题选A选项。
10.数据库系统的数据独立性是指
A) 不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序
B) 不会因为数据的变化而影响应用程序
C) 不会因为存储策略的变化而影响存储结构
D) 不会因为某些存储结构的变化而影响其他的存储结构
参考答案:A
数据库系统的数据独立性,是指数据库中数据独立于应用程序且不依赖于应用程序,即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。
故选A选项。
11.以下叙述正确的是
A) C程序由函数组成,可以不包含main函数
B) 每个C程序文件中的main函数都应当放在最前面
C) 每个C程序文件都应当包含一个main函数
D) 每个C程序都只能有一个main函数
参考答案:D
虽然一个C程序可以包含多个文件,但是有且只有一个文件中包含main函数,因此,选项A,C 错误。
main函数可以放在程序的任意位置。
因此,选项B错误。
答案为D选项。
12.以下叙述错误的是
A) 计算机可以直接识别由十六进制代码构成的程序
B) 可以连续执行的指令的集合称为"程序"
C) "程序"是人与计算机"对话"的语言
D) 计算机可以直接识别由0和1组成的机器语言代码
参考答案:A
计算机只能识别机器码,机器码是由二进制构成的,因此只能识别二进制构成的代码程序,不可以直接识别由十六进制代码构成的程序,十六进制的代码必须转为二进制才能在计算机上直接执行。
因此选项A错误
13.以下与数学表达式 "0<x<5且x≠2" 不等价的C语言逻辑表达式是
A) (0<x<5) && (x!=2)
B) 0<x && x<5 && x!=2
C) x>0 && x<5 && x!=2
D) (x>0 && x<2) || (x>2 && x<5)
参考答案:A
0<x<5在C语言里不能这样直接表达,需要分步骤来实现,一般使用x>0&&x<5来描述。
在C语言0<x<5属于一个逻辑运算表达式,可以理解为(0<x)<5,因此选项A错误。
故答案为A选项
14.以下选项中与 ( !a== 0 )的逻辑值不等价的表达式是
A) ( a== !0 )
B) a
C) (a>0 || a<0)
D) (a!= 0 )
参考答案:A
!与==运算,!的优先级高于==,即等价于(!a)==0。
如果a≠0,则表达式为真,否则表达式为假,因此可以验证选项,只有选项A不符合。
故答案为A选项。
15.变量math和engl中存放了两门课的成绩。
若两门课成绩均在60分以上(含60),则显示"pass";有一门低于60分则显示"fail",以下不能实现上述功能的程序段是
A) if(math<60)
if(engl<60)
printf("fail\n");
else
printf("pass\n");
B) if(math<60)
printf("fail\n");
else
if(engl>=60)
printf("pass\n");
else
printf("fail\n");
C) if ((math<60) ||(engl<60))
printf("fail\n");
else
printf("pass\n");
D) if ((math>=60) && (engl>=60))
printf("pass\n");
else
printf("fail\n");
参考答案:A
选项A,当math≥60,没有输出pass,同时当math<60,engl≥60,程序输出pass,这些案例都是与题目的原意不符合的,因此选项A错误。
选项B、C、D,都可以正确输出。
故答案为A选项16.设有以下程序段
main( )
{ int x[M][N];
Arrlet(x);
...
}
则作为函数Arrlet的形参,以下表示形式非法的是
A) int x[M][ ]
B) int (*x)[N]
C) int x[ ][N]
D) int x[M][N]
参考答案:A
C语言规定,二维数组作为实参参数传递时,形参必须要指明二维数组的列数,否则函数内无法识别数组的宽度,行数提供没有任何作用。
(*p)[N]与p[][N]以及p[M][N]效果一样。
排除法A选项
17.有以下程序
#include <stdio.h>
void fun( int n )
{
if( n/2 ) fun(n/2);
printf("%d",n%2 );
}
main()
{ fun( 10 ); printf("\n"); }
程序运行后的输出结果是
A) 0101
B) 1000
C) 1100
D) 1010
参考答案:D
函数fun()的作用是求一个整数的二进制数。
通过辗转相除法获取一个整数的二进制。
因此1010=10102,故答案为D选项。
18.有以下程序
#include <stdio.h>
void fun(char *a,char *b)
{ char *s=a;
while(*s) s++;
s--;
while(s>=a)
{ *b=*s; s--; b++; }
*b='\0';
}
main()
{ char s1[]="abc",s2[6];
fun(s1,s2);
}
程序运行后的输出结果是
A) cbaabc
B) abc
C) cba
D) abccba
参考答案:C
函数fun()实现的功能是:将第一个参数指向的字符串逆序的赋值给第二个参数,
fun ()首先循环至第一个参数的末端,再从后至前,循环的赋值给第二个参数,
因此第二个参数里的内容和第一个参数内容的逆序。
因此结果是cba。
答案为C选项。
19.有以下程序
#include <stdio.h>
main( )
{ char b[4][10]; int i;
for ( i=0; i<4; i++ )
scanf( "%s", b[i] );
for( i=3; i>=0; i-- )
printf( "%s ", b[i] );
printf( "\n" );
}
执行时若输入: Peach flower is pink.<回车> ,则输出结果是
A) Peachflower is pink.
B) pink. is flower Peach
C) Peachflowerispink.
D) Pink is flower peach.
参考答案:B
第一个for循环对字符串数组初始化,第二for循环,从后向前打印字符串数组,因此,得到的答案是pink. is flower Peach,故答案为B选项。
20.有以下程序
#include <stdio.h>
int * f(int *s)
{ s[1] +=6;
*s=7;
s+=2;
return s;
}
main( )
{ int a[5]={1,2,3,4,5}, *p=a;
p= f(p);
printf( "%d,%d,%d\n", a[0], a[1], *p );
}
程序运行后的输出结果是
A) 9,8,9
C) 7,8,3
D) 1,2,1
参考答案:C
函数f中,s指向数组a, s[1]+=6,a[1]=8;a[0]=7;修改a[1],*s=7修改a[0],s+=2;s指向第三个元素,返回s,并赋给指针p,则*p=3。
,因此打印7,8,3,答案为C选项
21.设有定义:
char s[81]; int i=0;
以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是
A) scanf("%s",s);
B) while((s[i++]=getchar())!='\n');s[i]='\0';
C) gets(s);
D) do{ scanf("%c",&s[i]); }while(s[i++]!='\n'); s[i]='\0';
参考答案:A
scanf("%s",s);字符串不能整体输入,字符串数组一般采取循环输入,因此选择A错误。
getchar()每一次读入一个字符,gets()一次读入多个字符,因此B,C,D正确。
答案为A选项。
22.以下叙述中错误的是()。
A) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
B) C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C) 用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D) C语言源程序经编译后生成后缀为.obj的目标程序
参考答案:A
【解析】C语言中的非执行语句不会被编译,不会生成二进制的机器指令,所以A)错误。
由C语言构成的指令序列称C源程序,C源程序经过C语言编译程序编译之后生成一个后缀为.OBJ的二进制文件(称为目标文件);最后要由"连接程序"把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。
23.以下选项中,合法的一组C语言数值常量是()。
A) 12.0Xa23 4.5e0
B) 028.5e-3-0xf
C) .1774e1.50abc
D) 0x8A10,000 3.e5
参考答案:A
【解析】C语言中八进制整型常量的开头是数字0,十六进制整型常量的开头数字是0x。
C语言中的实型常量有两种表示形式:小数形式,小数形式表示的实型常量必须要有小数点;指数形式,以"e"或"E"后跟一个整数来表示以10为底数的幂数,且规定字母e或E之前必须要有数字,且e或E后面的指数必须为整数。
B)选项中028错误,八进制中没有数字8。
C)选项中4e1.5中e后面的指数不是整数。
D)选项中3.e5小数点后面缺少数字。
24.以下选项中不合法的标识符是()。
A) &a
B) FOR
C) print
D) 00
参考答案:A
【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。
另外,关键字不能作为标识符。
因为C语言中区分大小写,所以B)选项中的"FOR"可以作为标识符来用。
A)选项中含有非法字符&,所以选择A)。
25.若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()。
A) sqrt(fabs(pow(n,x)+exp(x)))
B) sqrt(fabs(pow(n,x)+pow(x,e)))
C) sqrt(abs(n^x+e^x))
D) sqrt(fabs(pow(x,n)+exp(x)))
参考答案:A
【解析】B)选项中函数pow(x,e)错误应该直接使用exp(x)函数。
C)选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。
D)选项中pow(x,n)参数顺序错误。
26.若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是()
A) i=(a+k)<=(i+k);
B) i=a%11;
C) a=a++,i++
D) i=!a;
参考答案:B
【解析】取模运算符"%",二元运算符,具有左结合性,参与运算的量均为整型。
选项 B 中的a变量是double实型,所以B)不符合规定。
27. 有以下程序:
#include <stdio.h>
main()
{int s,t,A=10;double B=6;
s=sizeof(A);t=sizeof(B);
printf("%d,%d\n",s,t);
}
在VC6.0平台上编译运行,程序运行后的输出结果是()。
A) 10,6
B) 4,4
C) 2,4
D) 4,8
参考答案:D
【解析】C语言中利用sizeof()函数判断数据类型长度,在VC6.0平台中,整型int占有4个字节,double型数据占有8个字节。
28. 有以下程序:
#include <stdio.h>
main()
{char a,b,c,d;
scanf("%c%c",&a,&b);
c=getchar();d=getchar();
printf("%c%c%c%c\n",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)
12<CR>
34<CR>
则输出结果是()。
A) 12
34
B) 12
C) 1234
D) 12
3
参考答案:D
【解析】按照从键盘输入的数据可以判断字符1给了变量a,字符2给了变量b,字符<CR>即回车给了变量c,字符3给了变量d。
所以打印输出的结果为D)选项。
29. 下关于逻辑运算符两侧运算对象的叙述中正确的是()。
A) 可以是任意合法的表达式
B) 只能是整数0或非0整数
C) 可以是结构体类型的数据
D) 只能是整数0或1
参考答案:A
【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A)。
30. 有以下程序:
#include <stdio.h>
main()
{int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
程序输出()。
A) 1,1,2,0
B) 0,0,0,3
C) 编译有错
D) 0,1,2,0
参考答案:C
【解析】本题中if(a=1)b=1;与else d=3;之间多了语句c=2;所以会出现else语句的位置错误的编译失败提示。
31.有以下程序:
#include <stdio.h>
main()
{int x=1,y=0,a=0,b=0;
switch (x)
{case 1:
switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是()。
A) a=2,b=2
B) a=2,b=1
C) a=1,b=1
D) a=1,b=0
参考答案:B
【解析】case常量表达式只是起语句标号作用,并不是该处进行条件判断。
在执行switch 语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不在进行判断,直到碰到break或函数结束为止。
所以执行内层switch(y)时只执行了a++,此时a 的值为1。
然后执行外层case 2语句的a++;b++;a为2,b为1。
所以结果为B)。
32.以下程序段中的变量已正确定义:
for( i=0;i<4;i++,i++)
for( k=1;k<3;k++);printf("*" );
程序段的输出结果是()。
A) **
B) ****
C) *
D) ********
参考答案:C
【解析】由于内层循环for( k=1;k<3;k++)后面直接跟了空语句";"所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个"*",选择C)。
33.有以下程序段:
#include <stdio.h>
int i,n;
for( i=0;i<8;i++)
{n =rand() % 5;
switch (n)
{case 1:
case 3:printf("%d \n",n);break;
case 2:
case 4:printf("%d \n",n);continue;
case 0:exit(0);
}
printf("%d \n",n);
}
以下关于程序段执行情况的叙述,正确的是()。
A) for循环语句固定执行8次
B) 当产生的随机数n为4时结束循环操作
C) 当产生的随机数n为1和2时不做任何操作
D) 当产生的随机数n为0时结束程序运行
参考答案:D
【解析】case常量表达式只是起语句标号作用,并不是该处进行条件判断。
在执行switch 语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。
简单的说break是结束整个循环体,而continue是结束单次循环。
B)选项中当产生的随机数n为4时要执行打印操作。
C)选项中当产生的随机数为1和2时分别执行case3与case4后面语句的内容。
由于存在break语句所以for循环不是固定执行8次,执行次数与产生的随机数n有关系。
34.有以下程序:
#include <stdio.h>
int f(int x);
main()
{ int n=1,m;
m=f(f(f(n)));printf("%d\n",m);
}
int f(int x)
{ return x*2;}
程序运行后的输出结果是()。
A) 8
B) 2
C) 4
D) 1
参考答案:A
【解析】第一次调用m=f(f(f(1))),第二次为m=f(f(2)),第三次为m=f(4),即返回值为8。
35.以下叙述中错误的是()。
A) 可以给指针变量赋一个整数作为地址值
B) 函数可以返回地址值
C) 改变函数形参的值,不会改变对应实参的值
D) 当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
参考答案:A
【解析】不能将一个整数直接赋给指针变量作为地址,所以A)是错误的。
函数的返回值可以是地址,即指针。
函数调用中形参值的变化不会传递给实参。
36. 设已有定义:float x;,则以下对指针变量p进行定义且赋初值的语句中正确的是()。
A) int *p=(float)x;
B) float *p=&x;
C) float p=&x;
D) float *p=1024;
参考答案:B
【解析】指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。
赋值时应将某个变量地址即&x 赋给指针变量,所以选择B)。
37. 以下数组定义中错误的是()。
A) int x[2][3]={1,2,3,4,5,6};
B) int x[][3]={0};
C) int x[][3]={{1,2,3},{4,5,6}};
D) int x[2][3]={{1,2},{3,4},{5,6}};
参考答案:D
【解析】D)选项中x[2][3]定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。
38. 有以下程序:
#include <stdio.h>
void fun( int a[],int n)
{int i,t;
for(i=0;i<n/2;i++) { t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} }
main()
{int k[10]={ 1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++) printf("%d",k[i]);
printf("\n");
}
程序的运行结果是()。
A) 321678
B) 876543
C) 1098765
D) 345678
参考答案:A
【解析】本题中的函数fun()的功能是将数组k中前5个元素倒序,所以返回后数组k中的元素排列是5,4,3,2,1,6,7,8,9,10。
所以打印输出k[2]到k[7]元素的值,即321678,所以选择A。
39.有以下程序:
#include <stdio.h>
#define N 4
void fun(int a[][N],int b[])
{int i;
for (i=0;i<N;i++) b[i] =a[i][i] -a[i][N-1-i];
}
main()
{int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;
fun (x,y);
for (i=0;i<N;i++) printf("%d,",y[i]);printf("\n");
}
程序运行后的输出结果是()。
A) -3,-1,1,3,
B) -12,-3,0,0,
C) 0,1,2,3,
D) -3,-3,-3,-3,
参考答案:A
【解析】本题中由fun函数可知,b[0]=a[0][0]-a[0][3]=1-4=-3,b[1]=a[1][1]-[1][2]=6-7=-1,b[2]=a[2][2]-[2][1]=11-10=1,b[3]=a[3][3]-[3][1]=16-13=3。
所以主函数中打印y数组元素的值为A)选项。
40.设有定义:char s[81];int i=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。
A) gets(s);
B) while((s[i++]=getchar())!='\n');s[i]='\0';
C) scanf("%s",s);
D) do{ scanf("%c",&s[i]);}while(s[i++]!='\n');s[i]='\0';
参考答案:C
【解析】字符串的输入不能使用scanf("%s",s);而应该使用gets(s)。