c语言第8章-编译预处理及位运算习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译预处理习题
一.单项选择题
1.在宏定义#define A 3.897678中,宏名A代替一个()。
A)单精度数 B)双精度数 C)常量 D)字符串
2.以下叙述中正确的是
A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间
3.C语言的编译系统对宏命令的处理()。
A)在程序运行时进行的
B)在程序连接时进行的
C)和C程序中的其它语句同时进行的
D)在对源程序中其它语句正式编译之前进行的
4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式
是()。
A)直接按系统设定的标准方式搜索目录
B)先在源程序所在目录搜索,再按系统设定的标准方式搜索
C)仅仅在源程序所在目录搜索
D)仅仅搜索当前目录
5.以下说法中正确的是
A)#define和printf都是C语句 B)#define是C语句,而printf不是
C)printf是C语句,但#define不是D)#define和printf都不是C语句
6.#define A 3.897678
#include
main( )
{ printf(“A=%f ”,A);
}
程序运行结果为()。
A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b
#define LJ(a,b) (a)*(b)
在后面的程序中有宏引用:x=LI(3+2,5+8);
y=LJ(3+2,5+8);
则x、y的值是()。
A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=21
8.有以下程序
# define f(x) (x*x)
main()
{ int i1, i2;
i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;
printf("%d, %d\n",i1,i2);
}
程序运行后的输出结果是
A)64, 28 B)4, 4 C)4, 3D)64, 64
9.以下程序的输出结果是
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2, c=3;
printf(“%d\n”, M(a+b,b+c, c+a));
}
A) 19 B) 17 C) 15 D) 12
10.有以下程序
#define N 5
#define M1 N*3
#define M2 N*2
main()
{ int i;
i=M1+M2; printf(“%d\n”,i);
}
程序编译后运行的输出结果是:
A) 10 B) 20 C) 25 D) 30
11.有如下程序
#define N 2
#define M N+1
#define NUM 2*M+1
#main()
{ int i;
for(i=1;i<=NUM;i++)printf(“%d\n”,i);
}
该程序中的for循环执行的次数是
A) 5 B) 6C) 7 D) 8
12.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形
式参与运算。
A) 整型原码B) 整型补码 C)数值原码 D) 数值补码
13.在位运算中,若左移时丢弃的高位不包含1,则每左移一位,相当于_____。
A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以4
14.设 int b=8;表达式(b>>2)/(b>>1)的值是________。
A) 0 B) 2 C) 4 D) 8
15.若定义unsigned int a=3,b=10;
printf("%d\n",a<<2|b==1);
则运行结果为________。
A)13 B)12 C)8 D)14
二.填空题
1.C提供的预处理功能主要有__宏定义____、__文件包含____、___条件编译__等三种。
2.C规定预处理命令必须以____#______开头。
3.在预编译时将宏名替换成____宏定义中的“字符串”___的过程称为宏展开。
4.预处理命令不是C语句,不必在行末加______;_____。
5.以头文件stdio.h为例,文件包含的两种格式为:_ # include〈stdio.h〉_,_#
include”stdio.h”_。
6.定义宏的关键字是___define______。
7.设有如下运算符:&、|、~、<<、>>、^,则按优先级由低到高的排列顺序为_~、<<、>>、
&、^、|______。
8.设二进制数i为00101101,若通过运算“i^j”,使i的高4位取反低4位不变,则
二进制数j的值应为__11110000____。
9.设无符号整型变量a为6,b为3,则表达式b&=a的值为____2____。
10.整型变量x和y的值相等且为非0值,则表达式x^y的结果为____零____。
二、阅读程序题
1.以下程序输出结果是150。
# include〈stdio.h〉
# define MAX(x,y) (x)>(y)?(x):(y)
main()
{int i,z,k;
z=15;
i=z-5;
k=10*(MAX(i,z));
printf(“%d\n”,k);
}
2.以下程序输出结果是23 。
# include〈stdio.h〉
# define ADD(y) 3.54+y
# define PR(a) printf(“%d”,(int)(a))
# define PR1(a) PR(a);putchar(‘\n’)
main()
{int i=4;
PR1(ADD(5)*i);
}
3.设有如下宏定义:
#define MYSWAP(z,x,y) {z=x;x=y;y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;MYSWAP( c ,a,b);
4.下列程序的输出结果是1000 10。
#define N 10
#define s(x) x*x
#define f(x) (x*x)