您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > c语言第8章-编译预处理及位运算习题答案
1编译预处理习题一.单项选择题1.在宏定义#defineA3.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.#defineA3.897678#includestdio.hmain(){printf(“A=%f”,A);}程序运行结果为()。A)3.897678=3.897678B)3.897678=AC)A=3.897678D)无结果7.有宏定义:#defineLI(a,b)a*b#defineLJ(a,b)(a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。A)x=65,y=65B)x=21,y=65C)x=65,y=21D)x=21,y=218.有以下程序#definef(x)(x*x)main(){inti1,i2;i1=f(8)/f(4);i2=f(4+4)/f(2+2);printf(%d,%d\n,i1,i2);}程序运行后的输出结果是2A)64,28B)4,4C)4,3D)64,649.以下程序的输出结果是#defineM(x,y,z)x*y+zmain(){inta=1,b=2,c=3;printf(“%d\n”,M(a+b,b+c,c+a));}A)19B)17C)15D)1210.有以下程序#defineN5#defineM1N*3#defineM2N*2main(){inti;i=M1+M2;printf(“%d\n”,i);}程序编译后运行的输出结果是:A)10B)20C)25D)3011.有如下程序#defineN2#defineMN+1#defineNUM2*M+1#main(){inti;for(i=1;i=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A)5B)6C)7D)812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。A)整型原码B)整型补码C)数值原码D)数值补码13.在位运算中,若左移时丢弃的高位不包含1,则每左移一位,相当于_____。A)操作数乘以2B)操作数除以2C)操作数除以4D)操作数乘以414.设intb=8;表达式(b2)/(b1)的值是________。A)0B)2C)4D)815.若定义unsignedinta=3,b=10;printf(%d\n,a2|b==1);则运行结果为________。3A)13B)12C)8D)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〉#defineMAX(x,y)(x)(y)?(x):(y)main(){inti,z,k;z=15;i=z-5;k=10*(MAX(i,z));printf(“%d\n”,k);}2.以下程序输出结果是23。#include〈stdio.h〉#defineADD(y)3.54+y#definePR(a)printf(“%d”,(int)(a))#definePR1(a)PR(a);putchar(‘\n’)main(){inti=4;PR1(ADD(5)*i);}3.设有如下宏定义:#defineMYSWAP(z,x,y){z=x;x=y;y=z;}以下程序段通过宏调用实现变量a、b内容交换,请填空。floata=5,b=16,c;MYSWAP(c,a,b);4.下列程序的输出结果是100010。#defineN10#defines(x)x*x#definef(x)(x*x)4main(){inti1,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d%d\n”,i1,i2);}5.以下程序输出结果是82012。main(){intb=5;#defineb2#definef(x)b*(x)inty=3;printf(“%d”,f(y+1));#undefbprintf(“%d”,f(y+1));#defineb3printf(“%d\n”,f(y+1));}6.下列程序的输出结果是11。#defineNX2+3#defineNYNX*NXmain(){inti=0,m=0;for(;iNY;i++)m++;printf(“%d\n”,m);}7.下列程序的输出结果是MIN。#defineMAX(a,b)ab#defineEQU(a,b)a==b#defineMIN(a,b)abmain(){inta=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.下列程序的输出结果是011。#defineTESTmain(){intx=0,y=1,z;z=2*x+y;#ifdefTESTprintf(“%d%d”,x,y);#endifprintf(“%d\n”,z);}5三.编程题1.定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。#defineR(m,n)(m)%(n)#includestdio.hvoidmain(){intm,n;printf(entertwointegers:\n);scanf(%d%d,&m,&n);printf(remainder=%d\n,R(m,n));}2.分别用函数和带参的宏,从3个数中找出最大者。#includestdio.h#defineMAX(a,b)((a)(b)?(a):(b))//implementationbyMACROintmax3(inta,intb,intc)//implementationbyfunction{intm;m=ab?a:b;m=mc?m:c;returnm;}voidmain(){intm,n,k;printf(enter3integer:\n);scanf(%d%d%d,&m,&n,&k);printf(1.MACROmax=%d\n,MAX(MAX(m,n),k));printf(2.functionmax=%d\n,max3(m,n,k));}3.输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。#includestdio.h#defineDIVIDEDBY3(m)(m)%3==0voidmain(){intm;printf(enterainteger:\n);scanf(%d,&m);if(DIVIDEDBY3(m))printf(%disdividedby3\n,m);elseprintf(%disnotdividedby3\n,m);}6
本文标题:c语言第8章-编译预处理及位运算习题答案
链接地址:https://www.777doc.com/doc-4725057 .html