编译预处理题与答案

合集下载

C语言习题集(预处理命令篇)

C语言习题集(预处理命令篇)

第六章预处理命令6.1 选择题1.下面叙述中正确的是()。

A. 带参数的宏定义中参数是没有类型的B. 宏展开将占用程序的运行时间C. 宏定义命令是C语言中的一种特殊语句D. 使用#include命令包含的头文件必须以“.h”为后缀2.下面叙述中正确的是()。

A. 宏定义是C语句,所以要在行末加分号B. 可以使用#undef命令来终止宏定义的作用域C. 在进行宏定义时,宏定义不能层层嵌套D. 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换3.在“文件包含”预处理语句中,当#include后面的文件名用双引号括起时,寻找被包含文件的方式为()。

A. 直接按系统设定的标准方式搜索目录B. 先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索C. 仅仅搜索源程序所在目录D. 仅仅搜索当前目录4.下面叙述中不正确的是()。

A. 函数调用时,先求出实参表达式,然后带入形参。

而使用带参的宏只是进行简单的字符替换B. 函数调用是在程序运行时处理的,分配临时的内存单元。

而宏展开则是在编译时进行的,在展开时也要分配内存单元,进行值传递C. 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题,宏没有类型D. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果5.下面叙述中不正确的是()。

A. 使用宏的次数较多时,宏展开后源程序长度增长。

而函数调用不会使源程序变长B. 函数调用是在程序运行时处理的,分配临时的内存单元。

而宏展开则是在编译时进行的,在展开时不分配内存单元,不进行值传递C. 宏替换占用编译时间D. 函数调用占用编译时间6.下面叙述中正确的是( )。

A. 可以把define和if定义为用户标识符B. 可以把define定义为用户标识符,但不能把if定义为用户标识符C. 可以把if定义为用户标识符,但不能把define定义为用户标识符D. define和if都不能定义为用户标识符7.下面叙述中正确的是()。

C语言程序设计(变量作用域与预处理)习题与答案

C语言程序设计(变量作用域与预处理)习题与答案

一、单选题1、设有以下宏定义:#define N 3#define Y(n) ((N+1)*n)则执行语句z=2*(N+Y(5+1));后,z的值为( )。

A.48B.60C.42D.54正确答案:A2、以下叙述不正确的是()。

A.在程序运行期间,全局变量所占存储单元的值永久保留B.全局变量可以由系统自动初始化C.当局部变量与全局变量重名时,全局变量起作用D.全局变量存放在静态存储区正确答案:C3、下面叙述中错误的是( )。

A.主函数中定义的变量在整个程序中都是有效的B.复合语句中定义的变量只在该复合语句中有效C.形式参数也是局部变量D.在其它函数中定义的变量在主函数中也不能使用正确答案:A4、执行下列程序后的输出结果是()。

#include <stdio.h>int a=3, b=4;void fun(int x1, int x2){printf("%d, %d", x1+x2, b);}int main(){int a=5, b=6;fun(a, b);return 0;}A.3, 4B.11,4C.11,6D.11,1正确答案:B5、函数的形式参数系统默认存储类型说明是()。

A.externB.registerC.autoD.static正确答案:C6、下面叙述中错误的是( )。

A.在其它函数中定义的变量在主函数中也不能使用B.主函数中定义的变量在整个程序中都是有效的C.形式参数也是局部变量D.复合语句中定义的变量只在该复合语句中有效正确答案:B二、判断题1、内部函数是指函数的作用域仅限于本文件的函数。

(√)2、编译预处理命令也属于C语句,可以在末尾加分号。

(×)3、在一个文件内定义的静态全局变量也可以被其他文件引用。

(×)4、进行宏定义时,可以引用已经定义的宏名进行层层置换。

(√)5、带参数的宏定义,进行宏展开时与函数调用主要区别是,只替换,不求值。

编程选择题40道:C语言预处理器:宏定义与条件编译.Tex

编程选择题40道:C语言预处理器:宏定义与条件编译.Tex

1.在C语言中,#define 用于定义宏,以下哪个是正确的宏定义使用?o A. #define PI 3.14o B. #define MAX(x, y) x > y ? x : yo C. #define HELLO worldo D. #define int long答案: B解析: 选项A定义了一个常量宏,但选项B定义了一个函数样式的宏,用于计算两个数中的最大值,是更复杂的宏定义示例。

2.以下哪个宏定义在编译期会被预处理器替换?o A. #define DEBUG(x) printf("调试信息: %d\n", x)o B. #define LARGE_NUMBER 1000000Lo C. #define IF ifo D. #define FOR for答案: B解析: 长整型字面量定义的宏在编译期会被数值替换,而选项A会替换为一个函数调用,选项C和D定义了新的关键字,不会在编译期被数值替换。

3.在C语言预处理指令中,#if 和 #ifdef 的主要区别是什么?o A. #if 用于处理表达式,而 #ifdef 用于检查宏是否定义。

o B. #ifdef 可以检查宏的值,而 #if 只能检查宏是否定义。

o C. #if 只能用于数字比较,而 #ifdef 可以用于字符串比较。

o D. #ifdef 和 #if 是完全一样的。

答案: A解析: #ifdef 只检查宏是否定义,不考虑宏的值,#if 可以处理表达式,包括宏的值。

4.当使用 #ifndef 和 #define 指令时,以下哪个说法是正确的?o A. 如果宏未定义,那么 #ifndef 后面的代码会被编译。

o B. #ifndef 后必须紧跟 #define。

o C. #ifndef 和 #define 可以在任何地方出现。

o D. #ifndef 检查宏定义的值。

答案: A解析: #ifndef 用于检查宏是否未定义,如果未定义,后面的代码将被编译。

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

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

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 <stdio.h>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=218.有以下程序# 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, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, 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(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#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) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。

编译原理试题汇总 编译原理期末试题(8套含答案 大题集)

编译原理试题汇总 编译原理期末试题(8套含答案 大题集)

编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。

A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。

A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。

C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。

A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。

A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。

A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。

A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。

A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。

(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。

A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。

编译原理复习题及答案

编译原理复习题及答案

编译原理复习题及答案一、选择题1.一个正规语言只能对应(B)A 一个正规文法B 一个最小有限状态自动机2.文法G[A]:A→εA→aB B→Ab B→a是(A)A 正规文法B 二型文法3.下面说法正确的是(A)A 一个SLR(1)文法一定也是LALR(1)文法B 一个LR(1)文法一定也是LALR(1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A)A 必要条件B 充分必要条件5.下面说法正确的是(B)A 一个正规式只能对应一个确定的有限状态自动机B 一个正规语言可能对应多个正规文法6.算符优先分析与规范归约相比的优点是(A)A 归约速度快B 对文法限制少7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B)A 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/归约冲突8.下面说法正确的是(A)A Lex是一个词法分析器的生成器B Yacc是一个语法分析器9.下面说法正确的是(A)A 一个正规文法也一定是二型文法B 一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C)。

A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行11.(A)是一种典型的解释型语言。

A.BASIC B.C C.FORTRAN D.PASCAL12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。

A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。

A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。

A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。

编译原理复习题一(含答案)

编译原理复习题一(含答案)

一、单选题(每题2分,共20分)1. 编译器的()阶段可将源程序的字符流收集到若干记号中。

A. 语法分析B. 语义分析C. 代码生成D. 词法分析2. 文法A aA | b属于正则文法,正则文法在乔姆斯基层次中对应于()文法。

A. 1型B. 2型C. 3型D. 0型3. 某C语言源代码文件包含#include <stdio.h>,()将对源代码进行处理,把文件stdio.h 包含进去。

A.编译器B.解释器C.汇编器D.预处理器4. LL(1)文法的充要条件是()。

A.对于文法中的每条产生式Uα1|α2|…|αn,要求FIRST(αi)∩FIRST(αj)=Φ(i≠j)B.该文法对应的LL(1)分析表中每个项目最多只有一条产生式。

C.A和BD.都不是5. 以下说法中正确的是()。

A.任何语言都可以描述为一个正则表达式。

B.对于任何一个NFA M,都存在一个DFA M’,满足L(M)= L(M’)。

C.任何一个DFA只有一个终态。

D.NFA的弧上标记只含输入字母表中的元素。

6.合成属性的计算可以通过对语法树进行()遍历进行。

A. 前序B.中序C.后序D.任意7.乔姆斯基的2型文法是这样一种语言,其产生式限制为()。

A. α->βB. P->βC. P->a或P->aβD. αPγ->αβγ8. 正则式的“*”读作()。

A. 并且B.连接C.正则闭包D.闭包9. 编译程序中的语义分析器接受以()为单位的输入,并产生信息供以后各阶段使用。

A. 语法树B.子程序C.单词D.语句10.文法A->aAb|ab生成的语言是()。

A. {ab}B.{aAb}C. {anbn|n≥1}D.{anbn|n≥0}二、判断题(每题2分,共10分,对的打√,错的打×)1. 一个LR(0)文法一定是SLR(1)文法。

()2. 在类型声明文法中,类型属性type是继承属性。

编译原理试题及答案3

编译原理试题及答案3

编译原理复习题一、填空题:1、编译方式与解释方式的根本区别在于(是否生成目标代码)。

2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。

3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。

4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。

5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。

6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。

7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。

8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。

9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。

10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。

11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。

12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。

13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。

C语言习题七编译预处理

C语言习题七编译预处理

习题七编译预处理1.有一个名为init.txt的文件,内容如下:#define HDY(A,B) A/B#define PRINT(Y) printf("y=%d\n",Y)有以下程序#include "init.txt"main(){ int a=1,b=2,c=3,d=4,k;k=HDY(a+c,b+d);PRINT(k);}下面针对该程序的叙述正确的是______。

A、编译出错B、运行出错C、运行结果为 y=0D、运行结果为 y=6解析:本题考查的是带参数的宏定义。

宏替换后,表达式k=HDY(a+c,b+d)即变为k=a+c/b+d=1+3/2+4=6。

故本题答案选D。

2.有以下程序#include <stdio.h>#define N 5#define M N+1#define f(x) (x*M)main(){ int i1,i2;i1=f(2);i2=f(1+1);printf ("%d %d\n",i1,i2);}程序的运行结果是______。

A、12 12B、11 7C、11 11D、12 7解析:本题考查的是宏定义。

在编译时预处理程序用"替换文本"来替换宏,并用对应的实参来替换"替换文本"。

此题中的替换文本分别为:N+1、(x*M)。

引用带参的宏名i1=f(2),在经过宏替换后i1=2*N+1=2*5+1=11(注:因为在对宏 M 的替换中N+1没有加括号,所以对宏f(x)的替换文本展开后就变为:x*N+1形式);与上相同 i2在引用带参的宏名并替换展开后变为:i2=1+1*N+1=1+1*5+1=7。

故本题答案为B。

3.以下叙述中错误的是______。

A、C程序中的#include和#define行均不是C语句B、除逗号运算符外,赋值运算符的优先级最低C、C程序中,j++;是赋值语句D、C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算解析:本题考查的是C语言运算符。

(2021年整理)谭浩强c语言程序设计习题集

