c教案ch9预编译

上传人:小*** 文档编号:243136915 上传时间:2024-09-16 格式:PPT 页数:23 大小:419KB
返回 下载 相关 举报
c教案ch9预编译_第1页
第1页 / 共23页
c教案ch9预编译_第2页
第2页 / 共23页
c教案ch9预编译_第3页
第3页 / 共23页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C,程序设计(第二版),-,教学,课件,制作人: 黄 荧,制作人单位:河师大数学与信息科学学院,ch8,函数程序: 模块化程序设计的基础,编写大软件所必须,.,#include ,#include ,/*=,函数功能,:,判断整数,n,是否是一个素数,入口参数,:,int,n,返回值,:,判断结果,(,真,假,(1,0),=*/,int,isprime(int,n),int,i,k,;,k=,sqrt(n,);,for(i,=2;i=,k;i,+),if(n%i,=0),return 0;,return 1;,/=,主函数,void main(),int,n,m,=0;,for(n,=100;n200;n+),if(,isprime(n,),), m+; printf(%4d,n);,if(m%10=0)printf(n);,printf(n,);,#include ,/*-,函数功能,:,求,x,y,的最大值,入口参数,:,x,y,-,传递函数所需的数据,返回值,:,x,y,的最大值,传出函数的计算结果,-*/,float,max(,float,x,float,y,),/,函数的定义, z=x,y?x:y,; ,/-,主函数,void main(),float,x,y,m,;,scanf(,%f%f,&x,&y,);,/,输入数据,m=,max(y,z,),;,/,计算处理,函数的调用,printf(m,=%,fn,m,);,/,输出结果,#include ,/*,函数功能,:,输出一个字符小猫,*,/,void,mycat,(),printf,( / - /,n,);,printf,( ( = T =) n);,printf,( ( o ) ,nn,);,void main(),mycat,();,mycat,();,mycat,();,/,调用作为单独语句,Ch8,函数程序中的典型算法:,1,)经典算法,例 求,100-200,之间素数 例 求,1-1000,之间的完数。,例 一维数组的输入输出,例 二维数组的输入输出,求一维、二维数组的最大、最小值及其位置,三种排序(起泡、选择、第五章的排序方法) 一维数组的查询、删除、保序插入、逆序操作 字符数组的拷贝、连接、比较、求串长、字符串的分类统计,2,)与高等数学相关的问题,例,用迭代法求,x=,sqrt(a,) .,求平方根的迭代公式为:,x,n+1,=1/2(x,n,+a/x,n,),要求前后两次求出的,x,的差的绝对值小于,10,-5,。 例 用牛顿迭代法求下面方程在,1.5,附近的根。,2x,3,-4x,2,+3x-6=0 (,牛顿迭代公式:,x,n+1,=,x,n,+f(x,n,)/f(x,n,) ),例 用二分法求下面方程在,(-10,10),附近的根。,2x,3,-4x,2,+3x-6=0,例 用弦截法求下面方程在,(-10,10),附近的根。,2x,3,-4x,2,+3x-6=0,例 二维方阵的转置 例 求二维数组的乘积,第九章 预处理命令,本章内容,:,宏定义:,#define (,重点!,),包含命令:,#include ,条件编译命令:(,难点。,),# if ,# else ,#,endif,C,程序的编译:,预,处理命令,:是指,编译之前执行的处理命令,。,C,源程序文件(*,.,cpp,),-,目标文件(*,.,obj,),(助记符),c,编译系统,(,二进制指令),9.1,宏定义,(,宏,替换,),- “,符号常量“,9.1.1,不带参数的宏定义,如:,#define,PI,3.1415926,一般形式:,#define,标识符 字符串,宏定义,:,使用一个,指定的,名字,来代表一个,字符串,功能,:,使得程序可读性更强,更易于修改,.,例,9.1,分别求园的周长、面积和球的体积。,-,宏定义的处理过程: 编译前的替换,#define,PI,3.14159,void 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);,宏展开,编译,c,编译系统,目标文件,(*.,obj,),注意,:,为了讲解方便这里的所有关于宏的例子都去掉了应有的包含命令,!,关于宏定义的几点说明,:,1),宏名一般用,大写字母,表示,.,2),宏使程序,更简洁,,并提高了程序,通用性和可读性,。,如,,#define N0 1000,int,a,N0,;,for(i,=0;i,N0,;i+),3),宏展开只是做简单的字符串替换,不作正确性检查,.,如,,#define N0 1ooo,#define PI 3.,l,4,l,5926,4),宏定义不是,C,语句,(!),,不必在行的末尾加分号。,如,,#define N0 1000,;,int,aN0;,宏展开,int,a,1000;,;,X,关于宏定义的几点说明,:,5),宏定义只能在函数之外,它的有效区域是从定义点到文件结束。,如,#define G 9.8,main(),#,undef,G,f1(),G,的有效范围,6) #,undef,命令终止宏定义的作用域。,7),新的宏定义可以引用,老,的宏定义。,8),对字符串常量中的宏名不做替换。,9),宏定义只用来做简单的字符串替换,不分配内存。,如,,#define R 3.0,#define PI 3.14159,#define L 2*PI*R,#define S PI*R*R,void main(),printf(,L,=%,fn,S,=%,fn,L,S,);,其宏展开为:,viod,main(),printf(,L,=%,fn,S,=%fn,2*3.14159*3.0,3.14159*3.0*,3.0,);,若,程序,如下,有,:,S(x,y,),S(5,9),S(x+1,y+2),S(x,x)/S(y,y,),9.1.2,带参数的宏定义,一般形式:,#define,宏名,(,形式参数表,),字符串,带参数,的宏定义,:,使用一个,指定的名字,来代表一个,包含参数,的,字符串,功能,:,一般用于,代替,一个,变量表达式,(,公式,),,,或者代替一个或多个语句,.,宏展开,x*y,宏展开,5*9,宏展开,x+1*y+2,(!),技巧,:,当带参宏中出现,乘除法或取余等运算,时,应加上适当的括号!,如,#define,S(a,b,),(,(a)*(b),),如, #define,S(a,b,) a*b,在,做宏替换的同时,也要,做相应参数的替换,!,宏展开,x*x/y*y,(!),例,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,),;,printf(r,=%.2fn,a);,printf(s1=%.2fn,s1);,printf(r,=%.2fn,a+2);,printf(s2=%.2fn,s2);,宏展开,void main(),float a, s1,s2;,a=3.6;,s1=,3.14159*(,a,)*(,a,),;,s1=,3.14159*(,a+2,)*(,a+2,),;,printf(r,=%.2fn,a);,printf(s1=%.2fn,s1);,printf(r,=%.2fn,a+2);,printf(s2=%.2fn,s2);,思路:哪个公式可以求圆面积,,就用带参宏代替哪个公式。,void main(), float,r,l,s,v,;,scanf(%f,&r,);,l=2*3.1415926*r;,s=3.1415926*r*,r;,v,=4.0/3.0*3.1415926*r*r*r,;,printf(r,=%.2f, l=%.2f,sl,=%.2f, v=%.2fn,r,l,s,v); ,例,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*R,void main(), float,r,l,s,v,;,scanf(%f,&r,);,CIRCLE(,r, l, s, v,),;,printf(r,=%.2f, l=%.2f,sl,=%.2f, v=%.2fn,r,l,s,v);,宏展开,思路:哪些语句可以求圆的周长面积和球的体积,,就用带参宏代替哪些语句。,例,9.5,宏定义中的,字符串,带引号,的情况,-,定义,格式宏,#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,void main(),int,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);,printf(%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,文件,(!),一 功能,:,将一个,指定文件的全部内容,包含到,命令所在的程序中,.,A,#include file2.h,file1.c,file2.h,B,file1.c,A,B,三 包含命令的两种常见应用,:,/,MyFunc.c,/,放自己定义的函数,/,一般不要把函数直接写入头文件,/,否则容易出错,除非利用条件编译,/*,=,函数功能,:,求两个整数的最大值,入口参数,:,两个整数,返回值,:,两个整数的最大值,=,*/,int,max(int,a,int,b), return (a,b)?a:b,;,/*,=,函数功能,:,求,3,个整数的最大值,入口参数,: 3,个整数,返回值,:3,个整数的最大值,=,*/,int,max3(int a,int,b,int,c ),int,max;,max= (a,b)?a:b,;,max= (c,max)?c:max,;,return max ;,/,file1.c,#include ,#include ,MyFunc.h,void main(),int,a=3,b=4,c=5,m1,m2;,m1=,max(a,b,);,m2= max3(a,b,c);,printf(%d,%d n ,m1 ,m2);,1 ,包含,系统给出的,标准函数库,头,文件,:,如,#include,2 ,包含,个人,函数库,和,常量库,头文件,:,/,MyFunc.h,/,放自己定义的符号常量和函数说明,#define PI 3.14159,#define NULL 0,/*=,函数功能,:,求两个整数的最大值,入口参数,:,两个整数,返回值,:,两个整数的最大值,=*/,int,max(int,a,int,b);,/*=,函数功能,:,求,3,个整数的最大值,入口参数,: 3,个整数,返回值,: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.h,void main(),int,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,);,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,输入一行字母,根据需要设置第一种,条件编译,,使之改为大写,或改为小写输出。,#define LETTER 0,void main(),char,str80,c;,int,i;,gets(str,);,for(i,=0;,c=,stri;i,+),#,ifdef,LETTER,if(c,=,a&c,=,A&c,=,a&c,b)?a:b,;,/*=,函数功能,:,求,3,个整数的最大值,入口参数,: 3,个整数,返回值,:3,个整数的最大值,=*/,int,max3(int a,int,b,int,c ),int,max;,max= (a,b)?a:b,;,max= (c,max)?c:max,;,return max ;,#,endif,一般格式:,#,ifndef,XXXXXXX#defineXXXXXXX./,头文件内容,#,endif,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!