选择题|||计算机二级

二级C语言历年真题https://www.dotcpp.com/exam/erji/

24/03

第 1 题

下列叙述中正确的是

A. 矩阵是非线性结构 B. 数组是长度固定的线性表

C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同

  • 正确答案:B
    • 原因:数组中的元素按顺序存储,每个元素有唯一的位置,可以看作是长度固定的线性表。
    • A 选项:矩阵是一种二维数组,本质上它的元素也是按一定顺序排列的,是线性结构的扩展,并非非线性结构,所以 A 错误。
    • C 选项:线性表不仅能进行插入与删除运算,还能进行查找、遍历等操作,所以 C 错误。
    • D 选项:线性表中各元素的数据类型必须相同,这样才能保证在存储和操作时的一致性,所以 D 错误。

第 2 题

在快速排序法中,每经过一次数据交换(或移动)后 A. 能消除多个逆序 B. 只能消除一个逆序 C. 不会产生新的逆序 D. 消除的逆序个数一定比新产生的逆序个数多

  • 正确答案:A
    • 原因:在快速排序中,每一次划分(数据交换或移动)都能将待排序序列分成两部分,使得基准元素左边的元素都小于等于基准元素,右边的元素都大于等于基准元素,这样能消除多个逆序对。
    • B 选项:快速排序一次交换能消除多个逆序,而不是只能消除一个,所以 B 错误。
    • C 选项:在划分过程中,可能会产生新的逆序,比如在基准元素确定位置后,新的子序列中可能会出现新的逆序关系,所以 C 错误。
    • D 选项:快速排序中消除的逆序个数不一定比新产生的逆序个数多,在一些特殊情况下,新产生的逆序和消除的逆序情况比较复杂,并非绝对的关系,所以 D 错误。

第 3 题

线性表的长度为 n。在最坏情况下,比较次数为 n - 1 的算法是 A. 顺序查找 B. 有序表的插入 C. 寻找最大项 D. 同时寻找最大项与最小项

  • 正确答案:C
    • 原因:在寻找最大项时,需要遍历线性表中的每一个元素与当前最大项比较,最坏情况下,需要比较到倒数第二个元素就能确定最大项,所以比较次数为\(n - 1\)。
    • A 选项:顺序查找在最坏情况下要查找整个线性表,比较次数为n,所以 A 错误。
    • B 选项:有序表的插入,在最坏情况下(插入到表的末尾),需要比较n次,所以 B 错误。
    • D 选项:同时寻找最大项与最小项,在最坏情况下,需要比较\(2(n - 1)\)次,所以 D 错误。

第 4 题

设某棵树的度为 3,其中度为 2、1、0 的结点个数分别为 3、4、15。则该树中总结点数为

A. 22 B. 30 C. 35 D. 不可能有这样的树

  • 答案是D. 不可能有这样的树

第 5 题

下列叙述中正确的是 A. 软件的使用存在老化问题 B. 软件是物理实体,不具有抽象性 C. 软件是逻辑实体,具有抽象性 D. 软件的运行对计算机系统不一定具有依赖性

  • 正确答案:C
    • 原因:软件是逻辑实体,是由程序、数据和相关文档组成的,具有抽象性,而不是物理实体。
    • A 选项:软件不存在老化问题,它的失效通常是由于错误、需求变化等原因,而不是像硬件一样随着时间推移出现物理老化,所以 A 错误。
    • B 选项:软件是逻辑的,不具有物理实体的特性,所以 B 错误。
    • D 选项:软件的运行必须依赖计算机系统的硬件和软件环境,所以 D 错误。

第 6 题

软件系统总体结构图的作用是 A. 描述软件系统结构的图形工具 B. 描述软件系统的控制流 C. 描述软件系统的数据流 D. 描述软件系统的数据结构

  • 正确答案:A
    • 原因:软件系统总体结构图是用来描述软件系统结构的图形工具,它展示了软件系统中各个模块之间的层次关系和调用关系。
    • B 选项:描述软件系统控制流的是流程图等工具,而不是总体结构图,所以 B 错误。
    • C 选项:描述软件系统数据流的是数据流图,所以 C 错误。
    • D 选项:总体结构图主要关注的是系统的模块结构,而不是数据结构,描述数据结构的有数据字典等,所以 D 错误。

第 7 题

下面不属于结构化程序设计风格的是 A. 程序结构良好 B. 程序的易读性 C. 不滥用 Goto 语句 D. 程序的执行效率

  • 正确答案:D
    • 原因:结构化程序设计风格强调程序结构良好、易读性以及不滥用 Goto 语句,而程序的执行效率并不是结构化程序设计风格重点强调的内容,结构化程序设计更注重程序的清晰性和可维护性。
    • A、B、C 选项:程序结构良好、易读性、不滥用 Goto 语句都是结构化程序设计的重要特点,所以 A、B、C 正确。

第 8 题

将数据库的结构划分成多个层次,是为了提高数据库的物理独立性和 A. 规范程度 B. 操作独立性 C. 逻辑独立性 D. 降低数据冗余

  • 正确答案:C
    • 原因:将数据库的结构划分成多个层次(如外模式、模式、内模式),外模式与模式之间的映射可以提高逻辑独立性,模式与内模式之间的映射可以提高物理独立性。
    • A 选项:规范程度与数据库的层次划分没有直接关系,规范程度主要通过数据库的设计范式等方面来保证,所以 A 错误。
    • B 选项:不存在操作独立性这种说法,所以 B 错误。
    • D 选项:降低数据冗余主要通过合理的数据库设计和数据完整性约束等方式来实现,与数据库的层次划分关系不大,所以 D 错误。

第 9 题

