1、2015 年 10 月全国自考(计算机软件基础)真题试卷及答案解析(总分:70.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.C 语言中的基本数据类型是 【 】(分数:2.00)A.数组、结构和指针B.字符型、整型和实型C.整型、实型和浮点型D.基本整型、长整型和短整型2.C 语言中,下列数组定义语句正确的是 【 】(分数:2.00)A.char stra5,strb7;B.char a;C.int i“5“;D.int i=3;int ji;3.有下列程序: #includestdioh void fun(int iint j) i=ij; j+; prin
2、tf(“d,dn“,i,j); void main() int i=5,j=8; fun(i,j); printf(“d,dn“,i,j); 其执行后的输出结果是 【 】(分数:2.00)A.0,9 5,8B.0,9 0,9C.5,9 5,8D.5,9 5,94.已知:int a=10,20,30,*p;,下列语句中正确的是 【 】(分数:2.00)A.p=&a0;B.*p=&a0;C.p=a0;D.&p=a0;5.对于下列代码片段: struct rectangle float width,height; r; 下列语句正确的是 【 】(分数:2.00)A.rectanglewidth=20
3、;B.rwidth=20;C.rectanglewidth=20;D.rwidth=20;6.带有头结点的循环单链表 L 是否为空的判定条件是 【 】(分数:2.00)A.L=NULI。B.L!=NULLC.L 一next=LD.L 一next=NULL7.具有 m 个单元的顺序存储循环队列 Q 的队头和队尾指针分别是 front 和 rear,下列语句中能够判断队列已满的是 【 】(分数:2.00)A.Qfront=QrearB.Qfront!=QrearC.Qfront=(Qrear+1)mD.Qfront!=(Qrear+1)m8.一棵树的结点总数是 n,各结点的度之和是 m,则 【 】
4、(分数:2.00)A.n=m 一 1B.n=mC.n=m+1D.n=m+29.要根据遍历结果唯一确定一棵二叉树,则需要给出 【 】(分数:2.00)A.先序和后序序列,或中序和后序序列B.先序和后序序列,或先序和中序序列C.先序、中序或后序序列D.先序和中序序列,或后序和中序序列10.在一个具有 n 个顶点的完全无向图中,任一个顶点的度等于 【 】(分数:2.00)A.n 一 1B.nC.n+1D.要根据图来确定11.一个图的边集为,从 e 点开始对该图进行深度优先搜索,可能得到的顶点序列是 【 】(分数:2.00)A.e,b,d,a,cB.e,b,a,d,cC.e,b,a,c,dD.e,b,
5、c,d,a12.采用设置监视哨的查找方法时,其实现的前提条件是 【 】(分数:2.00)A.序列采用顺序存储结构,并且必须按关键字值有序排列B.序列采用顺序存储结构,但不需要排序C.序列采用链表存储结构,并且必须按关键字值有序排列D.序列采用链表存储结构,但不需要排序13.50 个有序数折半查找,成功的查找次数为 6 的节点有 【 】(分数:2.00)A.4 个B.8 个C.16 个D.1 9 个14.在瀑布模型中,软件需求分析属于 【 】(分数:2.00)A.计划阶段B.开发阶段C.软件定义阶段D.软件维护阶段15.一个栈的入栈顺序是 a、b、c、d、e,如果在入栈过程中允许出栈,则从该栈不
6、可能得到的输出序列是 【 】(分数:2.00)A.a,b,c,d,eB.c,d,e,b,aC.b,a,c,d,eD.e,d,c,a,b二、填空题(总题数:10,分数:20.00)16.在 C 语言程序的循环体内,若遇到 1 语句,则立即结束循环。(分数:2.00)填空项 1:_17.函数被定义为 1 类型时,它不会返回任何值。(分数:2.00)填空项 1:_18.C 语言函数数据传递方式中,除利用参数传递外,还可以使用 1 和全局变量传递方式。(分数:2.00)填空项 1:_19.按照存储类别划分,局部变量分为 auto、register 和 1 三种。(分数:2.00)填空项 1:_20.C
7、 程序中,调用一个函数的过程中又出现直接或间接地调用该函数本身,这种调用称作函数的 1 调用。(分数:2.00)填空项 1:_21.对于以下代码,其输出结果是 1。 struct person char name20; int age; s2=“Li“,20,“Zhao“,30,*p=s; printf(“d“,(p+1)age)(分数:2.00)填空项 1:_22.下面是顺序栈 s 入栈操作的类 C 代码,top 是栈顶指针,它等于一 1 时表示栈空。请填空完成程序。 #define N 100 struct char dataN; mt top; s; void push(s,x) if(
8、stop1; sdatastop=x; else 栈满; (分数:2.00)填空项 1:_23.深度为 k 的满-X 树的叶子结点数是 1。(分数:2.00)填空项 1:_24.对于一个有 n 个顶点的图来说,其生成树有 1 条边。(分数:2.00)填空项 1:_25.有向图的邻接矩阵表示中,各行的非零元素个数为该行对应顶点的 1 度。(分数:2.00)填空项 1:_三、简答题(总题数:4,分数:8.00)26.请给出 for 语句的语法格式,并简述其执行过程。(分数:2.00)_27.在 int a=1,2,3,*p=&a1;语句中,“*”和“&”各起什么作用?(分数:2.00)_28.简述
9、单链表的结构特点及其建立方法。(分数:2.00)_29.一棵哈夫曼树叶子结点的值是 2、5、10、6、8,请画出该哈夫曼树,并说明建立过程。(分数:2.00)_四、程序分析题(总题数:4,分数:8.00)30.请说明下面函数 fun 的功能。 double fun(int*a,int n) double sum=00; int c=0,*p=a; while(pa+n) if(*p0)sum+=*p;c+; p+; sum=sumc; return sum; fun 函数的功能是:_。(分数:2.00)_31.整数数组 x 内有 n 个元素,下面函数采用冒泡排序法对该数组内的元素进行排序,请在
10、程序中的_处填上正确的内容,完成该函数的功能。 void sort(int x,int n) int i,j,k,m; for(i=0;i_32.下面程序执行后的输出结果是:_。 #inelude struct stru ehar name; int value; ; void fun(struct stru*ptr) ptr 一value+; void main() struct stru a=R,200),*p=&a; fun(p); printf(“c:d“,pname,p 一value); (分数:2.00)_33.下面函数采用设置监视哨方法在已具有 n 个元素的一维数组 x 内查找值
11、为 k 的元素。请在程序中的_处填上正确的内容,完成该程序。 int seek(int x,int k,int n) int i; i=n; x0=k; While( ) i; return i; (分数:2.00)_五、程序设计题(总题数:2,分数:4.00)34.请编写一个函数,在带表头结点的单链表的第 i 个元素之前插入值为 e 的元素(需要给出链表结点的结构定义)。(分数:2.00)_35.请编写一个函数,计算采用链式存储结构的二叉树内的结点数(需要给出二叉树链式存储结构的结点定义)。(分数:2.00)_2015 年 10 月全国自考(计算机软件基础)真题试卷答案解析(总分:70.00
12、,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.C 语言中的基本数据类型是 【 】(分数:2.00)A.数组、结构和指针B.字符型、整型和实型 C.整型、实型和浮点型D.基本整型、长整型和短整型解析:解析:C 语言的数据结构是以数据类型的形式描述出来的。C 语言中的基本数据类型是整型、实型(浮点型)和字符型。2.C 语言中,下列数组定义语句正确的是 【 】(分数:2.00)A.char stra5,strb7; B.char a;C.int i“5“;D.int i=3;int ji;解析:解析:一维数组的定义形式为:类型说明符数组名常量表达式。3.有下列程序: #
13、includestdioh void fun(int iint j) i=ij; j+; printf(“d,dn“,i,j); void main() int i=5,j=8; fun(i,j); printf(“d,dn“,i,j); 其执行后的输出结果是 【 】(分数:2.00)A.0,9 5,8 B.0,9 0,9C.5,9 5,8D.5,9 5,9解析:4.已知:int a=10,20,30,*p;,下列语句中正确的是 【 】(分数:2.00)A.p=&a0; B.*p=&a0;C.p=a0;D.&p=a0;解析:解析:C 语言规定,数组名是数组的首地址,也即元素 a0的地址。语句
14、p=a0;和 p=a;是等价的。5.对于下列代码片段: struct rectangle float width,height; r; 下列语句正确的是 【 】(分数:2.00)A.rectanglewidth=20;B.rwidth=20; C.rectanglewidth=20;D.rwidth=20;解析:6.带有头结点的循环单链表 L 是否为空的判定条件是 【 】(分数:2.00)A.L=NULI。B.L!=NULLC.L 一next=L D.L 一next=NULL解析:解析:循环单链表是将单链表苛尾相接构成的,最后一个指针域不为空,指向表头结点(即 r-)next=tlead)。带
15、有头结点的循环单链表 L 是否为空的判定条件是 L-)next=L。7.具有 m 个单元的顺序存储循环队列 Q 的队头和队尾指针分别是 front 和 rear,下列语句中能够判断队列已满的是 【 】(分数:2.00)A.Qfront=QrearB.Qfront!=QrearC.Qfront=(Qrear+1)m D.Qfront!=(Qrear+1)m解析:8.一棵树的结点总数是 n,各结点的度之和是 m,则 【 】(分数:2.00)A.n=m 一 1B.n=mC.n=m+1 D.n=m+2解析:9.要根据遍历结果唯一确定一棵二叉树,则需要给出 【 】(分数:2.00)A.先序和后序序列,或
16、中序和后序序列B.先序和后序序列,或先序和中序序列C.先序、中序或后序序列D.先序和中序序列,或后序和中序序列 解析:解析:已知一个二叉树的先序和中序或后序和中序遍历结果可以唯一地确定一棵二又树。10.在一个具有 n 个顶点的完全无向图中,任一个顶点的度等于 【 】(分数:2.00)A.n 一 1 B.nC.n+1D.要根据图来确定解析:11.一个图的边集为,从 e 点开始对该图进行深度优先搜索,可能得到的顶点序列是 【 】(分数:2.00)A.e,b,d,a,cB.e,b,a,d,cC.e,b,a,c,d D.e,b,c,d,a解析:解析:深度优先遍历的基本思路(假定从 A 出发)是:先访问
17、 A 点,再访问 A 的第 1 个尚未访问的邻接点 B;再访问 B 的第 1 个尚未访问的邻接点 C;再访问 C 的第 1 个尚未访问的邻接点 D;。到头后沿原路返回,再访问返回路径上其他点的第 1 个尚未访问的邻接点,直至所有顶点访问完毕。12.采用设置监视哨的查找方法时,其实现的前提条件是 【 】(分数:2.00)A.序列采用顺序存储结构,并且必须按关键字值有序排列B.序列采用顺序存储结构,但不需要排序 C.序列采用链表存储结构,并且必须按关键字值有序排列D.序列采用链表存储结构,但不需要排序解析:13.50 个有序数折半查找,成功的查找次数为 6 的节点有 【 】(分数:2.00)A.4
18、 个B.8 个C.16 个D.1 9 个 解析:14.在瀑布模型中,软件需求分析属于 【 】(分数:2.00)A.计划阶段B.开发阶段 C.软件定义阶段D.软件维护阶段解析:解析:在瀑布模型中,软件需求分析、总体设计、详细设计和编码均属于开发阶段。15.一个栈的入栈顺序是 a、b、c、d、e,如果在入栈过程中允许出栈,则从该栈不可能得到的输出序列是 【 】(分数:2.00)A.a,b,c,d,eB.c,d,e,b,aC.b,a,c,d,eD.e,d,c,a,b 解析:解析:栈是一种先进后出的线性表,若入栈顺序是 a、b、c、d、e,则在 e、d、c 已出栈的情况下,a 不可能先于 b 出栈。二
19、、填空题(总题数:10,分数:20.00)16.在 C 语言程序的循环体内,若遇到 1 语句,则立即结束循环。(分数:2.00)填空项 1:_ (正确答案:正确答案:break)解析:17.函数被定义为 1 类型时,它不会返回任何值。(分数:2.00)填空项 1:_ (正确答案:正确答案:void)解析:18.C 语言函数数据传递方式中,除利用参数传递外,还可以使用 1 和全局变量传递方式。(分数:2.00)填空项 1:_ (正确答案:正确答案:返回值)解析:19.按照存储类别划分,局部变量分为 auto、register 和 1 三种。(分数:2.00)填空项 1:_ (正确答案:正确答案:
20、static)解析:20.C 程序中,调用一个函数的过程中又出现直接或间接地调用该函数本身,这种调用称作函数的 1 调用。(分数:2.00)填空项 1:_ (正确答案:正确答案:递归)解析:21.对于以下代码,其输出结果是 1。 struct person char name20; int age; s2=“Li“,20,“Zhao“,30,*p=s; printf(“d“,(p+1)age)(分数:2.00)填空项 1:_ (正确答案:正确答案:30)解析:22.下面是顺序栈 s 入栈操作的类 C 代码,top 是栈顶指针,它等于一 1 时表示栈空。请填空完成程序。 #define N 10
21、0 struct char dataN; mt top; s; void push(s,x) if(stop1; sdatastop=x; else 栈满; (分数:2.00)填空项 1:_ (正确答案:正确答案:stop+)解析:23.深度为 k 的满-X 树的叶子结点数是 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:2 k-1)解析:24.对于一个有 n 个顶点的图来说,其生成树有 1 条边。(分数:2.00)填空项 1:_ (正确答案:正确答案:n 一 1)解析:25.有向图的邻接矩阵表示中,各行的非零元素个数为该行对应顶点的 1 度。(分数:2.00)填空项 1:_ (
22、正确答案:正确答案:出)解析:三、简答题(总题数:4,分数:8.00)26.请给出 for 语句的语法格式,并简述其执行过程。(分数:2.00)_正确答案:(正确答案:for 语句的语法格式是:for(表达式 1;表达式 2;表达式 3)循环体语句; for语句的执行过程是: (1)计算表达式 1。 (2)判断表达式 2 的值是否为 0,如果为 0,则结束循环,否则执行循环体。 (3)计算表达式 3,再转到第(2)步。)解析:27.在 int a=1,2,3,*p=&a1;语句中,“*”和“&”各起什么作用?(分数:2.00)_正确答案:(正确答案:在该语句中,“*”说明定义的变量 p 是一个
23、指针类型变量,而“”则是取 a1元素的地址。)解析:28.简述单链表的结构特点及其建立方法。(分数:2.00)_正确答案:(正确答案:单链表中的每个结点都有两个域:数据域和指针域。数据域保存该结点的信息,指针域存储下一个结点的地址。最后一个结点的指针域为 NULL。所有结点通过指针域的链接,组成一个单向链表。单链表的建立可以采用尾插法和头插法两种方法。头插法是把每个结点插入到当前链表的头部,尾插法则是把新结点插入到当前链表的尾部。)解析:29.一棵哈夫曼树叶子结点的值是 2、5、10、6、8,请画出该哈夫曼树,并说明建立过程。(分数:2.00)_正确答案:(正确答案:建立的哈夫曼树如答 29
24、图所示。建立过程是: (1)把叶子结点值按升序排列,第一次排序后的序列是:2、5、6、8、10。 (2)取出两个值最小的结点构造一个二叉树,二叉树根结点值是这两个结点值之和。 (3)将该二叉树的叶子结点值从第(1)步中的排序中删除,然后将其根结点加入后重新排序。 (4)重复上面步骤直到哈夫曼树生成为止。 )解析:四、程序分析题(总题数:4,分数:8.00)30.请说明下面函数 fun 的功能。 double fun(int*a,int n) double sum=00; int c=0,*p=a; while(pa+n) if(*p0)sum+=*p;c+; p+; sum=sumc; ret
25、urn sum; fun 函数的功能是:_。(分数:2.00)_正确答案:(正确答案:计算数组 a 内值大于零的元素的平均值)解析:31.整数数组 x 内有 n 个元素,下面函数采用冒泡排序法对该数组内的元素进行排序,请在程序中的_处填上正确的内容,完成该函数的功能。 void sort(int x,int n) int i,j,k,m; for(i=0;i_正确答案:(正确答案:xjxj+1)解析:32.下面程序执行后的输出结果是:_。 #inelude struct stru ehar name; int value; ; void fun(struct stru*ptr) ptr 一va
26、lue+; void main() struct stru a=R,200),*p=&a; fun(p); printf(“c:d“,pname,p 一value); (分数:2.00)_正确答案:(正确答案:R:201)解析:33.下面函数采用设置监视哨方法在已具有 n 个元素的一维数组 x 内查找值为 k 的元素。请在程序中的_处填上正确的内容,完成该程序。 int seek(int x,int k,int n) int i; i=n; x0=k; While( ) i; return i; (分数:2.00)_正确答案:(正确答案:xi!=k)解析:五、程序设计题(总题数:2,分数:4.
27、00)34.请编写一个函数,在带表头结点的单链表的第 i 个元素之前插入值为 e 的元素(需要给出链表结点的结构定义)。(分数:2.00)_正确答案:(正确答案:#define datatype int typedef struct node datatype data; struct node*next; *LinkList; int Listlnsert(LinkList L,int i,datatype e) int j=0; LinkList p=L,s; while(p&jnext; j+; if(!Pji 一 1)return 一 1; s=(LinkList)malloc(siz
28、eof(LNode); s 一data=e: s 一next=p 一next pnext=s; return 0; )解析:35.请编写一个函数,计算采用链式存储结构的二叉树内的结点数(需要给出二叉树链式存储结构的结点定义)。(分数:2.00)_正确答案:(正确答案:#define datatype int typedef struct node datatype data; struct node*lchild,*rchild; *BiTree; int Count(BiTree T) int count=0: if(T) count+; count+=Count(Tlchild); count+=Count(Trchild); return count; )解析: