《Cb程序b设计第二版ppt课件.ppt》由会员分享,可在线阅读,更多相关《Cb程序b设计第二版ppt课件.ppt(22页珍藏版)》请在三一办公上搜索。
1、C程序设计(第二版)-教学课件,制作人: 黄 荧制作人单位:河师大数学与信息科学学院,第九章 预处理命令,本章内容: 宏定义:#define (重点!) 包含命令:#include 条件编译命令:(难点。) # if # else # endif,C程序的编译:,预处理命令:是指编译之前执行的处理命令。,C源程序文件(*.cpp) - 目标文件(*.obj)(助记符) c 编译系统 (二进制指令),9.1 宏定义(宏替换),9.1.1 不带参数的宏定义,如:#define PI 3.1415926,一般形式: #define 标识符 字符串,宏定义: 使用一个指定的名字来代表一个字符串作用:使
2、得程序可读性更强,更易于修改.,例9.1 分别求园的周长、面积和球的体积。,#define PI 3.14159void main() float l,s,v,r=4.0; l=2.0*PI*r; s=PI*r*r; v=4.0/3.0*PI*r*r*r; printf(l=%.4fns=%.4fnv=%.4fn,l,s,v);,void main() float l,s,v,r=4.0; l=2.0*3.14159*r; s=3.14159*r*r; v=4.0/3.0*3.14159*r*r*r; printf(l=%.4fns=%.4fnv=%.4fn,l,s,v);,宏展开,注意: 为
3、了讲解方便这里的所有关于宏的例子都去掉了应有的包含命令!,关于宏定义的几点说明:,1)宏名一般用大写字母表示.2)宏使程序更简洁,并提高了程序通用性和可读性。,如,#define N0 1000int aN0;for(i=0;iN0;i+),3) 宏展开只是做简单的字符串替换,不作正确性检查.,如,#define N0 1ooo #define PI 3.l4l5926,4) 宏定义不是C语句(!),不必在行的末尾加分号。,如,#define N0 1000; int aN0;,X,关于宏定义的几点说明:,1)宏名一般用大写字母表示.2)宏使程序更简洁,并提高了程序通用性。3) 宏展开只是做简
4、单的字符串替换,不作正确性检查. 4) 宏定义不是C语句(!),不必在行的末尾加分号。,5)宏定义只能在函数之外,它的有效区域是从定义点到文件结束。,如,#define G 9.8main() #undef Gf1() ,6) #undef 命令终止宏定义的作用域。,关于宏定义的几点说明:,1)宏名一般用大写字母表示.2)宏使程序更简洁,并提高了程序通用性。3) 宏展开只是做简单的字符串替换,不作正确性检查. 4) 宏定义不是C语句(!),不必在行的末尾加分号。5)宏定义只能在函数之外,它的有效区域是从定义点到文件结束。 6) #undef 命令终止宏定义的作用域。,7)新的宏定义可以引用老的
5、宏定义。,如,#define R 3.0#define PI 3.14159#define L 2*PI*R#define S PI*R*Rvoid main() printf(L=%fnS=%fn,L,S);,8)对字符串常量中的宏名不做替换。9)宏定义只用来做简单的字符串替换,不分配内存。,其宏展开为:viod main() printf(L=%fnS=%fn,2*3.14159*3.0, 3.14159*3.0*3.0); ,若,程序如下有: S(x,y) S(5,9) S(x+2,y),9.1.2 带参数的宏定义,一般形式: #define 宏名(形式参数表) 字符串,带参数的宏定义:
6、 使用一个指定的名字来代表一个包含参数的字符串功能:一般用于代替一个变量表达式(公式),或者代替一个或多个语句.,x*y,5*9,x+2*y (!),技巧: 当带参宏中出现乘除法或取余等运算时,应加上适当的括号! 如, #define S(a,b) (a)*(b),如, #define S(a,b) a*b,在做宏替换的同时也要做相应参数的替换!,例 9.3 定义一个带参的宏,用它来计算半径为r的圆的面积,#define PI 3.14159#define S(r) PI*(r)* (r)void main() float a,s1,s2; a=3.6; s1=S(a); s2=S(a+2);
7、 printf(r=%fn,a); printf(s1=%fn,s1); printf(r=%fn,a+2); printf(s2=%fn,s2);,void main() float a, s1,s2; a=3.6; s1=3.14159*(a)*(a); s1=3.14159*(a+2)*(a+2); printf(r=%fn,a); printf(s1=%fn,s1); printf(r=%fn,a+2); printf(s2=%fn,s2);,要点思路:考虑哪个公式可以求半径为r的圆的面积?,void main() float r,l,s,v; printf(请输入圆的半径: ); s
8、canf(%f, ,例 9.4 定义一个宏,使它能计算指定半径的圆的周长、面积和球的体积。,#define PI 3.1415926#define CIRCLE(R,L,S,V) L=2* PI*R; S=PI*R*R; V=4.0/3.0*PI*R*R*Rvoid main() float r,l,s,v; printf(请输入圆的半径: ); scanf(%f, ,宏展开,-宏定义中的字符串可以是一串语句,要点思路:只能用三个赋值语句来求圆的周长面积与球的体积了。,例 9.5 宏定义中的字符串带引号的情况 - 定义格式宏,#define PR printf#define NL n#defi
9、ne D %4d#define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S %snvoid main() float a,b,c,d; char string=china; a=1;b=2;c=3;d=4; PR(D1,a); PR(D2,a,b); PR(D3,a,b,c); PR(D4,a,b,c,d); PR(S,string);,void main() int a,b,c,d; char string=china; a=1;b=2;c=3;d=4; printf(%4dn,a); p
10、rintf(%4d%4dn,a,b); printf(%4d%4d%4dn,a,b,c); printf(%4d%4d%4d%4dn,a,b,c,d); printf(%sn,string);,带参宏定义与函数的区别,最本质的区别: 带参数的宏 - 简单的字符串替换。 函数 - 一段可以反复调用执行的功能代码。,9.2 文件包含处理命令: #include,二 一般形式: # include /系统在标准文件夹中寻找相应的h文件 或 # include 文件名 /系统在标准文件夹和当前用户文件夹中寻找相应的h文件(!),一 功能:将一个指定文件的全部内容包含到命令所在的程序中.,三 包含命令的
11、两种常见应用:,myfunction.c/放自己定义的函数/切记不要把函数直接写入头文件/否则容易出错/=/函数功能: 求两个整数的最大值/入口参数: 两个整数/返回值: 两个整数的最大值/=int max(int a, int b) return (ab)?a:b ;/=/函数功能:求3个整数的最大值/入口参数: 3个整数/返回值:3个整数的最大值/=int max3(int a, int b, int c )int max; max= (ab)?a:b;max= (cmax)?c:max;return max ;,file1.c#include #include myfunction.hv
12、oid main() int a=3,b=4,c=5,m1,m2; m1= max(a,b); m2= max3(a,b,c); printf(max1=%dn ,m1); printf(max2=%dn ,m2); ,1 包含系统给出的标准函数库头文件:如 #include 2 包含个人函数库和常量库头文件:,myfunction.h/放自己定义的函数说明和常量#define N0 10#define M0 5/=/函数功能: 求两个整数的最大值/入口参数: 两个整数/返回值: 两个整数的最大值/=int max(int a, int b);/=/函数功能:求3个整数的最大值/入口参数: 3
13、个整数/返回值:3个整数的最大值/=int max3(int a, int b, int c );,例 9.6 将例9.5中的格式宏作为头文件,包含在用户的程序中.,myformat.h#define PR printf#define NL n#define D %4d#define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S %sn,#include #include myformat.hvoid main() int a,b,c,d; char string=china; a=1;b=2
14、;c=3;d=4; PR(D1,a); PR(D2,a,b); PR(D3,a,b,c); PR(D4,a,b,c,d); PR(S,string);,9.3 条件编译 P214,1 条件编译的功能: 实现对程序的部分编译。,编译:C程序文件(*.c) - 目标文件(*.obj)(助记符) c 编译系统 (二进制指令),2 条件编译命令的三种形式:,1) #ifdef 标识符 程序段1 #else 程序段2 # endif,2)#ifndef 标识符 程序段1 #else 程序段2 # endif,3)#if 表达式 程序段1 #else 程序段2 # endif,n,例9.7 输入一行字母,
15、根据需要设置第一种条件编译,使之改为大写,或改为小写输出。,#define LETTER 0 void main() char str20=c language,c; int i; for(i=0; c=stri;i+) #ifdef LETTER if(c=a ,此时参加编译的程序为:void main() char str20=c language,c; int i; i=0; for(i=0; c=stri;i+) if(c=a,1) #ifdef 标识符 程序段1 #else 程序段2 # endif,作业199,Ex9.1(交换) Ex9.2(求余数) Ex9.4 (闰年),补充作业: 上机时将你整理的自定义函数分别做成四个头文件: myfunc.h、myarray1.h、 mystring.h、 myarray2.h并编写一个简单的主程序,从每一个库中随意调用(至少)一个函数。,特别注意:,1)在程序中不带参的宏一般用于代替常量或常量表达式. 2)带参数的宏一般用于代替一个变量表达式,或者代替一个或多个语句。,
链接地址:https://www.31ppt.com/p-2005481.html