一.思考题
1.在文件包含预处理语句的使用形式中,当#include后面的文件名使用双引号括起来时,寻找被包含文件的方式是什么?
2.在某一程序中使用宏替换的宏名用大写字母表示时程序能够正确运行。如果将大写字母改为小写字母程序还能够正确运行吗?
3.输入两个整数,实现两者之间的交换。用带参的宏来实现的参考程序如下:
若将宏的参数改为两个可以实现两个整数的交换吗?如果可以,请修改程序。
4.用宏的方法,直接设计一个宏接受三个参数,从3个整数中找出最大值的参考程序如下:
请考虑设计一个宏接受两个参数,用宏嵌套调用的方式实现从3个整数中找出最大值的程序。
二.练习题
1.选择题
(1) C 语言的预处理功能( )。
A.在程序运行时进行
B.在程序连接时进行
C.和C程序中的其它语句同时进行的
D.在对源程序中其它语句正式编译之前进行
(2) 以下叙述中正确的是( )。
A.预处理命令行必须位于源文件的开头
B.在源文件的一行上可以有多条预处理命令
C.宏名必须用大写字母表示
D.宏替换不占用程序的运行时间
(3)下面宏定义正确的是( )。
A.define S=a*b B.define PI 3.14;
C.define max(a,b) ((a)>(b)?(a):(b)) D.define s(x)(x)*(x);
(4)有以下程序:
程序运行后的输出结果是( )。
A.12 B.15 C.16 D.20
(5)在文件包含预处理语句中,当被包含文件名用“< >”括起时,寻找被包含文件的方式是( )。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在目录搜索,再按系统设定的标准方式搜索
C.仅在源程序所在目录搜索
D.仅搜索当前目录
2.填空题
(1)以下程序的输出结果是( )。
(2)以下程序的输出结果是( )。
(3)以下程序的输出结果是( )。
(4)将宏定义EVEN(x, y)补全
#define EVEN(x, y) _________
该宏在x为偶数并且大于y时,得到1值
例如以下程序
其输出结果为:
(5)补全如下宏定义。
#define PR_EXP(x,y) _________
该宏用于打印两个表达式及其值,例如以下程序
其输出结果为:
三.测试题
1.选择题(www.xing528.com)
(1)以下关于宏定义不正确的是( )。
A.使用宏定义可以嵌套
B.宏定义仅仅是符号替换
C.双符号中出现的宏名称不被替换
D.宏名必须用大写字母表示
(2)以下叙述中正确的是( )。
A.使用带参数的宏定义时,参数的类型应与宏定义时的一致
B.在源文件的一行上可以有多条预处理命令
C.宏名称是在程序运行时处理的
D.使用带参数的宏和函数是完全一样的
(3)设有宏定义:
#define IsDIV(k, n) ((k%n==1)?1:0)
如果变量m已正确定义并赋值,则宏调用:IsDIV(m, 5)&&IsDIV(m, 7)所要表达的是( )。
A.判断m是否能被5或7整除
B.判断m是否能被5和7整除
C.判断m被5或7整除是否余1
D.判断m被5和7整除是否都余1
(4)在文件包含预处理语句中,当被包含文件名用“”包含时,寻找包含文件的方式是( )。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在目录搜索,再按系统设定的标准方式搜索
C.仅在源程序所在目录搜索
D.仅搜索当前目录
(5)C语言中,宏定义有效范围从定义处开始,到源文件结束处结束,但可以用( )。来提前解除宏定义的作用。
A.#ifdef
B.#endif
C.#undefined
D.#undef
2.填空题
(1)以下程序的输出结果是( )。
程序运行后的输出结果是( )。
(2)若有宏定义如下:
则执行以下printf语句后,输出结果是( )。
(3)若有宏定义如下:
则执行以下printf语句后,输出结果是( )。
(4)若有宏定义如下:
则执行以下printf语句后,输出结果是( )。
(5)用预处理指令#define 声明一个常数,用以表明1天中有多少秒,请填空。
#define SECONDS_OF_DAY
(6)若有宏定义如下:
则执行以下printf语句后,输出结果是( )。
3.编程题
(1)输入两个整数,求它们相除的余数,用带参数的宏来实现。
(2)给年份year,定义一个宏,以判别该年份是否闰年。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。