内容正文:
1.7节:宏定义和文件包含
一、单项选择题
1.以下关于宏展开的描述,正确的是( )
A. 宏展开是在编译阶段进行的
B. 宏展开是在运行阶段进行的
C. 宏展开会检查语法错误
D. 宏展开会分配内存
2.以下关于宏定义和函数的区别,错误的是()
A. 宏是文本替换,函数是代码调用
B. 宏无类型检查,函数有类型检查
C. 宏在预处理阶段处理,函数在编译阶段处理
D. 宏调用会产生函数调用开销
3.以下关于文件包含的描述,正确的是()
A. #include可以包含任意类型的文件
B. 一个#include指令可以包含多个文件
C. 文件包含可以嵌套(即头文件中包含其他头文件)
D. #include会在运行时加载文件
4.若有宏定义#define SQR(x) x*x,int a=2, b=3;,则SQR(a+b)的值为()
A. 25
B. 13
C. 11
D. 语法错误
5.若有宏定义#define M 10,#define N M+5,则N*2的宏展开结果是()
A. 10+5*2
B. (10+5)*2
C. 30
D. 语法错误
6.带参数宏#define F(a) a+=2,若int x=3; F(x);,则x的值为()
A. 3
B. 5
C. 语法错误
D. 不确定
7.以下宏定义中,能正确计算两个数平均值的是()
A. #define AVG(a,b) a+b/2.0
B. #define AVG(a,b) (a+b)/2.0
C. #define AVG(a,b) a+(b)/2.0
D. #define AVG(a,b) (a)+(b)/2.0
8.若有宏定义#define SWAP(a,b) {int t=a; a=b; b=t;},int x=1, y=2; SWAP(x,y);,则x和y的值分别为()
A. 1,2
B. 2,1
C. 语法错误
D. 不确定
9.以下关于宏定义的说明,错误的是()
A. 宏名一般用大写字母,以区分变量
B. 宏定义可以嵌套(即宏中使用其他宏)
C. 宏定义后必须加分号
D. 宏定义的作用域是从定义到文件结束
10.若有宏定义#define N 3,#define M N*N,则M的值为()
A. 9
B. 6
C. 3*3
D. 语法错误
11.带参数宏#define MULT(a,b) a*b,int m=2, n=3, p=4;,则MULT(m+n,p)的结果是()
A. 20
B. 24
C. 2+3*4
D. 语法错误
12.带参数宏#define CUBE(x) x*x*x,则CUBE(2+3)的结果是()
A. 125
B. 65
C. 2+3*2+3*2+3
D. 语法错误
13.以下关于宏展开的说法,正确的是()
A. 宏展开会递归替换(即宏中包含自身)
B. 宏展开时会计算表达式的值
C. 宏展开仅替换一次
D. 宏展开会检查变量类型
14.若有宏定义#define SUM(a,b) a+b,int x=1, y=2, z=3;,则SUM(x,y)*z的结果是()
A. 9
B. 8
C. 1+2*3
D. 语法错误
15.若有宏定义#define STR "Hello",则printf(STR);会输出()
A. Hello
B. STR
C. "Hello"
D. 语法错误
二、填空题
1.不带参数宏定义的一般形式是#define ________ __________。
2.若有宏定义#define PI 3.14,则2*PI的宏展开结果是________。
3.带参数宏定义的一般形式是#define ____(____) ____。
4.若有宏定义#define S(a,b) (a)*(b),则S(2+3,4)的宏展开结果是____。
5.文件包含的两种格式分别是#include<____>和#include"____"。
6. 若有宏定义#define ADD(a,b) a+b,则ADD(2,3)*4的宏展开结果是____。
7. 宏展开是在____阶段进行的。
8. 若有宏定义#define SQR(x) x*x,则SQR(3+2)的宏展开结果是____。
9. 若有宏定义#define INC(x) x+=1,int a=4; INC(a);,则a的值为____。
10. 宏定义的作用域是从____到____。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
1.7节:宏定义和文件包含
一、单项选择题
1.以下关于宏展开的描述,正确的是( )
A. 宏展开是在编译阶段进行的
B. 宏展开是在运行阶段进行的
C. 宏展开会检查语法错误
D. 宏展开会分配内存
【答案】A 宏展开属于预处理阶段(编译前),仅做文本替换,不检查语法、不分配内存。
2.以下关于宏定义和函数的区别,错误的是( )
A. 宏是文本替换,函数是代码调用
B. 宏无类型检查,函数有类型检查
C. 宏在预处理阶段处理,函数在编译阶段处理
D. 宏调用会产生函数调用开销
【答案】D 函数调用有栈帧开销,宏是文本替换,无调用开销。
3.以下关于文件包含的描述,正确的是( )
A. #include可以包含任意类型的文件
B. 一个#include指令可以包含多个文件
C. 文件包含可以嵌套(即头文件中包含其他头文件)
D. #include会在运行时加载文件
【答案】C 文件包含可嵌套,#include仅能包含一个文件,且在预处理阶段处理,通常包含头文件(.h)。
4.若有宏定义#define SQR(x) x*x,int a=2, b=3;,则SQR(a+b)的值为( )
A. 25
B. 13
C. 11
D. 语法错误
【答案】C
5.若有宏定义#define M 10,#define N M+5,则N*2的宏展开结果是( )
A. 10+5*2
B. (10+5)*2
C. 30
D. 语法错误
【答案】A 宏替换为M+5*2即10+5*2=20
6.带参数宏#define F(a) a+=2,若int x=3; F(x);,则x的值为( )
A. 3
B. 5
C. 语法错误
D. 不确定
【答案】B 宏展开为x+=2,即x=3+2=5。
7.以下宏定义中,能正确计算两个数平均值的是( )
A. #define AVG(a,b) a+b/2.0
B. #define AVG(a,b) (a+b)/2.0
C. #define AVG(a,b) a+(b)/2.0
D. #define AVG(a,b) (a)+(b)/2.0
【答案】B
8.若有宏定义#define SWAP(a,b) {int t=a; a=b; b=t;},int x=1, y=2; SWAP(x,y);,则x和y的值分别为( )
A. 1,2
B. 2,1
C. 语法错误
D. 不确定
【答案】B
9.以下关于宏定义的说明,错误的是( )
A. 宏名一般用大写字母,以区分变量
B. 宏定义可以嵌套(即宏中使用其他宏)
C. 宏定义后必须加分号
D. 宏定义的作用域是从定义到文件结束
【答案】C
10.若有宏定义#define N 3,#define M N*N,则M的值为( )
A. 9
B. 6
C. 3*3
D. 语法错误
【答案】A
11.带参数宏#define MULT(a,b) a*b,int m=2, n=3, p=4;,则MULT(m+n,p)的结果是( )
A. 20
B. 24
C. 2+3*4
D. 语法错误
【答案】C
12.带参数宏#define CUBE(x) x*x*x,则CUBE(2+3)的结果是( )
A. 125
B. 65
C. 2+3*2+3*2+3
D. 语法错误
【答案】A
13.以下关于宏展开的说法,正确的是( )
A. 宏展开会递归替换(即宏中包含自身)
B. 宏展开时会计算表达式的值
C. 宏展开仅替换一次
D. 宏展开会检查变量类型
【答案】C
14.若有宏定义#define SUM(a,b) a+b,int x=1, y=2, z=3;,则SUM(x,y)*z的结果是( )
A. 9
B. 8
C. 1+2*3
D. 语法错误
【答案】C
15.若有宏定义#define STR "Hello",则printf(STR);会输出( )
A. Hello
B. STR
C. "Hello"
D. 语法错误
【答案】A
二、填空题
1.不带参数宏定义的一般形式是#define ________ __________。
【答案】宏名 字符串
2.若有宏定义#define PI 3.14,则2*PI的宏展开结果是________。
【答案】2*3.14
3.带参数宏定义的一般形式是#define ____(____) ____。
【答案】宏名 形式参数表 字符串
4.若有宏定义#define S(a,b) (a)*(b),则S(2+3,4)的宏展开结果是____。
【答案】(2+3)*(4)
5.文件包含的两种格式分别是#include<____>和#include"____"。
【答案】文件名 文件名
6. 若有宏定义#define ADD(a,b) a+b,则ADD(2,3)*4的宏展开结果是____。
【答案】2+3*4
7. 宏展开是在____阶段进行的。
【答案】预处理
8. 若有宏定义#define SQR(x) x*x,则SQR(3+2)的宏展开结果是____。
【答案】3+2*3+2
9. 若有宏定义#define INC(x) x+=1,int a=4; INC(a);,则a的值为____。
【答案】5
10. 宏定义的作用域是从____到____。
【答案】定义处 文件结束
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$