收藏 分销(赏)

函数(2)公开课获奖课件.pptx

上传人:精**** 文档编号:6145830 上传时间:2024-11-28 格式:PPTX 页数:102 大小:799KB 下载积分:18 金币
下载 相关 举报
函数(2)公开课获奖课件.pptx_第1页
第1页 / 共102页
函数(2)公开课获奖课件.pptx_第2页
第2页 / 共102页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第四章 函数,第1页,本章内容,函数概述,函数定义和调用,函数原型,参数传递机制,嵌套调用和递归调用,函数与指针,函数参数缺省,函数重载,函数模板,内联函数,系统函数,作用域、生存期与可见性,编译预处理,第2页,4.1 函数概述,例计算X,m,+X,n,程序实现1:,#include,void main(),long int x,xm=1,xn=1;,int m,n;,cinx;cinmn;,int i=1;,while(i=m),xm*=x;,i+;,i=1;,while(i=n),xn*=x;,i+;,cout“xm+xn=”xm+xnx;cinmn;,cout“xm+xn=”;,cout,power(x,m)+power(x,n),endl;,long int power(long x,int n),long int y=1;,int i=1;,while(in),y*=x;,i+;,return y;,第4页,1.C+函数,函数是能完毕特定功能程序段。,2.C+源程序构成,一种C+程序是由若干个具有调用关系函数构成。每个+程序有且只有一种函数 main(),它是程序执行起点。其他函数必须通过调用来执行。,4.1 函数概述,第5页,4.1 函数概述,3.函数分类,系统函数(库函数),在头文献中由系统预先定义,在程序中直接调用,但需包括对应头文献。,自定义函数,编程人员在程序中定义和调用,第6页,4.2 函数定义和调用,1.函数定义一般形式,类型名,函数名,(,形式参数表,),语句序列,函数头,函数体,类型名:阐明函数被调用后返回值类型。假如一种函数没,有返回值,类型名为void,缺省为int。,函数名:函数标识名,按标示符规则命名。,形式参数表:用来接受调用时传递给函数数据,形式为:,类型名1 参数1,类型名2 参数2,.,语句序列:完毕函数特定功能一组语句。,第7页,retuen语句,功能:1.结束函数执行。2.将返回值带回到调用处。,一般形式,格式一:return 表达式;,表达式值作为函数返回值,当表达式类型与函数类型不一样样时,把表达式类型强制转换为函数类型。,格式二:return;,函数没有返回值时使用,此时函数类型必须为void,假如return;为函数体中最终一条语句,则可省略。,第8页,long power(int x,int n),long p=1;,for(int i=1;ia2),return a1;,else,return a2;,例2:函数定义举例(求两个数中较大一种)。,第10页,void swap(int x,int y),int temp;,temp=x;,x=y;,y=temp;,cout“x=“x“;,cout“y=“yendl;,return;/可以省略,例3:函数定义举例(数据互换)。,第11页,例4:,没有形式参数函数,void print()/括号不可少,/等价形式:void print(void),cout“Good luck!n”;,第12页,2.函数调用,1)函数调用过程,在一种函数(主调函数)执行期间,转去执行其他函数(被调函数),被调函数执行完毕再返回主调函数过程。,2)函数调用形式:,函数名(实参表),函数名:已定义函数名,实参表:由若干个实际参数构成,其作用是对形式参数进行初始化。形式为:实参1,实参2,,3)函数调用使用方式:,(1)参与表达式运算,(2)作为实参,(3)作为单独语句,第13页,(1)参与表达式运算函数调用可以作为操作数出目前表达式中。此时被调用函数必须有返回值,函数返回值将参与表达式计算。,例编写计算X,m,+X,n,程序,自定义函数:,long power(int x,int n),long p=1;,for(int i=1;ix;cinmn;,cout“xm+xn=”,power(x,m)+power(x,n),endl;,第14页,(2)作为实参,函数返回值将作为实参传递给形参进行下一次调用,此时被调用函数必须有返回值。,例:运用power函数计算(x2)3,void main(),int x,i;,coutx;,long m=power(power(x,2),3);,coutmendl;,第15页,(3)作为单独语句:用于不需要返回值函数调用,例:互换两个变量值函数,/主函数,void main(),intx,y;,coutxy;,swap(x,y);,void swap(int x,int y),int temp;,temp=x;,x=y;,y=temp;,cout“x=“x“;,cout“y=“yx;cinmn;,cout“xm+xn=”power(x,m)+power(x,n)endl;,long power(int x,int n),long p=1;,for(int i=1;i=n;i+),p=p*x;,return p;,例编写计算X,m,+X,n,程序,第18页,4.4 参数传递机制,基本规则,在调用一种函数时,必须提供与形式参数个数相似、类型一致实际参数,实参和形参按位置对应以实现函数间传递数据。,两种实现方式,值传递(值调用),传数值调用,传地址调用,引用传递(引用调用),第19页,1.传值调用实现机制,形参定义为变量;实参提供数值,可以是常数、变量或表达式,函数被调用时,系统为形参分派寄存空间,实参值拷贝(传递)给与之对应形参。,被调函数执行结束,分派给形参寄存空间被释放。,注意:,形参和实参都是变量时,变化形参值不影响实参原有值。,这种方式是一种单向传递,即实参将数值传给形参,第20页,#include,void swap(int x,int y);,void main(),int a(15),b(18);,cout,main()输出1:,a=ab=bendl;,swap(,a,b,);,cout,main()输出2,:a=ab=bendl;,void swap(int x,int y),int temp;,temp=x;x=y;y=temp;,cout,swap()输出,:x=xy=yendl;,例:传值调用举例,输出成果:,main()输出1:a=15 b=18,swap()输出:x=18 y=15,main()输出2:a=15 b=18,第21页,2.传地址调用机制,形参定义为指针或数组,实参提供地址,函数被调用时,为形参分派空间以寄存实参提供地址,注意:,在被调用函数中变化形参值,对实参提供地址值无影响,在被调用函数中变化形参指针指向寄存单元内容,实参地址对应寄存单元内容同步也被变化,这种方式可以实现双向传递数据,第22页,例1:传地址调用机制举例,程序执行成果:,main()输出1:,a=15 b=18,swap(),输出:,*px=18*py=15,main()输出2:,a=18 b=15,第23页,例2:传地址调用机制举例,程序执行成果:,main()输出1:,a=15 b=18,swap(),输出:,*px=18*py=15,main()输出2:,a=15 b=18,第24页,通过传地址调用向被调用函数传递一维数组。,数组作函数参数,例1(例4.10):编写函数将数组a中数按由小到大次序重新排列,第25页,#include,void sort(int *a,int n);/函数原型,void main(),int s10=2,3,5,1,7,9,0,4,8,6;,sort(s,10);/调sort函数,for(int i=0;i10;i+)/输出排序后成果,coutsi ;,coutendl;,void sort(int*a,int n),int temp;,for(int i=0;in-1;i+),for(int j=i+1;jaj),temp=ai;ai=aj;aj=temp;,思索:编写函数将任意大小数组a中数按由小到大次序重新排列,注意:函数sort()形参 int*a也可以写成int a,但不能写成 int an。,第26页,例2:,编写函数实现两个等长一维数组相加。,第27页,例1:,求二维数组中每行元素最大值及其所在列。,通过传地址调用向被调用函数传递二维数组。,程序阐明:函数fmax()形参 int pNN 也可以写成int(*p)N或int pN(不能写成int p)。,第28页,例2:,求任意大小二维数组中每行元素最大值及其所在列。,第29页,3.函数引用调用机制,形参定义为引用;实参应为变量,而不能是常量或表达式,函数被调用时,不为形参分派寄存空间,使用实参寄存空间。,注意:,在被调用函数中变化形参值,实参内容同步也被变化。,这种方式可以实现双向传递数据,第30页,例:引用调用举例,#include,void swap(int,/函数原型,/等价形式:,void swap(int,void main(),int a=15,b=18;,cout“main()输出1:a=ab=bendl;,swap(a,b);,cout main()输出2:,a=ab=bendl;,void swap(int&x,int&y),int temp;,temp=x;x=y;y=temp;,输出成果:,main()输出1:a=15 b=18,main()输出2:a=18 b=15,第31页,函数参数传递机制总结,传递机制,形参,实参,特点,传值调用,定义为变量,同类型常量、变量、表示式,数据单向传递,传地址调用,定义为指针,与形参相匹配地址,数据双向传递,引用调用,定义为引用,与形参同类型变量,数据双向传递,第32页,运用函数编程基本环节,1.功能划分,合理确定各个函数功能,2.函数设计,函数接口设计(函数头):参数和返回值,函数体设计(函数功能实现措施),3.编程实现,选择合适语句实现各个函数,第33页,函数应用举例,例题:有5名学生参与一门课程考试,编写程序实现如下功能:,1。输入5名学生学号和考试成绩。,2。输出最高分学生学号和成绩。,3。将成绩按由高到低次序排列,输出排列后学号和成绩。,第34页,问题分析:,1。功能划分,1)主函数,数据输入、调用子函数、输出计算成果,2)子函数,(1)求最高分及学号,将成果返回主函数,(2)对成绩进行排序,第35页,问题分析:,2。函数设计,1)求最高分函数:,接受参数:,两个一维数组:处理学号和成绩,一种整型变量:学生人数,返回值,最高分及其学号,函数原型:,int MaxScore(int No,int Score,int Num,int,算法:,运用求一维数组最大值算法,第36页,函数应用综合举例(续):最高分函数,int MaxScore(int No,int Score,int Num,int&MaxNo),int i,Max;,Max=Score0;,MaxNo=No0;,for(i=1;iMax),Max=Scorei;,MaxNo=Noi;,return Max;,第37页,问题分析:,2。函数设计,2)排序函数:,接受参数:,两个一维数组:处理学号和成绩,一种整型变量:学生人数,返回值,无,函数原型:,void Sort(int No,int Score,int Num);,算法:,运用冒泡排序算法,第38页,函数应用综合举例(续):排序函数,void Sort(int No,int Score,int Num),int i,j,temp;,for(i=0;iNum;i+),for(j=0;jNum-i-1;j+),if(ScorejScorej+1),temp=Scorej;,Scorej=Scorej+1;,Scorej+1=temp;,temp=Noj;,Noj=Noj+1;,Noj+1=temp;,第39页,问题分析:,2。函数设计,3)主函数,数据:,两个一维数组:寄存学号和成绩,两个整型变量:接受最高分函数返回最高分及学号,算法:,输入数据,调用最高分函数,输出最高分和学号,调用排序函数,输出排序成果,第40页,函数应用综合举例(续):主函数,#include,const int N=5;,void main(),int NoN,ScoreN;,for(int i=0;iNoi Scorei;,int ms,mn;,ms=MaxScore(No,Score,N,mn);,cout“最高分:”ms“学号:mnendl;,Sort(No,Score,N);,cout“排序后成绩单:”endl;,for(i=0;iN;i+),coutNoi“Scoreiendl;,第41页,4.5 嵌套调用和递归调用,1.嵌套调用 在调用一种函数过程中又调用另一种函数。,C+不容许对函数作嵌套定义,即不能在一种函数定义中出现另一种函数定义。,例:,void fa(),void fb(),:,第42页,嵌套调用举例,例12:编写计算如下函数程序,程序中一共有四个函数:,Main()函数,计算f(x,y)函数,计算s(n)函数,计算阶乘函数p(i),调用关系:,Main(),f(x,y),s(n),p(i),第43页,#include,long p(int i)/计算阶乘函数定义,long k=1;,for(int n=1;n=i;n+),k=k*n;,return k;,long s(int n)/计算阶乘和函数,long sum=0;,for(int j=1;j=n;j+),sum=sum+p(j);,return sum;,double f(int x1,int y1)/计算f(x,y)函数,return(double)s(x1)/(double)s(y1);,void main(),int x,y;,coutxy;,coutf(x,y)=f(x,y)endl;,注意:,1。各个函数定义先后次序,被调用函数在前,调用者在后。,2。执行次序,主函数首先被执行,其他函数按调用次序执行。,第44页,long p(int i)/计算阶乘函数定义,long k=1;,for(int n=1;n=i;n+),k=k*n;,return k;,long s(int n)/计算阶乘和函数,long sum=0;,for(int j=1;j=n;j+),sum=sum+p(j);,return sum;,double f(int x1,int y1)/计算f(x,y)函数,return(double)s(x1)/(double)s(y1);,#include,long p(int i);,long s(int n);,double f(int x1,int y1);,void main(),int x,y;,coutxy;,coutf(x,y)=f(x,y)0 递推关系,第46页,递归调用举例:,用递归函数实现求!,#include,long fact(int n),/递归函数,long h;,if(n0)h=n*fact(n-1);,else h=1;,return h;,void main(),int n;,coutn;,cout“n!=fact(n)endl;,假设n=3,程序执行过程为:,第47页,递归调用练习:,用递归函数计算菲波纳契数列前20项1 1 2 3 5 8 13 ,void main(),for(int i=1;i=20;i+),coutf(i)“”;,cout2 递推关系,#include,long f(int n),/递归函数,long h;,if(n2)h=f(n-1)+f(n-2);,else h=1;,return h;,第48页,输出成果:,1 1 2 1 3 1 1 2 5 1,2 1 2 1 3 8 1 1 2 1,3 3 1 1 2 5 13,思索:上例程序如下编写,输出成果对吗?,#include,long f(int n),/递归函数,long h;,if(n2)h=f(n-1)+f(n-2);,else h=1;,couth;,return h;,void main(),coutf(20)n;,if(n6)cout输入错!n;,else cout,fun(n),endl;,return 0;,第51页,编写指针型函数时要注意:,从函数返回地址必须是有效,不能从函数返回函数中定义非静态变量地址。例如:,#include,char*fun(int n),char*pstr=sun,mon,tue,wed,thu,fri,sat;,return pstrn;/错误,第52页,2.返回引用:返回值是一种变量引用,#include,int,&,large(int,void main(),int v1=15,v2=6;,large(v1,v2)=50;,coutv1=v1 v2=v2b?a:b);,输出成果:v1=50 v2=6,第53页,函数返回引用时要注意:,不要从函数返回函数执行结束时寄存空间会被释放变量。,例:,int,&,large(int a,int b),if(ab),return a;,/,错误,else,return b;,/,错误,第54页,4.7 函数参数缺省,在函数原型或函数定义中,可为形参指定一种值(称为,缺省值或默认值)。调用函数时若对应实参省略,则用,缺省值对形参初始化。,函数参数缺省几点规定:,必须从参数表最右边开始持续为形参指定缺省值,中间不能间断。,例:void func(int y,int x=2,int z=10);/对旳,void func(int x=2,int y,int z=10);/错误,若函数有原型申明,缺省值只需在原型申明中给出,函数定义时参数表中不能再给出。,第55页,#include,long power(int x=10,int n=2);/原型阐明,void main(),int k=5;,coutpower(k)endl;,coutpower(k,3)endl;,coutpower()0)p=p*x;n-;,return p;,例:,函数参数缺省举例。,第56页,函数重载:两个或两个以上函数使用相似函数名。但这些函数形参必须在个数或者类型上有所不一样样。,例:编写实现两个整数、单浮点数和双浮点数相加函数。,需要定义个不一样样函数名函数:,int addi(int x,int y)return x+y;,float addf(float x,float y)return x+y;,double addd(double x,double y)return x+y;,4.8 函数重载,第57页,例1:参数类型不一样样函数重载,第58页,例2:参数个数不一样样重载函数,第59页,将上面int、float、double用一种参数来替代。,T add(T x,T y),return x+y;,函数模板:用一种函数处理不一样样类型参数和返回值函数。,4.9函数模板,例:编写实现两个整数、单浮点数和双浮点数相加函数。采用函数重载需要定义个同名函数:,int add(int x,int y)return x+y;,float add(float x,float y)return x+y;,double add(double x,double y)return x+y;,第60页,定义函数模板一般形式为:,template,类型 函数名(形参表),函数体,其中:template为保留字,用于阐明模板参数;,class 也可以写成:typename;,T 为模板参数,可以是任何合法标示符;,用到T,行末无分号,第61页,#include,template,T add(T x,T y);,void main(),int i=100,j=200;,float a=15.55,b=27.89;,double x=6.3e10,y=8.05e12;,coutInteger:,add(,i,j)n;,coutFloat:add(a,b)n;,coutDouble:add(x,y)n;,template,T add(T x,T y),return x+y;,例:,函数模板举例,。,第62页,1.内联函数:,函数定义或申明时,在函数头前加,inline,。,4.10 内联函数,2.使用内联函数需注意:,内联函数定义应先于对它调用。,内联函数中不应有,switch语句,、,if嵌套,、,循环语句,,它也不能是递归函数。,第63页,4.11 系统函数,1.系统函数概述,系统函数又称原则函数或库函数。使用时需在程序中用#include命令嵌入对应头文献。,几类重要系统函数头文献:,string.h:字符串处理函数,ctype.h:字符处理函数放在头文献,math.h:数学函数,第64页,2.,字符,串处理函数,常用字符串处理函数。,1)求字符串长度函数strlen(),2)字符串拷贝函数strcpy(),3)字符串连接函数strcat(),4)字符串比较函数strcmp(),第65页,1)求字符串长度函数strlen(),函数原型:,int strlen(char*str);,功能:返回str所指字符串中第一种0之前字符个数,不包 括0。,#include,#include,void main(),char s115=”Hello C+”;,cout”s1:”,strlen(s1),endl;,char s2=”Hello0string”;,cout”s2:”,strlen(s2),endl;,思索:sizeof(s1)=?,sizeof(s2)=?,第66页,#include,#include,const int N=80,void rever(char*s);/将字符串反序函数,void main(),char string N;,cout输入一种字符串:;,cin.getline(string,N);,rever(string);/调用rever函数,cout 倒序后字符串:;,coutstringendl;,void rever(char*s),char*t;int c;,for(t=s+(strlen(s)-1);st;s+,t-),c=*s;*s=*t;*t=c;,例4.39,将输入字,符串倒序并输 出。,第67页,2)字符串拷贝函数strcpy(),函数原型:,char*strcpy(char*str1,const char*str2);,函数功能:,将字符串str2复制到str1中,函数返回str1值。,使用示例:,char s1=C+programming;,char s220,*s3=Hello!;,strcpy(s2,s1);,couts2:s2endl;,coutstrcpy(s1+4,s3)endl;,cout s1:s1endl;,char*s4=new charstrlen(s3)+1;,cout“s4:strcpy(s4,s3)endl;,s2:C+programming,Hello!,s1:C+Hello!,s4:,Hello!,成果:,第68页,3)字符串连接函数strcat(),函数原型:,char*strcat(char*str1,char*str2);,函数功能:将字符串str2连接到字符串str1背面,去掉str1后边0,使两个字符串成为一种字符串。函数返回str1值。,示例,char s120=Hello;,char s2=everybody;,strcat(s1,s2);,couts1:s1endl;,输出成果:,s1:Hello everybody,第69页,4)字符串比较函数strcmp(),函数原型:,int strcmp(const char*str1,const char*str2);,函数功能:比较两个字符串(按位置比较对应字符ASCII码值),函数返回值:,若str1和str2相等,函数返回值为0;,若str1不小于str2,函数返回值为1;,若str1不不小于str2,函数返回值为-1。,例如:strcmp(“abcdxay”,”abcdefg”)值为1,strcmp(“abcdefg”,”abcdefg”)值为0,strcmp(“abcde”,”abcdefg”)值为-1,第70页,3。字符处理函数,例4.25 键盘输入一字符串,记录输出其中字母、数字、空格,和其他字符个数及字符总个数。,第71页,4.数学函数,数学函数头文献:#include ,如下是几种常用数学函数:,函数 功能,abs(x)|x|,sqrt(x),pow(x,y)xy,exp(x)ex,sin(x)三角函数,第72页,例4.27 用梯形法求定积分值,#include,#include,double fx(double x),return(,sin(x)+exp(-x),);,近似公式:,void main(),double a,b,y,h;int n,i;,a=0.0;b=2.0;,coutn;,h=(b-a)/n;,y=(fx(a)+fx(b)/2.0;,for(i=1;in;i+),y=y+fx(a+i*h);,y=y*h;,couty=ysi;,sum();,coutsuendl;,void sum(),int i;,for(i=1;i0)a=x;,else int b;,coutb;,a=x+b*b;,couta=aendl;,a、x,作用域,b,作用域,第78页,#include,void main(),int a23=1,2,3,4,5,6,sum=0;,for(,int i=0,;i2;i+),for(,int j=0,;j3;j+),sum+=aij;,for(,i=0,;i2;i+),for(,int j=0,;j3;j+),coutaij“;,coutendl;,cout“sum=“sumxy;/错误;x、y未定义,.,以上函数原型也可以写成:int fun(int,double);,第80页,2.,生存期,指程序运行时一种变量或数组从给它分派内存空间到释放所占空间经历期间。,三类生存期,静态生存期,局部生存期,动态生存期,局部生存期、静态生存期可用寄存类别规定。,第81页,1)静态生存期,静态生存期:与程序运行期一致生存期,文献作用域全局变量或数组、函数、常数具有静态生存期,块作用域静态变量或数组具有静态生存期。静态变量定义格式是:,static 变量名表;,若在定义具有静态生存期变量(或数组)时没有指定初值,则它们初值是 0。,第82页,例4.15:输入06,输出对应英文星期表达,#include,/定义指针函数,char*fun(int n),static,char*pstr=sun,mon,tue,wed,thu,fri,sat;,return pstrn;,内部静态变量使用示例,第83页,例4.15:输入06数字,输出对应英文星期表达,/主函数,int main(),int n;,coutn;,if(n6)cout输入错!n;,else coutfun(n)endl;,return 0;,第84页,2)局部生存期,与某个函数或语句块执行期相似生存期称为局部生存期,块作用域自动变量(或数组)具有局部生存期。自动变量定义格式是:auto 变量名表;,注意:若在定义自动变量(或数组)时没有指定初值,则在系统为其分派空间后它值是无意义(即为垃圾值)。,例:int fun(int*x,int n)/形参x具有局部生存期,int sum;/不给初值,成果为垃圾值,for(int i=0;in;i+),sum+=xn;,return sum;,第85页,3)动态生存期,用运算符new在内存中分派变量或数组具有动态生存期。,生存期由new和delete操作决定。,例如:,int*p,a10;,p=new int(12);/生存期开始,delete p;/生存期结束,*p=200;/错误,p=a;/对旳,第86页,3.可见性假如一种已定义标示符在程序某个区域可以引用,则称该标示符在该区域可见,否则为不可见。,1)具有文献作用域标识符可见性,一般状况下,可见性与其作用域相似,可由寄存类别static或extern来限定或扩展其可见性,第87页,/源程序文献f1.cpp,#include,static double a;/外部静态变量a仅在本文献中可见,void main(),extern double x10;/引用在背面定义全局数组,extern int c;/引用其他文献全局变量,extern void print();/引用其他文献函数,for(int i=0;i10;i+)a=a+xi*c;,couta=aendl;,print();,double x10=0.1,1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,9.1;,例,/源程序文献f2.cpp,#include,int c=10;/全局变量,void print(),cout“c=cendl;,第88页,2)具有块作用域变量可见性,可见性为从其在块内定义或阐明之处开始,直到所在块结束为止。,#include,void main(),int a=10;/,a可见性?,couta=aendl;,int b=20;/,b可见性?,a=a+b;,couta=aendl;,coutb=bendl;,a=15;,couta=aendl;,输出成果为:,a=10,a=30,b=20,a=15,第89页,3)作用域重协议名标识符可见性,按“局部优先”标精确定它们可见性。,#include,int a=10;,/定义全局变量a,void main(),cout全局变量a=aendl;,float a=7.8;,/定义函数体内局部变量a,coutmain中a=aendl;,int a=5;,/定义复合语句中局部变量a,cout复合语句中a=aendl;,a=15;,couta=aendl;,输出成果为:,全局变量 a=100,main中a=7.8,复合语句中a=5,a=7.8,第90页,4)作用域辨别符(:),#include,int a=1;,void main(),int a=10;,int a=3;,:a=5;/作用域运算优先级最高,a=:a+a;,cout:a=:a a=aendl;,:a+;,cout:a=:a a=aendl;,注意:“:”运算符只能用于访问全局变量,不能用于访问具有块作用域局部变量。,:a=5 a=8,:a=6 a=10,使用作用域辨别符“:”,可以使全局变量到处可见。,输出成果为:,第91页,5)内部静态变量可见性,可见性仅限于它所在程序块内。,特点:在定义作用域外,它虽然不可见,但生命期在语句块执行后并未结束,其值一直保持到下次被执行时。,第92页,#include,int sum(int p,int,void main(),int data 3=1,2,3,4,5,6,7,8,9,sc;,for(int i=0;i3;i+),coutsum(datai,sc)scendl;,int sum(int p,int&a),int i,k=0;,static int s=0;/定义局部静态变量s,for(i=0;i3;i+)s+=pi;k+=pi;,a=k;/通过形参带回成果,return s;,6 6,21 15,45 24,例4.31 内部静态变量使用示例,输出成果为:,第93页,4.13 编译预处理,编译预处理:在对源程序编译之前,找出源程序中以“#”开始预处理命令行,并根据其中出现预处理命令对源程序 代码进行修改。然后,将修改后源程序交编译程序编译。,预处理过程是直接符号代换过程。,预处理命令以“”开始,行末无“;”。,编译预处理命令有三种:包括文献、宏定义和条件编译。,预处理,编译,连接,结果,源程序,执行,C+源程序处理过程,第94页,1.包括文献(#include),两种形式:,1)#include 文献名 例:#include ,或:#include ,using namespace std;,2)#include 文献名 例:#include “string.h”,作用:将其他文献中程序合并到本文献,系统头文献一般用格式一。,顾客自定义头文献一般用格式二。,第95页,/源程序文献:main.cpp,#include,#include sort.h,void main(),int a10;,int i;,for(i=0;iai;,sort(a,10);,for(i=0;i10;i+),coutai;,coutendl;,/头文献:sort.h,void sort(int a,int n),for(int i=0;in-1;i+),for(int j=i+1;jaj),int temp=ai;,ai=aj;,aj=temp;,自定义头文献举例:,第96页,2.宏定义(#define),作用:,将一种标识符(宏名)定义为一种字符串(替代文本)。,宏定义两种形式:,形式1:不带参数宏定义,#define 宏名 替代文本,形式2:带参数宏定义,#define 宏名(参数表)替代文本,宏展开:,预处理时系统自动把程序中出现宏名一律用替代文本替代,然后再对替代后源程序文献进行编译。,第97页,#include,#define,N,5,/不要加分号,void main(),int i,j;,inta,N,N,=1,2,3,4,5,2,3,4,5,3,4,5,4,5,5;,for(i=0;i,N,;i+),for(j=0;j,N,-i;j+),coutaij ;,coutendl;,例:宏定义命令使用,#include,void main(),int i,j;,inta,5,5,=1,2,3,4,5,2,3,4,5,3,4,5,4,5,5;,for(i=0;i,5,;i+),for(j=0;j,5,-i;j+),coutaij ;,coutendl;,宏展开前:,宏展开后:,第98页,#include,#define,N,5;,/误加分号,void main(),int i,j;,int a,N,N,=1,2,3,4,5,2,3,4,5,3,4,5,4,5,5;,for(i=0;i,N,;i+),for(j=0;j,N,-i;j+),coutaij ;,coutendl;,例:宏定义命令使用,#include,void main(),int i,j;,int a,5;,5;,=1,2,3,4,5,2,3,4,5,3,4,5,4,5,5;,for(i=0;i,5;,;i+),for(j=0;j,5;,-i;j+),coutaij ;,coutendl;,宏展开前:,宏展开后:,第99页,第4章小结,教学进程,重点掌握:,函数定义和调用,函数原型,函数参数传递机制,嵌套调用和递归调用,函数与指针,函数参数缺省,函数重载、函数模板,函数参数缺省,系统函数,作用域、生存期与可见性,编译预处理,第100页,教学进程,课外复习及作业,复习本章重点内容,仔细阅读书中示例程序,完毕练习4第4、5、7、11、12、15题程序编写,第101页,教学进程,上机练习题,上机运行练习3第2题程序验证你分析成果。,调试作业程序,第102页,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服