内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第3练,内容是1.7 宏定义和文件包含。
《编程语言基础——C语言》(第5版)一课一练 第3练
1.7 宏定义和文件包含
一、单选题
1. 下列选项中,哪一条命令用于C语言的宏定义?( )
A. #macro PI 3.1415926
B. #define PI 3.1415926
C. define PI = 3.1415926
D. const int PI = 3.1415926
2. 设有宏定义 #define PI 3.1415926,程序中表达式 2*PI*r 经预编译后,宏展开的结果是什么?( )
A. 2*3.1415926*r
B. 2*PI*r
C. 2*PI*3.1415926
D. 6.2831852*r
3. 关于宏定义命令 #define,以下描述正确的是哪一个?( )
A. #define是一条C语言语句,行末需要加分号
B. #define命令在程序运行时才会被处理
C. #define是编译预处理命令,行末不加分号
D. #define命令可以出现在程序的任何位置,包括函数体内部
4. 若有宏定义 #define S(a,b) a*b,对于 S(3+2, 4+1),宏展开后的结果是什么?( )
A. 5*5
B. 3+2*4+1
C. (3+2)*(4+1)
D. 15
5. 关于带参数宏定义的格式,以下描述正确的是哪一个?( )
A. 宏名后面可以有空格,再跟括号和参数表
B. 宏名与括号之间需要加空格作为分隔
C. 宏名与括号之间需要加逗号作为分隔
D. 宏名与括号之间不能加空格,否则变成不带参数的宏定义
6. 关于C语言中宏名的大小写,以下描述正确的是哪一个?( )
A. 宏名不区分大小写,PI和pi完全相同
B. 宏名区分大小写,PI和pi是不同的标识符
C. 宏名习惯用小写字母表示
D. 宏名中不能包含大写字母
7. C语言中文件包含命令 #include <stdio.h> 和 #include "myfile.h" 的搜索路径有什么区别?( )
A. 两种格式的搜索路径相同,都会先搜索当前目录
B. 尖括号<>格式先搜索当前目录,双引号""格式先搜索系统路径
C. 尖括号<>格式在系统指定路径下搜索,双引号""格式先搜索用户当前目录
D. 尖括号<>格式用于包含用户自定义文件,双引号""格式用于包含系统库文件
8. 假设有以下宏定义 #define M(a,b) a+b,则表达式 M(2,3)*M(4,5) 宏展开后的值是多少?( )
A. 19
B. 25
C. 35
D. 12
9. 在C语言程序中使用 #include "prt.h" 包含一个头文件,关于头文件的作用,以下描述正确的是哪一个?( )
A. 头文件在程序运行时动态加载
B. 头文件的作用是将程序拆分为多个可执行文件
C. 头文件的内容独立编译为一个目标文件后链接到主程序
D. 头文件在编译预处理阶段将其内容插入到当前源文件中
10. 关于宏定义与编译预处理,下面描述中错误的是哪一个?( )
A. #define命令在程序的编译预处理阶段被处理
B. 带参数宏定义的宏名与左括号之间需要直接相连
C. #define是C语言关键字
D. 文件包含命令#include也在编译预处理阶段处理
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第3练,内容是1.7 宏定义和文件包含。
《编程语言基础——C语言》(第5版)一课一练 第3练
1.7 宏定义和文件包含
一、单选题
1. 下列选项中,哪一条命令用于C语言的宏定义?( )
A. #macro PI 3.1415926
B. #define PI 3.1415926
C. define PI = 3.1415926
D. const int PI = 3.1415926
【答案】B
【解析】C语言宏定义使用 #define 命令,格式为 #define 标识符 字符串。A使用#macro是错误写法;C缺少#号;D使用const定义的是常量变量,不属于宏定义。
2. 设有宏定义 #define PI 3.1415926,程序中表达式 2*PI*r 经预编译后,宏展开的结果是什么?( )
A. 2*3.1415926*r
B. 2*PI*r
C. 2*PI*3.1415926
D. 6.2831852*r
【答案】A
【解析】不带参数的宏展开是将程序中的宏名替换为宏定义中的字符串内容。PI替换为3.1415926,其他字符原样保留,展开后为2*3.1415926*r。
3. 关于宏定义命令 #define,以下描述正确的是哪一个?( )
A. #define是一条C语言语句,行末需要加分号
B. #define命令在程序运行时才会被处理
C. #define是编译预处理命令,行末不加分号
D. #define命令可以出现在程序的任何位置,包括函数体内部
【答案】C
【解析】#define是编译预处理命令,不是C语句,行末不应加分号。如果加分号,分号也会被当作替换内容的一部分,导致语法错误。#define在编译之前由预处理程序处理。
4. 若有宏定义 #define S(a,b) a*b,对于 S(3+2, 4+1),宏展开后的结果是什么?( )
A. 5*5
B. 3+2*4+1
C. (3+2)*(4+1)
D. 15
【答案】B
【解析】带参数的宏展开采用直接文本替换,形参a替换为实参3+2,形参b替换为实参4+1,结果为 3+2*4+1。由于乘法优先级高于加法,实际计算值为3+8+1=12,容易产生非预期结果。正确做法是在宏定义中加括号:#define S(a,b) (a)*(b)。
5. 关于带参数宏定义的格式,以下描述正确的是哪一个?( )
A. 宏名后面可以有空格,再跟括号和参数表
B. 宏名与括号之间需要加空格作为分隔
C. 宏名与括号之间需要加逗号作为分隔
D. 宏名与括号之间不能加空格,否则变成不带参数的宏定义
【答案】D
【解析】带参数宏定义中,宏名与左括号之间不能有空格。例如 #define AREA(x) PI*x*x 正确定义了带参数的宏;如果写成 #define AREA (x) PI*x*x,则AREA被定义为不带参数的宏,替换字符串为 "(x) PI*x*x"。
6. 关于C语言中宏名的大小写,以下描述正确的是哪一个?( )
A. 宏名不区分大小写,PI和pi完全相同
B. 宏名区分大小写,PI和pi是不同的标识符
C. 宏名习惯用小写字母表示
D. 宏名中不能包含大写字母
【答案】B
【解析】C语言严格区分大小写,宏名大小写不同即为不同的标识符。如果定义了#define PI 3.14,程序中写pi则编译报错"undefined"。习惯上宏名用大写字母(如PI、MAX),但语法上小写也可用,前后必须一致。
7. C语言中文件包含命令 #include <stdio.h> 和 #include "myfile.h" 的搜索路径有什么区别?( )
A. 两种格式的搜索路径相同,都会先搜索当前目录
B. 尖括号<>格式先搜索当前目录,双引号""格式先搜索系统路径
C. 尖括号<>格式在系统指定路径下搜索,双引号""格式先搜索用户当前目录
D. 尖括号<>格式用于包含用户自定义文件,双引号""格式用于包含系统库文件
【答案】C
【解析】#include <文件名>:编译器在系统指定的路径(如include目录)下搜索,一般用于包含系统库函数的头文件。
#include "文件名":编译器先在用户当前目录搜索,找不到时再按系统路径搜索,一般用于包含用户自定义头文件。D选项恰好说反了。
8. 假设有以下宏定义 #define M(a,b) a+b,则表达式 M(2,3)*M(4,5) 宏展开后的值是多少?( )
A. 19
B. 25
C. 35
D. 12
【答案】A
【解析】宏展开采用直接文本替换:M(2,3)*M(4,5) → 2+3*4+5。根据运算符优先级,先算3*4=12,再算2+12+5=19。可见不加括号的宏定义容易因优先级问题产生非预期结果。
9. 在C语言程序中使用 #include "prt.h" 包含一个头文件,关于头文件的作用,以下描述正确的是哪一个?( )
A. 头文件在程序运行时动态加载
B. 头文件的作用是将程序拆分为多个可执行文件
C. 头文件的内容独立编译为一个目标文件后链接到主程序
D. 头文件在编译预处理阶段将其内容插入到当前源文件中
【答案】D
【解析】文件包含是在编译预处理阶段完成的,编译器将头文件中的全部内容原样插入到 #include 命令所在位置。头文件通常包含宏定义、函数声明、类型定义等,实现代码的模块化组织。
10. 关于宏定义与编译预处理,下面描述中错误的是哪一个?( )
A. #define命令在程序的编译预处理阶段被处理
B. 带参数宏定义的宏名与左括号之间需要直接相连
C. #define是C语言关键字
D. 文件包含命令#include也在编译预处理阶段处理
【答案】C
【解析】#define不是C语言关键字,而是编译预处理命令。C语言关键字包括int、char、if、while、return等共32个。预处理命令以#开头,由预处理器在编译之前完成,宏定义、文件包含等均属于预处理阶段的工作。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$