北航自主招生考试题目之欧阳法创编.docx
《北航自主招生考试题目之欧阳法创编.docx》由会员分享,可在线阅读,更多相关《北航自主招生考试题目之欧阳法创编.docx(15页珍藏版)》请在冰豆网上搜索。
北航自主招生考试题目之欧阳法创编
第一部分 数据结构
一、是非判断题(本题共10分,每小题各1分)
(对于下面给出的论述,你认为正确,请在小题后的括号中填入符号√,否则,填入符号×)
1.对算法进行分析的目的是为了提高算法的质量。
( )
2.一般情况下,双向链表比单向链表要占用更多的存储空间。
( )
3.将插入与删除操作限制在表的一端的线性表被称为堆栈。
( )
4.完全二叉树不一定是满二叉树,满二叉树一定是完全二叉树。
( )
5.利用二叉树的前序遍历序列和后序遍历序列一定可以构造出一棵二叉树。
( )
6.邻接表中边结点数目为偶数的图一定是无向图。
( )
7.拓扑排序不是检测有向图中是否存在回路的惟一方法。
( )
8.采用折半查找的线性表只要求表中元素按值的大小有序排列就可以。
( )
9.对具有n个元素的序列进行插入排序,排序的总趟数为n-1。
( )
10.无论什么情况,快速排序法比其他排序法的时间效率都要高。
( )
二、填空题(本题共15分,每小题各1分)
1.若长度为n的线性表采用顺序存储结构,当不溢出时,在其第i个位置(1≤i≤n+1)插入一个新的数据元素之前需要依次移动( )个元素的位置。
2.在非空双向循环链表中由q指的链结点前面插入一个p指的链结点的过程对应的语句依次为:
p->rlink=q;p->llink=q->llink;q->llink=p; ( )。
(空白处为一条语句)
3.在实际应用中,当堆栈的最大长度难以估计时,堆栈最好采用( )存储结构。
4.若a,b,c,d是初始为空的队列的输入序列,则此时该队列的输出序列是( )。
5.若具有n个结点的二叉树采用二叉链表存储,则链表中有( )个指针域存放着NULL。
6.已知二叉树的前序遍历序列为ABDCEFG,中序遍历序列为DBCAFEG,其后序遍历序列为( )。
7.采用“逐点插入法”建立序列(54,28,16,34,73,62,95,60,26,43)的二叉排序树后,在该二叉排序树中查找到数据元素62时一共进行了( )次元素之间的比较。
8.在一个图中,所有顶点的度数之和等于所有边数的( )倍。
9.具有n个顶点的有向图最多有( )条边。
10.具有n个顶点的无向连通图采用邻接矩阵表示,邻接矩阵中至少有( )个非零元素。
11.将数据元素2,4,6,8,10,12,14,16,18,20依次存放于一个一维数组中(设数组下标从0开始),然后采用折半查找方法查找元素12,被比较过的数组元素的下标依次为( )。
12.若一个待散列存储的线性表为K=(18,25,63,50,42,32,9,45),散列函数为H(k)=kMOD9,则与元素18发生冲突的元素有( )个。
13.若对序列(1,2,5,3,4)采用泡排序法按元素值从小到大进行排序,则整个排序过程中进行的元素之间的比较次数为( )。
14.若对序列(tang,deng,an,wang,shi,bai,fang,liu)采用选择排序法按字典顺序进行排序,则第三趟排序结束时序列的状态是( )。
15.设有10000个元素组成的序列,希望尽快挑选出其中前10个(仅挑出前10个!
)最大值元,在不改变已有算法结构的前提下,插入排序法、快速排序法、堆积排序法和泡排序法这4种内排序算法中,最合适的是( )。
三、综合题(本题共15分,每小题各5分)
1.证明:
具有n个结点的非空满二叉树,其叶结点的数目为(n+1)/2。
2.已知某带权连通图采用邻接矩阵存储,邻接矩阵以三元组表形式给出。
邻接矩阵下三角形部分的元素(不包括主对角线上元素)对应的各三元组分别为),),(5,2,4),(5,3,(2,1,7),(3,1,6),(3,2,8),(4,1,9),(4,2,4),(4,3,6),(5,1,(5,4,2)。
请分别画出该连通图所有可能的最小生成树。
3.已知散列函数为H(key)=(key%3)MOD11,散列地址空间为[0..10],并且采用线性探测再散列法处理冲突。
请画出在初始为空的散列表中依次插入22,41,53,8,46,30,1,31,66以后散列表的状态。
四、算法设计题(本题10分)
结点的祖先定义为从根结点到该结点的所有分支上经过的结点。
已知非空二叉排序树采用二叉链表存储结构,链结点构造为lchild datarchild, 根结点指针为T。
请写一非递归算法,依次打印数据信息为item的结点的祖先结点。
设结点的数据信息分别为整数,并且假设该结点的祖先结点存在。
第二部分 C语言程序设计
五、单项选择题(本题共20分,每小题各1分)
1.一个C语言程序是由( )。
A.一个主程序和若干个子程序组成 B.函数组成
C.若干过程组成 D.若干子程序组成
2.当把以下四个表达式用作if语句的控制表达式时,其中有一个选项与其他三个选项的含义不同,这个选项是( )。
A.k%2 B.k%2==1 C.(k%2)!
=0 D.!
k%2==1
3.下列运算符中优先级最低的是( )。
A.+ B.&& C.?
:
D.!
=
4.以下能够正确地定义整型变量a,b和c,并且为其赋初值5的语句是( )。
A.inta=b=c=5; B.inta,b,c=5;
C.a=5,b=5,c=5; D.a=b=c=5;
5.若有说明:
doubley=0.5,z=1.5;intx=10;则能够正确使用C语言库函数的赋值语句是( )。
A.z=exp(y)+fabs(x); B.y=log10(y)+pow(y);
C.z=sqrt(y-z); D.x=(int)(atan2((double)x,y)+exp(y-0.2));
6.以下对二维数组a的正确说明是( )。
A.inta[3][]; B.floata(3,4); C.doublea[1][4]; D.floata(3)(4);
7.若有条件表达式(exp)?
a++:
b--,则以下表达式中能够完全等价于表达式(exp)的是( )。
A.(exp==0) B.(exp!
=0) C.(exp==1) D.(exp!
=1)
8.以下不正确的if语句形式是( )。
A.if(a>b&&a!
=b); B.if(a==b)a+=b;
C.if(a
=b)scanf(“%d”,&a)elsescanf(“%d”,&b);
9.若有以下语句
intx=3;
do{printf(“%d\n”,x-=2);}while(!
(--x));
则上面程序段( )。
A.输出结果是1 B.输出结果是3和0 C.输出结果是1和-2 D.是死循环
10.以下for循环语句的执行次数是( )。
for(x=0,y=0;(y=123)&&(x<4);x++);
A.执行4次 B.执行3次 C.是无限循环 D.循环次数不定
11.设有如下程序段:
t=0;
while(printf(“*”)){
t++;
if(t<3)break;
}
下面给出的4个描述中,正确的是( )。
A.其中循环控制表达式是不合法的 B.其中循环控制表达式与0等价
C.其中循环控制表达式与‘0’等价 D.以上说法都不对
12.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( )。
A.int类型 B.float类型 C.long类型 D.double类型
13.对于C语言而言,以下正确的描述是( )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和函数的调用都不可以嵌套
D.函数的定义和函数的调用都可以嵌套
14.以下关于宏替换的叙述中,错误的是( )。
A.宏替换不占用运行时间 B.宏名无类型
C.宏替换只是字符替换 D.宏名必须用大写字母表示
15.若已有定义:
intk=2;int*p1,*p2;且p1和p2均已指向变量k,则下面不能正确执行的赋值语句是( )。
A.k=*p1+*p2; B.p1=p2; C.p2=k; D.k=*p1*(*p2);
16.若已有定义:
inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并已赋值)元素地址的正确引用为( )。
A.*(a+j) B.a+j C.(a+i) D.*(a+j)
17.若有说明:
int*p,m=5,n;则下面给出的4个程序段中,正确的是( )。
A.p=&n; B.p=&n;
scanf(“%d”,&p); scanf(“%d”,*p);
C.scanf(“%d”,&p); D.p=&n;
*p=n; *p=m;
18.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( )。
A.p=max; B.*p=max; C.p=max(a,b); D.*p=max(a,b);
19.以下对结构体变量stu1中成员age的不正确引用的是( )。
structstudent{
intage;
intnum;
}stu1,*p;
p=&stu1;
A.student.age B.stu1.age C.p->age D.(*p).age
20.在C语言中,库函数fgets(str,n,fp)的功能是( )。
A.从str中读取至多n个字符到文件fp
B.从文件fp中读取长度为n的字符串存入str指向的内存
C.从文件fp中读取长度不超过n-1的字符串存入str指向的内存
D.从文件fp中读取n个字符串存入str指向的内存
六、填空题(本题共15分,每小题各3分)
1.若运行以下程序时,从键盘输入2473(表示回车。
下同),则下面程序的运行结果是( )。
#include
main()
{ intc;
while((c=getchar())!
=‘\n’)
switch(c-‘2’){
case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
default:
putchar(c+2);break;
}
printf(“\n”):
}
2.当从键盘上输入18以后,下面程序的运行结果是( )。
main()
{ intx,u,i,j,a[8];
scanf(“%d”,&x);
i=0;
do{
u=x/2;
a=x%2;
i++;
x=u;
}while(x>=1);
for(j=i-1;j>=0;j--)
printf(“%d”,a[j]);
}
3.以下程序的运行结果是( )。
main()
{ increment();
increment();
increment();
}
increment()
{ staticinty=0;
y+=1;
printf(“%d”,y);
}
4.下面程序的运行结果是( )。
#include
main()
{ staticchara[]=“Language”,b[]=“programe”;
char*p1,*p2;
inti;
p1=a;
p2=b;
for(i=0;i<=7;i++)
if(*(p1+i)==*(p2+i))
printf(“%c”,*(p1+i));
}
5.以下程序用以输出结构体变量bt所占内存单元的字节数,请在程序的空白处(横线上方)填上适当内容。
structps{
doublei;
chararr[20];
};
main()
{ structpsbt;
printf(“btsizeis:
%d\n”,( ));
}
七、程序设计题(本题5分)
所谓“水仙花数”是指一个三位数,其各位数字立方之和等于该数本身。
例如:
153是一个“水仙花数”,因为13+53+33=153。
请编写输出1000以内所有“水仙花数”的程序。
时间:
2021.03.09
创作:
欧阳法
#include
intmain(void)
{
inti,j,k;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{
if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)
printf("%d\n",100*i+10*j+k);
}
}
八、程序设计题(本题10分)
请编写一C语言程序,该程序实现对从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
程序源代码:
#include"stdio.h"
main()
{FILE*fp;
charch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{printf("cannotopenfile\n");
exit(0);}
ch=getchar();
ch=getchar();
while(ch!
='#')
{fputc(ch,fp);putchar(ch);
ch=getchar();
}
fclose(fp);
}
第一部分 数据结构
一、是非判断题
1.对算法进行分析的目的是为了提高算法的质量。
( )
2.一般情况下,双向链表比单向链表要占用更多的存储空间。
( )
3.将插入与删除操作限制在表的一端的线性表被称为堆栈。
( )
4.完全二叉树不一定是满二叉树,满二叉树一定是完全二叉树。
( )
5.利用二叉树的前序遍历序列和后序遍历序列一定可以构造出一棵二叉树。
(已知前序和中序,恢复二叉树)
6.邻接表中边结点数目为偶数的图一定是无向图。
( )无向图一定是偶数,单偶数不一定是无向图
7.拓扑排序不是检测有向图中是否存在回路的惟一方法。
( )
8.采用折半查找的线性表只要求表中元素按值的大小有序排列就可以。
( )二叉树
9.对具有n个元素的序列进行插入排序,排序的总趟数为n-1。
( )
10.无论什么情况,快速排序法比其他排序法的时间效率都要高。
( )
二、填空题
1.若长度为n的线性表采用顺序存储结构,当不溢出时,在其第i个位置(1≤i≤n+1)插入一个新的数据元素之前需要依次移动( n-i+1 )个元素的位置。
2.在非空双向循环链表中由q指的链结点前面插入一个p指的链结点的过程对应的语句依次为:
p->rlink=q;p->llink=q->llink;q->llink=p; (q->llink->rlink->p)。
(空白处为一条语句)
3.在实际应用中,当堆栈的最大长度难以估计时,堆栈最好采用( 链式 )存储结构。
4.若a,b,c,d是初始为空的队列的输入序列,则此时该队列的输出序列是( )。
5.若具有n个结点的二叉树采用二叉链表存储,则链表中有( )个指针域存放着NULL。
6.已知二叉树的前序遍历序列为ABDCEFG,中序遍历序列为DBCAFEG,其后序遍历序列为(DCBFGEA)。
7.采用“逐点插入法”建立序列(54,28,16,34,73,62,95,60,26,43)的二叉排序树后,在该二叉排序树中查找到数据元素62时一共进行了( 3 )次元素之间的比较。
8.在一个图中,所有顶点的度数之和等于所有边数的( 2 )倍。
9.具有n个顶点的有向图最多有( )条边。
10.具有n个顶点的无向连通图采用邻接矩阵表示,邻接矩阵中至少有( )个非零元素。
11.将数据元素2,4,6,8,10,12,14,16,18,20依次存放于一个一维数组中(设数组下标从0开始),然后采用折半查找方法查找元素12,被比较过的数组元素的下标依次为( )。
12.若一个待散列存储的线性表为K=(18,25,63,50,42,32,9,45),散列函数为H(k)=kMOD9,则与元素18发生冲突的元素有( 3 )个。
13.若对序列(1,2,5,3,4)采用泡排序法按元素值从小到大进行排序,则整个排序过程中进行的元素之间的比较次数为( 4 )。
14.若对序列(tang,deng,an,wang,shi,bai,fang,liu)采用选择排序法按字典顺序进行排序,则第三趟排序结束时序列的状态是( )。
15.设有10000个元素组成的序列,希望尽快挑选出其中前10个(仅挑出前10个!
)最大值元,在不改变已有算法结构的前提下,插入排序法、快速排序法、堆积排序法和泡排序法这4种内排序算法中,最合适的是(堆排序)。
三、综合题(本题共15分,每小题各5分)
1.证明:
具有n个结点的非空满二叉树,其叶结点的数目为(n+1)/2。
取个中间变量k表层数。
2.已知某带权连通图采用邻接矩阵存储,邻接矩阵以三元组表形式给出。
邻接矩阵下三角形部分的元素(不包括主对角线上元素)对应的各三元组分别为(2,1,7),(3,1,6),(3,2,8),(4,1,9),(4,2,4),(4,3,6),(5,1,),(5,2,4),(5,3,),(5,4,2)。
请分别画出该连通图所有可能的最小生成树。
4-2或者5-2所以不止一个
3.已知散列函数为H(key)=(key%3)MOD11,散列地址空间为[0..10],并且采用线性探测再散列法处理冲突。
请画出在初始为空的散列表中依次插入22,41,53,8,46,30,1,31,66以后散列表的状态。
四、算法设计题(本题10分)
结点的祖先定义为从根结点到该结点的所有分支上经过的结点。
已知非空二叉排序树采用二叉链表存储结构,链结点构造为lchild datarchild, 根结点指针为T。
请写一非递归算法,依次打印数据信息为item的结点的祖先结点。
设结点的数据信息分别为整数,并且假设该结点的祖先结点存在。
先找item父节点p,再找p父节点打印完设为p,再找其父节点。
只要有关系就靠这关系找!
第二部分 C语言程序设计
五、单项选择题(本题共20分,每小题各1分)
1.一个C语言程序是由( a )。
A.一个主程序和若干个子程序组成 B.函数组成
C.若干过程组成 D.若干子程序组成
2.当把以下四个表达式用作if语句的控制表达式时,其中有一个选项与其他三个选项的含义不同,这个选项是( a )。
A.k%2 B.k%2==1 C.(k%2)!
=0 D.!
k%2==1
3.下列运算符中优先级最低的是( c )。
A.+ B.&& C.?
:
D.!
=
4.以下能够正确地定义整型变量a,b和c,并且为其赋初值5的语句是( a )。
A.inta=b=c=5; B.inta,b,c=5;
C.a=5,b=5,c=5; D.a=b=c=5;
5.若有说明:
doubley=0.5,z=1.5;intx=10;则能够正确使用C语言库函数的赋值语句是( )。
A.z=exp(y)+fabs(x); B.y=log10(y)+pow(y);
C.z=sqrt(y-z); D.x=(int)(atan2((double)x,y)+exp(y-0.2));
6.以下对二维数组a的正确说明是( c )。
A.inta[3][]; B.floata(3,4); C.doublea[1][4]; D.floata(3)(4);
7.若有条件表达式(exp)?
a++:
b--,则以下表达式中能够完全等价于表达式(exp)的是( )。
A.(exp==0) B.(exp!
=0) C.(exp==1) D.(exp!
=1)
8.以下不正确的if语句形式是( )。
A.if(a>b&&a!
=b);