(2021年整理)谭浩强c语言程序设计习题集

(完整)谭浩强c语言程序设计习题集编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)谭浩强c语言程序设计习题集)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)谭浩强c语言程序设计习题集的全部内容。

目录重要次重要重复或欲删除基础第一章 C语言概述1。

1 选择题1.2 填空题第二章数据类型、运算符与表达式2。

1 选择题2.2 填空题第三章最简单的C程序设计3。

1 选择题3。

2 填空题第四章逻辑运算和判断选取控制4。

1 选择题4。

2 填空题4。

3 编程题第五章循环控制5。

1 选择题5。

2 填空题5.3 编程题第六章数组6。

1 选择题6.2 填空题6.3 编程题第七章函数7。

1 选择题7.2 填空题7.3 编程题第八章编译预处理8.1 选择题8.2 填空题8。

3 编程题第九章指针9.1 选择题9.2 填空题9。

3 编程题第十章结构体和共用体10.1 选择题10.2 填空题10.3 编程题第十一章位运算11.1 选择题11。

2 填空题11。

3 编程题第十二章文件12。

1 选择题12。

2 填空题12.3 编程题第一章 C语言概述1。

1 选择题*1.1一个C程序的执行是从 A 。

A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束参考答案:A参考分析:C语言总是从main函数开始,main函数结束。

但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。

国家二级C语言机试编译预处理和指针模拟试卷8_真题-无答案

国家二级C语言机试编译预处理和指针模拟试卷8_真题-无答案

国家二级C语言机试(编译预处理和指针)模拟试卷8(总分52,考试时间90分钟)1. 选择题1. 以下叙述中正确的是A. 在C语言中,预处理命令行都以”#”开头B. 预处理命令行必须位于C源程序的起始位置C. #include必须放在C程序的开头D. C语言的预处理不能实现宏定义和条件编译的功能2. 有以下程序,程序运行后的输出结果是#define PT 3.5;#define S(x)PT*x*x;main(){int a=1,b=2;printf("%4.1 f\n",S(a+b));}A. 31.5B. 7.5C. 程序有错无输出结果D. 14.03. 以下关于宏的叙述中正确的是A. 宏定义必须位于源程序中所有语句之前B. 宏名必须用大写字母表示C. 宏调用比函数调用耗费时间D. 宏替换没有数据类型限制4. 有以下程序,程序运行后的输出结果是#include #define S(x)4*(x)*x+1 void main() {int k=5,j=2;printf("%d\n",S(k+j));}A. 197B. 143C. 33D. 285. 设有宏定义:#define IsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A. 判断m是否能被5和7整除B. 判断m被5或者7整除是否余1C. 判断m被5和7整除是否都余1D. 判断m是否能被5或者7整除6. 有以下程序,程序运行后的输出结果是#include #define SUB(a)(a)-(a) main(){ int a=2,b=3,c=5,d;d=SUB(a+b)*c:printf("%d\n",d);}A. .12B. 0C. 10D. .207. 有以下程序,程序运行后的输出结果是#include #define fix)x*x*x main(){ int a=3,s,t;s=f(a+1);t=f((a+1));printf("%d,%d\n",s,t);} A. 10,10 B. 10,64C. 64,10D. 64,648. 有下列程序,程序的运行结果是#include #define N 5 #define M N+1 #define fix)(x*M) main() {int i1,i2;il=ff2);i2=f(1+1);printf("%d%d\n",i1,i2);}A. 12 7B. 12 12C. 11 11D. 11 79. 以下叙述中错误的是A. 预处理命令行的最后不能以分号表示结束B. C程序对预处理命令行的处理是在程序执行的过程中进行的C. #define MAX是合法的宏定义命令行D. 在程序中凡是以“#”开始的语句行都是预处理命令行10. 若程序中有宏定义行:#define N 100则以下叙述中正确的是A. 宏定义行中定义了标识符N的值为整数100B. 上述宏定义行实现将100赋给标示符NC. 在运行时用100替换标识符ND. 在编译程序对C源程序进行预处理时用100替换标识符N11. 若有以下程序,则程序的输出结果是#define S(x)x*x #define T(x)S(x)*S(x) main(){int k=5,j=2;printf("%d,%d\n",S(kI+j),T(k+j));}A. 17,37B. 49,2401C. 17,289D. 49,28912. 有以下程序,程序运行后的输出结果是#include<stdio.h>#define N 2 #define M N+1 #define NUM(M+1)*M/2 main(){printf("%d\n",NUM);}A. 4B. 8C. 9D. 613. 有以下程序,程序运行后的输出结果是#include #define SUB(X,Y)(X+1)*Y main(){int a=3,b=4;printf("%d\n",SUB(a++,b++));}A. 20B. 12C. 16D. 2514. 下面选项中关于编译预处理的叙述正确的是A. 凡是以≠}号开头的行,都被称为编译预处理命令行B. 预处理命令行必须使用分号结尾C. 预处理命令行不能出现在程序的最后一行D. 预处理命令行的作用域是到最近的函数结束处15. 有以下程序,程序的输出结果是#include<stdio.h>#define SQR(X)X*X main(){ int a=10,k=2,m:1;a|=SQR(k+m)/SQR(k+m);printf("%d\n",a);} A. 0 B. 1C. 9D. 1016. 以下叙述中正确的是A. 在包含文件中,不得再包含其他文件B. #include命令行不能出现在程序文件的中间C. 在一个程序中,允许使用任意数量的#include命令行D. 虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接17. 有以下程序,程序的运行结果是#include #include int fun(int n) main() {int*p;{int a;p=(int*)malloc(sizeof(int));a=fun(10);*p=n;return*p;printf("%d\n",a+fun(10));} }A. 10B. 20C. 0D. 出错18. 有以下程序,程序运行后的输出结果是#include #include main() {int*a,*b,*c;a=b:c=(int*)malloc(sizeof(int));*a=1;*b=2,*c=3;a=b;printf("%d,%d,%d\n",*a,*b,*c);}A. 2,2,3B. 3,3,3C. 1,2,3D. 1,1,319. 有以下程序,程序运行后的输出结果是void fun(int*p1,int*p2,int*s) {s=(int*)malloc(sizeof(int));*s=*p1+*(p2++);} main(){int a[2]={1,2},b[2]={10,20},*s=a;fun(a,b,s);printf("%d\n",*s);}A. 10B. llC. 2D. 120. 有以下程序段int*p;p=_________malloc(sizeof(int));若要求使p指向一个int型的动态存储单元,在横线处应填入的是A. (int*)B. intC. int*D. (*int)21. 有以下程序,程序的输出结果是void fun(double*p1,double*p2,double*s) {s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1):} main(){double a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);} A. 1.10 B. 11.10C. 12.10D. 21.1022. 设有以下函数:void fim(int n,char,*s){……}则下面对函数指针的定义和赋值均正确的是A. void*pf();pf=fun;B. void(*pf)(int,char*);pf=fun;C. void*Pf();*pf=fun;D. void(*pf)(int,char);pf=&fun;23. 设有定义语句int(*f)(int);则以下叙述正确的是A. f是基类型为int的指针变量B. f是指向int类型一维数组的指针变量C. f是指向函数的指针变量,该函数具有一个int类型的形参D. f是函数名,该函数的返回值是基类型为int类型的地址24. 以下叙述中正确的是A. 指针变量只能通过求地址运算符(&)来获得地址值B. 语句“p=NULL;”与“p=\0;”是等价的语句C. “int*p1;int**p2;int*p3;”都是合法的定义指针变量的语句D. 语句p=NULL;执行后,指针p指向地址为0的存储单元25. 以下叙述中正确的是A. 函数的类型不能是指针类型B. 函数的形参类型不能是指针类型C. 基类型不同的指针变量可以相互混用D. 设有指针变量为“double*p”,则“p+1”将指针p移动8个字节26. 设有某函数的说明为int*func(int a[10],int n);则下列叙述中,正确的是A. 说明中的a[10]写成a[]或*a效果完全一样B. 形参a对应的实参只能是数组名C. func的函数体中不能对a进行移动指针(如a++)的操作D. 只有指向10个整数内存单元的指针,才能作为实参传给a。

