Advertisement

东北大学——考研初试——计算机842——2019年

阅读量:

计算机842(150分)

  • 第一部分 C语言程序设计(75分)

    • 一、简答题(15分,4小题)
    • 二、综合题(20分,4小题)
    • 三、编程题(40分,3小题)
  • 第二部分 数据结构(75分)

    • 一、简答题(34分,4小题)
    • 二、编写算法(41分,3小题)

第一部分 C语言程序设计(75分)

一、简答题(15分,4小题)

  1. (5分)若定义
复制代码
    int a[10];
    int* p = a;

请写出至少3种求数组a第i个元素的方式。

  1. (5分)如果想通过一个函数获得多个返回值,请至少写出2种实现方法,并举例说明。
  2. (5分)举例说明结构体和共同体的区别。

二、综合题(20分,4小题)

  1. (5分)写出下面程序的运行结果
复制代码
    #include <stdio.h>
    
    void f(int a) {
        int i; 
        if (a != 0) {
                f(a - 1);
                for (i = 1; i <= a; i++) {
                        printf("%d", a);
                }
                printf("\n");
    		}
    }
    
    int main() {
        f(3);
        return 0;
    }
  1. (5分)写出下面程序的运行结果
复制代码
    #include <stdio.h>
    
    int main() {
        int s = 0, i, j;
        int a[5][3]= {14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        for (i = 0; i < 5; i++) {
                s = 0;
                for (j = 0; j < 3; j++) { 
                        if (i * j % 5 == 3) {
                                break;
                        } else {
                                s = s + a[i][j];
                        }
                }
                printf("%d\n", s);
        }
        return 0;
    }

3、(5分)写出下面程序的运行结果

复制代码
    #include <stdio.h>
    
    void fun(char* s) {
        int i;
        for (i = 0; *(s + i) != '\0'; i++) {
                if (*(s + i + 2) >= 'A' && *(s + i) <= 'z') {   
                        if (*(s + i + 2) == '\0') {
                                break;
                        } else {
                                *(s+i) = *(s+i+2);
                        }
                } else {
                        *(s+i) = 'z';
                }
    		}
    }
    
    int main() {
        char str[] = "AgeefAI!";
        fun(str);
        puts(str);
        return 0;
    }

4、(5分)写出下面程序的运行结果

复制代码
    #include <stdio.h>
    
    int a=30, b=50;
    
    void func(int* p1, int* p2) {
        p1 = &a;
        *p2 = b;
    }
    
    int main() {
        int i = 1, b = 5;
        for (i = 1; i < 5; i++) {
                func(&i, &b);
                printf("%d, %d\n", i, b);
        }
        return 0;
    }

三、编程题(40分,3小题)

  1. (13分)一个数的平方的层次数等于该数自身的自然数被称为自守数,例如5 * 5 = 25,25 * 25 = 625,9376 * 9376 = 87909376。求10000以内的所有自守数。
  2. (13分)编写一个函数int judgeM(int a[N][N]),判断给定的函数矩阵a[N][N]是否符合上三角矩阵条件。其中N代表N * N矩阵。如果符合上三角矩阵条件返回1,否则返回0。上三角矩阵的主对角线下方的元素都为0。如下:
1 2 3 4
0 5 6 7
0 0 8 9
0 0 0 10

(14分)个人小金库消费记录按如下结构体定义:

复制代码
    struct Consume { 
        int id;	//流水号。
        unsigned pid;	//消费项目标号,每个消费项目编号唯一。
        char p[100];    //消费项目名称。
        float cost;     //消费项目金额。
    }

请编写函数 void maxCost(struct Consume record[N]),统计在给定的消费记录struct Consume record[N]中总消费金额最多的消费项目,输出消费项目名称和对应项目的总消费金额。需要注意的是,每个项目可能发生多次消费行为,每次消费行为会形成一个消费记录。

第二部分 数据结构(75分)

一、简答题(34分,4小题)

  1. (8分)有一个二叉树按层次顺序放在一组数组中,如下图:
1 2 3 4 5 6 7 8 9 10 11
A C B E D

(1)写出该树的后序遍历序列
(2)画出该树的先序线索二叉树

  1. (8分)带权无向图的邻接矩阵如下图所示。画出邻接表和用Prim算法生成最小树的过程。
1 1
1 1 2
1 1 3
2 1 1
3 1 1
1 1

(8分)给出一组关键字T = {24, 19, 32, 43, 38, 13, 22, 20, 6, 18},写出下列算法从小到大排序时第一趟结束时的序列。
(1)希尔排序(第一趟排列的增量为5)
(2)堆排序(先建成一个堆,然后以堆顶取下一个元素后,将堆减少一项)

  1. (10分)写出对关键字序列{503, 087, 61, 512, 098, 897, 275, 653, 426}建立一棵平衡二叉树排序的过程,并写出调整平衡时的旋转类型,写出在多概率情祝下査找成功和査找失败的平均查找长度。

二、编写算法(41分,3小题)

  1. (15分)给定一个单链表存储的互异整数数列,编写算法,求出所有的递増和递减序列的数目。例如数列7, 2, 6, 9, 8, 3, 5, 2, 1,可分为(7, 2) (2, 6, 9) (9, 8, 3) (3, 5) (5, 2, 1)共5个数列子数列,结果为5。
    (1)写出该算法的基本思想
    (2)写出该算法的实现

  2. (12分)假设二叉树终止为x的结点不少于1个,采用二叉链表存储,编写算法,打印值为x的结点的所有祖先。
    (1)写出该算法的基本思想
    (2)写出该算法的实现

  3. (14分)编写算法,判断一个以邻接表为存储结构的无向图G是否连通,若连通,返回1,否则,返回0。
    (1)写出该算法的基本思想
    (2)写出该算法的实现

全部评论 (0)

还没有任何评论哟~