学院的每名教师只能属于一个系,则实体系和实体教师间的联系是 A. 一对多 B. 多对多 C. 多对一 D. — 对一

  • 正确答案:A
    • 原因:一个系可以有多名教师,而每名教师只能属于一个系,所以实体系和实体教师间的联系是一对多的关系。
    • B 选项:多对多关系是指一个实体可以与多个另一个实体相关联,反之亦然,这里不符合,所以 B 错误。
    • C 选项:多对一是指多个实体对应一个实体,与题目描述相反,所以 C 错误。
    • D 选项:一对一关系是指两个实体之间一一对应,这里不是这种关系,所以 D 错误。

第 10 题

定义学生选修课程关系模式 SC (S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩)该关系的范式最高达到 A. 1NF B. 2NF C. 3NF D. BCNF

  • 正确答案:A

第 11 题

在 C 语言中,以下说法不正确的是( )。

A. 在 C 程序中,整数和实数都能被准确无误地表示出来

B. 在 C 程序中,任何一个变量名都代表存储器中的一个位置

C. 静态变量的生存期与整个程序的运行期相同

D. C 语言中,任何变量都必须先声明才能进行引用

正确答案:A

  • 原因:在 C 语言中,整数在表示范围内可以准确表示,但实数由于计算机的存储方式(二进制浮点数表示),存在精度问题,不能准确无误地表示所有实数。
  • B 选项:在 C 程序中,变量是对存储器中位置的抽象,每个变量名都代表存储器中的一个位置,所以 B 正确。
  • C 选项:静态变量的生存期从程序开始运行到程序结束,与整个程序的运行期相同,所以 C 正确。
  • D 选项:C 语言中,任何变量都必须先声明其数据类型,然后才能进行引用,所以 D 正确。

第 12 题

一个 C 语言程序是由( )。 A. 一个主程序和若干子程序组成 B. 函数组成 C. 若干过程组成 D. 若干子程序组成

正确答案:B

  • 原因:一个 C 语言程序是由一个或多个函数组成的,其中必须有一个主函数(main函数),程序从主函数开始执行。
  • A 选项:C 语言中没有主程序和子程序的概念,只有函数的概念,所以 A 错误。
  • C 选项:C 语言中没有过程的概念,所以 C 错误。
  • D 选项:C 语言程序不仅仅是由若干子程序组成(C 语言中没有子程序概念),而是由函数组成,所以 D 错误。

第 13 题

以下标识符不是关键字的是( )。 A. break B. char C. Switch D. return

  • 正确答案:C
    • 原因:在 C 语言中,关键字是具有特定含义的标识符,break、char、return都是关键字,而Switch(首字母大写)不是关键字,C 语言中的关键字是switch(小写)。
    • A、B、D 选项:break、char、return都是 C 语言的关键字,所以 A、B、D 错误。

第 14 题

下列选项中,不能作为合法常量的是( ) A. 1.234e04 B. 1.234e0.4 C. 1.234e+4 D. 1.234e0

  • 正确答案:B

第 15 题

以下不合法的用户标识符是( )。 A. r3_t3 B. Else C. 6a D. _6  字下ok

正确答案:C

第 16 题

下列叙述中正确的是( )。 A. 调用 printf () 函数时,必须要有输出项 B. 使用 putchar () 函数时,必须在之前包含头文件 stdio.h C. 在 C 语言中,整数可以以二进制、八进制或十六进制的形式输出 D. 调节 getchar () 函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码

  • 正确答案:B

输出项是指要输出到控制台或其他输出设备上的具体内容。它可以是各种类型的数据,也可以是表达式、变量等,例如:

  • 变量:在printf("%d", num);中,num是一个变量,它就是输出项。printf函数会根据%d的格式说明,将num中存储的整数值输出。
  • 常量:像printf("The answer is: %d", 42);里,42是常量输出项,会直接输出数字42
  • 表达式printf("The result is: %d", 3 + 5);中,3 + 5是一个表达式,作为输出项,printf函数会先计算表达式的值8,然后将其输出。

多个输出项之间用逗号分隔,如printf("%d %f", num, fnum);,可以同时输出一个整数和一个浮点数。输出项的类型和个数要与格式控制字符串中相应的格式说明符匹配,否则可能导致输出结果错误或程序出现异常。

第 17 题

执行以下程序段后,w 的值为( )。 int w='A', x=14, y=15; w=((x || y)&&(w<'a'));

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

  • 正确答案:C

逻辑与(&&)只有非0&&非0=真

#include <stdio.h>

int main() {
    int a = 5;  // 非零值,为真
    int b = 0;  // 零值,为假
    int result1 = a && b;
    int result2 = a && 1;

    printf("a && b 的结果是: %d\n", result1); 
    printf("a && 1 的结果是: %d\n", result2); 
    return 0;
}
  • 结果分析:在上述代码中,a && b 由于 b 为假,所以结果为假(值为 0);a && 1 因为 a 和 1 都为真,所以结果为真(值为 1)。
  • 短路特性:逻辑与运算具有短路特性,即当第一个操作数为假时,将不会再计算第二个操作数。例如在 (a == 0) && (b / a > 1) 中,如果 a 不等于 0,那么就不会执行 b / a > 1 的计算,避免了除零错误。

逻辑或(||)0||0=0只有这个

python

a = 0
b = 5
result1 = a or b
result2 = 0 or 0

print(f"a or b 的结果是: {result1}")
print(f"0 or 0 的结果是: {result2}")

  • 结果分析:在上述代码中,a or b 由于 b 为真,所以结果为真(值为 b 的值 5);0 or 0 因为两个操作数都为假,所以结果为假(值为 0)。
  • 短路特性:逻辑或运算也具有短路特性,当第一个操作数为真时,将不会再计算第二个操作数。例如在 (a != 0) || (b / a > 1) 中,如果 a 不等于 0,那么就不会执行 b / a > 1 的计算。