第7章-编译预处理

第7章-编译预处理

一、判断题1. 宏替换时先求出实参表达式的值,然后带入形参运算求值。

答案:F2. 宏替换不存在类型问题,它的参数也是无类型的。

答案:T3. 在C++语言标准库头文件中包含了许多系统函数的原型声明,因此只要程序中使用了这些函数,则应包含这些头文件。

答案:T4. H头文件只能由编译系统提供。

答案:F5. #include命令可以包含一个含有函数定义的C++语言源程序文件。

答案:T6. 用#include包含的头文件的后缀必须是.h。

答案:F7. #include “C:\\USER\\F1.H”是正确的包含命令,表示文件F1.H存放在C盘的USER 目录下。

答案:F8. #include <…>命令中的文件名是不能包括路径的。

答案:F9. 可以使用条件编译命令来选择某部分程序是否被编译。

答案:T10.在软件开发中,常用条件编译命令来形成程序的调试或正式版本。

答案:T二、选择题1. 以下叙述中错误的是()。

A.预处理命令行都必须以#开始B. 在程序中凡是以#开始的语句都是预处理命令行C. C++程序在执行过程中对预处理命令行进行处理D. 预处理命令行可以出现在C++程序中任意一行上答案:C2. 以下有关宏替换的叙述中错误的是()。

A.宏替换不占用运行时间B. 宏名无类型C. 宏替换只是字符替换D. 宏名必须用大写字母表示答案:D3. 在编译指令中,宏定义使用()指令。

A.#includeB. #defineC. #ifD. #else答案:B4. 社#define P(x) x/x,执行语句cout<<P(3*5);后的输出结果是()。

A.1B. 0C. 25D. 15答案:C5. 若有宏定义#define MOD(x,y) x%y,下面程序段的结果是()。

int z,a=15;float b=100;z=MOD(b,a);cout << z++;A.11B. 10C. 6D. 语法错误答案:D6. 在任何情况下计算平方都不会引起二义性的宏定义是()。

第九章改 预处理命令习题答案

第九章改 预处理命令习题答案

