全国计算机二级C语言模拟测试含详细解析 2.docx
- 文档编号:27527003
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:30
- 大小:46.31KB
全国计算机二级C语言模拟测试含详细解析 2.docx
《全国计算机二级C语言模拟测试含详细解析 2.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言模拟测试含详细解析 2.docx(30页珍藏版)》请在冰豆网上搜索。
全国计算机二级C语言模拟测试含详细解析2
1.在最坏情况下
A.快速排序的时间复杂度比冒泡排序的时间复杂度要小
B.快速排序的时间复杂度比希尔排序的时间复杂度要小
C.希尔排序的时间复杂度比直接插入排序的时间复杂度要小
D.快速排序的时间复杂度与希尔排序的时间复杂度是一样的
正确答案:
C你的答案:
解析:
【解析】对长度为n的线性表排序,下表为常用排序方法时间复杂度:
上表中未包括希尔排序,因为希尔排序的时间效率与所取的增量序列有关,如果增量序列为:
d1=n/2,di+1=di/2,在最坏情况下,希尔排序所需要的比较次数为O(n^1.5)。
快速排序与冒泡排序的时间复杂度均为O(n^2),A选项错误。
快速排序比希尔排序的时间复杂度要大(O(n^2)>O(n^1.5)),B选项错误。
希尔排序的时间复杂度比直接插入排序的时间复杂度要小(O(n^1.5) 快速排序比希尔排序的时间复杂度大(O(n^2)>O(n^1.5)),D选项错误。 2.在深度为7的满二叉树中,度为2的结点个数为 A.64 B.63 C.32 D.31 正确答案: B你的答案: 解析: 【解析】在树结构中,一个节点所拥有的后件个数称为该节点的度。 深度,定义一棵树的根节点所在的层次为1,其他节点所在的层次等于它的父节点所在的层次加1,树的最大层次称为树的深度。 满二叉树指除最后一层外,每一层上的所有节点都有两个子节点的二叉树。 一棵深度为K的满二叉树,整棵二叉树共有2^K-1个节点;满二叉树在其第i层上有2^(i-1)个节点。 在满二叉树中,只有度为2和度为0的节点。 深度为7的满二叉树,节点个数为2^7-1=127,第七层叶节点个数为2^(7-1)=64,则127-64=63,B选项正确。 3.设栈的顺序存储空间为S(1: m),初始状态为top=m+1。 现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为 A.30 B.20 C.m-19 D.m-20 正确答案: C你的答案: 解析: 【解析】栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。 入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。 栈为空时,栈顶指针top=0,经过入栈和退栈运算,指针始终指向栈顶元素。 初始状态为top=m+1,当top=20时,元素依次存储在单元20: m中,个数为m-19,C选项正确。 4.算法空间复杂度的度量方法是 A.算法程序的长度 B.算法所处理的数据量 C.执行算法所需要的工作单元 D.执行算法所需要的存储空间 正确答案: D你的答案: 解析: 【解析】算法的空间复杂度是指执行这个算法所需要的内存空间,。 算法执行期间所需的存储空间包括3个部分: 输入数据所占的存储空间;程序本身所占的存储空间;算法执行过程中所需要的额外空间。 D选项正确。 5.下面不属于软件开发阶段任务的是 A.测试 B.可行性研究 C.设计 D.实现 正确答案: B你的答案: 解析: 【解析】软件生命周期分为3个时期共8个阶段: 软件定义期,包括问题定义、可行性研究、需求分析;软件开发期,包括概要设计、详细设计、实现、测试;运行维护期,即运行维护阶段。 可行性研究属于软件定义期任务,B选项错误。 6.下面属于字符类的实例是 A.'518' B."5" C.'nm D.'\n' 正确答案: D你的答案: 解析: 【解析】字符实例的一般形式是用一对单引号括起来的一个字符。 另外ASCII码中还有一些控制字符,C语言中用转义字符的形式来书写这些常,转义字符一反斜杠(\)开始,后面跟1个字符或字符序列。 '518'单引号中有三个字符,A选项错误。 "5"双引号为字符串,B选项错误。 'nm'单引号中有两个字符,C选项错误。 '\n'为换行符,属于字符类实例,D选项正确。 7.某系统结构图如下图所示 该系统结构图的最大扇出数是 A.n B.1 C.3 D.4 正确答案: A你的答案: 解析: 【解析】扇出指的是由一个模块直接调用的其他模块数。 题干中某系统为一个模块,其扇出数目为n(n>3),功能1与功能n模块扇出数均为2,故A选项正确。 8.一个兴趣班可以招收多名学生,而一个学生可以参加多个兴趣班。 则实体兴趣班和实体学生之间的联系是 A.1: 1联系 B.1: m联系 C.m: 1联系 D.m: n联系 正确答案: D你的答案: 解析: 【解析】一般来说,实体集之间必须通过联系来建立联接关系,分为3类: 一对一联系(1: 1)、一对多联系(1: m)、多对多联系(m: n)。 多个兴趣班与多个学生的关系为m: n联系,D选项正确。 9.有三个关系表R、S和T如下,其中三个关系对应的关键字分别为A,B和复合关键字(A,B)。 表T的记录项(b,q,4)违反了 A.实体完整性约束 B.参照完整性约束 C.用户定义的完整性约束 D.关系完整性约束 正确答案: B你的答案: 解析: 【解析】关系模型中可以有3类完整性约束: 实体完整性约束、参照完整性约束和用户定义的完整性约束。 实体完整性约束是指,若属性M是关系的主键,则属性M中的属性值不能为空值。 T中主键不为空,A选项错误。 参照完整性约束是指,若属性(或属性组)A是关系M的外键,它与关系M的主码相对应,则对于关系M中的每个元组在A上的值必须为: 要么取空值;要么等于关系M中某个元组的主码值。 属性B为关系S的外键,它与关系S的主键相对应,则T中元组在B上应该为空或者与S中主键值相等,题目中不相等,违反参照完整性约束,B选项正确。 此题关系中无语义要求,C选项错误。 10.在数据库系统中,给出数据模型在计算机上物理结构表示的是 A.概念数据模型 B.逻辑数据模型 C.物理数据模型 D.关系数据模型 正确答案: C你的答案: 解析: 【解析】数据模型按照不同的应用层次分为以下3种类型: 概念数据模型,重于对客观世界复杂事物的描述及对它们内在联系的刻画;逻辑数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。 C选项正确。 11.若有定义语句: inta=12;,则执行语句: a+=a-=a*a;后,a的值是 A.-264 B.552 C.144 D.264 正确答案: A你的答案: 解析: 【解析】赋值运算结合性为自右向左,a+=a-=a*a相当于a=a-a*a,a=a+a;自右向左计算过程为a=a-a*a=-132,a=a+a=-264,A选项正确。 12.若在程序中变量均已定义成int类型,且已赋大于1的值,则下列选项中能正确表示代数式的表达式是 A.1.0/a/b/c B.1/(a*b*c) C.1.0/a*b*c D.1/a/b/(double)c 正确答案: A你的答案: 解析: 【解析】由于abc均大于1,所以表达式1/abc小于1,需要用浮点类型表示。 若要计算表达式值,需要使其自动转化成浮点类型,所以A选项正确。 B选项由于变量与常量均为整型,不会自动转换为浮点类型,B选项错误。 C选项表示表达式bc/a,故错误。 D选项,由于算数运算法结合性自左向右,先计算1/a,结果为0,之后的计算无论是否转换数据类型结果均为0,D选项错误。 13.有以下程序 #include main() { intx=010,y=10; printf("%d,%d\n",++x,y--); } 程序运行后的输出结果是 A.10,9 B.11,10 C.010,9 D.9,10 正确答案: D你的答案: 解析: 【解析】整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法,八进制整常量以O作为前缀。 自增和自减运算符的两种用法: 前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1。 x=010=8,y=10,++x先自加后取值,输出9,y--先取值输出10,再自减y=9,D选项正确。 14.以下选项中叙述正确的是 A.C语言的标识符可分为关键字、预定义标识符和用户标识符三类 B.C语言的标识符可分为语句、变量和关键字三类 C.C语言的标识符可分为函数名、变量和预定义标识符三类 D.C语言的标识符可分为运算符、用户标识符和关键字三类 正确答案: A你的答案: 解析: 【解析】标识符就是一个名称,用来表示变量、常量、函数以及文件等名称。 C语言的标识符可分为关键字、预定义标识符和用户标识符三类,A选项正确,B、C、D选项错误。 合法的标识符由字母、数字和下划线组成,并且必须以字母或下划线开头。 用户标识符为用户根据编程需求自定义的标识符。 关键字是指被C语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义,用户不可重新定义。 预定义标识符是系统已经有过定义的标识符,用户可以重新定义。 15.以下选项中叙述正确的是 A.函数体必须由{开始 B.C程序必须由main语句开始 C.C程序中的注释可以嵌套 D.C程序中的注释必须在一行完成 正确答案: A你的答案: 解析: 【解析】函数体是函数首部下面的花括号内的部分,所以函数体必须由{开始,A选项正确。 一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从main函数开始执行的,不是main语句,B选项错误。 C程序中的允许两种注释,以//开头的单行注释;以/*开始,以*/结束的块式注释,D选项错误。 函数可以嵌套,注释不能嵌套,C选项错误。 16.已知a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c A.1 B.0 C.2 D.-1 正确答案: C你的答案: 解析: 【解析】"="优先级低于"<"">"。 "&&"逻辑与表达式: exp1&&exp2,规则为: 对exp1求值,若为0,则表达式为0,且不计算exp2;若exp1非0,则求exp2值,作为表达式值。 本题计算过程为: 先判断a>b为假,m=0,整个逻辑表达式为假,不计算右表达式,n=2。 C选项正确。 17.有以下程序 #include main() { intx=23; do { printf("%2d\n",x--); }while(! x); } 程序的执行结果是 A.输出321 B.输出23 C.不输出任何内容 D.陷入无限循环 正确答案: B你的答案: 解析: 【解析】"%2d"表示输出的整型变量占2列。 程序执行过程为: 输出x为23,之后x自减得x=22,! x为假(0),while条件不成立,退出循环。 B选项正确。 18.有以下程序 #include main() { charc; while((c=getchar())! ='\n') { switch(c-'2') { case0: case1: putchar(c+4); case2: putchar(c+4);break; case3: putchar(c+3); default: putchar(c+2);break; } } printf("\n"); } 程序运行后从第一列开始输入以下数据 2473<回车> 程序的输出结果是 A.668977 B.4444 C.6677877 D.68766 正确答案: A你的答案: 解析: 【解析】本题执行过程为: 输入c='2',c-'2'=0,首先匹配case0,依次输出6,6,后执行break语句,跳出分支结构;输入c='4',c-'2'=2,匹配case2,输出8,执行break语句,跳出分支结构;输入c='7',c-'2'=5,匹配default,输出9,执行break语句,跳出分支结构;输入c='3',c-'2'=1,匹配case1,依次输出7,7,执行break语句,跳出分支结构。 输入回车,结束循环。 A选项正确。 19.有以下程序 #include main() { inti=0,sum=1; do { sum+=i++; }while(i<6); printf("%d\n",sum); } 程序的输出结果是 A.22 B.18 C.20 D.16 正确答案: D你的答案: 解析: 【解析】语句sum+=i++;相当于sum+=i;i++;程序执行过程为: sum=1,i=1;sum=2,i=2;sum=4,i=3;sum=7,i=4;sum=11,i=5;sum=16,i=6;退出循环。 D选项正确。 20.有以下程序段,若变量已正确定义并赋值 if(a>b)printf("x=%d,",x); elseprintf("y=%d,",y); if(a<=b)i++; elsej++; 则与此程序段功能相同的选项是 A. if(a>b){printf("x=%d,",x);j++;} else{printf("y=%d,",y);i++;} B. if(a>b){printf("x=%d,",x);i++;} else{printf("y=%d,",y);j++;} C. if(a<=b){printf("x=%d,",x);i++;} else{printf("y=%d,",y);j++;} D. if(a>=b){printf("x=%d,",x);i++;} else{printf("y=%d,",y);j++;} 正确答案: A你的答案: 解析: 【解析】题目中程序段执行过程为: 如果a>b,输出x,否则输出y;如果a<=b,i加1,否则j加1。 A选项为: 如果a>b,输出x且j加1,否则输出y且i加1,与题目中功能相同,A选项正确。 B选项为: 如果a>b,输出x且i加1,否则输出y且j加1,与题目中功能不相同,B选项错误。 C选项为: 如果a<=b,输出x且i加1,否则输出y且j加1,与题目中功能不相同,C选项错误。 D选项判断条件为a>=b,多了a=b,故D选项错误。 21.以下程序的功能是判断输入的一个整数是否能被3或7整除,若能整除,输出YES,否则输出NO。 在下划线处应填入的选项是 #include main() { intk; printf("Enteraintnumber: ");scanf("%d",&k); if________printf("YES\n"); elseprintf("NO\n"); printf("%d\n",k%3); } A.((k%3==0)||(k%7==0)) B.(k/3==0)||(k/7==0) C.((k%3=0)||(k%7=0)) D.((k%3==0)&&(k%7==0)) 正确答案: A你的答案: 解析: 【解析】求余运算符为%,是否能被3或7整除表达式为(k%3==0)||(k%7==0),A选项正确。 B选项“/”为除号,错误。 C选项中“=”为赋值运算符,不是逻辑运算符“==”,错误。 D选项“&&”为逻辑与,本题应该为逻辑或“||”,错误。 22.以下选项中,不能对主函数中变量i和j的值进行交换的程序是 A. #include voidswap(int*p,int*q) {int*t; *t=*p;*p=*q;*q=*t; } main() {inti=10,j=20,*a=&i,*b=&j; swap(a,b);printf("i=%dj=%d\n",i,j); } B. #include voidswap(int*p,int*q) {intt; t=*p;*p=*q;*q=t; } main() {inti=10,j=20,*a=&i,*b=&j; swap(a,b);printf("i=%dj=%d\n",i,j); } C. #include #include voidswap(int*p,int*q) {int*t; t=(int*)malloc(sizeof(int)); *t=*p;*p=*q;*q=*t; free(t); } main() {inti=10,j=20; swap(&i,&j);printf("i=%dj=%d\n",i,j); } D. #include voidswap(int*p,int*q) {intt; t=*p;*p=*q;*q=t; } main() {inti=10,j=20,*x=&i,*y=&j; swap(x,y);printf("i=%dj=%d\n",i,j); } 正确答案: A你的答案: 解析: 【解析】A选项函数内定义了指针,但并未给指针开辟空间,程序错误,故选择A选项。 B选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型变量,能实现i与j值交换。 C选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型指针,且已正确开辟内存,能实现i与j值交换。 D选项与B选项相同,能实现i与j值交换。 23.有以下程序 #include main() { inta[10]={1,3,5,7,11,13,17},*p=a; printf("%d,",*(p++)); printf("%d\n",*(++p)); } 程序运行后的输出结果是 A.3,7 B.3,5 C.1,5 D.1,3 正确答案: C你的答案: 解析: 【解析】程序执行过程: 指针p指向数组第一个元素;*(p++)先取p,输出p指向的元素1,之后p加1,指向数组第二个元素;*(++p),指针p加1指向数组第三个元素,之后输出所指元素5,C选项正确。 24.有以下程序 #include main() { int*p,x=100; p=&x;x=*p+10; printf("%d\n",x); } 程序运行后的输出结果是 A.110 B.120 C.100 D.90 正确答案: A你的答案: 解析: 【解析】程序执行过程为: 定义指针p,指向变量x,x=(*p)+10=110,输出110,A选项正确。 25.以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处 #include main() { inta[10],i=0; while(i<10)scanf("%d",_________); ┋ } A.a+(i++) B.&a[i+1] C.a+i D.&a(i++) 正确答案: A你的答案: 解析: 【解析】A选项a为数组首地址,i++先取i值再加1,scanf读入的数据依次存放在数组中,A选项正确。 B选项,第一个数据读入a[1],最后一次循环引用a[10],数组越界,B选项错误。 C选项,控制变量i没有依次加1,无法结束循环,也无法对整个数组赋值,输入的数全是a[0],C选项错误。 D选项数组元素引用错误,数组元素引用为[],不是(),D选项错误。 26.有以下程序 #include voidfun(intx,inty,int*z) {*z=y-x;} main() { inta,b,c; fun(10,5,&a);fun(7,a,&b);fun(a,b,&c); printf("%d,%d,%d\n",a,b,c); } 程序运行后的输出结果是 A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7 正确答案: B你的答案: 解析: 【解析】程序执行过程为: 调用函数fun(10,5,&a),将变量a地址传入函数,a=5-10=-5;调用函数fun(7,a,&b),将变量b地址传入函数,b=-5-7=-12;调用函数fun(a,b,&c),将变量c地址传入函数,c=-12-(-5)=-7。 输出-5,-12,-7,B选项正确。 27.有以下程序 #include voidfun(int*s,intn1,intn2) { inti,j,t; i=n1;j=n2; while(i {t=*(s+i);*(s+i)=*(s+j);*(s+j)=t; i++;j--; } } main() { inta[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a; fun(p,0,3);fun(p,4,9);fun(p,0,9); for(i=0;i<10;i++)printf("%d",*(a+i)); printf("\n"); } 程序运行后的输出结果是 A.5678901234 B.0987654321 C.4321098765 D.0987651234 正确答案: A你的答案: 解析: 【解析】程序执行过程为: 调用函数fun(p,0,3),将数组a首地址传入函数,循环执行2次,将数组前4个元素前后倒置,数组a={4,3,2,1,5,6,7,8,9,0};调用函数fun(p,4,9),将数组a首地址传入函数,循环执行3次,将数组第5个到第10个元素前后倒置,数组a={4,3,2,1,0,9,8,7,6,5};调用函数fun(p,0,9),将数组a首地址传入函数,循环执行5次,将数组元素前后倒置,数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国计算机二级C语言模拟测试含详细解析 全国计算机 二级 语言 模拟 测试 详细 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)