计算机专业基础自测题库(1)---程序设计基础
来自微信公众账号:开点工作室(kaidiancs)
导语:计算机专业基础包括了程序设计,数据结构,算法,操作系统,计算机系统,计算机网络,编译原理,数据库技术等内容,是每个计算机专业学生必须要认真学习和熟练掌握的基本功,也是IT企业招聘程序员进行笔试面试的必考内容。临近期末,为了能让大家更好的复习专业基础知识,我们将陆续推送一批高质量的计算机专业基础知识练习题,大家可以测评一下自己基础知识的掌握情况,打造自己的专业知识题库为准备明年的春季招聘查漏补缺。今天推出第一期,有关程序设计基础知识的测试题目,内容包括C语言和数据结构。
1.下列运算符中优先级别最高的是
A.< B.! C.!= D.&& 2.if语句的格式如下 if ( 表达式 ) 语句 其中的“表达式” A.必须是逻辑表达式 B.必须是关系表达式 C.可以是逻辑表达式或关系表达式 D.可以是任意合法的表达式 3.C语言中数组名作为函数参数时,其数据传递方式是 A.地址传递 B.单向值传递 C.返回值传递 D.全局变量传递 4.下面程序的运行结果是 main ( ) { int a=3, b=4, *q=&b; *q= a+b; a = 5; q =(a<b) ? &a : &b; printf ( "%d %d %d\n", a, b, *q ); } A.3 4 4 B.3 4 5 C.5 7 5 D.5 7 7 5.已知: struct date { int year; int month; int day; } d, *p = &d; 下列引用结构成员的表达式中,错误的是 A.*p->year B.d.day C.p->month D.(*p).year 6.在下列时间复杂度中,最大的是 A.O(n) B.O( n log2 n) C.O(n2) D.O(2n) 7.在长度为n的链表的第i个节点后插入一个新节点,需要移动的节点数是 A.0 B.i C.n-i D.n-i+1 8.下列关于循环队列的叙述中,正确的是 A.队头指针固定不变,队尾指针随队列长度变化 B.队尾指针固定不变,队头指针随队列长度变化 C.队头指针可以大于队尾指针,也可以小于队尾指针 D.队头指针只能小于等于队尾指针,两者的差值为队长 9.下列关于哈夫曼树的叙述中,错误的是 A.哈夫曼树中没有度为1的节点 B.哈夫曼树是带权路径长度最小的二叉树 C.一组互不相同的权值可唯一确定一棵哈夫曼树 D.哈夫曼树的节点总数等于叶节点数的2倍减1 10.下图中不同的最小生成树的个数是A.2 B.3 C.4 D.5 11.下列关于折半查找算法的叙述中,正确的是 A.可以用于有序的顺序表,也可以用于有序的链表 B.可以用于有序的顺序表,但不能用于有序的链表 C.可以用于无序的顺序表,也可以用于无序的链表 D.可以用于无序的顺序表,但不能用于无序的链表 12.如果说一个排序算法是稳定的,则它的含义是 A.待排序记录的关键字均互不相同 B.关键字相同的记录在排序前后的相对位置不变 C.该排序算法既可用于内排序,也可用于外排序 D.该排序算法既可用于顺序存储,也可用于链式存储 二.填空题 13.已知int a=5,b=8, c; 表达式 c= a/b*b的值是______。 14.C语言中强制退出当前循环可使用的语句是__________。 15.已知char a='A';语句printf ("%c",a+3 ); 的输出结果是______。 16.已知chars1[20]="Good", *s2="Luck!"; 函数strlen ( strcat (s1, s2 ))的值是______。 17.对以下二叉树进行后序遍历,得到的序列是_____________。
18.具有n个顶点的完全无向图,其顶点的度之和是______。 19.直接选择排序的时间复杂度为______。 三.简答题 20.已知顺序栈s的定义如下: struct { datatypedata[N]; /* 栈内最多存放N个元素 */ inttop; /* 栈顶指针,指向栈顶元素 */ } s; /* 栈名为s */ 要求: (1)给出判断栈空的条件; (2)给出退栈操作的算法描述。 21.已知序列(20, 15, 18, 30, 25, 70, 80, 65),按给定顺序构造一棵二叉排序树,并给出成功查找时的平均查找长度。 四.程序分析题 22.请写出下列程序的输出结果。 void f30 ( int x[ ], int y[ ],int n, int m ) { int i, count=0; for ( i = 0 ; i < n ; i++ ) if ( x[i] > m ) y[ ++count ] = x[i]; y[0] = count; } main( ) { int a[10] = {156, 12, 89, 44, 38, 45, 31, 27,55, 72}, b[11]; f30 ( a, b, 10, 50 ); for ( int i = 1 ; i < b[0] ; i++ ) printf ( "%d, ", b[i] ); printf ( "%d\n", b[ b[0] ] ); } 23.请写出下列程序的输出结果。 #include <stdio.h> main( ) { int a[10] = { 79, 64, 15, 21, 67, 91, 39, 180,55, 49 }; int i, x, y; if ( a[0] < a[1] ) { x = a[0]; y = a[1]; } else { x = a[1]; y = a[0]; } printf ( "%d, %d, ", x, y ); for ( i = 2 ; i < 10 ; i++) if ( a[i] < x ) x = a[i]; else if ( a[i] > y ) y = a[i]; printf ( "%d, %d\n", x, y ); } } 24.下列程序的功能是将带头节点的单链表head倒置后输出,请将程序空白处补充完整。 #include <stdio.h> structnode { int data; struct node *next; }; void f33 ( struct node *head ) { struct node *h =head->next, *p, *q = ______; ① while ( ______ ) ② { p= h; h = h->next; p->next = q; ______; ③ } head->next = q; } void main ( ) { struct node a[5] = {{0,&a[1]},{2,&a[2]},{4,&a[3]},{6,&a[4]},{8,NULL}}; struct node *head= a; /* a[0]为头节点 */ f33 ( head ); head = head->next; while ( head ) { printf( "%d ", head->data ); ______; ④ } printf ( "\n" ); } 五.程序设计题 25.设二叉树以二叉链表进行存储,节点结构如下:
Lchild |
data |
Rchild |