逻辑非(!

  • 规则:逻辑非是单目运算符,它对一个操作数进行取反操作。如果操作数为真,则结果为假;如果操作数为假,则结果为真。

java

public class LogicNotExample {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;
        boolean result1 = !a;
        boolean result2 = !b;

        System.out.println("!a 的结果是: " + result1); 
        System.out.println("!b 的结果是: " + result2); 
    }
}
  • 结果分析:在上述代码中,!a 由于 a 为真,所以取反后结果为假;!b 因为 b 为假,取反后结果为真

第 18 题

设有定义:"long x=123450L;",则以下能够正确输出变量 x 的是( )。 A. printf ("x=% d\n",x); B. printf ("x=% id\n",x); C. printf ("x=% dL\n",x); D. printf ("x=% ld\n",x);

  • 正确答案:D

第 19 题

已有定义 int a=3; 和输出语句 printf ("%8x",a); 以下正确的叙述是( )。

A. 整型变量的输出格式符只有 % d 一种 B. % x 是格式符的一种,它可以适用于任何一种类型的数据 C. % x 是格式符的一种,其变量的值按十六进制数输出,但 %8x 是错误的 D. %8x 是正确的格式符,其中数字 8 规定了输出字段的宽度

unsigned 正数和0

  • 正确答案:D

第 20 题