第九章习题答案一、单项选择题1.A2.B3.C4.D5.B6.C7.A8.D9.D10.C11.B12.C13.D14.C二、填充题1.编译处理编译预处理2.非静态存储类型变量和外部函数3.74.printf(“%d\n”,m);5.fopen(“a.txt”,”rw”);6.x[i]>=’A’&&x[i]<=’Z’7.“ i=%d\n”8.(1) #define MAX(a,b,c)(2) #define MIN(a,b) (a<b?a:b)(3) #define isalnum(c) (c>=’0’&& c<=’9’)(4) #define isupper( c) (c>=’A’&& c<=’Z’)(5) #define islower( c) (c>=’a’ && c<=’z’)三、程序分析题1.运行结果: -32.运行结果: 7,473.运行结果:50 254.运行结果:x=9, y=55.运行结果:9 9 116.输出结果: x|y&z=3x^y&~z=1x&y&z=0!x|x=1~x|x=-1四、程序设计题1.解:#include <stdio.h>#include <math.h>#define S(a, b, c) 0.5* (a+b+c)#define AREA(a, b, c) sqrt (S(a, b, c)*(S(a, b, c)-a)* (S(a, b, c )-b)* (S(a, b, c)-c)) void main ( ){ float a, b, c;printf (“输入三角形的三条边长:a, b, c\n”);scanf (“%f, %f, %f”, &a, &b, &c) ;if (( a+b>c)&& (b+c>a) && (c+a>b)){ printf (“周长=%f\n”, 2*S(a, b, c ));printf (“面积=%f\n”, AREA(a, b, c ));}else printf (“a, b, c 的长度不能构成三角形\n”) ;}2.解:#include <stdio.h>#include <stdlib.h>void main (int argc, char *argv[ ]){ int a, b;if (argc<3) { printf (“Parameter missing!\n”) ; exit(0); }a=atoi (argv[1]) ;b=atoi (argv[2]) ; //在stdlib.h中有库函数atoi, 把字符串转换成整数printf (“%5d + %5d = %5d\n”, a, b, a+b) ;printf (“%5d - %5d = %5d\n”, a, b, a-b) ;printf (“%5d * %5d = %5d\n”, a, b, a*b) ;printf (“%5d / %5d = %5d\n”, a, b, a/b) ;printf (“%5d %% %5d = %5d\n”, a, b, a%b) ;}3.解:#include <stdio.h>#include <stdlib.h>void main (int argc, char *argv[]){ int i, sum=0;for (i=1; i<argc; i++) sum=sum+atoi (argv[i]) ;printf (“和= %d\n”, sum);}4.解:#include <stdio.h>#include <stdlib.h>#include <string.h>void main (int argc, char *argv[]){ if (argc<3){ printf (“Parameter missing!\n”) ; exit(0); } if ( strcmp (argv[1], argv[2])>0) puts (argv[1]) ;else puts (argv[2]) ;}。

C语言程序设计基础单元总结与练习题及答案

C语言程序设计基础单元总结与练习题及答案

《C语言程序设计》单元总结与练习题答案单元一程序设计宏观认识单元总结提升本单元中,核心内容有C语言程序框架结构、程序的构成和程序开发过程。

通过本单元的学习,我们应该知道:1.C语言程序最基本的程序框架由两部分构成,分别是:(1)编译预处理(2)函数组2.C程序最大的特点就是所有的程序都是用函数来装配的,函数是构成C语言程序的函数返回值类型函数名(形式参数)关键字不能作为用户自定义标识符C.用户自定义标识符中不区分大小写字母D.标识符中可以出现下划线,且可以出现在标识符的任意位置5.以下可用作用户自定义标识符的一组是(c )。

A.void、return、if B.printf、include、fabsC.Max、_abc、Main D.2abc、pay$、sum-10二.填空题1.C语言程序一般由若干个函数构成,程序中应至少包含一个_________,其名称只能为_________。

2.C语言程序中每条语句必须以_________结束。

3.C语言程序的注释是以_________开头,以________结束的,在VC++编程环境中,可使用_________作为注释的起始标识,注释对程序的执行不起任何作用。

4.最初编写的C语言程序称为_________,其扩展名为_________,编译后生成的文件为_________,其扩展名是_________,连接后生成的文件是_________,其扩展名是_________。

5.C语言规定,标识符只能由_________、_________和_________三种字符组成,而且,首字符只能是_________或_________。

******************************************************************************* 习题答案:一.选择题1.C 2.B 3.C 4.C 5.C二.填空题1.主函数main2.分号;3./* */ pp或.c 目标文件(或目标程序).obj 可执行文件(或可执行程序).exe5.字母(A~Z,a~z)、数字(0~9)、下划线“_”字母或下划线*******************************************************************************单元二程序设计基础知识单元总结提升本单元中,核心内容有C语言中基本的数据类型、常量和变量、运算符和表达式以及算法的概念。

习题参考答案-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

习题参考答案-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

附录部分习题参考答案第1章习题1. 解释下列术语。

翻译程序,编译程序,解释程序,源程序,目标程序,遍,前端,后端解答:略!2. 高级语言程序有哪两种执行方式?阐述其主要异同点。

描述编译方式执行程序的过程。

解答:略!3. 在你所使用的C语言编译器中,观察程序1.1经过预处理、编译、汇编、链接四个过程生成的中间结果。

解答:略!4. 编译程序有哪些主要构成成分?各自的主要功能是什么?解答:略!5. 编译程序的构造需要掌握哪些原理和技术?编译程序构造工具的作用是什么?解答:略!6. 复习C语言,其字母表中有哪些符号?有哪些关键字、运算符和界符?标识符、整数和实数的构成规则是怎样的?各种语句和表达式的结构是什么样的?解答:略!7.编译技术可应用在哪些领域?解答:略!8. 你能解释在Java编译器中,输入某个符号后会提示一些单词、某些单词会变为不同的颜色是如何实现的吗?你能解释在Code Blocks中在输入{后,会自动添加},输入do 会自动添加while()是为什么吗?解答:略!第2章习题1. 判断题,对下面的陈述,正确的在陈述后的括号内画√,否则画×。

(1) 有穷自动机识别的语言是正规语言。

()(2) 若r1和r2是Σ上的正则表达式,则r1|r2也是。

()(3) 设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。

()(4) 令Σ={a,b},则所有以b开头的字构成的正规集的正则表达式为b*(a|b)*。

()(5) 对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。

()1解答:略!2.从供选择的答案中,选出应填入下面叙述中?内的最确切的解答。

