二级C语言 5套 选择题的副本.docx
- 文档编号:25128752
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:26
- 大小:41.38KB
二级C语言 5套 选择题的副本.docx
《二级C语言 5套 选择题的副本.docx》由会员分享,可在线阅读,更多相关《二级C语言 5套 选择题的副本.docx(26页珍藏版)》请在冰豆网上搜索。
二级C语言5套选择题的副本
(1)下列叙述中错误的是
A)在带链队列中,队头指针和队尾指针都是在动态变化的
B)在带链栈中,栈顶指针和栈底指针都是在动态变化的
C)在带链栈中,栈顶指针是在动态变化的,但栈底指针是不变的
D)在带链队列中,队头指针和队尾指针可以指向同一个位置
答案:
B
【解析】带链的队列就是用一个单链表来表示队列,队列中的每一个元素对应链表中的一个节点,在入队和退队过程中,队头指针和队尾指针都是在动态变化的,A选项叙述正确,循环队列中当队列满或者空时,队头指针和队尾指针指向同一个位置,D选项叙述正确。
栈也可以采用链式存储结构表示,把栈组织成一个单链表,这种数据结构可称为带链的栈,入栈和退栈过程中栈底指针不变,栈顶指针随之变化,B选项叙述错误,C选项叙述正确。
故选择B选项。
(2)某二叉树共有12个结点,其中叶子结点只有1个。
则该二叉树的深度为(根结点在第1层)
A)3
B)6
C)8
D)12
答案:
D
【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,n0=1,则n2=0,总节点数为12=n0+n1+n2=1+n1+0,则度为1的节点数n1=11,故深度为12,选D。
(3)
A)DYBEAFCZX
B)YDEBFZXCA
C)ABDYECFXZ
D)ABCDEFXYZ
答案:
C
【解析】前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
前序遍历描述为:
若二叉树为空,则执行空操作。
否则:
①访问根结点;②前序遍历左子树;③前序遍历右子树,C正确。
(4)对长度为n的线性表作快速排序,在最坏情况下,比较次数为
A)n
B)n-1
C)n(n-1)
D)n(n-1)/2
答案:
D
【解析】快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,选D。
(5)下列序列中不满足堆条件的是
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个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆:
大根堆,所有结点的值大于或等于其左右子结点的值;小根堆,所有结点的值小于或等于其左右子结点的值。
(6)软件生命周期中,确定软件系统要做什么的阶段是
A)需求分析
B)软件测试
C)软件设计
D)系统维护
答案:
A
【解析】软件生命周期各阶段的主要任务是:
问题定义、可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行维护。
其中需求分析是指对待开发软件提出的需求进行分析并给出详细定义,也即是确定软件系统要做什么,A选项正确。
(7)有两个关系R,S如下:
由关系R通过运算得到关系S,则所使用的运算为( )。
A)选择
B)投影
C)插入
D)连接
答案:
B
【解析】投影运算是指对于关系内的域指定可引入新的运算。
本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。
所以选择B)。
(8)有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为( )。
A)并
B)自然连接
C)笛卡尔积
D)交
答案:
D
【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B)错误。
笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C)错误。
根据关系T可以很明显的看出是从关系R与关系S中取得相同的关系组所以取得是交运算,选择D)。
(9)将E-R图转换为关系模式时,E-R图中的实体和联系都可以表示为()。
A)属性
B)键
C)关系
D)域
答案:
C
【解析】采用E-R方法得到的全局概念模型是对信息世界的描述,并不适用于计算机处理,为了适合关系数据库系统的处理,必须将E-R图转换成关系模式。
这就是逻辑设计的主内容。
E-R图是由实体、属性和联系组成,而关系模式中只有一种元素--关系。
C选项正确。
(10)定义学生、教师和课程的关系模式STC(SNO,SN,SA,TN,CN,G),其中的六个属性分别为学生的学号、姓名、年龄、教师的姓名、课程名以及学生的成绩,则该关系为
A)第一范式
B)第二范式
C)第三范式
D)BCNF范式
答案:
A
【解析】第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。
在第一范式(1NF)中表的每一行只包含一个实例的信息。
简而言之,第一范式就是无重复的列。
说明:
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。
为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。
这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
简而言之,第二范式就是属性完全依赖于主键。
第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
满足第三范式(3NF)必须先满足第二范式(2NF)。
简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。
那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。
如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
简而言之,第三范式就是属性不依赖于其它非主属性。
BCNF范式
关系模式R∈1NF。
若函数依赖集合F中的所有函数依赖X→Y(Y不包含于X)的左部都包含R的任一候选键,则R∈BCNF。
换言之,BCNF中的所有依赖的左部都必须包含候选键。
通俗地说即在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。
(11)以下叙述错误的是
A)在一个任务中,单独编写的每个模块均可以独立运行
B)程序“模块化”有利于任务的分解简
C)允许对函数单独进行编译,是C语言实现“模块化”的基础
D)采用模块化结构,可以提高程序编制的效率
答案:
A
【解析】C语言中,程序运行必须从main函数开始,一个程序只能有一个main函数,所以除了包含main函数的模块,其他模块都不可以单独运行,选项A错误;程序的模块化将一个大的任务分解成若干个小的任务,每个模块解决一个小的任务,选项B正确;允许对函数单独进行编译,是模块化的基础,选项C正确;采用模块化结构,提高了代码的复用度,提高程序编制的效率,选项D正确;答案为A。
(12)以下选项中,当且仅当x的绝对值在1至6范围内表达式值为“真”的是
A)(x>=-6)&&(x<=-1)||(x>=1)&&(x<=6)
B)(x>=1)&&(x<=6)&&(x>=-6)&&(x<=-1)
C)(x>=-6)||(x<=-1)||(x>=1)||(x<=6)
D)(x>=1)&&(x<=6)||(x>=-1)&&(x<=-6)
答案:
A
【解析】选项B中,x既要取值1~6,又要取值-6~-1,这是不可能的,所以选项B表达式的值始终为假,选项B错误;选项C无论x取何值,表达式的值始终为真;选项D中当x=-2时,表达式的值为假,选项D错误;选项A中,仅当x的绝对值在1~6内表达式的值才为真,选项A正确;
(13)以下运用if语句判断x和y大小的程序段,错误的是
A)if(x>y)printf("x>y");
if(x elseprintf("x=y"); B)if(x>=y) if(x>y)printf("x>y"); elseprintf("x=y"); elseprintf("x C)if(x>y)printf("x>y"); if(y>x)printf("x if(x==y)printf("x=y"); D)if(x>y)printf("x>y"); elseif(x elseprintf("x=y"); 答案: A 【解析】C语言规定,else语句总是与前面最近的if配对,因此选项A的语句中,当x>y时,执行printf(“x>y”);接着判断if(x (14)设有语句: printf("%2d\n",2010);,则以下叙述正确的是 A)程序运行时输出2010B)程序运行时输出20 C)程序运行时输出10D)指定的输出宽度不够,编译出错 答案: A 【解析】printf()函数格式化字符串的一般形式为: [标志][输出最小宽度][.精度][长度]类型。 对于%2d,%d表示结果以十进制形式输出带符号的整数,数字2表示输出的最小宽度为2,若实际位数多于2,则按实际位数输出,所以程序输出2010,答案选A。 (15)以下选项中,合法的C语言实数是 A).4e0B)4.3e0.2C)E4.8D)0.29E 答案: A 【解析】C语言中,实数有两种形式,十进制小数形式和指数形式,由四个选项可知,本题考查的是实数的指数形式,指数形式一般为: aEn,其中a为十进制数,n为十进制整数,表示的值为: a*10n;B、C错在阶码必须是整数,D错在无阶码,答案为A,A的值为: 0.4*100=0.4。 (16)设有定义: doublex;,以下选项中不能将输入数据3.14读入赋给变量x的是 A)scanf("%4.2f",&x);B)scanf("%lf",&x); C)scanf("%le",&x);D)scanf("%4lf",&x); 答案: A 【解析】scanf()函数格式字符串的一般形式为: %[*][输入数据宽度][长度]类型。 输入数据宽度必须是十进制的整数,它没有精度控制,%4.2f是错误的,不能企图用此语句输入小数点为2位的实数,选项A错误;scanf()函数的长度格式符为l和h,%lf表示用小数形式输入双精度浮点数,满足条件,选项B正确;%le表示用指数形式输入双精度浮点数,满足条件,选项C正确;%4lf表示用小数形式输入宽度为4的双精度浮点数,选项D正确;答案为A。 (17)有以下程序 #include main() {intx,y=0,z=0,t; do {scanf("%d",&x); t=x>0; switch(t) {case0: break; case1: y+=x;continue; } z+=x; } while(x); printf("%d,%d\n",y,z); } 程序运行时输入: -11-220<回车>,则输出结果是 A)1,1B)1,0C)3,-3D)3,0 答案: C 【解析】分析程序结构,在do…while循环中,嵌套一个switch语句,switch语句中两个case语句分别执行break和continue,其中break语句是跳出switch语句,接着执行do…while循环体剩下的部分;而continue语句是直接进入do…while的下一个循环,由此可知每次循环,当t=0时,执行break语句,接着将z值累加x;当t=1时,执行continue语句,将y值累加x,所以当x输入-1、-2、0时,t=0,z值累加为-3;当x输入1、2时,t=1,y值累加为3,输出y、z的值分别为3、-3,答案选C。 (18)以下选项中能正确定义二维数组的选项是 A)doublea[][3]={2*3};B)doublea[][3]; C)doublea[][3]={};D)doublea[2][3]={{1.0},{2.0},{3.0,4.0}}; 答案: A 【解析】如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定: 若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于: doublea[1][3]={6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。 (19)若有函数定义如下 intfun(intx,inty) {returnx-y;} 则以下涉及上述函数的说明语句错误的 A)intfun(intx,y);B)intfun(int,int); C)intfun(inta,intb);D)inti,fun(intx,inty); 答案: A 【解析】C语言中函数的说明形式为: 类型说明符函数名(类型形参名1,类型形参名2,...);其中形参名可以与函数定义时的形参名不同,或者直接省略,选项D,变量i和函数同时声明,答案为A选项。 (20)以下判断形参变量a是否为素数的函数正确的是 A)intisprime(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==0)return0; return1; } B)intisprime(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==1)return1; return0; } C)intisprime(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==0)return0; elsereturn1; } D)intisprime(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==1)return1; elsereturn0; } 答案: A 【解析】判断一个整数a是否为素数,最简单的办法是用a与2~a/2之间的所有整数逐个求余,若存在任一个整数i,使得a%i==0,说明存在整数i是a的约数,那么认为a不是素数,否则a是素数。 选项B中判断a%i==1时,认为a是素数,这是错误的;选项C中认为只要存在一个整数i使得a%i! =0,则认为a是素数,换句话说,选项C认为2~a/2之间只要有一个数不是a的约数,就认为a是素数,这也是错误的,必须是2~a/2之间所有的整数都不是a的约数,a才是素数;选项D中认为2~a/2之间只要有一个整数i,使得a%i==1,则认为a是素数,这也是错误的,比如15%7=1,但15不是素数;答案为A。 (21)有以下程序 #include #defineN4 main() {inta[N][N]={0},i,j,k; for(i=0;i {for(j=i;j a[i][j]=a[N-i-1][j]=i+1; for(k=i+1;k a[k][i]=a[k][N-i-1]=i+1; } for(j=0;j printf("%2d",a[1][j]); printf("\n"); } 执行后的输出结果是 A)1221B)1111C)2112D)2222 答案: A 【解析】本题程序需要输出二维数组a中第二行的各个元素值,即a[1]这个一维数组的元素值。 分析程序可知只有在两种情况下才会对a[1]中的元素赋值: 1、外层for循环中i=0时,内层第二个for循环的k取值为1,此时a[k][i]=a[1][0]=1,a[k][N-i-1]=a[1][3]=1;2、外层for循环中i=1时,内层第一个for循环的j取值为1、2,a[i][j]=a[1][j]=2,即a[1][1]=2,a[1][2]=2;除了这两种情况,其他情况不会修改a[1]中的值,所以最终a[1]各个元素的值为: 1、2、2、1;答案选A。 (22)有以下程序 #include intf(intn); main() {inta=3,s; s=f(a);s=s+f(a);printf("%d\n",s); } intf(intn) {staticinta=1; n+=a++; returnn; } 程序运行后的输出结果是 A)7B)8C)9D)10 答案: C 【解析】首先main函数中的局部变量a和f()函数中的静态局部变量a的作用域都只限在其所在的函数中,相互之间不影响,看作两个不同的变量即可;另外f()函数中的静态局部变量a只在第一次调用f()函数时初始化一次,其他调用都会保留上一次调用结束时的值;分析main函数可知,第一次调用时将f(a)的返回值赋给s,所以语句可以改写为: s=f(a)+f(a),即main函数中调用两次f(a),传入的参数a取值都为3,第一次调用时,静态局部变量初始化为1,所以n=4并返回,a自增为2;第二次调用时静态局部变量a取上一次调用结束时的值2,所以n=5并返回,a自增为3;所以在main()函数中,s=4+5=9,所以函数执行完输出结果为9,答案为C。 (23)有以下程序 #include main() {inti,j=0; chara[]="Howareyou! "; for(i=0;a[i];i++) if(a[i]! ='') a[j++]=a[i]; a[j]='\0'; printf("%s\n",a); } 程序运行后的输出结果是 A)Howareyou! B)areyou! C)you! D)Howareyou! u! 答案: A 【解析】首先main函数初始化一个字符数组a,a的内容为字符串”Howareyou! ”(包括结尾的’\0’),所以for循环开始于字符串的首个字符,结束于空字符’\0’,换句话说,for循环遍历字符数组a,将字符数组a的每个非空格字符重新赋值给自身,并在循环结束时加上空字符’\0’,所以整个程序是将字符数组a中的空格字符去除,输出结果为: “Howareyou! ”,答案为A。 (24)若有以下函数 intfun(char*a,char*b) {intbk=0; while((*a! ='\0')&&(*b! ='\0')&&strlen(a)==strlen(b)) {if(*b! =*a){bk=0;break;} a++;b++;bk=1; } returnbk; } 此函数的功能是 A)判断a和b两个字符串是否相等B)将字符串a改名为字符串b C)将字符串变量a的值赋赋给字符串变量b D)检查字符串a和b中是否有'\0' 答案: A 【解析】分析程序可知: 函数fun在字符指针a和b未遇到字符‘\0’且a指向的字符串A长度与b指向的字符串B长度相同时,遍历A、B,逐个比较a指向的字符与b指向的字符是否相同,所以程序分三种情况: 1、A的长度与B的长度不同,返回值为0;2、A的长度与B的长度相等,但A中某个位置i上的字符与B中位置i上的字符不同,返回值为0;3、A的长度与B的长度相等,且A中相同位置上的字符与B中相同位置上的字符全部相同,返回值1;由此可知函数的功能是判断a和b指向的两个字符串是否相等。 答案为A。 (25)设有如下定义和语句 [1]char*s;s="string"; [2]chars[7];s="string"; [3]chars[]="string"; [4]chars[]={'s','t','r','i','n','g'}; 其中定义项可以作为字符串使用的是 A)[1]和[4]B)[1]和[2]C)[1]和[3]D)[3]和[4] 答案: C 【解析】字符数组只能在初始化的时候完成赋值,否则只能对数组元素逐个赋值,[2]是错误的;C语言字符串必须包含’\0’字符,用来表示字符串结束标志,[4]错误;可以将字符串直接赋给字符指针,使得指针指向字符串首地址,[1]正确;在字符数组初始化时,可以直接使用字符串,[3]正确;答案为C。 (26)设有定义和语句(假设shortint型数据占2字节) shortint*pi,*pj; pi=pj=(short*)malloc (2); 则以下叙述正确的是 A)pi和pj指向了同一个shortint型存储单元 B)pi和pj指向了2个连续的shortint型存储单元的首地址 C)pi和pj分别指向了一个shortint型存储单元 D)pi和pj分别指向了2个shortint型存储单元 答案: A 【解析】语句pi=pj=(short*)malloc (2)首先使用动态分配函数malloc分配2个字节的内存空间,然后将内存首地址转换为short*类型并返回,赋值给pj,再将pj的值赋给pi,所以指针pi和pj的值是相同的,指向同一个shortint型的存储单元,选项A正
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级C语言 5套 选择题的副本 二级 语言 选择题 副本