1、LOGOLOGO第9章 编译预处理CONTENTS 目 录提出问题 引入新课自主学习 明确考点案例分析 明确新知仿真演练 体验探索课后作业 自我提升思考1、语言中如何进行宏定义?2、源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。一般形式为:#define (一)、不带参数的宏定义(二)、带参数的宏定义 带参数的宏定义在替换的同时还要进行参数替换,宏定义的格式是:#define ()使用宏名的格式是:()宏替换的过程可以分解成两步:(1)先把实际参数与形式参数从左至右一一对应,再把每个实际参数替换到字符串中对应形式参数出现的位置,形成准备进行宏替换的字
2、符串。(2)把经过第1步形成的字符串替换到程序中该宏名出现的位置考点一:函数的作用范围#define PRICE 20/*宏定义语句*/main()float num,sum;/*变量定义*/num=6.0;sum=num*PRICE;printf(“sum=%f”,sum);/*输出*/#define M(y*y+3*y)main()int s,y;printf(input a number:);scanf(%d,&y);/*输入5*/s=3*M+4*M+5*M;printf(s=%dn,s);#define M y*y+3*y main()int s,y;printf(input a nu
3、mber:);scanf(%d,&y);/*输入5*/s=3*M+4*M+5*M;printf(s=%dn,s);#define MAX(a,b)(ab)?a:bmain()int x,y,max;printf(input two numbers:);scanf(%d%d,&x,&y);max=MAX(x,y);printf(max=%dn,max);案例分析三、案例分析 交流提升#define SQ(y)(y)*(y)main()int a,sq;printf(input a number:);scanf(%d,&a);sq=SQ(a+1);printf(sq=%dn,sq);三、案例分析
4、交流提升【例2】、分析以下程序的运行过程#define SQ(y)y*ymain()int a,sq;printf(input a number:);scanf(%d,&a);sq=SQ(a+1);printf(sq=%dn,sq);仿真演练,体验探索仿真演练,体验探索long fib(int n)if(n2)return(fib(n-1)+fib(n-2);else return(2);main()printf(%dn,fib(3);#define f(x)(x*x)main()int i1,i2;i1=f(8)/f(4);i2=f(4+4)/f(2+2);printf(%d,%dn,i1,
5、i2);A)64,28 B)4,4 C)4,3 D)64,64#define S(x)4*x*x+1main()int i=6,j=8;printf(%dn,S(i+j);仿真演练,体验探索#define N 2#define M N+1#define K M+1*M/2main()int i;for(i=1;iK;i+)printf(“%d”,i);#include#define SQR(x)x*xmain()int a,k=3;a=+SQR(k+1);printf(“dn”,a);A)6 B)10 C)8 D)9#define MIN(x,y)(x)(y)?(x):(y)#include main()int i,j,k;i=10;j=15;k=10*MIN(i,j);printf(“dn”,k);A)15 B)100 C)10 D)150课后作业 自我提升【1】利用带参数的宏替换,实现输入两个整数,输出它们的余数。【2】定义一个带参数的宏替换,实现两个整数的交换。【3】上机演练上述程序并写好总结。谢谢聆听谢谢聆听上机演练上述程序并写好实习总结。