有穷自动机可用五元组(Q,V T,δ,q0,Q f)来描述,设有一有穷自动机M定义如下:V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为:δ (q0,0)=q1δ (q1,0)=q2δ (q2,1)=q2δ (q2,0)=q2M是一个 A 有穷状态自动机,它所对应的状态转换图为 B ,它所能接受的语言可以用正则表达式表示为 C 。

C语言 选择题库第9章 编译预处理和动态存储分配

C语言 选择题库第9章 编译预处理和动态存储分配

第9章编译预处理和动态存储分配1.以下叙述中正确的是()。

A) 在C语言中,预处理命令行都以"#"开头B) 预处理命令行必须位于C源程序的起始位置C) #include <stdio.h>必须放在C程序的开头D) C语言的预处理不能实现宏定义和条件编译的功能参考答案:A【解析】预处理命令是以"#"号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B),C)错误。

C)语言的预处理能够实现宏定义和条件编译等功能,所以D)错误。

2.以下关于宏的叙述中正确的是()。

A) 宏替换没有数据类型限制B) 宏定义必须位于源程序中所有语句之前C) 宏名必须用大写字母表示D) 宏调用比函数调用耗费时间参考答案:A【解析】宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以B)选项中宏定义必须位于源程序中所有语句之前是错误的。

宏名一般用大写,但不是必须用大写,所以C)选项错误。

宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D)选项错误。

3.有以下程序:#include <stdio.h>#define PT 3.5 ;#define S(x) PT*x*x ;main(){int a=1,b=2;printf("%4.1f\n" ,S(a+b));}程序运行后的输出结果是()。

A) 7.5 B) 31.5 C) 程序有错无输出结果D) 14.0参考答案:C【解析】宏定义不是C语句,末尾不需要有分号。

所以语句printf("%4.1f\n" ,S(a+b));展开后为printf("%4.1f\n" ,3.5;*a+b*a+b;);所以程序会出现语法错误。

哈工大编译原理习题及答案

哈工大编译原理习题及答案

哈⼯⼤编译原理习题及答案1.1何谓源程序、⽬标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系?1.2⼀个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么?1.3选择⼀种你所熟悉的程序设计语⾔,试列出此语⾔中的全部关键字,并通过上机使⽤该语⾔以判明这些关键字是否为保留字。

1.4选取⼀种你所熟悉的语⾔,试对它进⾏分析,以找出此语⾔中的括号、关键字END以及逗号有多少种不同的⽤途。

1.5试⽤你常⽤的⼀种⾼级语⾔编写⼀短⼩的程序,上机进⾏编译和运⾏,记录下操作步骤和输出信息,如果可能,请卸出中间代码和⽬标代码。

第⼀章习题解答1.解:源程序是指以某种程序设计语⾔所编写的程序。

⽬标程序是指编译程序(或解释程序)将源程序处理加⼯⽽得的另⼀种语⾔(⽬标语⾔)的程序。

翻译程序是将某种语⾔翻译成另⼀种语⾔的程序的统称。

编译程序与解释程序均为翻译程序,但⼆者⼯作⽅法不同。

解释程序的特点是并不先将⾼级语⾔程序全部翻译成机器代码,⽽是每读⼊⼀条⾼级语⾔程序语句,就⽤解释程序将其翻译成⼀段机器指令并执⾏之,然后再读⼊下⼀条语句继续进⾏解释、执⾏,如此反复。

即边解释边执⾏,翻译所得的指令序列并不保存。

编译程序的特点是先将⾼级语⾔程序翻译成机器语⾔程序,将其保存到指定的空间中,在⽤户需要时再执⾏之。

即先翻译、后执⾏。

2.解:⼀般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序、代码优化程序、⽬标代码⽣成程序、信息表管理程序、错误检查处理程序组成。

3.解:C语⾔的关键字有:auto break case char const continue default do double else enum externfloat for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。

预处理习题

预处理习题


6、设有宏定义“#define AREA(a,b)a*b”,则 正确的“宏调用”是 。
A、s=AREA(r*r) B、s=AREA(x*y) C、s=AREA D、s=c*AREA((x=3.5),(y+4.1))
7、设有以下宏定义,则执行语句 “z=2*(N+Y(5+1));” 后,z的值是
#define N 3 #define Y(n) ((N+1)*n)
28、分析以下程序的执行结果。
#include <stdio.h> #define PR(x,y,z) printf("x=%d y=%d z=%d\n",x,y,z) main() { int x,y,z; x=y=z=2;++x||++y&&++z;PR(x,y,z); x=y=z=2;++x&&++y||++z;PR(x,y,z); x=y=z=2;++x&&++y&&++z;PR(x,y,z); x=y=z=-2;++x||++y&&++z;PR(x,y,z); x=y=z=-2;++x&&++y||++z;PR(x,y,z); x=y=z=-2;++x&&++y&&++z;PR(x,y,z); }
24、设有如下宏定义:
#define MYSWAP(z,x,y) {int z=x;x=y;y=z;}

编译预处理习题与答案

编译预处理习题与答案

第九章编译预处理9.1 选择题【题9.1】以下叙述中不正确的是。

A)预处理命令行都必须以#号开始B)在程序中凡是以#号开始的语句行都是预处理命令行C)C程序在执行过程中对预处理命令行进行处理D)以下是正确的宏定义#define IBM_PC【题9.2】以下叙述中正确的是。

A)在程序的一行上可以出现多个有效的预处理命令行B)使用带参的宏时,参数的类型应与宏定义时的一致C)宏替换不占用运行时间,只占编译时间D)在以下定义中C R是称为“宏名”的标识符#define C R 045【题9.3】请读程序:#define ADD(x) x+xmain(){int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(“sum=%d”,sum);}上面程序的运行结果是。

