语言 编译预处理及位运算习题答案_第1页
语言 编译预处理及位运算习题答案_第2页
语言 编译预处理及位运算习题答案_第3页
语言 编译预处理及位运算习题答案_第4页
语言 编译预处理及位运算习题答案_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译预处理习题一 单项选择题1. 在宏定义#define A 3.897678中,宏名A代替一个( )。A) 单精度数 B) 双精度数 C) 常量 D) 字符串2. 以下叙述中正确的是 A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示 D)宏替换不占用程序的运行时间3. C语言的编译系统对宏命令的处理( )。A) 在程序运行时进行的 B) 在程序连接时进行的C) 和C程序中的其它语句同时进行的D) 在对源程序中其它语句正式编译之前进行的4. 在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是( )

2、。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 <stdio.h>main( ) printf(“A=%f ”,A);程序运行结果为( )。A) 3.897678=3.897678 B) 3.897678=A C) A=3

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=218. 有以下程序# define f(x) (x*x)main() int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %dn",i1,i2);程序运行后的输出结果是A)64, 28 B

4、)4, 4 C)4, 3 D)64, 649. 以下程序的输出结果是#define M(x,y,z) x*y+zmain() int a=1,b=2, c=3;printf(“%dn”, M(a+b,b+c, c+a);A) 19 B) 17 C) 15 D) 1210. 有以下程序#define N 5#define M1 N*3#define M2 N*2main() int i;i=M1+M2; printf(“%dn”,i);程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011. 有如下程序#define N 2#define M N+1#define NUM

5、 2*M+1#main() int i;for(i=1;i<=NUM;i+)printf(“%dn”,i);该程序中的for循环执行的次数是A) 5 B) 6 C) 7 D) 812. 位运算是对运算对象按二进制位进行操作的运算,运算的对象是_数据,以_的形式参与运算。A) 整型 原码 B) 整型 补码 C)数值 原码 D) 数值 补码13. 在位运算中,若左移时丢弃的高位不包含1,则每左移一位,相当于_。 A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以414. 设 int b=8;表达式(b>>2)/(b>>1)的值是_。A) 0 B) 2

6、 C) 4 D) 815. 若定义unsigned int a=3,b=10;printf("%dn",a<<2b=1);则运行结果为_。A)13 B)12 C)8 D)14二填空题1. C提供的预处理功能主要有_宏定义_、_文件包含_、_条件编译_等三种。2. C规定预处理命令必须以_#_开头。3. 在预编译时将宏名替换成_宏定义中的“字符串”_的过程称为宏展开。4. 预处理命令不是C语句,不必在行末加_;_。5. 以头文件stdio.h为例,文件包含的两种格式为:_ # includestdio.h_,_# include”stdio.h”_。6. 定义宏的

7、关键字是_define_。7. 设有如下运算符:&、|、<<、>>、,则按优先级由低到高的排列顺序为_、<<、>>、&、|_。8. 设二进制数i为00101101,若通过运算“ij”,使i的高4位取反低4位不变,则二进制数j的值应为_11110000_。9. 设无符号整型变量a为6,b为3,则表达式b&=a的值为_2_。10. 整型变量x和y的值相等且为非0值,则表达式xy的结果为_零_。二、阅读程序题1. 以下程序输出结果是 150 。 # includestdio.h # define MAX(x,y) (x)>

8、(y)?(x):(y) main() int i,z,k; z=15; i=z-5; k=10*(MAX(i,z);printf(“%dn”,k);2. 以下程序输出结果是 23 。 # includestdio.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内容交换,请填空。f

9、loat 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 %dn”,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 bprintf(“%d ”,f(y+1);#define b

10、 3printf(“%dn”,f(y+1);6. 下列程序的输出结果是 11 。#define NX 2+3#define NY NX*NXmain() int i=0,m=0; for(;i<NY;i+)m+; printf(“%dn”,m);7. 下列程序的输出结果是 MIN 。#define MAX(a,b) a>b#define EQU(a,b) a=b#define MIN(a,b) a<bmain() int a=5,b=6; if(MAX(a,b) printf(“MAXn”); if(EQU(a,b) printf(“EQUn”); if(MIN(a,b) p

11、rintf(“MINn”);8. 下列程序的输出结果是 0 1 1 。#define TESTmain( ) int x=0,y=1,z; z=2*x+y; #ifdef TEST printf(“%d %d ”,x,y); #endif printf(“%dn”,z);三 编程题1. 定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。 #define R(m,n) (m)%(n)#include <stdio.h>void main()int m,n;printf("enter two integers:n");scanf("%d%d&

12、quot;,&m,&n);printf("remainder=%dn",R(m,n);2. 分别用函数和带参的宏,从3个数中找出最大者。#include <stdio.h>#define MAX(a,b) (a)>(b)?(a):(b) / implementation by MACROint 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=%dn",MAX(MAX(m,n),k);printf("2. function max=%dn",max3(m,n,k);3. 输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。#include <stdio.h>#define DIVIDEDBY3(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论