《2018贵州大学831真题.docx》由会员分享,可在线阅读,更多相关《2018贵州大学831真题.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2018 年贵州大学 831 真题及答案一、选择题大多都是前几年真题选择题的原题(群文件有前几年真题及答案) 下面列举今年易错和前几年真题未出现的选择题1、一个 C 语言程序是由()A. 主程序组成B.子程序组成C.过程组成D.函数组成答案是由函数组成2、数据结构在计算机内存中的表示是指()A.数据结构B.数据的逻辑结构C.数据的存储结构D.数据元素之间的关系答案是数据的存储结构3、栈通常采用的两种存储结构是()A.线性存储结构和链表存储结构B.散列方式和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构答案是线性存储结构和链表存储结构4、在有 N 个叶子节点的哈夫曼树中,其节点总
2、数为()A.不确定B.2NC.2N+1D.2N-1答案是 2N - 15、以下定义正确的是()A.int a=1,2,3,4;B.int a2=1,2,3,4;C.int a2=1,2,3,4;D.int a=1,2,3,4;答案是 int a2=1,2,3,4;5、有 6 个节点的无向图,至少需要()条边才能构成一个连通图A.4B.5C.6D.7答案是 5二、看程序输出运行的结果1、#include int main()int a10 = 9,-3,-7,7,0,8,-1,5,-2,-6;int i;int sum = 0;for(i = 0; i 0)sum = sum + ai;prin
3、tf(sum=%dn, sum); return 0;答案:sum=292、#include int main()int a2;int s, i, j;for(i = 0; i 2; i+) ai = 2;for(i = 0; i 10; i+)s = 0;for(j = 0; j 2; j+)s = s + i + aj;printf(%dn, s); return 0;答案:223、#include int main()int a12 = 1,2,3,4,5,6,7,8,9,10,11,12;int *p;for(p = &a0; p a + 12; p+)if(*p % 4 = 0)pr
4、intf(%dn, *p);return 0;答案:48124、#include int main()int a7 = 2,4,6,8,10,12,14;int *p;p = a + 5; int i;for(i = 3; i; i-)switch(i)case 1:case 2:printf(%d, *p+);break; case 3:printf(%d, *(-p);return 0;答案:1010125、#include int main()int _try(int n); int ans = _try(4);printf(%dn, ans); return 0;int _try(in
5、t n)if(n 0)return n * _try(n - 2); else return 1;答案:8三、简答题1、给定一个树如图所示、求前序遍历序列、中序遍历序列、后序遍历序列ABCDEFG答案:前序遍历:ABDGCEF 中序遍历:DGBAECF 后序遍历:GDBEFCA2、入栈顺序 ABCDE 已知,C 第一个出栈,D 第二个出栈,问总共有几种出栈的可能答案:3 种CDEBA CDBAECDBEA3、有 50 个叶子节点的二叉树,问二叉树的节点总数至少多少个答案:994、有向图和无向图的常用存储结构答案:邻接矩阵和邻接表(邻接表一般存储有向图、邻接矩阵一般存储无向图、但是实际上 是都可
6、以的、未回答区别有可能会扣分)5、单链表和双链表是否能从当前节点访问到链表中任一节点 答案:单链表不能、双向链表能四、编程题1、已知 5 名职工信息、编号、姓名、工资、用结构体定义、编程求出工资最少的职工姓名答案:#include struct node char number30; char name30; float wage;people5;void Find()int i;int min_id = 0;float min_wage = people0.wage; for(i = 1; i 5; i+)if(peoplei.wage min_wage)min_wage = peoplei
7、.wage; min_id = i;printf(%sn, peoplemin_id.name);int main()int i;for(i = 0; i 5; i+)scanf(%s %s %f, peoplei.number, peoplei.name, &peoplei.wage);Find(); return 0;2、一个不超过 5 位的正整数,编程实现求数有多少位以及逆序输出这个数答案:#include int main()int n; scanf(%d, &n); int len = 0; while(n 0)int bit_num = n % 10; n = n / 10; pr
8、intf(%d,bit_num); len+;printf(n);printf(%dn, len); return 0;3、给定权集 w=2,3,4,7,8,9,构造一颗哈夫曼树,求其 WPL,未要求编程实现答案:哈夫曼树构造如图则 WPL = 2*4 + 3*4 + 4*3 + 7*2 + 8*2 + 9*2 = 804、编程实现给定一个有向无环图,求图的最长路径,并估计时间复杂度 答案:#include int G105105 = 0;int n;int ans = 0; int sum;void dfs(int x)printf(xxxn); int i;for(i = 1; i 0)s
9、um += Gxi; dfs(i);sum -= Gxi;if(sum ans) ans = sum;int main()scanf(%d, &n); int i, j;for(i = 1; i = n; i+) for(j = 1; j = n; j+)scanf(%d, &Gij); for(i = 1; i = n; i+)for(j = 1; j = n; j+) printf(%d , Gij);printf(n);for(i = 1; i = n; i+)sum = 0; dfs(i);printf(%dn, ans); return 0;/*测试数据40 2 0 40 0 0 3
10、2 0 0 00 0 0 0*/时间复杂度为 O(n3)5、编程实现双向冒泡排序,奇数趟从前往后比较相邻的两个数,将大的数放到后面,偶数趟从后往前比较相邻两个数,将小的数放到前面。答案:#include int arr105; int main()int n; scanf(%d, &n); int i, j;for(i = 1; i = n; i+) scanf(%d, &arri);int head = 1, tail = n; for(i = 1; i = n; i+)if(i % 2 = 1)head = head + 1; if(head = tail) break;for(j = h
11、ead; j arrj)int temp = arrj; arrj = arrj - 1; arrj - 1 = temp;elsetail = tail - 1;if(head = tail) break; for(j = tail; j = 1; j-)if(arrj + 1 arrj)int temp = arrj; arrj = arrj + 1; arrj + 1 = temp;for(i = 1; i = n; i+) printf(%d , arri);printf(n); return 0;/*测试数据62 7 1 3 4 5*/总结:考试的时候太冷了、明年要找个暖和的考点、宾馆离考点太远、饭都来不及吃、又冷 又饿的坐了 4*3 个小时、就知道今年是凉了、今年的题出的比往年质量要高很多、终于摒弃了那些名词解释、讲道理学计算机的哪有把书 上的名词概念都背下来的道理、又不是文科、2333by NoobDream 2017.12.25
限制150内