1、全国自考(计算机软件基础)-试卷 6 及答案解析(总分:62.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.如下图所示的 4 棵二叉树中,不是完全二叉树的是 【 】 (分数:2.00)A.B.C.D.2.如果某二叉树的先序序列是 stuwv,中序序列是 uwtvs,那么该二叉树的后序序列为【 】(分数:2.00)A.uwvtsB.vwutsC.wuvtsD.wutsv3.如下图所示的二叉树的中序遍历序列是 【 】 (分数:2.00)A.abcdgefB.dfebagcC.dbaefcgD.defbagc4.如果 T2 是由有序树 T 转化而来的二叉树,那么 T
2、 的先序序列就是 T2 的 【 】(分数:2.00)A.先序序列B.中序序列C.后序序列D.层次序序列5.按照二叉树的定义,具有 3 个节点的二叉树的中序遍历结果为 abc,则该类二叉树共有 【 】(分数:2.00)A.3 种B.4 种C.5 种D.6 种6.在一个非空二叉树的中序遍历序列中,根节点的右边 【 】(分数:2.00)A.只有右子树上的所有节点B.只有右子树上的部分节点C.只有左子树的部分节点D.只有左子树上的所有节点7.具有 n 个叶子节点的哈夫曼树的节点总数为 【 】(分数:2.00)A.不确定B.2nC.2n+1D.2n 一 18.在具有 n 个顶点、e 条边的无向图的邻接表
3、中,所有边的链表中边节点的总数是 【 】(分数:2.00)A.eeB.eC.2eD.2e+n9.对节点个数为 18 的顺序存储有序表,则采用折半查找方法查找第 15 个节点的成功查找次数为 【 】(分数:2.00)A.3B.4C.5D.610.下列描述不正确的是 【 】(分数:2.00)A.顺序查找对表中元素的存放位置无任何要求,当 n 较大时,效率低B.当顺序表中关键字有序时,可采用折半查找C.折半查找也称为二分查找D.在链式存储结构上可以进行折半查找11.关键字比较的次数与记录的初始排列次序无关的是 【 】(分数:2.00)A.希尔排序B.冒泡排序C.插入排序D.选择排序12.肖待排序的序
4、列中数据关键字基本有序或元素个数较少时,则最好的排序方法是【 】(分数:2.00)A.基数排序B.冒泡排序C.直接选择排序D.直接插入排序13.结构设计属于软件开发中的哪个阶段 【 】(分数:2.00)A.软件定义阶段B.软件编码阶段C.软件设计阶段D.软件维护阶段14.下列是结构化语言的是 【 】(分数:2.00)A.FORTRANB.CC.BASICD.COBOL15.在瀑布模型中,将软件开发的过程划分为若干个阶段,软件项目的可行性研究属于【 】(分数:2.00)A.维护阶段B.计划阶段C.运行阶段D.开发阶段二、填空题(总题数:10,分数:20.00)16.表达式 3*92+92*5 的
5、值为 1。(分数:2.00)填空项 1:_17.执行下列语句后,变量 x 的值是 1。 switch(x=1) case 1:x=2; case 2:x=3; (分数:2.00)填空项 1:_18.若定义了一个二维数组 int34;且该数组的起始地址为 1000,则元素 a13的地址为 1。(一个整型变量占 2 个字节)(分数:2.00)填空项 1:_19.执行下列程序段后,*(p+1)的值是 1。 char c3=“ab“,*p; p=c;(分数:2.00)填空项 1:_20.为了使线性表能更好地做插入与删除操作,应采用 1 存储结构为好。(分数:2.00)填空项 1:_21.栈满后再进行进
6、栈运算,则发生 1。(分数:2.00)填空项 1:_22.已知 8 个数据元素为 34、76、45、18、26、54、92、65,按照依次插入节点的方法生成一棵二叉排序树,则该树的深度为 1。(分数:2.00)填空项 1:_23.圈的 1 是图运算的基础。(分数:2.00)填空项 1:_24.假设待排序数据元素序列的关键字序列为 1、2、2、1,采用冒泡排序方法按递增排序得到的结果为 1。(分数:2.00)填空项 1:_25. 1 是现实世界中个体或事物的抽象。(分数:2.00)填空项 1:_三、程序分析题(总题数:4,分数:8.00)26.当运行下列程序时,从键盘输入 AabD,请写出下面程
7、序的运行结果。 #include main() char s80; int i=0: gets(s): while(si!=0) if(si=a) si=z+a一 si;i+: puts(s): (分数:2.00)_27.写出下列程序的运行结果。 #include #include typedef struct char name10; long hum; float score; STU; main() STU a=“liming“,1001,86,b=“anjia“,1002,95,c=“lili“,1003,100,d,*p=&d; d=a: if(strcmp(aname,bname)
8、0) d=b; if(strcmp(cname,bname)0) d=c; printf(“s,dn“,pname,dnum); (分数:2.00)_28.下列程序的功能是将从键盘输入的一对数,按从小到大的顺序输出,当输入一对相等的数时结束循环。请填空完成程序。 #include main() int a,b,t; scanf(“dd“,&a,&b); while( ) if( ) t=a;a=b;b=t; printf(“d,dn“,a,b); scanf(“dd“,a,&b); (分数:2.00)_29.下列函数的功能是求链表长度。请填空完成算法。 struct node char ch;
9、 struct node*link; ;str(struct node*p) int ; while(p!=NULL) ; count+; return(count); (分数:2.00)_四、程序设计题(总题数:2,分数:4.00)30.编写 C 程序,其中 fun 函数的功能是求 n 以内(不包括 n)同时能被 3 与 7 整除的所有整数之和的平方根;主函数的功能是输入 n 的值,调用 fun 函数,并输出结果。(分数:2.00)_31.请编写函数,从传送过来的三个数中选出最大数和最小数,并通过形参传回调用函数。(分数:2.00)_全国自考(计算机软件基础)-试卷 6 答案解析(总分:62
10、.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.如下图所示的 4 棵二叉树中,不是完全二叉树的是 【 】 (分数:2.00)A.B.C. D.解析:解析:完全二叉树是一个满二叉树的最下层从右向左连续缺少 n(n0)个节点的二叉树。2.如果某二叉树的先序序列是 stuwv,中序序列是 uwtvs,那么该二叉树的后序序列为【 】(分数:2.00)A.uwvtsB.vwutsC.wuvts D.wutsv解析:3.如下图所示的二叉树的中序遍历序列是 【 】 (分数:2.00)A.abcdgefB.dfebagc C.dbaefcgD.defbagc解析:解析:中序遍
11、历的次序是中序遍历左子树、访问根节点、中序遍历右子树。4.如果 T2 是由有序树 T 转化而来的二叉树,那么 T 的先序序列就是 T2 的 【 】(分数:2.00)A.先序序列 B.中序序列C.后序序列D.层次序序列解析:解析:树的先序遍历结果和对应二叉树的先序遍历结果一样。5.按照二叉树的定义,具有 3 个节点的二叉树的中序遍历结果为 abc,则该类二叉树共有 【 】(分数:2.00)A.3 种B.4 种C.5 种 D.6 种解析:6.在一个非空二叉树的中序遍历序列中,根节点的右边 【 】(分数:2.00)A.只有右子树上的所有节点 B.只有右子树上的部分节点C.只有左子树的部分节点D.只有
12、左子树上的所有节点解析:解析:中序遍历的次序是先中序遍历根的左子树,再访问根节点,最后中序遍历右子树,因此,根节点的右边只有右子树上的所有节点。7.具有 n 个叶子节点的哈夫曼树的节点总数为 【 】(分数:2.00)A.不确定B.2nC.2n+1D.2n 一 1 解析:解析:哈夫曼树是二叉树,因此二叉树的性质适用于哈夫曼树,又因为它没有度为 1 的节点,所以度为 2 的节点的个数为 n 一 1 个,节点总数为 n+(n 一 1)=2n 一 1。8.在具有 n 个顶点、e 条边的无向图的邻接表中,所有边的链表中边节点的总数是 【 】(分数:2.00)A.eeB.eC.2e D.2e+n解析:解析
13、:在邻接表中,边节点是顶点的所有邻接点,1 条边连接 2 个丁贞点,因此,边节点的总数是2e。9.对节点个数为 18 的顺序存储有序表,则采用折半查找方法查找第 15 个节点的成功查找次数为 【 】(分数:2.00)A.3B.4 C.5D.6解析:10.下列描述不正确的是 【 】(分数:2.00)A.顺序查找对表中元素的存放位置无任何要求,当 n 较大时,效率低B.当顺序表中关键字有序时,可采用折半查找C.折半查找也称为二分查找D.在链式存储结构上可以进行折半查找 解析:解析:折半查找只适用于有序表,且限于顺序存储结构,在链式存储结构上是无法进行折半查找的。11.关键字比较的次数与记录的初始排
14、列次序无关的是 【 】(分数:2.00)A.希尔排序B.冒泡排序C.插入排序D.选择排序 解析:12.肖待排序的序列中数据关键字基本有序或元素个数较少时,则最好的排序方法是【 】(分数:2.00)A.基数排序B.冒泡排序C.直接选择排序D.直接插入排序 解析:13.结构设计属于软件开发中的哪个阶段 【 】(分数:2.00)A.软件定义阶段B.软件编码阶段C.软件设计阶段 D.软件维护阶段解析:解析:软件设计阶段分为两个子阶段:总体设计和详细设计。总体设计过程和结构设计两个部分组成。14.下列是结构化语言的是 【 】(分数:2.00)A.FORTRANB.C C.BASICD.COBOL解析:1
15、5.在瀑布模型中,将软件开发的过程划分为若干个阶段,软件项目的可行性研究属于【 】(分数:2.00)A.维护阶段B.计划阶段 C.运行阶段D.开发阶段解析:二、填空题(总题数:10,分数:20.00)16.表达式 3*92+92*5 的值为 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:6)解析:17.执行下列语句后,变量 x 的值是 1。 switch(x=1) case 1:x=2; case 2:x=3; (分数:2.00)填空项 1:_ (正确答案:正确答案:3)解析:18.若定义了一个二维数组 int34;且该数组的起始地址为 1000,则元素 a13的地址为 1。(一
16、个整型变量占 2 个字节)(分数:2.00)填空项 1:_ (正确答案:正确答案:1014)解析:19.执行下列程序段后,*(p+1)的值是 1。 char c3=“ab“,*p; p=c;(分数:2.00)填空项 1:_ (正确答案:正确答案:b)解析:20.为了使线性表能更好地做插入与删除操作,应采用 1 存储结构为好。(分数:2.00)填空项 1:_ (正确答案:正确答案:链式)解析:21.栈满后再进行进栈运算,则发生 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:上溢)解析:22.已知 8 个数据元素为 34、76、45、18、26、54、92、65,按照依次插入节点的方
17、法生成一棵二叉排序树,则该树的深度为 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:5)解析:23.圈的 1 是图运算的基础。(分数:2.00)填空项 1:_ (正确答案:正确答案:遍历)解析:24.假设待排序数据元素序列的关键字序列为 1、2、2、1,采用冒泡排序方法按递增排序得到的结果为 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:1 ,1,2,2)解析:25. 1 是现实世界中个体或事物的抽象。(分数:2.00)填空项 1:_ (正确答案:正确答案:对象)解析:三、程序分析题(总题数:4,分数:8.00)26.当运行下列程序时,从键盘输入 AabD,请写出下
18、面程序的运行结果。 #include main() char s80; int i=0: gets(s): while(si!=0) if(si=a) si=z+a一 si;i+: puts(s): (分数:2.00)_正确答案:(正确答案:AzyD)解析:27.写出下列程序的运行结果。 #include #include typedef struct char name10; long hum; float score; STU; main() STU a=“liming“,1001,86,b=“anjia“,1002,95,c=“lili“,1003,100,d,*p=&d; d=a: i
19、f(strcmp(aname,bname)0) d=b; if(strcmp(cname,bname)0) d=c; printf(“s,dn“,pname,dnum); (分数:2.00)_正确答案:(正确答案:lili,1003)解析:28.下列程序的功能是将从键盘输入的一对数,按从小到大的顺序输出,当输入一对相等的数时结束循环。请填空完成程序。 #include main() int a,b,t; scanf(“dd“,&a,&b); while( ) if( ) t=a;a=b;b=t; printf(“d,dn“,a,b); scanf(“dd“,a,&b); (分数:2.00)_正
20、确答案:(正确答案:a!=b ab)解析:29.下列函数的功能是求链表长度。请填空完成算法。 struct node char ch; struct node*link; ;str(struct node*p) int ; while(p!=NULL) ; count+; return(count); (分数:2.00)_正确答案:(正确答案:count=0 p=p 一next)解析:四、程序设计题(总题数:2,分数:4.00)30.编写 C 程序,其中 fun 函数的功能是求 n 以内(不包括 n)同时能被 3 与 7 整除的所有整数之和的平方根;主函数的功能是输入 n 的值,调用 fun
21、函数,并输出结果。(分数:2.00)_正确答案:(正确答案:#include #include int fun(int n); main() int inputNum; scanf(“d“,&inputNum); printf(“输入的数是dn 计算结果为:dn“, inputNum,fun(inputNum); int fun(int n) int sum=0; for(int i=1;i解析:31.请编写函数,从传送过来的三个数中选出最大数和最小数,并通过形参传回调用函数。(分数:2.00)_正确答案:(正确答案:#include fun(int*a,int*b,int*c) int max,min; max=*a;min=*a; if(*b*a)max=*b; if(*bmax)max=*c: if(*c解析: