2021 年 9 月 计算机二级 C 语言 错题整理

  1. 设循环队列的存储空间为 Q(1:50),初试状态为 front=rear=50。经过一系列正常操作后,front-1=rear。为了在该队列中寻找值最大的元素,在最坏的情况下需要比较的次数为

    A. 0

    B. 1

    C. 48

    D. 49

    这道题的队列是一个循环队列front-1=near 也就是说这个队列里有 49 个元素。最坏的情况下,最大值在队列末尾,则需要将49个元素一一比较,需要比 48 次。

  2. 下面不属于软件需求分析阶段任务的是

    A. 需求配置

    B. 需求获取

    C. 需求分析

    D. 需求评审

    需求获取、需求分析、需求定义、需求评审

  3. 不属于对象构成成份的是

    A. 规则

    B. 属性

    C. 标识

    D. 方法(或操作)

    对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。一个对象通常可由对象名(标识)属性操作三部分组成。

  4. 在数据库中,产生数据不一致的根本原因是

    A. 数据冗余

    B. 没有严格保护数据

    C. 未对数据进行完整性控制

    D. 数据存储量太大

    产生数据不一致的根本原因是数据冗余

  5. 设有课程关系模式 R(C#,Cn,T,TA)(其中,C# 为课程号,Cn 为课程名,T 为教师名,TA 为教师地址),并且假定不同课程号可以有相同的课程名,每门课程只有一位任课教师,但每位教师可以有多门课程。关系 R 范式最高达到

    A. 1NF

    B. 2NF

    C. 3NF

    D. BCNF

    这里有一篇讲三种范式的文章,总结起来也就是:

    • 第一范式:一对一
    • 第二范式:满足第一范式,且全部的非主键列全部依赖于主键
    • 第三范式:满足第二范式,且非主键列内没有传递依赖

    在这个例子中,课程号为主键对应后面三个非主键,所以满足第一范式;非主键(课程名、教师名、教师地址)均依赖于所有的主键(课程号不重复),所以满足第二范式;每个教师地址对应一个教师,也就是说在非主键列内,存在传递依赖,所以不满足第三范式。股这个 R 最高达到 2NF。

  6. 已知 int a=6;,则执行 a+=a-=a*a; 语句后,a 的值为()。

    A. 36

    B. 0

    C. -24

    D. -60

    根据优先级,执行顺序为:

    1. a*a,此时表达式为 a+=a-=36
    2. a-=a,此时 a 的值为 -30;
    3. a+=a,此时 a 的值为 -60。
  7. 请阅读以下程序;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include<stdio.h>
    int main()
    {
    int x=1,y=0,a=0,b=0;
    switch(x)
    {
    case 1:
    switch(y)
    {
    case 0:a++;break;
    case 1:b++;break;
    }
    case 2:
    a++;b++;break;
    }
    printf("a=%d,b=%d\n",a,b);
    }

    输出结果为:

    A. a=2, b=1

    B. a=1, b=0

    C. a=1, b=1

    D. a=2, b=2

    这里有一个坑:case 1 后面没有 break 语句。也就是说,case 1 里面的执行完之后,会继续执行 case 2 里面的语句。所以,a 被加了 2 次,b 被加了 1 次。

  8. 交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。

    A. &

    B. ^

    C. ||

    D. ~

    异或(^)可以交换两个变量的值,参考这篇文章

    1
    2
    3
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

2021 年 9 月 计算机二级 C 语言 错题整理
https://gt610.codeberg.page/2024/03/18/ncre-2-2109/
作者
GT610
发布于
2024年3月18日
许可协议