A)sum=9 B)sum=10 C)sum=12 D)sum=18【题9.4】以下程序的运行结果是。

#define MIN(x,y) (x)<(y)?(x):(y)main(){int i=10,j=15,k;k=10*MIN(i,j);printf(“%d\n”,k);}A)10 B)15 C)100 D)150【题9.5】在宏定义#define PI 3.14159中,用宏名PI代替一个。

A)常量B)单精度数C)双精度数D)字符串【题9.6】以下程序的运行结果是。

#include <stdio.h>#define FUDGE(y) 2.84+y#define PR(a) printf(“%d”,(int)(a))#define PRINT1(a) PR(a); putchar(‘\n’)main(){int x=2;PRINT1(FUDGE(5)*x);}A)11 B)12 C)13 D)15【题9.7】以下有关宏替换的叙述不正确的是。

A)宏替换不占用运行时间B)宏名无类型C)宏替换只是字符替换D)宏名必须用大写字母表示【题9.8】C语言的编译系统对宏命令的处理是。

C语音编译预处理练习题

C语音编译预处理练习题

一、答案判断题:×√√××××√二、选择题:ADCBA DCDBB DDACB DDCC一、判断题1. C语言预编译命令#include<myfile.h>与#include"myfile.h"的功能是完全一样的。

()2. 宏定义不是C语句,不必在行末加分号。

()3. C语言的编译系统对宏命令的处理是在对源程序中其他成份正式编译之前进行的。

()4. 若有宏定义:#define M(x,y,z)x*y+z,则宏引用M(2+3,4+5,6+7)通过宏展开后的表达式应为(2+3)*(4+5)+6+7。

5. #define与typedef的作用完全相同。

()6. 宏定义后一定要有分号。

()7. C语言的编译系统对宏命令的处理是在程序连接时进行的。

()8. 宏定义不是C语句,不必在行末加分号。

()二、单选题1. 如果程序中有#include"文件名"则意味着()。

(A)将"文件名"所指的该文件的全部内容,复制插入到此命令行处。

(B)指定标准输入输出(C)宏定义一个函数(D)条件编译说明2. 以下有关宏替换的叙述不正确的是()。

(A)宏替换不占用运行时间(B)宏名无类型(C)宏替换只是字符串替换;(D)宏替换是在运行时进行的3. 如果有#define f(x,y)x+y及int a=2,b=3;则执行printf("%d",f(a,b)*f(a,b))后的值为()。

(A)36(B)25(C)11(D)134. 若#include后面的文件名用双引号括起来,寻找被包含文件的方式是()。

A)先按系统设定的标准方式查找,再在当前目录中查找B)先在当前目录中查找,再按系统设定的标准方式查找C)只在当前目录中查找D)只按系统设定的标准方式查找5. 若程序中有#include"文件名",则意味着()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章编译预处理9.1 选择题【题9.1】以下叙述中不正确的是。

A)预处理命令行都必须以#号开始B)在程序中凡是以#号开始的语句行都是预处理命令行C)C程序在执行过程中对预处理命令行进行处理D)以下是正确的宏定义#define IBM_PC【题9.2】以下叙述中正确的是。

A)在程序的一行上可以出现多个有效的预处理命令行B)使用带参的宏时,参数的类型应与宏定义时的一致C)宏替换不占用运行时间,只占编译时间D)在以下定义中C R是称为“宏名”的标识符#define C R 045【题9.3】请读程序:#define ADD(x) x+xmain(){int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(“sum=%d”,sum);}上面程序的运行结果是。

A)sum=9 B)sum=10 C)sum=12 D)sum=18【题9.4】以下程序的运行结果是。

#define MIN(x,y) (x)<(y)?(x):(y)main(){int i=10,j=15,k;k=10*MIN(i,j);printf(“%d\n”,k);}A)10 B)15 C)100 D)150【题9.5】在宏定义#define PI 3.14159中,用宏名PI代替一个。

A)常量B)单精度数C)双精度数D)字符串【题9.6】以下程序的运行结果是。

#include <stdio.h>#define FUDGE(y) 2.84+y#define PR(a) printf(“%d”,(int)(a))#define PRINT1(a) PR(a); putchar(‘\n’)main(){int x=2;PRINT1(FUDGE(5)*x);}A)11 B)12 C)13 D)15【题9.7】以下有关宏替换的叙述不正确的是。

A)宏替换不占用运行时间B)宏名无类型C)宏替换只是字符替换D)宏名必须用大写字母表示【题9.8】C语言的编译系统对宏命令的处理是。

A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行编译的D)在对源程序中其它成份正式编译之前进行的【题9.9】若有宏定义如下:#define X 5#define Y X+1#define Z Y*X/2则执行以下printf语句后,输出结果是。

int a; a=Y;printf(“%d\n”,Z);printf(“%d\n”,--a);A)7 B)12 C)12 D)76 6 5 5【题9.10】若有以下宏定义如下:#define N 2#define Y(n) ((N+1)*n)则执行语句z=2*(N+Y(5));后的结果是。

A)语句有错误B)z=34 C)z=70 D)z无定值【题9.11】若有宏定义:#define MOD(x,y) x%y则执行以下语句后的输出为。

int z,a=15,b=100;z=MOD(b,a);printf(“%d\n”,z++);A)11 B)10 C)6 D)宏定义不合法【题9.12】以下程序的运行结果是。

