1、2010 年山东专升本(计算机科学与技术综合二)真题试卷及答案解析(总分:70.00,做题时间:90 分钟)一、数据结构(总题数:21,分数:34.00)1.单项选择题_2.以下数据结构中哪一个是线性结构( )。(分数:2.00)A.栈B.线索二叉树C.AOV 网D.二叉排序树3.若有 a,b,c 三个字符的字符序列执行入栈操作,则其所有可能的输出排列共有( )。(分数:2.00)A.4 种B.5 种C.6 种D.其他4.一棵树的广义表表示为 a(b,c(e,f(g),d),当用左孩子一右兄弟链表表示时,右指针域非空的节点个数为( )。(分数:2.00)A.1B.2C.3D.45.下面关于图的
2、存储的叙述中正确的是( )。(分数:2.00)A.用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关B.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关C.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关D.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关6.对长度为 12 的有序表采用顺序存储结构,折半查找技术,在等概率情况下,查找成功的平均查找长度是( )。(分数:2.00)A.13850B.6213C.18233D.其他7.判断题_8.算法的执行时间和所需的存储空间都是问题规模的函数,进行算法分析就是要找出这种函数
3、关系。( )(分数:2.00)A.正确B.错误9.完全二叉树只能采用顺序存储方法,不能采用链表存储方法。( )(分数:2.00)A.正确B.错误10.在顺序循环队列的第 i 个元素之后插入一个元素是顺序循环队列的基本运算。( )(分数:2.00)A.正确B.错误11.若一个叶子是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历的最后一个结点。( )(分数:2.00)A.正确B.错误12.直接插入排序的关键码比较次数与初始排列有关。( )(分数:2.00)A.正确B.错误13.算法设计题_14.已知顺序栈 S,简述 f1 函数功能,当输入 80 时,输出结果是多少?fl( )init
4、stack(s);scanf(“d”,&n);while(n)push(s,n 8);n=n8)while(!Emptystcak(s)pop(S,x);printf(“d”,x);)(分数:2.00)_15.写出二叉树前序遍历非递归算法的设计思想,然后写出算法。(分数:2.00)_16.写出直接插入排序算法。(分数:2.00)_17.应用题_18.已知一棵三叉树的存储结构如下表所示,其中 root=0,n=7。画出该二叉树。 (分数:2.00)_19.用克鲁斯卡尔算法求下图的最小生成树。 (分数:2.00)_20.下图是一棵二叉排序树,规定当二叉排序树被删除的结点既有左子树,又有右子树时,以
5、其中序前驱替代。画出删除 55 后的二叉排序树。 (分数:2.00)_21.已知散列表地址空间为 HT08,散列函数为 H(key)=key7,采用线性探测法处理冲突,将数据序列107,27,28,42,3,25,99,38依次存入散列表中。试画出相应的散列表;并计算等概率下搜索成功的平均搜索长度。散列表及其查找各关键字要比较的次数如下所示: (分数:2.00)_二、C 语言(总题数:22,分数:36.00)22.单项选择题_23.在 C 语言中,合法的字符常量是( )(分数:2.00)A.084B.x43C.abD.“0”24.在 C 语言中,要求运算数必须是整型的运算符是( )。(分数:2
6、.00)A.B.+C.!=D.25.有整型变量 X,单精度变量 y=55,表达式:x=float(Y*3+(int)y4)执行后,x 的值为( )。(分数:2.00)A.17B.17.5C.18D.1626.若从键盘上输入 5,则程序的输出结果是( )。 #include void main( ) int x;scanf(“d”,&x);if(x 十+5)printf(“dn”,x)?; else printf(“dn”,x 一一); (分数:2.00)A.7B.6C.5D.427.以下程序的输出结果是( )。 #include void main( ) int x=10,y=10,i; fo
7、r(i=0;x8;y=+i) printf(“dd”,x 一一,y);(分数:2.00)A.10 1 9 2B.9 8 7 6C.10 9 9 0D.10 10 9 128.不能对二维数组 a 进行正确初始化的语句是( )。(分数:2.00)A.int a23=0B.int a23=1,2,3,4,5,6);C.int a3=1,2),0)D.int a3=1,2,3,4,5,6)29.有程序段如下:运行该程序的结果是( )。char a3,b=“China”;a=b:printf(“S”,a);(分数:2.00)A.编译出错B.运行结果为 ChinaC.运行结果为 ChD.运行结果为 Chi
8、30.以下对 C 语言函数的有关描述中,正确的是( )。(分数:2.00)A.在 C 语言中,调用函数时,只能把实参的值传递给形参,形参的值不能传递给实参B.C 语言函数既可以嵌套定义又可以递归调用C.函数必须有返回值,否则不能使用函数D.c 程序中有调用关系的所有函数必须放在同一个源程序文件中31.有如下程序段:int*P,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a 的值为( )。(分数:2.00)A.编译出错B.10C.11D.1232.若执行 fopen 函数时发生错误,则函数的返回值是( )。(分数:2.00)A.地址值B.1C.0D.EOF33.程序填空题_34.下
9、列程序用来计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以“”为结束。请填空。 #include void main( ) static char*P,a=“I am happy”; int max=0,m=0: P=a: while(”P!=) while(。p=A)I 1(“p=a) p+;) if((分数:2.00)_35.下列程序对输入的一个整数,调用函数 prime 判断其是否为素数。是素数则输出 YES,否则输出 NO,请填空。#includestdiohint prime(int a)int e,1,ye
10、s;yes=1;e=a2;i=2:while(i=e)&yes!=0)if( )yes=0;else i+:void main( )int X;printf(“ninput a integer X:”);scanf(“d”,&x);if(prime(x)(分数:2.00)_36.编程题_37.实现:从键盘输入任意 10 个整数,按从小到大的顺序排列成有序数并输出。(分数:2.00)_38.实现:20 个学生,输入姓名,学号,三科成绩,计算每科的平均分。(分数:2.00)_39.程序分析题_40.下列程序运行后,如果从键盘上输入 china#,则输出结果是:_. #include void ma
11、in( ) int v1=0,v2=0;char ch; while(ch=getchar( )!=#) switch(ch) easea:caseh: default:v1+; ease0:v2+; printf(“d dn”,v1v2); (分数:2.00)_41.下列程序运行后,则输出结果是:_。 #include void sub(int a,int b,int*c) *c=ba; ) void main( ) int x,y,z; sub(10,5,&x); sub(7,x,&y)?; sub(x,y,&z)?; printf(“d,d,dn”,x,y,z)?; (分数:2.00)_
12、42.下列程序运行后,则输出结果是:_。#includestdiohvoid main( )int a10=1,2,3,4,5,6,7,8,9,10;int k=0,i; float s=0,ave: for(i=0;i10;i+)(if(ai2=0)continue: s+=ai: k+: if(k!=0) ave=sk;printf(“ave=fn”,ave): (分数:2.00)_43.下列程序运行后,则输出结果是:_。 #include void fun( ) static int a; a+=2: printf(“d”,a); void main( ) int CC; for(cc=
13、1;cc5)printf(“dn”,x)?; else printf(“dn”,x 一一); (分数:2.00)A.7B.6 C.5D.4解析:解析:首先判断 x+5 这个条件,x=5 所以该条件不成立,判断后 x+,x 的值为 6,最后printf(“dn”,x 一一);输出 6 后,x 一一,x 的值为 5。27.以下程序的输出结果是( )。 #include void main( ) int x=10,y=10,i; for(i=0;x8;y=+i) printf(“dd”,x 一一,y);(分数:2.00)A.10 1 9 2B.9 8 7 6C.10 9 9 0D.10 10 9 1
14、 解析:解析:第一次:x=10,y=10,i=0;x8 条件成立,输出 x=10,y=10 后,x 一一,x 值为 9。第二次:x=9,y=+i=1,i=1;x8 条件成立,输出 x=9,y=1 后,x 一一,x 值为 828.不能对二维数组 a 进行正确初始化的语句是( )。(分数:2.00)A.int a23=0B.int a23=1,2,3,4,5,6); C.int a3=1,2),0)D.int a3=1,2,3,4,5,6)解析:解析:而维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按 行分段赋值,也可按行连续赋值。 例如对数组 a53: 按行分段赋值可写为: int
15、 a53=80,75,92),61,65,71),59,63,70),85,87,90),76,77,85; 按行连续赋值可写为: int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85; 这两种赋初值的结果是完全相同的。 对于二维数组初始化赋值还有以下说明: 可以只对部分元素赋初值,未赋初值的元素自动取 0 值。 例如: int a33=(1,2),3; 是对每一行的第一列元素赋值,未赋值的元素取 0 值。赋值后各元素的值为: 1 0 0 2 0 0 3 0 0 如对全部元素赋初值,则第一维的长度可以不给出。 例如: int a33=1,2,
16、3,4,5,6,7,8,9; 可以写为: int a3=1,2,3,4,5,6,7,8,9);29.有程序段如下:运行该程序的结果是( )。char a3,b=“China”;a=b:printf(“S”,a);(分数:2.00)A.编译出错 B.运行结果为 ChinaC.运行结果为 ChD.运行结果为 Chi解析:解析:字符串不能直接赋值,而应使用字符串拷贝函数 strcpy。30.以下对 C 语言函数的有关描述中,正确的是( )。(分数:2.00)A.在 C 语言中,调用函数时,只能把实参的值传递给形参,形参的值不能传递给实参 B.C 语言函数既可以嵌套定义又可以递归调用C.函数必须有返回
17、值,否则不能使用函数D.c 程序中有调用关系的所有函数必须放在同一个源程序文件中解析:解析:函数不可以嵌套定义;函数可以有返回值也可以没有,默认的为 int 型。31.有如下程序段:int*P,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a 的值为( )。(分数:2.00)A.编译出错B.10C.11 D.12解析:解析:指针 P 指向整型数 a,所以*p 的值为 10。32.若执行 fopen 函数时发生错误,则函数的返回值是( )。(分数:2.00)A.地址值B.1C.0 D.EOF解析:解析:如果不能实现“打开”的任务,fopen 函数将会带回一个出错信息。此时 fopen
18、 函数将带回一个空指针值 NULL(NULL 在 stdioh 文件中已被定义 0)。33.程序填空题_解析:34.下列程序用来计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以“”为结束。请填空。 #include void main( ) static char*P,a=“I am happy”; int max=0,m=0: P=a: while(”P!=) while(。p=A)I 1(“p=a) p+;) if((分数:2.00)_正确答案:(正确答案:m+;mmax;m=0;)解析:解析:m 表示每一个单词的
19、长度,max 表示当前最大单词的长度。35.下列程序对输入的一个整数,调用函数 prime 判断其是否为素数。是素数则输出 YES,否则输出 NO,请填空。#includestdiohint prime(int a)int e,1,yes;yes=1;e=a2;i=2:while(i=e)&yes!=0)if( )yes=0;else i+:void main( )int X;printf(“ninput a integer X:”);scanf(“d”,&x);if(prime(x)(分数:2.00)_正确答案:(正确答案:a2=0;return(yes);)解析:解析:只能被 1 和它本身
20、整除的数是素数。为了判断 a 是不是素数,可以让 a 除以 2 到 a2 之间的每一个整数,如果 a 能被某个数整除,则说明 a 不是素数,否则 13 是素数。36.编程题_解析:37.实现:从键盘输入任意 10 个整数,按从小到大的顺序排列成有序数并输出。(分数:2.00)_正确答案:(正确答案:include main( ) int s10,t,i,j,X; print(“input 10 nHmbers:n”); for(t=0;tsEj+1) t=j;sj=sj+1;sj+1=t; printf(“the result is:n”); for(j=10;j解析:解析:此题采用任何一种排
21、序方法均可。38.实现:20 个学生,输入姓名,学号,三科成绩,计算每科的平均分。(分数:2.00)_正确答案:(正确答案:include“stdioh” #define N 20 struet Stu char noe10; char name20; float score3; studentsN; void main( ) float s1=0,s2=0,s3=0; printf(“输入 96d 个学生的编号、姓名、三门课程成绩 n”,N); for(int i=0:iN;i+) scanf(“S”,studentsino); scanf(“S”,&stu)解析:解析:由于输入内容较多,所
22、以采用结构体数组比较方便。39.程序分析题_解析:40.下列程序运行后,如果从键盘上输入 china#,则输出结果是:_. #include void main( ) int v1=0,v2=0;char ch; while(ch=getchar( )!=#) switch(ch) easea:caseh: default:v1+; ease0:v2+; printf(“d dn”,v1v2); (分数:2.00)_正确答案:(正确答案:55)解析:解析:由于没有 break 语句,所以执行 switch 语句,v1,v2 依次执行。41.下列程序运行后,则输出结果是:_。 #include
23、void sub(int a,int b,int*c) *c=ba; ) void main( ) int x,y,z; sub(10,5,&x); sub(7,x,&y)?; sub(x,y,&z)?; printf(“d,d,dn”,x,y,z)?; (分数:2.00)_正确答案:(正确答案:一 5,一 12,一 7)解析:解析:函数 sub(int a,int b,int*c)中 a,b 表示值运算,*c 表示指针运算。42.下列程序运行后,则输出结果是:_。#includestdiohvoid main( )int a10=1,2,3,4,5,6,7,8,9,10;int k=0,i;
24、 float s=0,ave: for(i=0;i10;i+)(if(ai2=0)continue: s+=ai: k+: if(k!=0) ave=sk;printf(“ave=fn”,ave): (分数:2.00)_正确答案:(正确答案:ave=50)解析:解析:当 ai值为偶数时,退出本层循环,所以 S 求得是所有奇数的和,即 s=1+3+5+7+9,这 5 个数的平均值为 5。43.下列程序运行后,则输出结果是:_。 #include void fun( ) static int a; a+=2: printf(“d”,a); void main( ) int CC; for(cc=1;cc=4;cc+) fun( ); printf(“n”);(分数:2.00)_正确答案:(正确答案:2468)解析:解析:a 属于静态变量,能够保持上次运行的结果。