北京航空航天大学2013年"数据结构与C语言程序设计"(991)考研真题(2)
本站小编 免费考研网/2015-12-07
exit(0);
}
while(!feof(old))
fputc(fgetc(old), new);
fclose(old);
fclose(new);
}
六、简答题(本题共20分,每小题各5分)
1.在C语言中,函数调用时数据的传递通常有哪几种方式?
2.在C语言中,指针可以做哪些运算?
3.共用体(union)具有哪些基本特征?
4.使用文件的基本操作步骤是怎样的?
七、程序设计题(本题15分)
请编写一程序,该程序的功能是找出并且删除一维整型数组a[100]中的最小值元素。
要求:1.数组各元素通过键盘输入获得初值;
2. 所有对数组元素的引用必须通过指针完成。
八、程序设计题(本题20分)
请仅编写出一C语言函数char *maxword(char *s, char *t),该函数的功能是求出字符串s与字符串t的最长公共单词(这里,假设两个字符串均由英文字母和空格字符组成);若找到这样的公共单词,函数返回该单词,否则,函数返回NULL。
例如:若s=“This is C programming text”,t=“This is a text for C programming”,则函数返回“programming”。
要求:1. 函数中不得设置保存单词的存储空间;
2. 给出函数之前请用文字简要叙述函数的基本思想。
2013年“数据结构与C程序设计”(代码991)试题参考答案
一、单项选择题
1.C 2.A 3.D 4.B 5.C 6.B 7.D 8.A 9.C 10.D
二、填空题
1.顺序 2.O(m) 3.log2k+1 4.235 5.2(n-1) 6.该有向图中不存在回路 7.2.9 8.m-1 9.插入排序法 10.9
三、综合题
1.答:(1)多个堆栈共享一个连续的存储空间,可以充分利用存储空间,只有在整个存储空间都用完时才能产生溢出,其缺点是当一个堆栈溢出时需要向左、右栈查询有无空闲单元。若有,则需要移动相应元素和修改相关的栈底和栈顶指针的位置。当各个堆栈接近溢出时,查询空闲单元、移动元素和修改栈底栈顶指针位置的操作频繁,计算复杂,并且耗费时间。
(2)每个堆栈仅用一个顺序存储空间时,操作简便。但难以确定初始分配存储空间的大小,空间分配少了,容易产生溢出,空间分配多了,容易造成空间浪费;并且各个堆栈不能共享空间。
(3)一般情况下,分别建立多个链接堆栈不考虑堆栈的溢出(仅受用户内存空间限制),缺点是堆栈中各元素要通过指针链接,比顺序存储结构多占用存储空间。
2.(T->lchild==NULL && T->rchild==NULL)
T->lchild
T->rchild
3.(由于图表显示限制,此题答案见指定教材(《数据结构教程 第二版》(2012年4月第7次印刷)) 第418页8-16题)
4.
(1).根据α=散列表中存入的元素数/散列表的长度,得到表的长度为18,因此,合适的散列函数应该为H(k)=k MOD 17。
(2).(由于图表显示限制,此题答案见指定教材(《数据结构教程 第二版》(2012年4月第7次印刷)) 第428页9-15题)
四、算法设计题
SORT(int A[ ], int n)
{ int ,i, j, min, max, temp;
i=1;
while(i<=n/2){
min=i;
max=i;
for(j=i+1;j<n-i+1;j++){
if(A[j]<A[min])
min=j;
if(A[j]>A[max])
max=j;
} /* 确定某趟排序的最小值元素和最大值元素 */
if(min!=i){
temp=A[min]; A[min]=A[i]; A[i]=temp;
} /* 交换A[min]与A[i]的位置 */
if(max!=n-i+1)
if(max==i){
temp=A[min]; A[min]=A[n-i+1]; A[n-i+1]=temp;
} /* 交换A[min]与A[n-i+1]的位置 */
else{
temp=A[max]; A[max]=A[n-i+1]; A[n-i+1]=temp;
/* 交换A[max]与A[n-i+1]的位置 */
}
i++;
}
}
五、填空题
1.break a/q 2.a[n-1]>=a[n-2] FUNC2(a, n-1) 3.(*(a+i)+i) (*(a+i)+N-i-1) 4.i!=0 n%10+′0′ 5.ch-=30 ch-=26
6.*(s+i) t++ 7.strlen(p)-1 p<q 8.ch & 24 9.4 &number 10.argv[1],“rb” argv[2], “wb”
六、简答题
1.答:通常有下列三种方式:
(1)参数传递方式:函数调用时根据实参传递给形参内容的不同又分为值传递与地址传递两种。
(2) 通过return语句传递数据:被调用函数可以通过return语句将函数值传递给调用函数。
(3)利用全局变量传递数据。
2.答:指针可以进行下列三种运算:
(1) 指针加/减一个整数。表示以当前指针所指单元的地址为起点的后或前整数个数据的地址。
(2) 指针减指针。表示两个地址之间的数据个数。(指针加指针为非法运算)
(3) 比较。表示同类型的两个指针所指对象在地址位置上的关系。
3.答:共用体具有以下三个特征:
(1) 共用体变量的成员共用一块存储空间,共用体变量所占用的字节数等于最长成员所占用的字节数;
(2) 共用体不能在定义时进行初始化;
(3) 共用体中的成员每次只能有一个起作用,当存入新成员时,原来的成员失效,其值被覆盖。
4.答:使用文件的基本操作一般有下列五个步骤:
(1) 在程序中包含头文件stdio.h
(2) 定义文件指针。例如:FILE *fp;
(3) 打开文件,使文件指针与磁盘中的实际存储的数据文件建立关联。例如:
fp=fopen(“test.txt”, “r”);
(4) 对文件进行读写操作。例如:fread(f, 4, 2, fp);
(5)文件使用完毕后,关闭文件。例如:fclose(fp);
七、程序设计题
#include <stdio.h>
main( )
{ int a[100], i, *p, k=0;
p=a;
for(i=0; i<100; i++)
scanf(“%d”, p+i); /* 对数组进行数据输入 */
for(i=1; i<100; i++) /* 找出最小值元素,并记录其位置 */
if(*(p+k)>*(p+i))
k=i;
for(i=k; i<99; i++) /* 删除最小值元素 */
*(p+i)=*(p+i+1);
for(i=0; i<99; i++) /* 输出处理后数组各元素 */
printf(“%d”, *(p+i));
printf(“\n”);
}
八、程序设计题
函数的基本思想:
从左至右顺序扫描字符串s,逐个找出单词,并记录单词的开始位置与单词的长度;若该单词的长度比已找到的单词更长,则从左至右顺序扫描字符串t;当在字符串t中找到与在s中找到的当前最长单词相匹配的单词时,记录单词的开始位置与单词的长度,并回到字符串s,在其中找出下一个更长的单词。如此下去,只至字符串s扫描结束,最后返回相应结果。
#include <stdio.h>
#include <string.h>
char *maxword(char *s, char *t)
{ char res, *temp, chs, cht;
int i, j, found, maxlen=0;
while(*s!=„\0‟){
while(*s==„ ‟)
s++; /* 过滤s中的空格 */
for(i=0; s[i]!=„ ‟&&s[i]!=„\0‟; i++) /* 确定s中单词 */
if(i>maxlen){
chs=s[i];
s[i]=„\0‟;
temp=t;
found=0;
while(*temp!=„\0‟&&!found){
while(*temp==„ ‟)
temp++; /* 过滤t中的空格 */
for(j=0;temp[j]!=„ ‟&&temp[j]!=„\0‟;j++) /* 确定t中单词 */
if(j==i){
cht=temp[j];
temp[j]=„\0‟;
if(strcmp(s, temp)==0){
maxlen=i;
res=s;
found=1
}
temp=cht;
}
temp=&temp[j]; /* 回到字符串t的某一位置*/ }
s[i]=chs;
}
s=&s[i]; /* 回到字符串s的某一位置*/
}
if(maxlen==0)
return NULL; /* 未找到最长公共单词,返回NULL */ else{
res[maxlen+1]=„\0‟;
return res; /* 找到最长公共单词,返回该单词 */
}
}
相关话题/数据结构
北京航空航天大学2012年"数据结构与C语言程序设计"(991)考研真题
北京航空航天大学2012年硕士研究生入学考试试题 “数据结构与C语言程序设计”(科目代码:991) 一、填空题(本题共20分,每小题各2分) 1.从总体上说,“数据结构”课程主要研究三个方面的内容。 2.若对某线性表最常用的操作是在表中插入元素或者删除表中元素,则对于顺序存储结 构 和链式存储结 ...专业课考研资料 本站小编 免费考研网 2015-12-072010河北工业大学数据结构考研题及答案
2010年 一、 1. 所谓的双向链表,是指在每一个结点中,有两个指针域,其中一个指向该结点的直接后继结点,而另一个则指向 。 【答案】其直接前趋结点 2. 线性表的顺序存储结构是一种 【答案】随机 3. 若一棵根树的每个结点最多只有分,次序不能颠倒,则称此根树为 。 【答案】两个,左、右,二叉树 4. 满二叉树是指 ...专业课考研资料 本站小编 免费考研网 2015-12-06北京理工大学2015年硕士研究生入学考试数据结构889考研试题
北京理工大学2015年 硕士研究生入学考试数据结构889试题: 一、选择题(40分。20道,每道2分) 1. 算法的可选项是() A 确定性 B 有穷性C 输入D输出 2.下列不属于数组的特点是() A 不属于线性结构 B C D数据元素的类型可以不同 3.下列属于逻辑结构的是() A顺序表B哈希表C单链表D有序表 4.下列属于逻辑结构中 ...专业课考研资料 本站小编 免费考研网 2015-11-162015年南京邮电大学数据结构考研真题
2015年南京邮电大学数据结构考研初试题目 判断题(共15题*2分) 1.消除递归不一定需要使用栈,此说法()2.稀疏矩阵压缩存储后,必会失去随机存取功能( 3.完全二叉树中,若一个结点没有左孩子,则它必是叶结点( 4.连通分量是无向图的极大强连通子图() ) )))5.在9阶B-树中,除叶子以外的任意结点的分支数介于5和9之间(6. ...专业课考研资料 本站小编 免费考研网 2015-11-07北京航空航天大学软件学院2013年“数据结构与C程序设计”(代码991)试题
2013年数据结构与C程序设计(代码991)试题 一、单项选择题(本题共20分,每小题各2分) 1.对于长度为n的线性表,建立其对应的单链表的时间复杂度为( )。 A.O(1); B.O(log2n); .O(n); D.O(n2)。 2.一般情况下,在一个双向链表中插入一个新的链结点,( )。 A.需要修改4个指针域内的指针; B.需 ...专业课考研资料 本站小编 免费考研网 2015-10-22数据结构1800试题 每题都来自各大学校各年份考研真题整理
第一章 绪论 一、选择题 1. 算法的计算量的大小称为计算的( )。【北京邮电大学2000 二、3 (20/8 分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于( )【中科院计算所 1998 二、1 (2 分)】 A.问题的规模 B. 待处理数据的初态 C. A 和B 3.计算机算法指的是(1),它必须具备(2) 这三个特 ...专业课考研资料 本站小编 免费考研网 2015-10-22数据结构讲义 《数据结构》C语言版 严蔚敏,清华大学出版社
复习提示一、教材内容l 使用教材《数据结构》C语言版 严蔚敏,清华大学出版社。l 章节 去掉 第5、8、11、12章 去掉 **部分 去掉1.3,2.4,4.4二、复习提示1. 经典算法单链表:遍历、插入、删除循环队列:队列空、队列满的条件二叉树:递归遍历及应用有序表的二分法查找快速排序简单选择排序2. 绪论掌握几个重 ...专业课考研资料 本站小编 免费考研网 2015-10-142016年考研核心考点命题思路解密 数据结构
《2016年考研核心考点命题思路解密 数据结构》严格按照最新计算机考研408统考大纲的数据结构部分编写,涵盖大纲指定的所有考试内容。本书对统考大纲所涉及的知识点进行深入剖析和总结,并精心策划和部署每一个章节,对每一个章节的考点做了独家策划。 本书每一个考点中的命题,绝大部分来源于历年名校计算机考研真题和 ...计算机考研资料 本站小编 网络资源 2015-07-172015年华北电力大学大学数据结构考研真题
2015年华北电力大学大学数据结构考研真题 第一题选择,10道题20分,很简单,比王道上的题要简单的多把王道的题做了,选择基本没问题。 第二题填空题10空20分,也很简单,数据存储类型为〔〕〔〕,存储数据即要存储〈〉还要存储〈〉,循环队列是为了〈〉,给出一组数据和散列函数求与28是同义词的是〈〉,还有一空求叶子节 ...专业课考研资料 本站小编 网络资源 2015-07-132015年华北电力大学数据结构与操作系统考研真题
2015年华北电力大学数据结构与操作系统考研真题 第一题是4个简答,包括简述数据存储结构的特点等,主要是概念掌握和基础思路。选择题和填空题主要是课后题那种。程序设计要求设计一个算法查找出二叉链表中度为1的结点和叶子结点的个球。 操作系统部分主要是基础知识点,大题就是考察进程控制的部分。 ...专业课考研资料 本站小编 华北电力大学 2015-07-13