1、北京航空航天大学研 究 生 课 程 试 卷 A- 1 -2009 2010 学 年 第 一 学 期 期 末 试 卷学号 姓名 成绩 考试日期:2009 年 12 月 23 日考试科目: 软件技术基础 (A 卷)注意事项:1、考试时间 120 分钟题目:一、论述问题(本题共 40 分)1、在一个算法中,时间与空间往往构成一对矛盾体,论述并举例说明解决时间的有效方法。 (本小题 15 分)(10 分)论述解决时间的有效方法。答题点包括:1) (3 分)增加存储空间是解决问题的一种方法2) (7 分)有效的算法是解决问题的有效方法3)举(5 分)例任何例子,能反映算法有效性都可以。2、论述并举例说明
2、软件工程中的测试与调试之间的相同点与不同点?(本小题10 分)答题要点及分数:1)软件调试是编码过程中校正代码的过程2)软件测试是软件工程中一个评价软件的过程3) (4 分)相同点在于试图考证程序的正确与否4) (6 分,只要答对两点就给 6 分)不同点在于组织方式,实施方法以及结果处理等几个方面组织方式:调试工作由程序员完成,测试需要独立的小组北京航空航天大学研 究 生 课 程 试 卷 A- 2 -实施方法:调试基于代码级,测试可以是白盒子也可以是黑盒子结果处理:调试中发现的错误要改正,测试中只记录测试结果3、阐述图与二叉树的相同点和不同点,在此基础上,阐述二叉树的前序遍历算法与图的深度优先
3、遍历算法的相同点和不同点?(本小题 15 分)1)(3 分)图与二叉树都是非线性结构2)(4 分)图与二叉树之间的不同点是:二叉树中不同点的后继集合不相交,而图则不然3)(4 分)遍历算法中的相同点:访问当前结点,然后访问该结点的后继结点(邻结点)4)(4 分)遍历算法中的不同点:对于图的访问,访问结点时需要记录已访问标志,访问结点的邻结点时需要判断是否已访问;对于二叉树而言,访问邻结点时,不需要记录与判断。二、假设在数组 AN中存贮 N 个整数,设计算法 change(int *A, int *B, int N),其中 N 为数组 A 中元素的个数,该算法将数组 A 中整数移动到数组 B 中
4、,使得数组 B 中的元素呈现小、大、小、大间隔的形式,即 B0B2, B2B4,而且相邻两元素值之间的差的绝对值随下标值的增加呈现不增加趋势,例如|B0-B1|B1-B2|B2-B3| (本题 20 分)1、排序用冒泡排序法对数组 A 排序:数组 A 的元素两两比较,大的放在后面(即若前面的大于后面的,交换两元素的为止) 。循环执行直到不交换为止。2、移动定义两个变量 i,j。初始 i= 0;j = N- 1。定义一个变量 m ,初值为 0。循环执行以下操作:Bm = Ai;北京航空航天大学研 究 生 课 程 试 卷 A- 3 -Bm+1 = Aj;m += 2;i+;j-;直到 i = j最
5、后 if(i = j)Bm = Ai;算法的核心是对数组 A 实现从小到大的排序,然后从 A 数组的左右两端分别取数据,顺序放入 B 数组。分数安排如下:1)( 10 分)排序算法:任何排序算法都得分。如果没有给出排序算法,只说明要排序,得 5 分2) (10 分)移动数据到 B :任意的移动,只要结果正确便得分。三、假设每个人的信息仅包括姓名,年令和性别,在某信息管理系统中,经常需要查找同令人的姓名,设计物理存贮结构,使得查找过程方便快速,并给出相应的查找给定年令的算法,分析该算法的性能。 (本题 20 分)存储结构的核心是:以年令 age 为关键字的 hash 散列,散列函数是 age-1
6、;冲突的解决方法是链表。分数安排如下:1)存贮结构(5 分):画图,类 C 描述,文字描述都可以以年龄 age 为关键字,哈希散列函数为 H = age 1;冲突解决办法为链表北京航空航天大学研 究 生 课 程 试 卷 A- 4 -如图:2) 查找算法(10 分):函数原型描述(即假设的已知条件),算法描述(包括根据年令访问数组,单向链表的访问)LPFIND(int age ,CString name)H(age) = age 1;p = H(age) ;if(p = NULL) return NULL;while(p != NULL)if(p-name = name)北京航空航天大学研 究
7、生 课 程 试 卷 A- 5 -retutn p;p = p-next;3)算法分析(5 分):结出平均比较次数的概念根据 age 查找同龄人的姓名(由哈希查找的特点) ,不需要比较直接由哈希散列函数求出。假设某年龄 age 的人数为 n,即有 n 人同龄。那么查找第 i 个人需要比较的次数为 i 次。又假设查找每个人的概率相同,均为 1/n;那么平均比较次数为: ,i = 1,2, ,n;)/1*(ni= (1+n)/2。四、假定二叉树存贮对象是整数,修改二叉树非递归前序遍历算法,使其能求得二叉树中最大元素。 (本题 20 分)1) (10 分)写出算法:包括函数原形,算法内容2)(10 分)将遍历算法中访问结点的语句改为求最大值的比较语句int Max(BTREE T)int temp;BTREE stackM,p;int top = -1;if(T != NULL)temp = T-data;p = T;while(p!= NULL|top != -1)while(p!=NULL)if(p-data temp)temp = p-data;北京航空航天大学研 究 生 课 程 试 卷 A- 6 -if(p-rchild != NULL)stack+top = p-rchild;p = p-lchild;p = stacktop -;return temp;