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

合集下载

C语言中的预处理指令

C语言中的预处理指令

C语言中的预处理指令在C语言编程中,预处理指令是一种特殊的指令,用于在编译阶段之前对源代码进行处理。

预处理指令以井号(#)开头,并且不是被编译器执行的实际指令,而是由预处理器处理的。

本文将详细介绍C语言中的预处理指令,并探讨其在程序开发中的作用和用法。

一、什么是预处理指令预处理指令是在编译阶段之前对源代码进行处理的指令。

它的作用是在编译之前对源文件进行一些文本替换、条件编译或者简单的文本粘贴工作。

预处理指令以井号(#)开头,且位于编译单位(源文件或头文件)的最开始位置。

二、预处理指令的作用1. 宏定义宏定义是预处理指令中使用最广泛的功能之一。

通过宏定义,可以为一段代码或者一个常量起一个易于记忆和使用的名字,从而提高代码的可读性和维护性。

下面是一个宏定义的示例:```c#define MAX_NUM 100```在这个例子中,宏定义了一个名为MAX_NUM的常量,它的值为100。

在后续的代码中,可以使用MAX_NUM来代表100,避免了重复书写代码的问题。

2. 文件包含预处理指令还可以使用#include指令将其他文件的内容包含到当前文件中。

这种方式可以在不同的源文件中共享代码,提高代码的复用性。

下面是一个文件包含的示例:```c#include <stdio.h>```通过#include指令,可以将系统库文件stdio.h中的代码包含到当前文件中,以便后续代码可以使用stdio.h中定义的函数和类型。

3.条件编译条件编译是预处理指令中非常重要的概念。

通过条件编译,可以根据条件的真假选择性地编译代码。

这在不同的操作系统、不同的编译器或者不同的编译选项下具有重要的意义。

下面是一个条件编译的示例:```c#ifdef DEBUGprintf("Debug mode\n");#endif```在这个例子中,只有在编译时定义了DEBUG宏的情况下,才会编译并执行printf语句。

c语言预处理命令之条件编译(ifdefelseendifif等)

c语言预处理命令之条件编译(ifdefelseendifif等)

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。

可见预处理过程先于编译器对源代码进行处理。

在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。

要完成这些工作,就需要使用预处理程序。

尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。

预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。

预处理过程还会删除程序中的注释和多余的空白字符。

预处理指令是以#号开头的代码行。

#号必须是该行除了任何空白字符外的第一个字符。

#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。

整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面是部分预处理指令:指令用途#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#error停止编译并显示错误信息一、文件包含#include预处理指令的作用是在指令处展开被包含的文件。

包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。

标准C编译器至少支持八重嵌套包含。

预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。

这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。

例如:#defineAAA#include"t.c"#undefAAA#include"t.c"为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。

c语言程序设计第九章预处理命令

c语言程序设计第九章预处理命令
(1)一个include命令只能指定一个被包含文件,如果要包含 n个文件,要用n个include命令。
(2)如果文件1包含文件2,而文件2中要用到文件3的内容,则 可在文件1中用两个include命令分别包含文件 2和文件3, 而且文件3应出现在文件2之前,即在 filel.c中定义: #include “file3.h” #include “file2.h”
(4)宏定义不是C语句,不必在行末加分号。如果加了分号则 会连分号一起进行置换。如:
#define PI 3.1415926; area=PI* r* r;
经过宏展开后,该语句为 area= 3.1415926;* r* r ; 显然出现语法错误。
(5)#define命令出现在程序中函数的外面,宏名的有效范围 为定义命令之后到本源文件结束。通常, #define命令写 在文件开头,函数之前,作为文件一部分,在此文件范围 内有效。
运行情况如下: input radius:4 l=25.1328 s=50.2655 v=150.7966
2、说明:
(1)宏名一般习惯用大写字母表示,以便与变量名相区别。 (2)使用宏名代替一个字符串,可以减少程序中重复书写某
些字符串的工作量。
(3)宏定义是用宏名代替一个字符串,也就是作简单的置换, 不作正确性检查。
(6)可以用#undef命令终止宏定义的作用城。例如:
# define G 9.8
main()
{ ...
}
# undef G
进行宏定义时,可以引用已定义的宏名,可以层层 置换。
例2 分析下面程序的运行结果
#define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R main() {

C语言程序设计习题集(有答案)

C语言程序设计习题集(有答案)

高等教育自学考试C语言程序设计(二)课程代号(05772)同步练习题班级学号姓名二O 一六年三月目录第一章C语言概述第二章基本数据类型第三章控制结构第四章运算符和表达式第五章函数第六章数组第七章字符与字符串第八章变量类别与编译预处第九章指针第十章结构体、共用体和枚举类型第十一章文件第一章C语言概述一、单项选择题1.在计算机上可以直接运行的程序是()。

A.高级语言程序B.汇编语言程序C.机器语言程序D.C语言程序2. 一个C语言程序是由()A.若干函数组成B.若干过程组成C.若干主程序组成D.若干子程序组成3. C语言不具有的特点是()A.具有结构化的控制语句B.数据类型丰富C.语法限制不太严格,程序设计自由度大D.在可移植性上,C语言比其他语言差4. 以下叙述不正确的是()A.一个C语言程序可由一个或多个函数组成B.一个C语言程序必须包含一个主函数C.C语言程序的基本组成单位是函数D.在C语言程序中,注释说明只能位于一条语句的后面5. 以下叙述正确的是()A.C语言比其他语言高级B.C语言可以不用编译就能被计算机识别和执行C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D.C语言出现的最晚,所以具有其他语言的一切优点二、填空1. 计算机语言的发展经过了、和等阶段。

2. C语言既适合编写,也适合编写应用软件。

标准答案一、单项选择题CADDC二、填空1. 机器语言,汇编语言,高级语言2. 系统软件第二章基本数据类型一、单项选择题1.正确的C语言用户自定义标识符是()A.printB.floatC.when?D.random%22.属于C语言基本数据类型的是( )A.指针型B.无符号整型C.数组型D.结构型3.C语言的长整型数值在计算机中占用的字节个数是( )A.1B.2C.3D.44.C语言中,″\x3d″在内存中占用的字节数是( )A.1B.2C.4D.55.下列关于C语言的叙述错误的是( )A. 英文字母大小写不加以区分B. 不同类型的变量可以出现在同一个表达式中C. 在赋值表达式中赋值号两边的类型可以不同D. 某些运算符在不同的场合可以有不同的含义6.下列转义字符中错误的是( )A. ′\000′B. ′\14′C. ′\x111′D. ′\2′7.下列标识符中,不是C语言保留字的是( )A. charB. whileC. minD. default8.下列保留字中用于构成循环结构的是()A.ifB.whileC.switchD.default9. 数据-324在二进制文件和文本文件中所占的字节数分别是()A.2,2B.2,4C.4,2D.4,410. 请选出可以作为C语言用户标识符的一组标识符()A.void, define, WORD B.A3_B3, _123, abcC.FOR, -abc, Case D.2a, Do, Sizeof11.下列运算符优先级最高的是()A.关系运算符B.赋值运算符C.算术运算符D.逻辑运算符12. sizeof(float)是()A.一种函数调用B.一个不合法的表示形式C.一个整型表达式D.一个浮点表达式13. 下列叙述不正确的是()A.一个C语言程序可由一个或多个函数组成B.一个C语言程序必须包含一个main函数C.C语言程序的基本组成单位是函数D.在C语言程序中,注释说明只能位于一条语句的后面14. 编译C语言程序时,程序中的注释部分将()A.不参加编译,也不会出现在目标程序中B.参加编译,但不会出现在目标程序中C.不参加编译,但会出现在目标程序中D.参加编译,并会出现在目标程序中15. 下列字符串常量不正确的是()A.'abc' B."12'12" C."0" D." "16. 下列4个选项中,均是合法整型常量的是()A.160 -0xffff 011B.-0xcdf 01ª0xeC.-01 986,012 0668D.-0x48a 2e5 0x17. 以下选项中不属于C语言类型的是()A.signed short int B.unsigned long intC.unsigned int D.long short18. 数值029是一个()A.八进制数B.十六进制数C.十进制数D.非法数19. 在C语言中,要求运算数必须是整型的运算符是()A./ B.++ C.!=D.%20. 当c的值不为0时,以下能将c的值赋给变量a,b 的是()A.c=b=a B.(a=c) || (b=c)C.(a=c) && (b=c) D.a=c=b二、填空1. 表示空类型的保留字是_____________。

C语言题库第7章宏定义与预处理√

C语言题库第7章宏定义与预处理√

第七章宏定义与预处理一.单项选择1. 以下程序的运行结果是( D )。

#include<stdio.h>#define ADD(x) x+xint main ( ){int m=1,n=2,k=3,sum ;sum = ADD(m+n)*k ;printf(“%d\n”,sum) ;return 0;}A.18B.9C.12D.102. 以下程序的运行结果是( C )。

#include<stdio.h>#define MIN(x,y) (x)>(y) ? (x) : (y)int main ( ) {int i=10, j=15 , k;k = 10*MIN(i,j);printf(“%d\n”,k);return 0;}A.15B.100C.10D.1503. 以下程序的运行结果是( A )。

#include<stdio.h>#define X 5#define Y X+1#define Z Y*X/2int main ( ) {int a=Y;printf(“%d\n”,Z);printf(“%d\n”,--a);return 0;}A.75B.125C.76D.1264. 以下程序的运行结果是( C )。

#include<stdio.h>#define DOUBLE(r) r*rint main ( ) {int x=1,y=2,t;t = DOUBLE(x+y) ;printf (“%d\n”,t); return 0;}A.7B.6C.5D.85. 在“文件包含”预处理命令形式中,当#include后面的文件名用””(双引号)括起时,寻找被包含文件的方式是( C )。

A.仅仅搜索源程序所在目录B.直接按系统设定的标准方式搜索目录C.先在源程序所在目录中搜索,再按系统设定的标准方式搜索D.仅仅搜索当前目录6. 若有定义#define N 2#define Y(n) ((N+1)*n)则执行语句z=2*(N+Y(5));后,z的值为( C )。

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.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。

c语言入门练习题

c语言入门练习题

C语言入门练习题一、基础知识篇1.1 变量与常量1. 定义一个整型变量并赋值为10。

2. 声明一个浮点型常量,其值为3.14。

3. 将字符型变量 'A' 赋值给另一个字符型变量。

1.2 数据类型1. 将一个整型变量转换为浮点型变量。

2. 将一个长整型变量赋值给一个短整型变量。

3. 编写一个程序,输出不同数据类型所占的字节数。

1.3 运算符1. 计算5加3乘2的结果。

2. 判断两个整型变量是否相等。

3. 使用自增运算符使变量i的值增加1。

二、控制结构篇2.1 顺序结构1. 编写一个程序,输出1到10的整数。

2. 输出用户输入的两个整数中的较大值。

3. 计算并输出圆的面积(给定半径)。

2.2 选择结构1. 判断一个整数是正数、负数还是零。

2. 根据用户输入的成绩,输出对应的等级(A、B、C、D、E)。

3. 编写一个程序,实现石头剪刀布的游戏。

2.3 循环结构1. 计算1到100所有整数的和。

2. 输出所有的水仙花数(一个三位数,其各位数字的立方和等于该数本身)。

3. 使用循环结构输出九九乘法表。

三、函数篇3.1 函数定义与调用1. 编写一个函数,计算两个整数的和。

2. 定义一个函数,实现字符串的复制。

3. 创建一个函数,判断一个数是否为素数。

3.2 递归函数1. 使用递归函数计算斐波那契数列的第n项。

2. 编写一个递归函数,实现字符串的逆序输出。

3. 利用递归函数求解汉诺塔问题。

四、数组篇4.1 一维数组1. 初始化一个包含10个整数的数组,并输出其元素。

2. 计算一维数组中所有元素的和。

3. 找出一维数组中的最大值和最小值。

4.2 二维数组1. 创建一个3行4列的二维数组,并输出其元素。

2. 计算二维数组对角线元素的和。

3. 实现矩阵的转置。

五、指针篇5.1 指针基本操作1. 声明一个整型变量和一个指向该变量的指针,并输出指针所指向的值。

2. 使用指针实现两个整数的交换。

3. 编写一个函数,通过指针参数修改传入的字符串。

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语言运算符。

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

第六章预处理命令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.下面叙述中正确的是()。

A.#define和printf都是C语句B.#define是C语句,而printf不是C.printf是C语句,但#define不是D.#define和printf都不是C语句8.以下叙述中正确的是()。

A. 用#include包含的头文件的后缀不可以是“.a”B. 若一些源程序中包含某个头文件;当该头文件有错时,只需对该头文件进行修改,包含此头文件所有源程序不必重新进行编译C. 宏命令行可以看作是一行C语句D. C编译中的预处理是在编译之前进行的9.下列程序运行结果为()。

#define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*Rmain(){printf("L=%f S=%f\n",L,S);}A. L=18.849556 S=28.274333B. 18.849556=18.849556 28.274333=28.274333C. L=18.849556 28.274333=28.274333D. 18.849556=18.849556 S=28.27433310.以下程序执行的输出结果是( )。

#define MIN(x,y) (x)<(y)?(x):(y)main(){int i,j,k;i=10;j=15;k=10*MIN(i,j);printf("%d\n",k);}A.15B.100C.10D.15011.下列程序执行后的输出结果是( )。

#define MA(x) x*(x-1)main(){int a=1,b=2;printf("%d \n",MA(1+a+b));}A. 6B. 8C. 10D. 1212.以下程序的输出结果是( )。

#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. 19B. 17C. 15D. 12 13.程序中头文件typel.h 的内容是( )。

#define N 5#define M1 N*3程序如下:#include "type1.h"#define M2 N*2main(){int i;i=M1+M2;printf("%d\n",i);}程序编译后运行的输出结果是()。

A. 10B. 20C. 25D. 30 14.请读程序:#include<stdio.h>#define SUB(X,Y) (X)*Ymain(){int a=3, b=4;printf("%d", SUB(a++, b++));}上面程序的输出结果是()。

A. 12B. 15C. 16D. 20 15.执行下面的程序后,a的值是( )。

#define SQR(X) X*Xmain( ){int a=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}A. 10B. 1C. 9D. 0 16.设有以下宏定义#define N 3#define Y(n) ((N+1)*n)则执行语句:z=2 * (N+Y(5+1));后,z的值为( )。

A. 出错B. 42C. 48D. 54 17.以下程序的输出结果是( )。

#define f(x) x*xmain( ){int a=6,b=2,c;c=f(a) / f(b);printf("%d\n",c);}A. 9B. 6C. 36D. 1818.有如下程序#define N 2#define M N+1#define NUM 2*M+1main(){int i;for(i=1;i<=NUM;i++)printf("%d\n",i);}该程序中的for循环执行的次数是( )。

A. 5B. 6C. 7D. 819.执行如下程序后,输出结果为()。

#include <stdio.h>#define N 4+1#define M N*2+N#define RE 5*M+M*Nmain(){printf("%d",RE/2);}A.150B.100C. 41D.以上结果都不正确20.以下程序的输出结果是()。

#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 LanguageB. c languageC. C LANGUAGED. c LANGUAGE 6.2 填空题1.以下程序的输出结果是________。

#define MAX(x,y) (x)>(y)?(x):(y)main(){int a=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf("%d\n",t);}2.下面程序的运行结果是________。

#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);}3.设有如下宏定义#define MYSWAP(z,x,y) {z=x; x=y; y=z;}以下程序段通过宏调用实现变量a、b内容交换,请填空。

float a=5,b=16,c;MYSWAP( 【1】 ,a,b);4.计算圆的周长、面积和球的体积【1】main(){float l,r,s,v;printf("input a radus: ");scanf("%f ", 【2】 );l=2.0*PI*r;s=PI*r*r;v=4.0/3*( 【3】 );printf("l=%.4f\n s=%.4f\n v=%.4f\n",l,s,v);}5.计算圆的周长、面积和球的体积#define PI 3.1415926#define 【1】 L=2*PI*R; 【2】 ;main(){float r,l,s,v;printf("input a radus: ");scanf("%f",&r);CIRCLE(r,l,s,v);printf("r=%.2f\n l=%.2f\n s=%.2f\n v=%.2f\n", 【3】 );}6.3 答案及部分解析一.选择题答案1.A2.B3.B4.B5.D6.B7.D 8.D 9.A 10.A 11.B 12.D 13.C 14.A 15.B 16.C 17.C 18.B 19.C 20.B1. 解析:关于宏的习题,我们要牢记一点:宏展开只是简单的字符串替换。

宏名无类型,宏的参数也没有类型,所以选项A)是正确的。

宏展开是在正式编译以前进行的,不会占用程序的运行时间,而会占用编译时间,所以选项B)错误。

规定所有的编译预处理命令都不是C语言中的语句,因而,编译预处理命令不以分号作为结束符,所以选项C)错误。

头文件习惯上以“.h”为后缀,但它只是习惯而不是规定。

所以选项D)错误。

9. 解析:注意双引号中的宏名不被展开,所以输出结果为L=18.849556 S=28.274333,而不是18.849556=18.849556 28.274333=28.274333。

10.解析:宏展开就是简单的字符串替换。

语句k=10*MIN(i,j);经过宏展开为k=10*(i)<(j)?(i):(j);。

由于*号的优先级要高于<号的优先级,因此要先进行10*(i)的运算;把值带入宏展开式为k=10*10<15?10:15;,条件表达式的值为15。

所以选项A)是正确的。

20.解析:条件编译的命令总共有三种:一种是#ifdef 标识符…#else…#endif,作用是当标识符被定义过,就编译前一段程序,否则编译后一段程序;第二种是#ifdef 标识符…#else…#endif,作用是当标识符未被定义过,就编译前一段程序,否则编译后一段程序;第三种是#if 表达式…#else…#endif,作用是表达式的值为“真”时编译前一段程序,否则编译后一段程序。

相关文档
最新文档