计算机专业基础自测题库(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

其中data的数据类型为int。要求: (1)请给出该二叉树节点类型的C语言描述; (2)编写一个递归函数count2计算给定二叉树中度为2的节点。 参考答案: 一、单项选择题 1.B    2.D      3.A    4.C    5.A  6.D    7.A  8.C  9.C  10.A  11.B   12.B                二、填空题 13.0    14.break(或goto) 15.D  16.9 17.d b e g f c a   18.n(n-1)     19.O(n2) 三.简答题 20.【参考答案1】   (1)        栈空的判断条件是:s.top == -1;                                (2)    void pop( s, x )    {  if ( s.top == -1 )  下溢;       else  x= s.data[s.top--];   }                                                                                   【参考答案2】   (1)        栈空的判断条件是:s.top == 0;                                  (2)    void pop( s,x )    {  if ( s.top == 0 )  下溢;       else       {   s.top --;            x =s.data[s.top];       }    }                                                                                   21.     平均查找长度=(1+2*2+3*3+2*4)/ 8 = 22 / 8 = 2.75           四、程序分析题 22.结果输出为:156,89, 55, 72                                         23.结果输出为:64, 79,15, 180                                                                                                           24.① NULL                                                                      ② h或 h != NULL                                                       ③ q = p                                                                       ④ head = head->next                                                     五.程序设计题 25.【参考程序】 struct node                                                                     {     int data;                   struct node * Lchild, * Rchild; }; int n = 0;      /* 外部变量,计算二叉树中度为2的节点数量 */ void count2 ( struct node * BT )        /* 按照后序遍历的思想进行计数 */ {          if ( BT != NULL )                                                  {   if ( BT->Lchild != NULL&& BT->Rchild != NULL )                          n++;                   if( BT->Lchild != NULL )                        count2( BT->Lchild );                                                if( BT->Rchild != NULL )                        count2( BT->Rchild );                              } }

全部评论

相关推荐

牛客316659795号:不是,证明hr初筛已经过了,要投给部门筛一遍
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务