湖南库课专升本

湖南文理学院芙蓉学院

官方网址:https://fur.huas.edu.cn/

官方电话:0736-7186057

电子邮箱:

院校地址:湖南省常德市青年东路

  • 概况
  • 专业
  • 考纲
  • 资讯
  • 考点
  • 湖南文理学院芙蓉学院《软件工程》模拟卷

    第一部分:高级语言程序设计基础(共100分)

    一、单项选择题(每题2分,共20分)

    若有以下定义:

    int a=5, b=6, c=7;

    则表达式 (a < b) ? (b < c ? b : c) : (a < c ? a : c) 的值是( )

    A. 5 B. 6 C. 7 D. 不确定


    若有定义:int x=3, y=4, z=5;

    则表达式 !(x+y)+z-1 && y+z/2 的值是( )

    A. 0 B. 1 C. -1 D. 2


    执行以下程序段后,i 和 j 的值分别为( )

    c

    int i=1, j=2;

    i += j++ + --i;

    A. i=3, j=3 B. i=4, j=3 C. i=5, j=3 D. i=5, j=2


    以下关于指针的说法,错误的是( )

    A. int *p = NULL; 是合法的

    B. 指针变量可以指向常量

    C. 指针变量的值可以改变

    D. 两个指针变量不能进行加法运算



    若有定义:char str[]="Hello\0World";,则 sizeof(str) 和 strlen(str) 的值分别是( )

    A. 12, 5 B. 12, 10 C. 11, 5 D. 11, 10

    以下递归函数的功能是( )

    c

    int func(int n) {

        if(n <= 1) return 1;

        return func(n-1) + func(n-2);

    }

    A. 计算 n! B. 计算斐波那契数列的第 n 项 C. 计算 2^n D. 计算 n 的平方


    若有定义:int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

    则表达式 *(*(a+1)+2) 的值是( )

    A. 7 B. 8 C. 9 D. 6


    以下说法正确的是( )

    A. 全局变量如果不初始化,其值为随机

    B. 静态局部变量在函数调用结束后空间被释放

    C. 寄存器变量的地址不能被取

    D. 外部变量只能在一个源文件中使用


    有下列程序段:

    c

    char *p = "hello";

    p[1] = 'a';

    则程序运行结果是( )

    A. 编译错误 B. 运行时错误 C. 输出 "hallo" D. 输出 "hello"


    若有结构体定义:

    c

    struct node {

        int data;

        struct node *next;

    };

    struct node a, b, *p = &a;

    a.data = 10; b.data = 20; a.next = &b; b.next = NULL;

    则 p->next->data 的值为( )

    A. 10 B. 20 C. 随机值 D. 编译错误


    二、填空题(每题4分,共20分)

    若有定义:int a[5] = {1,3,5,7,9}, *p = a+2;

    则 (p+1) 的值是 ______。

    下列程序段输出结果为 ______。

    c

    int x = 1, y = 0;

    if(!x) y=1;

    else if(x==0) y=2;

    else y=3;

    printf("%d", y);

    函数 int fun(char *s) 返回字符串中数字字符的个数,请补充完整。


    c

    int fun(char *s) {

        int count = 0;

        while(______) {

            if(*s >= '0' && *s <= '9') count++;

            s++;

        }

        return count;

    }


    有二维数组 int b[3][4],若 b 的地址为 0x1000,int 占 4 字节,则 b[2][1] 的地址为 ______(用十六进制表示)。


    以下程序运行后输出 ______。

    c

    int a=3, b=5;

    void swap(int a, int b) {

        int t = a; a = b; b = t;

    }

    int main() {

        swap(a, b);

        printf("%d %d", a, b);

        return 0;

    }


    三、程序填空题(每题4分,共20分)

    以下程序将字符串 s 中的所有小写字母转换为大写字母,请填空。


    c

    void toUpper(char *s) {

        while(*s) {

            if(*s >= 'a' && *s <= 'z')

                ______;

            s++;

        }

    }

    以下程序使用冒泡排序对数组 arr 进行升序排序,请填空。


    c

    void bubbleSort(int arr[], int n) {

        int i, j, temp;

        for(i=0; i<n-1; i++) {

            for(j=0; j<______; j++) {

                if(arr[j] > arr[j+1]) {

                    temp = arr[j];

                    arr[j] = arr[j+1];

                    arr[j+1] = temp;

                }

            }

        }

    }

    以下递归函数计算 x 的 n 次幂,请填空。


    c

    double power(double x, int n) {

        if(n == 0) return 1;

        if(n < 0) return ______;

        return x * power(x, n-1);

    }

    以下程序从键盘读入一个字符串,并输出其长度(不使用 strlen)。请填空。


    c

    int main() {

        char str[100];

        int len = 0;

        gets(str);

        while(______) len++;

        printf("%d", len);

        return 0;

    }

    以下程序定义了一个结构体表示学生信息,并输出其中成绩最高的学生姓名。请填空。


    c

    struct Student {

        char name[20];

        int score;

    };

    int main() {

        struct Student stu[3] = {{"Tom",85},{"Jerry",92},{"Alice",78}};

        int maxIdx = 0;

        for(int i=1; i<3; i++)

            if(______) maxIdx = i;

        printf("%s", stu[maxIdx].name);

        return 0;

    }


    四、程序阅读题(每题4分,共20分)

    请写出以下程序的运行结果。


    阅读程序:


    c

    #include <stdio.h>

    int main() {

        int a[3][3] = {{1,2},{3,4,5},{6}};

        printf("%d", a[1][2] + a[2][1]);

        return 0;

    }

    输出:______


    阅读程序:


    c

    #include <stdio.h>

    void fun(int *a, int *b) {

        int *t;

        t = a; a = b; b = t;

    }

    int main() {

        int x = 10, y = 20;

        fun(&x, &y);

        printf("%d %d", x, y);

        return 0;

    }

    输出:______


    阅读程序:


    c

    #include <stdio.h>

    int main() {

        int i = 0, sum = 0;

        do {

            i++;

            if(i % 2 == 0) continue;

            sum += i;

        } while(i < 10);

        printf("%d", sum);

        return 0;

    }

    输出:______


    阅读程序:


    c

    #include <stdio.h>

    int main() {

        char *p = "abcde";

        p += 2;

        printf("%c", *p++);

        printf("%c", *p);

        return 0;

    }

    输出:______


    阅读程序:


    c

    #include <stdio.h>

    int f(int n) {

        static int s = 1;

        s *= n;

        return s;

    }

    int main() {

        printf("%d ", f(2));

        printf("%d ", f(3));

        printf("%d", f(4));

        return 0;

    }

    输出:______


    五、程序设计题(共20分)

    题目:编写一个函数 int findMaxSum(int a[], int n),找出数组中 连续子数组的最大和(例如:[-2,1,-3,4,-1,2,1,-5,4] 的最大子数组和为 6,子数组为 [4,-1,2,1])。要求算法时间复杂度为 O(n)。在 main 函数中测试该函数。

    分值:函数定义 10分,主函数测试 10分。


    第二部分:数据库原理及应用(共100分)


    一、单项选择题(每题2分,共20分)

    在关系数据库中,下列说法正确的是( )

    A. 关系的属性可以再分解 B. 关系中不能有多余的元组

    C. 关系的行顺序可以任意交换 D. 关系的列顺序不可交换


    关于视图,下列说法错误的是( )

    A. 视图可以像表一样查询 B. 视图可以更新,但有限制

    C. 视图可以包含 ORDER BY 子句 D. 视图可以建立索引


    设有关系模式 R(A,B,C,D),函数依赖集 F={A→B, B→C, C→D},则 R 的候选键为( )

    A. A B. B C. C D. AD


    以下哪种封锁协议可以避免“不可重复读”问题但不避免“幻读”问题?( )

    A. 一级封锁协议 B. 二级封锁协议 C. 三级封锁协议 D. 两段锁协议


    在 SQL 中,与“IN”等价的关系代数运算是( )

    A. 选择 B. 投影 C. 笛卡尔积 D. 并


    设有关系 R(a,b,c),S(b,c,d),以下查询结果可能为 3 个元组的是( )

    A. SELECT * FROM R WHERE b=1 B. SELECT * FROM R NATURAL JOIN S

    C. SELECT * FROM R WHERE a>2 D. SELECT a, d FROM R, S WHERE R.b=S.b


    关系模式规范化时,消除主属性对候选键的部分依赖,至少应达到( )

    A. 1NF B. 2NF C. 3NF D. BCNF


    关于事务的隔离级别,下列说法正确的是( )

    A. READ UNCOMMITTED 级别可以避免脏读

    B. REPEATABLE READ 级别可以避免幻读

    C. SERIALIZABLE 级别并发度最低

    D. READ COMMITTED 级别可以避免不可重复读


    下列哪个不是数据库恢复常用的技术?( )

    A. 日志文件 B. 检查点 C. 镜像数据库 D. 索引重建


    设有关系 R(A,B) 和 S(A,C),R 中 A 为唯一键,S 中 A 为外键参照 R(A)。删除 R 中某个元组时,若希望同时删除 S 中相应元组,应使用( )

    A. ON DELETE RESTRICT B. ON DELETE CASCADE

    C. ON DELETE SET NULL D. ON DELETE NO ACTION


    二、填空题(每题4分,共20分)

    数据库系统中,数据的物理独立性是指当 ______ 改变时,逻辑结构不变。


    关系代数中,专门的关系运算包括选择、投影、连接和 ______。


    已知关系 R(A,B,C),SQL 语句 SELECT A, COUNT(*) FROM R GROUP BY A HAVING COUNT(*) > 1; 的功能是查找 ______。


    有两个关系 R 和 S,R∩S 等价于 R – (R – S) 或 ______(用其他关系代数运算表示)。


    在事务并发调度中,若一个调度是可串行化的,则它一定满足 ______ 协议(填一种锁协议)。


    三、数据库设计题(每题10分,共20分)

    题目:某学校管理系统需求如下:


    每个学生有学号(唯一)、姓名、性别、出生年份。


    每门课程有课程号(唯一)、课程名、学分。


    学生选修课程,每个学生可以选多门课,每门课可被多个学生选,选修有成绩(整数)。


    每个学生只能属于一个学院,学院有学院编号(唯一)、学院名、院长姓名。

    请完成:

    (1) 画出该系统的 E-R 图(标出实体、属性、联系及 cardinality)。

    (2) 将 E-R 图转换为关系模式(注明主键和外键)。


    题目:设有关系模式 R(A,B,C,D,E),函数依赖集 F = { A→BC, CD→E, B→D, E→A }。

    (1) 求 R 的所有候选键。

    (2) 判断 R 最高属于第几范式?说明理由。

    (3) 若不属于 3NF,将其分解为 3NF 且保持函数依赖。


    四、数据库编程题(每题20分,共40分)

    题目(SQL 查询):假设已存在如下关系表:


    Student(sno, sname, sage, sdept)


    Course(cno, cname, credit)


    SC(sno, cno, grade)

    请写出下列查询的 SQL 语句:

    (1) 查询选修了“数据库”课程且成绩高于该课程平均分的学生学号和姓名。(10分)

    (2) 查询没有选修任何课程的学生姓名。(5分)

    (3) 查询每个学生选修课程的门数及平均分,并按平均分降序输出。(5分)


    题目(存储过程):创建存储过程 proc_Transfer,实现两个账户之间的转账功能。

    现有账户表 Account(accNo char(10) primary key, balance decimal(10,2))。

    要求:


    参数:转出账号 @fromAcc,转入账号 @toAcc,转账金额 @amount。


    如果转出账户余额不足,则回滚事务并输出“余额不足”。


    如果转账成功,提交事务并输出“转账成功”。


    需要考虑并发控制,加必要的锁。

    请写出完整的 SQL 存储过程代码(使用 T-SQL 或 PL/SQL 风格均可)。


    成为下一届考生

    湖南中医药大学校区:岳麓区学士街道四海通达产业园2楼

    中南林科大校区:天心区中南林业科技大学韶山南路东门

    益阳校区:湖南省益阳市赫山区康富北路2号

    Copyright © 2017-2027 湖南库课专升本 版权所有

    联系电话 / 微信 :18163960603