实验七定义编译预处理 一,实验目的 1.掌握宏定义的方法: 2.掌握文件包含处理方法: 3.掌握条件编译的方法。 二.实验要点 预处理语句主要有四种:宏定义和宏替换,文件包含,条件编译和行控制。 l.宏定义:以#define开头的语句,为的是在C语言程序中方便的作一些定义和 扩展。 2.文件包含:是指一个程序文件将另一个指定文件的内容包含进来,用#include 语句来说明。一般有两种格式: #include<文件名 #include”文件名' 3.条件编译: 一般格式:#ifdef标识符 语句块1 #else 语句块2 #endif 三.实验要求 1.上机前编写好以下程序。(1为填空,2,3自己编程) 2 上机输入和调试自己所编的程序并存在自己的软盘上 检查实验结果是否正确。 4.上机结束后,整理实验报告。 四.实验内容 上机调试运行以下程序。 1.以下程序的输出结果是( 9 #include”stdio.h #define F(y)3.84+y #define PR(a)printf("%d",(int)(a)) #define PRINT(a)PR(a):putchar(\n') mainO int x=2; PRINT(F()*x):}
实验七 定义编译预处理 一. 实验目的 1.掌握宏定义的方法; 2.掌握文件包含处理方法; 3.掌握条件编译的方法。 二. 实验要点 预处理语句主要有四种:宏定义和宏替换,文件包含,条件编译和行控制。 1.宏定义:以#define 开头的语句,为的是在 C 语言程序中方便的作一些定义和 扩展。 2.文件包含:是指一个程序文件将另一个指定文件的内容包含进来,用#include 语句来说明。一般有两种格式: #include<文件名> #include”文件名” 3.条件编译: 一般格式: #ifdef 标识符 语句块 1 #else 语句块 2 #endif 三. 实验要求 1. 上机前编写好以下程序。(1 为填空,2,3 自己编程) 2. 上机输入和调试自己所编的程序并存在自己的软盘上。 3. 检查实验结果是否正确。 4. 上机结束后,整理实验报告。 四. 实验内容 上机调试运行以下程序。 1.以下程序的输出结果是( 9 )。 #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);}
2.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使 用宏的实参,输出已交换后的两个值 说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,.b,不能用三个 实参。(谭浩强书8.1) 3.设计输出实数的格式,包括:(1)一行输出一个实数:(2)一行内输出两个 实数:(3)一行内输出三个实数。实数用“62f”格式输出。 (谭浩强书8.6) 作业题: 一.选择题 1.在宏定义:#define PI3.141592中,用宏名PI代替一个(D) A)常量 B)单精度数C)双精度数D)字符串 2.以下任何情况下计算平方数时都不会引起二义性的宏定义是(D)。 A)#define POWER(x)x*x B) #define POWER(x)(x)*(x) C) #define POWER(x)(x*x) D)#define POWER(x)((x)*(x)) 3.以下正确的叙述是(C A)C语言 的预处理功能是指完成宏替换和包含文件的调用 C语言的预处理指令只能位于C源程序文件的首部 C 凡是C源程序中行首以“#”标识的控制行都是预处理指令。 D)C语言的编译预处理就是对源程序进行初步的语法检查。 4.C语言提供的预处理功能包括条件编译,其基本形式是: #XXX标识符 程序段1 #else 程序段2 Hendif 这里XXX可以是(D A)define或 includ B)ifdef或include C)ifdef或ifndef或define D)ifdef或ifndef或if 二. 填空题 1.下面程序的运行结果是(9 #define MAX(a,b)(a-b?a:b)+1 mainO{ int j=6,k=8,f; printf(%dIn",MAX(j,k)):) 2.下面程序的运行结果是(9.0)。 #define A4
2.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使 用宏的实参,输出已交换后的两个值。 说明:在程序主函数使用宏时只能用两个实参,如 SWAP(a,b),不能用三个 实参。(谭浩强书 8.1) 3.设计输出实数的格式,包括:(1)一行输出一个实数;(2)一行内输出两个 实数;(3)一行内输出三个实数。实数用“6.2f”格式输出。 (谭浩强书 8.6) 作业题: 一. 选择题 1.在宏定义:#define PI 3.141592 中,用宏名 PI 代替一个( D ) A)常量 B)单精度数 C)双精度数 D) 字符串 2.以下任何情况下计算平方数时都不会引起二义性的宏定义是( D )。 A)#define POWER(x) x*x B) #define POWER(x) (x)*(x) C) #define POWER(x) (x*x) D)#define POWER(x) ((x)*(x)) 3.以下正确的叙述是( C )。 A)C 语言的预处理功能是指完成宏替换和包含文件的调用。 B) C 语言的预处理指令只能位于 C 源程序文件的首部。 C) 凡是 C 源程序中行首以“#”标识的控制行都是预处理指令。 D)C 语言的编译预处理就是对源程序进行初步的语法检查。 4.C 语言提供的预处理功能包括条件编译,其基本形式是: #XXX 标识符 程序段 1 #else 程序段 2 #endif 这里 XXX 可以是( D )。 A)define 或 include B) ifdef 或 include C) ifdef 或 ifndef 或 define D)ifdef 或 ifndef 或 if 二. 填空题 1.下面程序的运行结果是( 9 )。 #define MAX(a,b) (a>b?a:b)+1 main(){ int j=6,k=8,f; printf(“%d\n”,MAX(j,k)):} 2.下面程序的运行结果是( 9.0 )。 #define A 4
#define B(x)A*x/2 main() float c,a=4.5; c=B(a): printf(%5.lfn”,c,} 3.设有以下程序,为使之正确运行,请在【】中填入应包含的命令行。 【#include<math.h> main(){ int x=2,y=3; printf(%d\n",pow(x,v)): 4.下面程序的运行结果是(c-0 。 main({ inta-IO,b-20.c: c=a/b: #ifdef DEBUG printf("a=%d,b-%d",ab): #endif 果是(14b-5,c0 序的运行 #define DEBUG main() int a=14 b=15c: a/b def DEBUG printf("a=%d.b=%d."a.b): #endif printf("c=%dn”,c}
#define B(x) A*x/2 main(){ float c,a=4.5; c=B(a); printf(“%5.1f\n”,c);} 3.设有以下程序,为使之正确运行,请在【 】中填入应包含的命令行。 【#include<math.h> 】 main(){ int x=2,y=3; printf(“%d\n”,pow(x,y));} 4.下面程序的运行结果是( c=0 )。 main(){ int a=10,b=20,c; c=a/b; #ifdef DEBUG printf(“a=%d,b=%d”,a,b); #endif printf(“c=%d\n”,c);} 5.下面程序的运行结果是( a=14,b=15,c=0 )。 #define DEBUG main(){ int a=14,b=15,c; c=a/b; #ifdef DEBUG printf(“a=%d,b=%d,”,a,b); #endif printf(“c=%d\n”,c);}