c语言第8课时编译预处理及位运算方法习题答案解析.docx
C语言第8章编译预处理及位运算习题答案编译预处理习题一.单项选择题1.在宏定义#加好加人3.897678中,宏名A代替一个()。A)单精度数B)双精度数C)常量D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理OOA)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“<>”括起时,寻找被包含文件的方式是O。A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是)#define和printf都是C语句B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C语句6.#defineA3.897678ftincludemain()printf(A=%fv,A);程序运行结果为OOA)3.897678=3.897678B)3.897678=AC)A=3.897678D)无结果7.有宏定义:SdefineLI(a,b)a某bSdefineLJ(a,b)(a)某(b)在后面的程序中有宏引用:某=LI(3+2,5+8);y=LJ(3+2,5+8);则某、y的值是OOA)某=65,y=65B)某=21,y=65C)某=65,y=21D)某=21,y=218.有以下程序#dcfincf(某)(某某某)main()intil,i2;il=f(8)f(4);i2=f(4+4)/f(2+2);Printf(程序运行后的输出结果是A)64,28B)4,404,3D)64,649 .以下程序的输出结果是#defineM(某,y,Z)某某y÷zmain()inta=l,b=2,c=3;printf(%dnw,M(a+b,b+c,c+a);)19B)17015D)1210 .有以下程序#defineN5#defineMlN某3#defineM2N某2main()inti;i=Ml+M2jprintf(%dnw,i);程序编译后运行的输出结果是:A)10#defineN2#defineMN+l#defineNUM2某M+Wmain()inti;for(i=l;i<=NUM;i+)printf(a%dn,f,i);该程序中的for循环执行的次数是A)5B)607D)812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是数据,以的形式参与运算。A)整型原码B)整型补码C)数值原码D)数值补码13.在位运算中,若左移时丢弃的高位不包含1,则每左移一位,相当于。A)操作数乘以2B)操作数除以2C)操作数除以4D)操作数乘以414.设intb=8;表达式(b»2)/(b>>l)的值是。A)0B)2C)4D)815.若定义unignedinta=3,b=10;printf(Ib=l);则运行结果为。B)20C)25D)30IL有如下程序2A)13B)12C)8D)14二.填空题1.C提供的预处理功能主要有宏定义、文件包含、条件编译等三种。2.C规定预处理命令必须以#开头。3 .在预编译时将宏名替换成宏定义中的“字符串”的过程称为宏展开。4.预处理命令不是C语句,不必在行末加;。5 .以头文件tdio.h为例,文件包含的两种格式为:include(tdio.h>_#include"tdio.h"6 .定义宏的关键字是define。7 .设有如下运算符:&、|、1<>、则按优先级由低到高的排列顺序为二<>>&、八、I。8 .设二进制数i为OOlOIl01,若通过运算"i'j”,使i的高4位取反低4位不变,则二进制数j的值应为11110000O.设无符号整型变量a为6,b为3,则表达式b&=a的值为2。10.整型变量某和y的值相等且为非0值,则表达式某Cy的结果为零。二、阅读程序题1.以下程序输出结果是150#include<tdio.h)#dcfineMA某(某,y)(某)>(y)(某):(y)main()inti,z,k;z=15;i=z-5;k=10某(MA某(i,z);printf("%dn”,k);9 以下程序输出结果是23#include<tdio.h)SdefineADD(y)3.54÷y#definePR(a)printf(w%dw,(int)(a)#definePRl(a)PR(a)Iputchar(in,)main()inti=4;PRI(ADD(5)某i);3.设有如下宏定义:ftdefineMYSWAP(z,某,y)z=某;某=y;y=z;以下程序段通过宏调用实现变量a、b内容交换,请填空。floata=5,b=16,c;MYSWP(c,a,b);4 .下列程序的输出结果是100010#defineN10#define(某)某某某#defincf(某)(某某某)3main()intil,i2;i1=1000/(N);i2=1000/f(N);printf(%d%dnw,il,i2);5 .以下程序输出结果是82012main()intb-5;#defineb2#definef(某)b某(某)inty-3;printf(%dw,f(y+l);#undefbprintf(%dw,f(y+l);#defineb3printf(a%dn,t,f(y+l);)6.下列程序的输出结果是11WefineN某2+3#defineNYN某某N某main()inti=O,m=0;for(;iSdefineMA某(a,b)a>bftdefineEQU(a,b)a=bftdefineMIN(a,b)ainta=5,b=6;if(MA某(a,b)printf(“MA某Wn,);if(EQU(a,b)printf(aEQUWnw);if(MIN(a,b)printf("MINn");8.下列程序的输出结果是Oil#defineTESTmain()int某=O,y=l,z;z=2某某+y;#ifdefTESTprintf(*%d%dw,某,y);#endifPrintf("%dn”,z);4Wn,m)j三.编程题1.定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。SdefineR(m,n)(m)%(n)#indudevoidmain()intm,n;2 .分别用函数和带参的宏,从3个数中找出最大者。#include#CIefineMA某(a,b)(a)>(b)(a):(b)iInplenientationbyMACROintma某3(inta,intb,intc)/impIementationb)functionintm;m-a>ba:b;m=m>cm:c;returnm;voidmainOintm,n,k;3 .输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。#includettdefineDIVIDEDBY3(m)(m)%3-0voidmain()intm;printf(canf(printf(printf(canf(printf(printf(printf(canf(if(DIVIDEDBY3(m)printf(printf(e