搜档网
当前位置:搜档网 › c语言第8章 编译预处理及位运算习题答案

c语言第8章 编译预处理及位运算习题答案

c语言第8章 编译预处理及位运算习题答案
c语言第8章 编译预处理及位运算习题答案

编译预处理习题

一.单项选择题

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)

main()

{ int i1,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d %d\n”,i1,i2);} 5.以下程序输出结果是8 20 12 。

main( )

{

int b=5;

#define b 2

#define f(x) b*(x)

int y=3;

printf(“%d”,f(y+1));

#undef b

print f(“%d”,f(y+1));

#define b 3

printf(“%d\n”,f(y+1));

}

6.下列程序的输出结果是11。

#define NX 2+3

#define NY NX*NX

main()

{ int i=0,m=0; for(;i

7.下列程序的输出结果是MIN。

#define MAX(a,b) a>b

#define EQU(a,b) a==b

#define MIN(a,b) a

main()

{ int a=5,b=6;

if(MAX(a,b)) printf(“MAX\n”);

if(EQU(a,b)) printf(“EQU\n”);

if(MIN(a,b)) printf(“MIN\n”);}

8.下列程序的输出结果是0 1 1。

#define TEST

main( )

{ int x=0,y=1,z; z=2*x+y;

#ifdef TEST

printf(“%d %d ”,x,y);

#endif

printf(“%d\n”,z);

}

三.编程题

1. 定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。

#define R(m,n) (m)%(n)

#include

void main()

{ int m,n;

printf("enter two integers:\n");

scanf("%d%d",&m,&n);

printf("remainder=%d\n",R(m,n));

}

2. 分别用函数和带参的宏,从3个数中找出最大者。

#include

#define MAX(a,b) ((a)>(b)?(a):(b)) // implementation by MACRO

int max3(int a,int b,int c) //implementation by function

{int m;

m=a>b?a:b;

m=m>c?m:c;

return m;

}

void main()

{ int m,n,k;

printf("enter 3 integer:\n");

scanf("%d%d%d",&m,&n,&k);

printf("1. MACRO max=%d\n",MAX(MAX(m,n),k));

printf("2. function max=%d\n",max3(m,n,k));

}

3. 输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。

#include

#define DIVIDEDBY3(m) (m)%3==0

void main()

{ int m;

printf("enter a integer:\n");

scanf("%d",&m);

if(DIVIDEDBY3(m))

printf("%d is divided by 3\n",m);

else

printf("%d is not divided by 3\n",m);

}

2)保持门窗干净、无尘土、玻璃清洁、透明。

相关主题