02243自考计算机软件基础一练习题和答案Word下载.docx
《02243自考计算机软件基础一练习题和答案Word下载.docx》由会员分享,可在线阅读,更多相关《02243自考计算机软件基础一练习题和答案Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
该程序输出结果是()
A.O.000000B.0.250000
C.0.500000D.1.000000
4.有如下程序:
{inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=O;
for(i=1;
i<
3;
i++)
for(j=0;
j<
=i;
j++)
s+=a[i][j];
printf(“%d\n”,s);
该程序的输出结果是()
A.18B.19
C.20D.21
5.下列程序的输出结果是()
intf()
{staticinti=0;
ints=1:
s+=i;
i++:
returns;
}
main()
{inti,a=O;
for(i=O;
5;
i++)a+=f();
printf(“%d\n”,a);
A.20B.24
C.25D.15
6.设有定义:
intn1=O,n2,*p=&
n2,*q=&
n1;
,则以下赋值语句中与n2=n1;
语句等价的是()
A.*p=*q;
B.p=q;
C.*p=&n1;
D.p=*q;
7.若有以下程序:
stdio.h>
voidf(intn);
{voidf(intn);
f(5);
}
voidf(intn)
{printf(“%d\n”,n);
则以下说法中不正确的是()
A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B.若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数f
C.对于以上函数程序,编译时系统会提示出错信息;
提示对f函数重复说明
D.函数f无返回值,所以可用void将其类型定义为无值型
8.有如下程序:
{inta[]={2,4,6,8,10},y=0,x,*p;
p=&
a[1];
for(x=1;
x<
x++)y+=p[x];
printf(“%d\n”,y);
则程序运行后的输出结果是()
A.10B.11
C.14D.15
9.非空的循环单链表head的尾节点(由p所指向)满足()
A.p→next=NULLB.p=NULL
C.p→next=headD.p=head
10.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为()
A.SA+141B.SA+144
C.SA+222D.SA+225
11.具有5层节点的完全二叉树至少有个节点。
()
A.16B.12
C.15D.17
12.如下图所示的t2是由树t1转换而来的二叉树,那么树t1有个叶子节点。
()
A.4B.5
C.6D.7
13.有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为()
A.35/12B.37/12
C.39/12D.43/12
14.程序的三种基本控制结构的共同特点是()
A.不能嵌套使用B.只能用来写简单程序
C.已经用硬件实现D.只有一个入口和一个出口
15.为了提高测试的效率,应该()
A.随机地选取测试数据
B.取一切可能的输入数据作为测试数据
C.在完成编码以后制定软件的测试计划
D.选择发现错误可能性大的数据作为测试数据
第二部分非选择题
二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。
错填、不填均无分。
16.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是____。
17.下列函数值的类型是____。
fun(floatx)
{floaty;
y=3*x—4;
returny;
18.若有定义语句:
chars[l00],d[1OO];
intj=O,i=O;
,且s中已赋字符串,请填空以实现复制。
(注:
不使用逗号表达式)
while(s[i]){d[j]=____;
j++;
d[j]=0;
19.有如下定义:
struct
{intx;
char*y;
}a[2]={{1,“abc”},{2,“def”}},*p=a;
则p→y的值____;
(++p)→y的值____。
20.在一个单链表中,若删除p所指节点的后继节点,则执行____。
21.若已知一个栈的入栈序列是1,2,3,……,n,其输出序列为pl,p2,p3,……,pn,若pl=n,则pi为____。
22.设n,m为一棵二叉树上的两个节点,在中序遍历时,n在m前的条件是____。
23.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是____。
24.数组A[5][6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5][5]的地址为____。
25.对于长度为n的线性表,若进行顺序查找,则时间复杂度为____;
若采用二分法查找,则其ASL为____。
三、解答题(本大题共4小题,每小题4分,共16分)
26.下列函数的功能是:
在一个带头节点的单向链表中,查找元素最大的节点并输出。
请将该函数补充完整。
typedefintdatatype;
structnode
{datatypedata;
structnode*next;
};
typedefstructnodeLinkList;
voidsearch(LinkList*h)
{List*q,*pmax,*s;
pmax=h→next;
q=pmax→next;
while()
{if(q→data>pmax→data)
pmax=q;
q=q→next;
}
printf(“最大值是%d”,pmax→data);
27.已知某图的顶点集和边集如下所示,请画出该图。
V={v1,v2,v3,v4)
E={<
v1,v2>
<
v1,v3>
v4,v1>
v4,v2>
v4,v3>
28.对于下图,分别写出按深度优先和广度优先搜索的结果。
29.假设现有电文“ACBCCACBCCDCBC”,其中出现的字符为“A”,“B”,“C”,“D”,它们出现的次数分别为2,3,8,1。
要求画出由此得到的哈夫曼树及其编码。
四、程序分析题(本大题共4小题,每小题4分,共16分)
30.写出下列程序的输出结果。
{inta[4][5]={{1,2,3,4,0},{2,3,O,O,O},{3,4,5,O,0},{6,0,O,O,O}};
intj,k;
for(j=O;
4;
for(k=0;
k<
k++)
{if(a[j][k]==0)break;
printf(“%d”,a[j][k]);
printf(“\n”);
31.写出下列程序的输出结果。
{int*p1,*p2,*p,a=5,b=8;
p1=&a;
p2=&
b;
if(a<
b){p=pl;
pl=p2;
p2=p;
printf(“%d,%d,”,*p1,*p2);
printf(“%d,%d”,a,b);
32.写出下列程序的输出结果。
voidsort(inta[],intn)
{inti,j,t;
for(i=O;
n-1;
for(j=i+1;
n;
if(a[i]<
a[j]){t=a[i];
a[i]=a[j];
a[j]=t;
{intaa[10]={1,2,3,4,5,6,7,8,9,10),i;
sort(&
aa[3],5);
for(i=0;
lO;
i++)printf(“%d,”,aa[i]);
printf(“\n”);
33.阅读程序段,若串s为“pcs389%+-ac”,写出调用reverse(buf)后buf的内容。
charbuf[]
reverse(char*s)
{intc,k;
char*p
k=strlen(s);
for(p=s+k-1;
s<p;
s++,p--)
{c=*s;
*s=*p;
*p=c;
五、程序设计题(本大题共2小题,每小题9分,共18分)
34.输入三个整数,按由小到大的顺序输出(要求用指针处理)。
35.假设二叉树采用链接存储方式存储,编写一个后序遍历二叉树的非递归函数。
计算机软件基础
(一)答案
一、单项选择题
1.D【解析】c语言中的“或”关系用“‖”表示,其他相关逻辑运算符“与”用“&
”表示;
运算符“非”用“!
”来表示
2.C
3.C【解析】本题考查的是if…else语句的使用。
x=2.o,符合第二个IF语句的条件x<
10.0,所以执行y=1.0/x语句,即y=l.0/2.0=0.500000。
4.A【解析】题中的外循环只执行了2次。
笫1次:
a[1][O]=3,a[1][1]=4,所以s=7;
第2次:
a[2][0]=5,a[2][1]=6,a[2][2]=0,所以s=7+5+6+0=18。
5.D【解析】在函数多次被调用的过程中静态局部变量的值具有可继承性。
在第一次凋用函数结束时,i的值是1,返叫值1,第二次调用函数时,i的值保持为1,执行自加操作后,j的值变成了2.到了第三次调用时,i的值保持了上次调用结束时的值,再执行自加,值变成了3。
到第五次调用结束叫,i的值是5。
而s的值不具备i的这种可继承性,每次调用时,它都先被重新赋值为1.再执行下面的操作。
6.A【解析】*p=*q即表示将q指向变量的值取出赋予p指向的变量。
7.C【解析】一个函数在一个文件中的定义只能有一次,但对它的声明却可以有很多个。
一个函数可以正确调用在当前函数之前声明的函数。
对于本题来说,如果有一个新的函数fNew()是在f()函数之后说明的,那么即使主函数tp没有对函数f进行说明,在fNew()中同样可以正确调用函数f()。
8.C【解析】执行p=&
后,p指向了a[1]的地址,p[l]、p[2]的值即为6、8,经过累加后y的值为14。
9.C
10.C【解析】A[8][5]相对于A[1][1]的位置是7*10+4=74;
则A[8][5]的地址为SA+74*3=SA+222。
11.A【解析】比4层满二叉树多一个节点即为本题答案;
4层满二叉树的节点数为24-1=15个,因此A选项正确。
12.A【解析】根据左孩子右兄弟表示法可以到转换后的二叉树中找没有左孩子的节点即为原树中的叶子节点。
13.B【解析】构造一棵有序二叉树,共12个节点,第一层1个节点,第二层2个节点,第三层4个节点,第四层5个节点,则ASL=(1*1+2*2+3*4+4*5)/12=37/12。
14.D【解析】程序的特点就是从一个入口开始,最终以一个出口结束
15.D【解析】为了提高测试的效率,测试用例应该选择发现错误可能性大的部分,这样的测试结果才符合软件测试的目的。
二、填空题
16.2.O
【解析】这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值l,在没有进行类型转换的t留下,3/2的值为1,所以x+3/2的值应为2.0。
17.int
【解析】c语言中如果函数前不加任何数据类型时,缺省函数的类型为整型,函数的类型就是函数返回值的类型。
18.s[i++]
【解析】本题中为了能实现字符串的复制,需要使字符数组s从头到尾依次遍历其所有元素。
本题应使用i的自增后置来实现。
19.abcdef
【解析】因定义了*p=a因此p指向了a数组,即a[0];
p→y则是a[O].y的值;
++p后,p指向了a[l]。
20.p→next=p→next→next
【解析】通过p→next=p→next→next可将p的后继节点断开了p→next的链接。
21.n-i+l
【解析】当pl=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的,那么输入顺序必定是1,2,3,……,n,则出栈的序列是n,……,3,2,1。
22.n在m左方
【解析】中序遍历的规则是先遍历左子树后访问根节点再遍历右子树;
因此n在m左方才能保证先访问n。
23.n2
24.1140
【解析】A[5][5]相对于A[0][0]的位置是4*6+14=28,则A[5][5]的地址为1000+28*5=1140。
25.O(n)
-1
三、解答题
26.q!
=NULL
【解析】当q指针不为空作为循环的条件。
structnode*next;
};
voidsearch(LinkList*h)
{List*q,*pmax,*s;
pmax=h→next;
/*让pmax指针指向第一个节点*/
/*给q指针置初值,即让其指向pmax的下一个节点*/
while(q!
=NULL)
{if(q→data>
pmax→data)/*.若q指针的数据域大于pmax的数据域,则将pmax指向q指针指向的节接*/
pmax=q;
q=q→next;
/*q指针后移*/
printf(“最大值是%d”,pmax→data);
27.
28.
深度优先遍历结果:
广度优先遍历结果:
29.【解析】通常约定树中左分支表示字符“O”,右分支表示字符“1”,从根节点到叶子节点的路径上的分支对应的字符组成的串就是该叶子节点对应的编码。
编码:
A000
B01
C1
D001
四、程序分析题
30.1234
23
345
6
【解析】在循环语句中break语句的功能是退出最内层循环,而不是多层。
31.8,5,5,8
【解析】pl与p2交换后,达到所指向的变量发生r变化,而a和b的值并没有变化。
32.1,2,3,8,7,6,5,4,9,10,
【解析】函数sort的功能是由大到小排序,实参是aa[3]和5,即由aa[3]开始对5个元素进行排序。
33.ca-+%983scp
【解析】reverse函数功能是将字符串s的字符全部首尾颠倒过来。
五、程序设计题
34.【解析】
{intnl,n2,n3;
int*pointer1,*pointer2,*pointer3;
printf(“请输入三个整数:
”);
scanf(“%d,%d,%d”,&n1,&
n2,&
n3);
pointerl=&n1;
/*让pointer1指向变量n1*/
pointer2=&
n2;
pointer3=&
n3;
if(n1>
n2)swap(pointerl,pointer2);
/*调用swap()交换函数*/
if(n1>
n3)swap(pointerl,pointer3);
if(n2>
n3)swap(pointer2,pointer3);
printf(“排序后三个整数为:
%d,%d,%d\n”,n1,n2,n3);
swap(int*pl,int*p2)
{intp;
p=*p1;
*p1=*p2;
*p2=p;
/*交换。
P1与*p2的值*/
35.【解析】
voidpostorder(btree*b)
{btree*stack[mO],*p;
inttag[mO],top=O;
p=b;
do
{while(p!
=null)/*扫描左节点*/
{top++;
stack[top]=p;
tag[top]=O;
p=p→left;
if(top>
O)
{p=stack[top];
/*p所指节点为无左子树的节点或其左子树已遍历过*/
if(tag[top]==1;
{top--;
/*p的左右子树都访问过*/
printf(“%d”,p→data);
/*访问节点*/
{p=p→right;
/*扫描右子树*/
tag[top]=1;
/*表示当前节点的右子树已访问过*/
}while(p!
=NULL&
&
top!
=0)