第3章〓全国计算机等级考试“二级C语言程序设计”考试大纲(2023年版) 3.1基本要求 1. 熟悉Visual C++集成开发环境。 2. 掌握结构化程序设计的方法,具有良好的程序设计风格。 3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序。 4. 在Visual C++集成环境下,能够编写简单的C语言程序,并具有基本的纠错和调试程序的能力。 3.2考试内容 一、 C语言程序的结构 1. 程序的构成,main 函数和其他函数。 2. 头文件,数据说明,函数的开始和结束标志以及程序中的注释。 3. 源程序的书写格式。 4. C语言的风格。 二、 数据类型及其运算 1. C语言的数据类型(基本类型、构造类型、指针类型、无值类型)及其定义方法。 2. C语言运算符的种类、运算优先级和结合性。 3. 不同类型数据间的转换与运算。 4. C语言表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。 三、 基本语句 1. 表达式语句、空语句、复合语句。 2. 输入输出函数的调用,正确输入数据并正确设计输出格式。 四、 选择结构程序设计 1. 用if语句实现选择结构。 2. 用switch语句实现多分支选择结构。 3. 选择结构的嵌套。 五、 循环结构程序设计 1. for循环结构。 2. while和dowhile循环结构。 3. continue语句和break语句。 4. 循环的嵌套。 六、 数组的定义和引用 1. 一维数组和二维数组的定义、初始化和数组元素的引用。 2. 字符串与字符数组。 七、 函数 1. 库函数的正确调用。 2. 函数的定义方法。 3. 函数的类型和返回值。 4. 形式参数与实际参数,参数值的传递。 5. 函数的正确调用、嵌套调用、递归调用。 6. 局部变量和全局变量。 7. 变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期。 八、 编译预处理 1. 宏定义和调用(不带参数的宏、带参数的宏)。 2. “文件包含”处理。 九、 指针 1. 地址与指针变量的概念,地址运算符与间址运算符。 2. 一维、二维数组和字符串的地址以及指向变量、数组、字符串、函数、结构体的指针变量的 定义。通过指针引用以上各类型数据。 3. 用指针作函数参数。 4. 返回地址值的函数。 5. 指针数组,指向指针的指针。 十、 结构体(即“结构”)与共同体(即“联合”) 1. 用typedef说明一个新类型。 2. 结构体和共用体类型数据的定义和成员的引用。 3. 通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。 十一、 位运算 1. 位运算符的含义和使用。 2. 简单的位运算。 十二、 文件操作 只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。 1. 文件类型指针(FILE类型指针)。 2. 文件的打开与关闭(fopen,fclose)。 3. 文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf 函数的应用),文件的定位(rewind,fseek函数的应用)。 3.3考试方式 上机考试,考试时长120分钟,满分100分。 1. 题型及分值 单项选择题 40 分(含公共基础知识部分10分)。 操作题 60 分(包括程序填空题、程序修改题及程序设计题)。 2. 考试环境 操作系统: 中文版 Windows 7。 开发环境: Microsoft Visual C++2010学习版。 第4章全国计算机等级考试“二级C语言程序设计”试题 第4章〓全国计算机等级考试“二级C语言程序设计”试题 全国计算机等级考试“二级C语言程序设计”真题及详解 一、 选择题(请在【答题】菜单上选择【选择题】命令,启动选择题测试程序,按照题目上的内容进行答题。作答选择题时键盘被封锁,使用键盘无效,考生须使用鼠标答题。选择题部分只能进入一次,退出后不能再次进入。选择题部分不单独计时。) 1. 下列叙述中正确的是()。 A. 所有数据结构必须有根结点 B. 所有数据结构必须有终端结点(即叶子结点) C. 只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构 D. 没有根结点或没有叶子结点的数据结构一定是非线性结构 【答案】D。 【解析】D选项正确,线性结构的特点是: ①集合中必存在“第一个元素”且唯一; ②集合中必存在“最后一个元素”且唯一; ③除最后一个元素外,其他数据元素均有唯一的“后继”; ④除第一个元素外,其他数据元素均有唯一的“前驱”。所以没有根结点或没有叶子结点的数据结构一定是非线性结构。A、B两选项错误,不是所有数据结构都必须有根结点和叶子结点; C选项错误,数据结构中若有中间结点不满足只有一个前件或者后件的条件,就不是线性结构。答案选择D选项。 2. 以下叙述中错误的是()。 A. C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 B. C语言程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件 C. 用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 D. C语言源程序经编译后生成后缀为.obj的目标程序 【答案】A。 【解析】 A选项错误,注释语句不会被翻译成二进制的机器指令。C语言源程序经过C语言编译程序编译之后生成后缀为.obj的二进制文件(称为目标文件),然后由“链接程序”(Link)的软件把.obj文件与各种库函数连接起来生成一个后缀为.exe的可执行文件。答案选择A选项。 3. C语言主要是借助以下()功能来实现程序模块化的。 A. 定义函数B. 定义常量和外部变量 C. 三种基本结构语句D. 丰富的数据类型 【答案】A。 【解析】 C语言程序的模块化主要通过函数来实现。C语言允许对函数单独进行编译,从而可以实现模块化。答案选择A选项。 4. 有以下程序段: 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。 【解析】 字符变量的值是该字符的ASCII码值,可以参与整型变量所允许的任何运算。ch='a',%c表示以字符格式输出ch的值,所以输出为a; %d表示以十进制代码的形式输出ch的值,为97; k没有对应的输出格式,不输出。在第二个语句中,首先输出k=,然后以十进制代码输出k的值,为12。答案选择D选项。 5. 下列叙述中正确的是()。 A. 栈是“先进先出”的线性表 B. 队列是“先进后出”的线性表 C. 循环队列是非线性结构 D. 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 【答案】D。 【解析】 有序的线性表既可采用顺序存储结构,也可以采用链式存储结构。A选项错误,栈是“先进后出”的线性表; B选项错误,队列是“先进先出”的线性表; C选项错误,循环队列是线性结构的,有序的线性表既可采用顺序存储结构,也可采用链式存储结构。答案选择D选项。 6. 若要实现total=1+2+3+4+5求和,以下程序段错误的是()。 A. int i=1,total=1; while(i<5) { total+=i; i+=1; } B. int i=1,total=0; while(i<=5) { total+=i; i+=1; } C. int i=0,total=0; while(i<5) { i+=1; total+=i; } D. int i=0,total=0; while(i<=5) { total+=i; i+=1; } 【答案】A。 【解析】 A选项执行过程为i=1,total=1,判断while循环条件1<5成立,total=1+1,i=2; 判断循环条件执行函数体,直到i=4,total=1+1+2+3+4,i=5; i=5循环条件不成立,退出循环,A选项不能实现题目要求,错误。B选项执行过程i=1,total=0,1<=5成立,total=0+1=1,i=2; 直到i=5,total=1+2+3+4+5,i=6; i=6条件不成立,退出循环,程序正确。C选项执行过程: i=0,total=0,0<5成立,i=1,total=1; 直到i=5,total=1+2+3+4+5; i=5条件不成立,退出循环,程序正确。D选项执行过程: i=0,total=0,0<=5成立,total=0,i=1; 直到i=5,total=1+2+3+4+5,i=6; i=6条件不成立,退出循环,程序正确。答案选择A选项。 7. 下列不属于软件工程3个要素的是()。 A. 工具B. 过程C. 方法D. 环境 【答案】D。 【解析】 软件工程是指用工程化的原则和方法来构建和维护软件,其要素包括: ①方法,用于完成软件工程项目的技术手段; ②工具,用于支持软件的开发、管理、文档生成; ③过程,用于支持软件开发的各个环节的控制与管理。答案选择D选项。 8. 下面不属于黑盒测试方法的是()。 A. 边界值分析法 B. 基本路径测试 C. 等价类划分法 D. 错误推测法 【答案】B。 【解析】 常见的黑盒测试方法有: 等价类划分法、边界值分析法、错误推测法以及因果图等; 常见的白盒测试方法有: 逻辑覆盖测试和基本路径测试。答案选择B选项。 9. 有三个关系R、S和T如下: R ABC 112 223 313 S ABC 313 223 T ABC 112 则下列操作中正确的是()。 A. T=R∩SB. T=R∪S C. T=R×SD. T=RS 【答案】D。 【解析】 图中关系R比关系S多一行T中的元组,故由关系R和S得到关系T的操作是作差关系。答案选择D选项。 10. 下列选项中,不属于数据管理员(DBA)职责的是()。 A. 数据库维护B. 数据库设计 C. 改善系统性能,提高系统效率D. 数据类型转换 【答案】D。 【解析】 数据库管理员对数据库进行规划、设计、维护、监视等,其主要工作有: ①数据库设计,主要是对数据模式进行设计; ②数据库维护,对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护; ③改善系统性能、不断调整内部结构和提高系统效率。答案选择D选项。 11. 有以下程序 #include<stdio.h> main() { int a=0,b=0; /*给a赋值a=10; 给b赋值b=20*/ printf("a+b=%d\n",a+b);/*输出计算结果*/ } 程序运行后的输出结果是()。 A. a+b=0B. a+b=30C. a+b=10D. 出错 【答案】A。 【解析】 注释/*和*/之间的代码不参与编译,所以a、b的值仍为0。答案选择A选项。 12. 有以下程序段 #include<stdio.h> main() { int a,b,c; a=10;b=50;c=30; if(a>b)a=b,b=c;c=a; printf("a=%db=%dc=%d\n",a,b,c); } 程序的输出结果是()。 A. a=10b=50c=30 B. a=10b=50c=10 C. a=10b=30c=10 D. a=50b=30c=50 【答案】B。 【解析】 C语言中使用分号来作为语句的结束,所以a=b,b=c;是一条含有逗号运算符的语句,是if语句的执行体。因为题中a<b,if条件不满足,直接执行c=a。答案选择B选项。 13. 下列二叉树描述中,正确的是()。 A. 任何一棵二叉树必须有一个度为2的结点 B. 二叉树的度可以小于2 C. 非空二叉树有0个或1个根结点 D. 至少有2个根结点 【答案】B。 【解析】 空树度为0,斜二叉树度为1,故A选项错误,B选项正确。空二叉树没有结点,非空二叉树的定义中要求有且只有一个结点是该树的根结点,故C和D选项错误。答案选择B选项。 14. 下列叙述中,不符合良好程序设计风格要求的是()。 A. 程序的效率第一,清晰第二 B. 程序的可读性好 C. 程序中要有必要的注释 D. 输入数据前要有提示信息 【答案】A。 【解析】 “清晰第一,效率第二”是当今主导的程序设计风格。对程序的要求不仅是能够运行正常,还要便于调试和维护,所以程序要具有良好的可读性,语句结构应该简单直接,这有利于程序的开发与维护。答案选择A选项。 15. 有以下程序 #include<stdio.h> main() { int x,y,z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d\n",x,y,z); } 程序运行后的输出结果是()。 A. 2,3,1B. 2,3,2C. 2,3,3D. 2,2,1 【答案】A。 【解析】 注意区分,z=x++是先将x的值赋给z,再令x自增; z=++x是先将x自增, 再将自增后的值赋给z; 而无论是++x还是x++,都会完成x自增的运算。 对于表达式“z=x++,y++,++y;”, 图31二叉树 因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式改成“(z=x++),(y++),(++y)”。然后从左向右先计算表达式z=x++,后缀自增运算先进行其他运算,再执行自增运算,所以z的值为1,x的值为2,再计算逗号表达式第二个表达式y++,此时y的值为1,y++的值为2,最后计算第三个表达式++y,y的值为3。答案选择A选项。 16. 设二叉树如图31所示。 则后序序列为()。 A. ABDEGCFHB. DBGEAFHC C. DGEBHFCAD. ABCDEFGH 【答案】C。 【解析】 后序遍历,先访问左子树,再访问右子树,最后访问根结点。方法一: 本题中,树不为空,所以先后序遍历左子树,得DGEB,再后序遍历右子树,得HFC,最后访问根结点。所以该二叉树的后序序列为DGEBHFCA。方法二: 由后序遍历的过程可知,树的根结点一定是最后遍历到,即A结点一定在遍历序列的最后,答案选择C选项。 17. 以下叙述中正确的是()。 A. break语句不能用于提前结束for语句的本层循环 B. 使用break语句可以使流程跳出switch语句体 C. continue语句使得整个循环终止 D. 在for语句中,continue与break的效果是一样的,可以互换 【答案】B。