若有定义 int x,y; 并已正确给变量赋值,则下列选项中与表达式(x-y)?(x++):(y++) 中的条件表达式 (x-y) 等价的是( )。 A. (x-y>0) B. (x-y<0) C. (x-y<0||x-y>0) D. (x-y==0

正确答案:C

23/03:

1下列叙述中错误的是

A. 向量是线性结构

B. 非空线性结构中只有一个结点没有前件---第一个结点

C. 非空线性结构中只有一个结点没有后件--最后一个结点

D. 只有一个根结点和一个叶子结点的结构必定是线性结构

正确答案:D

只有一个根结点和一个叶子结点的结构不一定是线性结构,例如二叉树只有一个根结点,当它是单分支二叉树时只有一个叶子结点,但二叉树是树形结构,不是线性结构。

2在希尔排序法中,每经过一次数据交换后

A. 能消除多个逆序B. 只能消除一个逆序

C. 不会产生新的逆序D. 消除的逆序个数一定比新产生的逆序个数多

正确答案:A

在每一次的分组排序过程中,能消除多个逆序,而不是只能消除一个逆序。而且在排序过程中可能会产生新的逆序,但不能确定消除的逆序个数一定比新产生的逆序个数多。

3设二叉树的后序序列与中序序列均为 ABCDEFGH,则该二叉树的前序序列为
A. HGFEDCBA
B. ABCDEFGH
C. ABCDHGFE
D. DCBAHGFE
正确答案:A

后序序列是先左子树、再右子树、最后根结点;

中序序列是先左子树、再根结点、最后右子树。

已知后序序列与中序序列均为 ABCDEFGH,后序序列的最后一个元素 H 为根结点,

在中序序列中找到 H,H 左边的 ABCDEFG 为左子树的结点,右边没有结点,即右子树为空。对左子树重复上述过程,可构建出二叉树,其前序序列为 HGFEDCBA


4在黑盒测试方法中,设计测试用例的根据是
A. 数据结构
B. 程序调用规则
C. 模块间的逻辑关系
D. 软件要完成的功能
正确答案:D

黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。

在黑盒测试中,把程序看作一个不能打开的黑盒子,

在完全不考虑程序内部结构和内部特性的情况下,根据程序的需求规格说明书,

检查程序的功能是否符合它的功能说明。所以设计测试用例的根据是软件要完成的功能


5下列叙述中正确的是
A. 循环队列是队列的链式存储结构
B. 能采用顺序存储的必定是线性结构
C. 所有的线性结构都可以采用顺序存储结构
D. 具有两个以上指针的链表必定是非线性结构
正确答案:C
循环队列是队列的顺序存储结构的一种形式,用循环数组实现,A 选项错误。能采用顺序存储的不一定是线性结构,例如完全二叉树也可以采用顺序存储结构,但它是非线性结构,B 选项错误。所有的线性结构都可以采用顺序存储结构,也可以采用链式存储结构,C 选项正确。具有两个以上指针的链表不一定是非线性结构,例如双向链表是线性结构,D 选项错误。

6对软件系统总体结构图,下面描述中错误的是
A. 深度等于控制的层数
B. 扇入是一个模块直接调用的其他模块数
C. 扇出是一个模块直接调用的其他模块数
D. 一定是结构图中位于叶子结点的模块
正确答案:B
深度表示结构中的控制层数。

扇入是指直接调用该模块的上级模块的个数,扇出是一个模块直接调用的其他模块数

叶子结点是指结构图中不再调用其他模块的模块,所以位于叶子结点的模块一定不再调用其他模块,D 选项正确。

第 7 题
下面属于系统软件的是()
A. 浏览器
B. 数据库管理系统
C. 人事管理系统
D. 天气预报的 app
正确答案:B

系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。数据库管理系统是一种系统软件

浏览器、人事管理系统、天气预报的 app 都属于应用软件

8能够减少相同数据重复存储的是
A. 数据库B. 字段C. 文件D. 记录
正确答案:A
数据库是按照数据结构来组织、存储和管理数据的仓库,它可以减少相同数据的重复存储,实现数据的共享和一致性,A 选项正确。字段是数据库表中的一列,用于存储特定类型的数据,B 选项错误。文件是存储在外部存储设备上的数据集合,文件之间可能存在数据重复,C 选项错误。记录是数据库表中的一行,包含了多个字段的值,D 选项错误。


9定义学生选修课程的关系模式:SC (S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩)则该关系的主键为
A. C#      B. S#       C. S#,C#         D. S#,C#,G
正确答案:C
主键是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。在学生选修课程的关系模式 SC (S#,Sn,C#,Cn,G) 中,学号 S# 和课程号 C# 的组合可以唯一地确定一条选课记录,因为一个学生可以选修多门课程,一门课程也可以被多个学生选修,所以 S# 和 C# 的组合是主键

关系模型中的关系模式至少应是
A. 1NF
B. 2NF
C. 3NF
D. BCNF
正确答案:A
关系模型中的关系模式至少应满足第一范式(1NF)关系中的每一个属性都是不可再分的数据项,不存在重复组。2NF、3NF、BCNF 是更高层次的范式,它们在满足 1NF 的基础上还有其他的要求,A 选项正确

第 11 题
以下叙述错误的是( )。
A. C 语言区分大小写
B. C 程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改
C. 整数和实数都能用 C 语言准确无误地表示出来
D. 在 C 程序中,正整数可以用十进制、八进制和十六进制的形式来表示
正确答案:C
C 语言是区分大小写的,A 选项正确。C 程序中的变量代表内存中相应的存储单元,其值可以根据需要随时修改,B 选项正确。整数在一定范围内可以准确表示,但实数在计算机中采用二进制表示,由于计算机的存储精度有限,不能准确无误地表示所有实数,C 选项错误。在 C 程序中,正整数可以用十进制、八进制和十六进制的形式来表示,D 选项正确。

第 12 题
以下不正确的转义字符是( )。
A. '\'
B. '\t'
C. '\n'
D. '088'
正确答案:D
'\' 表示反斜杠字符,'\t' 表示制表符,'\n' 表示换行符,它们都是正确的转义字符

'088' 不是正确的转义字符,八进制数只能由 0 到 7 组成,不能出现 8

第 13 题
可在 C 程序中用作用户标识符的一组标识符是( )。
A. void define WORD
B. as_b3 _123 If
C. For -abc case
D. 2c DO SIG
正确答案:B
C 语言中,用户标识符不能与关键字相同,void、case 是关键字,A、C 选项错误。用户标识符只能由字母、数字和下划线组成,且第一个字符必须是字母或下划线,2c 以数字开头,不符合要求,D 选项错误。as_b3、_123、If 都是合法的用户标识符,B 选项正确。

第 14 题
若变量已正确定义并赋值,则以下符合 C 语言语法的表达式是( )。
A. a=a+7;
B. a=7+b+c,a++
C. int (12.3%4)
D. a=a+7=c+b
正确答案:B
A 选项 a=a+7; 是一个语句,不是表达式,表达式后面不能有分号,A 选项错误。B 选项 a=7+b+c,a++ 是一个逗号表达式,先计算 a=7+b+c,再计算 a++,整个表达式的值为 a++ 的值,B 选项正确。C 选项中 % 运算符的操作数必须是整数,12.3 是浮点数,不符合要求,C 选项错误。D 选项中赋值表达式的左边必须是变量,a=a+7=c+b 中 a+7=c+b 不是合法的赋值表达式

第 15 题
有以下程序段
char ch;int k;
ch='a'; k=12;
printf ("% c,% d,",ch,ch,k);
printf ("k=% d\n",k);
已知字符 a 的 ASCII 十进制代码为 97,则执行上述程序段后输出结果是( )。
A. 因变量类型与格式描述符的类型不匹配输出无定值
B. 输出项与格式描述符个数不符,输出为零值或不定值
C. a,97,12k=12
D. a,97,k=12
正确答案:D
在 printf 函数中,% c 表示按字符格式输出,% d 表示按整数格式输出。ch='a',字符 a 的 ASCII 十进制代码为 97,所以 printf ("% c,% d,",ch,ch,k); 会输出 a,97,,k 的值为 12,printf ("k=% d\n",k); 会输出 k=12,D 选项正确

第 16 题
下列叙述中错误的是( )。
A. 计算机不能直接执行用 C 语言编写的源程序
B. C 程序经 C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件
C. 后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件
D. 后缀为.obj 和.exe 的二进制文件都可以直接运行
正确答案:D
计算机不能直接执行用 C 语言编写的源程序,需要经过编译和连接过程,A 选项正确。C 程序经 C 编译程序编译后,生成后缀为.obj 的目标文件,这是一个二进制文件,B 选项正确。后缀为.obj 的目标文件,经连接程序生成后缀为.exe 的可执行文件,这也是一个二进制文件,C 选项正确。后缀为.obj 的二进制文件不能直接运行,需要经过连接生成.exe 文件后才能运行,D 选项错误。

第 17 题
当变量 c 的值不为 2、4、6 时,值也为 "真" 的表达式是( )。
A. (c==2) || (c==4) || (c==6)
B. (c>=2&&c<=6) || (c!=3) || (c!=5)
C. (c>=2&&c<-6)&& !(c%2)
D. (c>=2&&c<=6)&&(c%2!=1)
正确答案:B
A 选项 (c==2) || (c==4) || (c==6) 表示当 c 等于 2、4、6 时表达式为真,不符合要求,A 选项错误。B 选项 (c>=2&&c<=6) || (c!=3) || (c!=5),当 c 在 2 到 6 之间或者 c 不等于 3 或者 c 不等于 5 时表达式为真,当 c 不为 2、4、6 时,只要满足其他条件表达式也可能为真,B 选项正确。C 选项 (c>=2&&c<-6)&& !(c%2) 中 c>=2&&c<-6 不可能成立,表达式恒为假,C 选项错误。D 选项 (c>=2&&c<=6)&&(c%2!=1) 表示 c 在 2 到 6 之间且 c 为偶数,即 c 只能为 2、4、6 时表达式为真,不符合要求,D 选项错误

第 18 题
若有代数式 表达式,(其中 e 仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的
C 语言表达式是( )。
A. sqrt (abs (n^x+e^x))
B. sqrt (fabs (pow (n,x)+pow (x,e)))
C. sqrt (fabs (pow (n,x)+exp (x)))
D. sqrt (fabs (pow (x,n)+exp (x)))
正确答案:C
在 C 语言中,sqrt 函数用于计算平方根,fabs 函数用于计算绝对值,pow 函数用于计算幂次方,exp 函数用于计算自然指数。代数式的 C 语言表达式应该是 sqrt (fabs (pow (n,x)+exp (x))),C 选项正确。A 选项中 n^x 在 C 语言中不能用 ^ 表示幂次方,应该用 pow 函数,A 选项错误。B 选项中 pow (x,e) 计算的是 x 的 e 次方,而不是自然指数,应该用 exp 函数,B 选项错误。D 选项中 pow (x,n) 计算的是 x 的 n 次方,与代数式不符,D 选项错误

第 19 题
设有定义:int k=0;,下列选项的 4 个表达式中与其他 3 个表达式的值不相同的是( )。
A. k++
B. k+ =1
C. ++k
D. k+1
正确答案:A
k++ 是先使用 k 的值,再将 k 加 1;k+ =1、++k、k+1 都表示将 k 的值加 1 后使用。设 k 初始值为 0,k++ 的值为 0,执行后 k 的值为 1;k+ =1、++k、k+1 的值都为 1

第 20 题
有下列程序,其中 % u 表示按无符号整数输出。
main ( )
{
unsigned int x=0xFFFF;/* x 的初值为十六进制数 */
printf ("% u\n",x);
}
程序运行后的输出结果是( )。
A. -1
B. 65535
C. 32767
D. 0xFFFF
正确答案:B

第 18 题

题目要求将代数式\(\sqrt{\vert n^x + e^x\vert}\)用 C 语言表达式表示。

  • 选项 Asqrt(abs(n^x+e^x)) 错误,^ 在 C 语言中是按位异或运算符,不是幂运算符,且 e 未定义,应该使用 exp 函数表示 \(e^x\)。
  • 选项 Bsqrt(fabs(pow(n,x)+pow(x,e))) 错误,pow(x, e) 不符合要求,应该是 exp(x) 表示 \(e^x\)。
  • 选项 Csqrt(fabs(pow(n,x)+exp(x))) 正确,pow(n, x) 计算 \(n^x\),exp(x) 计算 \(e^x\),fabs 计算绝对值,sqrt 计算平方根。
  • 选项 Dsqrt(fabs(pow(x,n)+exp(x))) 错误,pow(x, n) 计算的是 \(x^n\),而不是 \(n^x\)。

第 19 题

已知 int k = 0;,分析各表达式的值。

  • 选项 Ak++ 是后置自增运算符,先使用 k 的值,再将 k 的值加 1,所以表达式的值为 0,执行后 k 的值为 1。
  • 选项 Bk += 1 等价于 k = k + 1,表达式的值为 1,执行后 k 的值为 1。
  • 选项 C++k 是前置自增运算符,先将 k 的值加 1,再使用 k 的值,所以表达式的值为 1,执行后 k 的值为 1。
  • 选项 Dk + 1 表达式的值为 1,k 的值不变仍为 0。

第 20 题

程序中 unsigned int x = 0xFFFF;0xFFFF 是十六进制表示,unsigned int 是无符号整数类型。

  • 十六进制 0xFFFF 转换为十进制是 65535,%u 是按无符号整数输出,所以输出结果是 65535。

第 21 题

for(i = 3; i < 7; i++) printf((i % 2) ? ("**%d\n") : ("##%d\n"), i);

  • 当 i = 3 时,i % 2 结果为 1,条件为真,输出 **3 并换行。
  • 当 i = 4 时,i % 2 结果为 0,条件为假,输出 ##4 并换行。
  • 当 i = 5 时,i % 2 结果为 1,条件为真,输出 **5 并换行。
  • 当 i = 6 时,i % 2 结果为 0,条件为假,输出 ##6 并换行。

第 22 题

程序中 printf("a+b=%d\n", a + b); ,a 赋值为 10,b 赋值为 20,所以 a + b 的值为 30,但输出格式字符串是 "a+b=%d\n",所以输出结果是 a+b=30

第 23 题

输入数据为 "321",程序逻辑如下:

  • num = 321num > 99 成立,s = 3
  • i = num / 100 = 3j = (num - i * 100) / 10 = 2k = (num - i * 100 - j * 10) = 1
  • switch(s) 中 s = 3,执行 case 3,输出 kji 的值,即 123

第 24 题

struct date { int year, month, day; } today; 定义了一个结构体,包含三个 int 类型的成员。

  • 在一般情况下,int 类型占 4 个字节,所以结构体的大小为 4 * 3 = 12 字节。

第 25 题

判断 char 型变量 c1 是否为小写字母,需要判断 c1 的值是否在 'a' 到 'z' 之间。

  • 选项 A'a' <= c1 <= 'z' 错误,C 语言中不能这样连续比较,它会先比较 'a' <= c1,结果为 0 或 1,再和 'z' 比较。
  • 选项 B(c1 >= a) && (c1 <= z) 错误,a 和 z 未定义,应该用字符常量 'a' 和 'z'
  • 选项 C('a' >= c1 || ('z' <= c1) 错误,逻辑错误,这是判断 c1 不在 'a' 到 'z' 之间。
  • 选项 D(c1 >= 'a') && (c1 <= 'z') 正确,先判断 c1 是否大于等于 'a',再判断是否小于等于 'z'

第 26 题

程序 while(c != ',') { c = getchar(); putchar(c); } 会不断从输入中读取字符并输出,直到遇到逗号 ,

  • 输入 "Hi,Lily ",当读取到逗号时,循环结束,所以输出结果是 Hi,

第 27 题

  • 选项 Ado...while 语句先执行循环体,再判断条件,while 语句先判断条件,再执行循环体,所以可以用 do...while 语句实现的循环一定可以用 while 语句实现。
  • 选项 Bfor 语句是一种更简洁的循环结构,它可以通过初始化、条件判断和迭代三个部分来控制循环,所以可以用 for 语句实现的循环一定可以用 while 语句实现。
  • 选项 C:同理,while 语句实现的循环也可以用 for 语句实现。
  • 选项 Ddo...while 语句与 while 语句的区别不仅是关键字 "while" 出现的位置不同,do...while 语句的循环体至少会执行一次,而 while 语句的循环体可能一次都不执行。

在 C 语言里,一个完整的 C 程序通常是由多个函数组成的。其中,main 函数是程序的入口点,程序运行时会从 main 函数开始执行,而在 main 函数或者其他函数里可以调用其他函数来完成各种不同的任务。

 main 函数和自定义函数 add

#include <stdio.h>

// 自定义函数,用于计算两个整数的和
int add(int a, int b) {
    return a + b;
}

// 主函数,程序的入口
int main() {
    int num1 = 3;
    int num2 = 5;
    int result = add(num1, num2);
    printf("两数之和为: %d\n", result);
    return 0;
}

在这个例子中,程序由 main 函数和 add 函数构成,main 函数调用了 add 函数来完成两个整数相加的操作。

虽然说 C 程序一般由多个函数组成,但理论上一个 C 程序也可以只包含一个 main 函数。例如:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

22/03

第 1 题

原题:下列有关栈论述正确的是( )
A. 栈顶元素最先能被删除
B. 栈顶元素最后才被删除
C. 栈底元素永远不能被删除
D. 以上三种说法都不对

  • 正确答案:A
  • 解析:栈是一种特殊的线性表,它只能在一端(栈顶)进行插入和删除操作。遵循 “后进先出”(Last In First Out,LIFO)的原则,即最后进入栈的元素(栈顶元素)最先被删除,所以选项 A 正确,选项 B 错误。当栈中元素依次被删除,最后也会删除到栈底元素,所以栈底元素不是永远不能被删除,选项 C 错误。

第 2 题

原题:下列论述中正确的是( )
A. 有一种以上根结点的数据构造不一定是非线性构造
B. 只有一种根结点的数据构造不一定是线性构造
C. 循环链表是非线性构造
D. 双向链表是非线性构造

  • 正确答案:B
  • 解析:线性结构有且只有一个根节点,并且每个节点最多只有一个前驱和一个后继;非线性结构的特征不满足线性结构的这些条件。有一种以上根结点的数据构造一定是非线性构造,选项 A 错误。只有一个根节点的数据构造,比如树形结构也只有一个根节点,但它是非线性结构,所以只有一个根结点的数据构造不一定是线性构造,选项 B 正确。循环链表是链表的一种变形,链表是一种线性结构,循环链表也属于线性结构,选项 C 错误。双向链表同样是线性结构,它只是在链表的基础上,每个节点增加了指向前驱节点的指针,选项 D 错误。

第 3 题

  • 原题:某二叉树共有 7 个结点,其中叶子结点只有 1 个,则该二叉树的深度为(假设根结点在第 1 层)( )
    A. 3
    B. 4
    C. 6
    D. 7
  • 正确答案:D
  • 解析:在二叉树中,度为 0 的节点(叶子节点)个数比度为 2 的节点个数多 1,已知叶子节点只有 1 个,所以度为 2 的节点个数为 0。又因为二叉树总节点数 = 度为 0 的节点数 + 度为 1 的节点数 + 度为 2 的节点数,总节点数为 7,度为 0 的节点数为 1,度为 2 的节点数为 0,所以度为 1 的节点数为 6。即该二叉树每层只有一个节点(除了叶子节点层),所以该二叉树的深度为 7(根节点在第 1 层),选项 D 正确。

第 4 题

  • 原题:在软件开发中,需求分析阶段产生的重要文档是( )
    A. 软件集成测试筹划
    B. 软件具体设计阐明书
    C. 顾客手册
    D. 软件需求规格阐明书
  • 正确答案:D
  • 解析:软件集成测试计划一般在软件测试阶段制定,选项 A 错误。软件详细设计说明书是在软件设计阶段产生的文档,描述软件系统各个模块的详细设计,选项 B 错误。用户手册是在软件交付使用时为用户提供的关于软件使用方法等的文档,选项 C 错误。需求分析阶段的主要任务是准确地定义新系统的目标,为了满足用户需要,回答系统必须 “做什么” 的问题,产生的重要文档是软件需求规格说明书,选项 D 正确。

第 5 题

  • 原题:构造化程序所规定的基本构造不涉及( )
    A. 顺序构造
    B. GOTO 跳转
    C. 选择(分支)构造
    D. 反复(循环)构造
  • 正确答案:B
  • 解析:结构化程序设计的基本结构包括顺序结构、选择(分支)结构和循环(反复)结构。顺序结构是程序按照语句的先后顺序依次执行;选择结构根据条件判断结果选择不同的执行路径;循环结构在满足一定条件下重复执行一段代码。而 GOTO 跳转语句会破坏程序的结构化和可读性,使得程序的逻辑变得复杂难以理解和维护,不是结构化程序设计所规定的基本结构,选项 B 正确。

第 6 题

  • 原题:下面描述中错误的是( )
    A. 系统总体构造图支持软件系统的具体设计
    B. 软件设计是将软件需求转换为软件表达的过程
    C. 数据构造与数据库设计是软件设计的任务之一
    D. PAD 图是软件具体设计的表达工具
  • 正确答案:A
  • 解析:系统总体结构图是对软件系统总体架构的描述,它主要用于软件系统的概要设计阶段,帮助设计师从宏观上把握软件系统的结构和模块划分,而不是支持软件系统的具体设计,具体设计阶段会更关注模块内部的细节设计等,选项 A 错误。软件设计就是将软件需求转换为软件的具体实现形式,即软件表达的过程,选项 B 正确。数据结构的设计决定了数据的组织和存储方式,数据库设计则涉及到数据库的创建、表结构设计等,它们都是软件设计的重要任务之一,选项 C 正确。PAD 图(问题分析图)是一种用于软件详细设计的图形工具,它用二维树形结构的图来表示程序的控制流,帮助程序员更好地理解和设计程序,选项 D 正确。

第 7 题

  • 原题:负责数据库中查询操作的数据库语言是( )
    A. 数据定义语言
    B. 数据管理语言
    C. 数据操纵语言
    D. 数据控制语言
  • 正确答案:C
  • 解析:数据定义语言(DDL)主要用于定义数据库的结构,如创建、修改和删除数据库对象(表、视图、索引等),选项 A 错误。数据管理语言并不是标准的数据库语言分类,数据库语言主要包括数据定义语言、数据操纵语言、数据控制语言等,选项 B 错误。数据操纵语言(DML)负责对数据库中的数据进行增、删、改、查等操作,所以查询操作是由数据操纵语言来完成的,选项 C 正确。数据控制语言(DCL)用于控制对数据库的访问权限,如授予和收回用户权限等,选项 D 错误。

第 8 题

  • 原题:一种教师可讲授多门课程,一门课程可由多种教师讲授,则实体教师和课程间的联系是( )
    A. 1:1 联系
    B. 1:m 联系
    C. m:1 联系
    D. m:n 联系
  • 正确答案:D
  • 解析:如果是 1:1 联系,意味着一个教师只能讲授一门课程,一门课程只能由一个教师讲授,这与题目中 “一种教师可讲授多门课程,一门课程可由多种教师讲授” 不符,选项 A 错误。1:m 联系表示一个教师可以对应多个课程,但一门课程只能对应一个教师,不符合题意,选项 B 错误。m:1 联系表示多个教师只能对应一门课程,而一门课程可以对应多个教师,也不符合题意,选项 C 错误。m:n 联系表示一个教师可以讲授多门课程,一门课程也可以由多个教师讲授,符合题目描述,选项 D 正确。

第 9 题

  • 原题:有三个关系 R、S 和 T 如下:(此处未给出具体关系表内容,但根据选项分析可以理解原理)则由关系 R 和 S 得到关系 T 的操作是( )
    A. 自然连接
    B. 交
    C. 除
    D. 并
  • 正确答案:C
  • 解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,从题目描述来看,结果 T 不符合自然连接的特征,选项 A 错误。交运算的结果是两个关系中相同的元组组成的新关系,也不符合结果 T 的特征,选项 B 错误。除运算的含义是:设关系 R 除以关系 S 的结果为关系 T,则 T 包含所有在 R 中但不在 S 中的属性及其值,并且 T 的元组与 S 的元组的所有组合都在 R 中,符合由关系 R 和 S 得到关系 T 的情况,选项 C 正确。并运算的结果是将两个关系的所有元组合并在一起形成的新关系,显然与结果 T 不同,选项 D 错误。

第 10 题

  • 原题:定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是( )
    A. -369
    B. 369
    C. 0.369
    D. 整数集合 {1,2,3,4,5}
  • 正确答案:B
  • 解析:无符号整数是指只能表示非负整数的类型。-369 是负数,不能作为无符号整数类的实例化值,选项 A 错误。369 是非负整数,可以作为无符号整数类的实例化值,选项 B 正确。0.369 是浮点数,无符号整数类只能存储整数,不能存储浮点数,选项 C 错误。整数集合 {1, 2, 3, 4, 5} 不是一个单独的整数,不能作为无符号整数类的实例化值,选项 D 错误。

第 11 题

  • 原题:计算机高档语言程序的运营措施有编译执行和解释执行两种,如下论述中正确的是( )
    A. C 语言程序仅可以编译执行
    B. C 语言程序仅可以解释执行
    C. C 语言程序既可以编译执行又可以解释执行
    D. 以上说法都不对
  • 正确答案:A
  • 解析:C 语言是一种编译型语言,其程序需要通过编译器将源程序编译成目标代码(机器语言代码),然后再通过链接器将目标代码和其他必要的库函数等链接成可执行文件,最终运行可执行文件。C 语言程序通常不能直接解释执行,选项 A 正确,选项 B 和 C 错误。

第 12 题

  • 原题:如下论述中错误的是( )
    A. C 语言的可执行程序是由一系列机器指令构成的
    B. 用 C 语言编写的源程序不能直接在计算机上运营
    C. 通过编译得到的二进制目的程序需要连接才可以运营
    D. 在没有安装 C 语言集成开发环境的机器上不能运营 C 源程序生成的.exe 文献
  • 正确答案:D
  • 解析:C 语言程序经过编译链接后生成的可执行程序,本质上是由一系列机器指令构成的,这些机器指令可以被计算机的 CPU 执行,选项 A 正确。C 语言源程序是文本形式的代码,计算机不能直接执行,需要经过编译、链接等过程转化为可执行文件才能运行,选项 B 正确。编译得到的二进制目标程序可能还依赖于一些库函数等,需要通过链接器将这些依赖的部分与目标程序连接起来,形成完整的可执行文件才能运行,选项 C 正确。即使没有安装 C 语言集成开发环境,只要在生成.exe 文件的机器上安装了相应的运行时库(如果程序依赖这些库),并且操作系统支持该可执行文件的格式,就可以运行 C 源程序生成的.exe 文件,选项 D 错误。

第 13 题

  • 原题:如下选项中不能用作 C 程序合法常量的是( )
    A. 1,234
    B. “123”
    C. 123
    D. “\x7G”
  • 正确答案:A
  • 解析:在 C 语言中,常量是指在程序运行过程中其值不能被改变的量。1,234 在 C 语言中不是合法的常量表示形式,它不是一个单独的数值常量,在 C 语言中数值常量不能用逗号分隔,选项 A 错误。"123" 是一个字符串常量,它表示由字符 '1'、'2'、'3' 组成的字符串,选项 B 是合法的。123 是一个整型常量,表示整数 123,选项 C 是合法的。"\x7G" 虽然不是一个正确的十六进制转义字符表示(十六进制转义字符应该是 \x 后跟十六进制数字),但它在语法上是一种字符常量的表示形式(只是表示的内容可能不符合预期),选项 D 从语法形式上看是对字符常量的一种尝试表示。所以不能用作 C 程序合法常量的是 A 选项。

第 14 题

  • 原题:如下选项中可用作 C 程序合法实数的是( )
    A. .1e0
    B. 3.0e0.2
    C. E9
    D. 9.12E
  • 正确答案:A
  • 解析:在 C 语言中,实数有两种表示形式:小数形式和指数形式。指数形式的一般格式为:aEn 或 aen,其中 a 是十进制数,E(或 e)是指数符号,n 是十进制整数。.1e0 是合法的指数形式表示的实数,.1 表示小数部分,e0 表示 10 的 0 次方,即.1 * 10^0 = 0.1,选项 A 正确。3.0e0.2 中指数部分 0.2 不是整数,不符合指数形式的规定,选项 B 错误。E9 没有前面的十进制数部分,不是合法的指数形式,选项 C 错误。9.12E 缺少指数部分的整数,不是完整的指数形式表示,选项 D 错误。

第 15 题

原题:若有定义语句:int a=3,b=2,c=1;,如下选项中错误的赋值体现式是( )
A. a=(b=4)=3;
B. a=b=c+1;
C. a=(b=4)+c;
D. a=1+(b=c=4);

  • 正确答案:A
  • 解析:在 C 语言中,赋值表达式是从右向左结合的。对于选项 A,b=4 是一个赋值表达式,它的值为 4(将 4 赋给 b,表达式的值就是赋值后变量的值),但是 (b=4)=3 这种写法是错误的,因为赋值表达式 (b=4) 的值是一个右值(可以理解为一个临时的值),不能再对其进行赋值操作,不能将 3 赋给 (b=4),选项 A 错误。选项 B 中,先计算 c + 1 的值为 2,然后将 2 赋给 b,再将 b 的值(2)赋给 a,是合法的赋值操作,选项 B 正确。选项 C 中,先将 4 赋给 b,然后计算 b + c(即 4 + 1 = 5),最后将 5 赋给 a,是合法的赋值操作,选项 C 正确。选项 D 中,先将 4 赋给 c,再将 c 的值(4)赋给 b,然后计算 1 + b(即 1 + 4 = 5),最后将 5 赋给 a,是合法的赋值操作,选项 D 正确。

第 16 题

  • 原题:有如下程序段:

c

char name[20];
int num;
scanf("name=%s num=%d",name,&num);

当执行上述程序段,并从键盘输入:name=Lili num=1001 <回车> 后,name 的值为( )
A. Lili
B. name=Lili
C. Lili num=
D. name=Lili num=1001

  • 正确答案:A
  • 解析:在scanf函数中,格式控制字符串为 "name=% s num=% d",它指定了输入的格式。%s用于读取一个字符串,当遇到空格、制表符或换行符时结束读取。在输入 "name=Lili num=1001 <回车>" 时,scanf函数按照格式要求,从输入中读取字符串部分,遇到空格(即 "")时,认为字符串读取结束,所以将"Lili" 存储到字符数组name中,选项 A 正确。

第 17 题

  • 原题:if 语句的基本形式是:if(体现式)语句,如下有关 “体现式” 值的论述中正确的是( )
    A. 必须是逻辑值
    B. 必须是整数值
    C. 必须是正数
    D. 可以是任意合法的数值
  • 正确答案:D
  • 解析:在 C 语言的if语句中,表达式的值会被隐式转换为逻辑值(真或假)来进行判断。实际上,这个表达式可以是任意合法的数值,当表达式的值为非零值时,被认为是逻辑真;当表达式的值为零值时,被认为是逻辑假。所以它不必须是逻辑值(虽然最终会转换为逻辑判断),也不必须是整数值或正数,选项 D 正确。

第 18 题

  • 原题:有如下程序:

c

#include<stdio.h>
main()
{
    int x=011;
    printf("%d\n",++x);
}

程序运营后的输出成果是( )
A. 12
B. 11
C. 10
D. 9

  • 正确答案:C
  • 解析:在 C 语言中,以 0 开头的整数表示八进制数。所以int x = 011表示将八进制数 11(八进制的 11 转换为十进制是 1 * 8^1 + 1 * 8^0 = 9)赋给变量x++x是前置自增运算符,它会先将x的值加 1,然后再使用加 1 后的x的值。所以x先变为 10,然后printf函数输出 10,选项 C 正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值