#define MAX(A,B) (A)>(B)?(A):(B)#define PRINT(Y) printf(“Y=%d\t”,Y)main(){int a=1,b=2,c=3,d=4,t;t=MAX(a+b,c+d);PRINT(t);}A)Y=3 B)存在语法错误C)Y=7 D)Y=0【题9.13】以下程序段中存在错误的是。

A)#define array_size 100int array1[array_size];B)#define PI 3.14159#define S(r) PI*(r)*(r)…area=S(3.2);C)#define PI 3.14159#define S(r) PI*(r)*(r)…area=S(a+b);D)#define PI 3.14159#define S(r) PI*(r)*(r)…area=S(a);【题9.14】请读程序:#include <stdio.h>#define MUL(x,y) (x)*ymain(){int a=3,b=4,c;c=MUL(a++,b++);printf(“%d\n”,c);}上面程序的输出结果是。

A)12 B)15 C)20 D)16【题9.15】#define能作简单的替代,用宏替代计算多项式4*x*x+3*x+2之值的函数f,正确的宏定义是。

A)#define f(x) 4*x*x+3*x+2B)#define f 4*x*x+3*x+2C)#define f(a) (4*a*a+3*a+2)D)#define (4*a*a+3*a+2) f(a)【题9.16】对下面程序段:#define A 3#define B(a) ((A+1)*a)…x=3*(A+B(7));正确的判断是。

A)程序错误,不许嵌套宏定义B)x=93C)x=21D)程序错误,宏定义不许有参数【题9.17】以下程序中,第一个输出值是(1),第二个输出值是(2)。

#include <stdio.h>#define M 3#define N (M+1)#define NN N*N/2main(){printf(“%d\n”,NN);printf(“%d”,5*NN);}【1】A)3 B)4 C)6 D)8【2】A)17 B)18 C)30 D)40【题9.18】以下程序的输出结果为。

#include <stdio.h>#define F(y) 3.84+y#define PR(a) printf(“%d”,(int)(a))#define PRINT(a) PR(a); putchar(‘\n’)main(){int x=2;PRINT(F(3)*x);}A)8 B)9 C)10 D)11【题9.19】以下程序的输出结果为。

#define PT 5.5#define S(x) PT*x*xmain(){int a=1,b=2;printf(“%4.1f\n”,S(a+b));}A)12.0 B)9.5 C)12.5 D)33.5【题9.20】以下在任何情况下计算平方数时都不会引起二义性的宏定义是。

A)#define POWER(x) x*xB)#define POWER(x) (x)*(x)C)#define POWER(x) (x*x)D)#define POWER(x) ((x)*(x))【题9.21】在“文件包含”预处理语句的使用形式中,当#include后面的文件名用“”(双引号)括起时,寻找被包含文件的方式是。

A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅搜索源程序所在目录D)仅仅搜索当前目录【题9.22】在“文件包含”预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,寻找被包含文件的方式是。

A)仅仅搜索当前目录B)仅仅搜索源程序所在目录C)直接按系统设定的标准方式搜索目录D)先在源程序所在目录搜索,再按系统设定的标准方式搜索【题9.23】请读程序:#define LETTER 0main(){char str[20]=“C Language”,c;int i;i=0;while((c=str[i])!=‘\0’){i++;#if LETTERif(c>=‘a’&&c<=‘z’)c=c-32;#elseif(c>=‘A’&&c<=‘Z’)c=c+32;#endifprintf(“%c”,c);}}上面程序的运行结果是。

A)C Language B)c language C)C LANGUAGE D)c lANGUAGE【题9.24】以下正确的描述是。

A)C语言的预处理功能是指完成宏替换和包含文件的调用B)预处理指令只能位于C源程序文件的首部C)凡是C源程序中行首以“#”标识的控制行都是预处理指令D)C语言的编译预处理就是对源程序进行初步的语法检查【题9.25】C语言提供的预处理功能包括条件编译,其基本形式为:#XXX 标记符程序段1#else程序段2#endif这里XXX可以是。

A)define或include B)ifdef或includeC)ifdef或ifndef或define D)ifdef或ifndef或if9.2 填空题【题9.26】设有以下宏定义:#define WIDTH 80#define LENGTH WIDTH+40则执行赋值语句:v=LENGTH*20; (v为int型变量)后,v的值是。

【题9.27】设有以下宏定义:#define WIDTH 80#define LENGTH (WIDTH+40)则执行赋值语句:k=LENGTH*20; (k为int型变量)后,k的值是。

【题9.28】下面程序的运行结果是。

#define DOUBLE(r) r*rmain(){int x=1,y=2,t;t=DOUBLE(x+y);pri ntf(“%d\n”,t);}【题9.29】下面程序的运行结果是。

#define MUL(z) (z)*(z)main()printf(“%d\n”,MUL(1+2)+3);}【题9.30】下面程序的运行结果是。

#define POWER(x) ((x)*(x))main(){int i=1;while(i<=4) printf(“%d\t”,POWER(i++));printf(“\n”);}【题9.31】下面程序的运行结果是。

#define EXCH(a,b) { int t; t=a; a=b; b=t; }main(){int x=5,y=9;EXCH(x,y);printf(“x=%d,y=%d\n”,x,y);}【题9.32】下面程序的运行结果是。

#define MAX(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c)))main(){int x,y,z;x=1; y=2; z=3;printf(“%d,”,MAX(x,y,z));printf(“%d,”,MAX(x+y,y,y+x));printf(“%d\n”,MAX(x,y+z,z));}【题9.33】下面程序的运行结果是。

#define SELECT(a,b) a<b?a:bmain(){int m=2,n=4;printf(“%d\n”,SELECT(m,n));}【题9.34】下面程序的运行结果是。

相关文档
最新文档