《函数和预处》PPT课件.ppt
《《函数和预处》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《函数和预处》PPT课件.ppt(82页珍藏版)》请在三一办公上搜索。
1、第4章 函数与预处理,4.1 概述4.2 定义函数的一般形式4.3 函数参数和函数的值4.4 函数的调用4.5 内置函数4.6 函数的重载4.7 函数模板4.8 有默认参数的函数,4.9 函数的嵌套调用4.10 函数的递归调用4.11 局部变量和全局变量4.12 变量的存储类别4.13 变量属性小结4.14 关于变量的声明和定义4.15 内部函数和外部函数4.16 预处理命令,4.1 概述模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩
2、充开发方法:自上向下,逐步分解,分而治之,一个程序中函数调用的示意图。,例4.1 在主函数中调用其他函数。#include using namespace std;void printstar(void)cout*endl;void print_message(void)cout Welcome to C+!endl;int main(void)printstar();/调用printstar 函数 print_message();/调用print_message函数printstar();/调用printstar 函数return 0;,运行情况如下:*Welcome to C+!*,C+是
3、模块化程序设计语言,C+是函数式语言必须有且只能有一个名为main的主函数C+程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用主函数以外的函数大多是被封装在类中的,函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数,使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件,4.2定义函数的一般形式一般格式,合法标识符,函数返回值类型缺省int型无返回值void,函数体,函数类型 函数名(形参类型说明表)说明部分语句部分,例 有参函数 int max(int x,
4、int y)int z;z=xy?x:y;return(z);,例 无参函数 void printstar(void)cout*endl;void print_message(void)cout Welcome to C+!endl;,说明:实参必须有确定的值形参必须指定类型形参与实参类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放,4.3 函数参数和函数的值形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式,例:计算x的立方,#include usi
5、ng namespace stdfloat cube(float x)return(x*x*x);int main()float a,product;couta;product=cube(a);cout Cube of a is productendl;return 0;,x,1.2,1.728,例4.2 调用函数时的数据传递。#include using namespace std;int max(int x,int y)int z;z=xy?x:y;return(z);int main()int a,b,c;coutab;c=max(a,b);coutmax=cendl;return 0;
6、,例 比较两个数并输出大者,#include using namespace std;int main()int a,b,c;int max(int x,int y);cinab;c=max(a,b);couty?x:y;return(z);,运行情况如下:please enter two integer numbers:2 3max=3,参数传递方式值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递,例 交换两个数,#include using namespace std;int
7、main()int x=7,y=11;void swap(int a,int b);/cinxy;coutswapped:n“endl;swap(x,y);coutxyendl;void swap(int a,int b)int temp;temp=a;a=b;b=temp;,函数的返回值返回语句形式:return(表达式);或 return 表达式;或 return;功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数说明:函数中可有多个return语句若无return语句,遇时,自动返回主调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函
8、数调用转换void型函数,例 无返回值函数 void swap(int x,int y)int temp;temp=x;x=y;y=temp;,例:函数返回值类型转换,#include using namespace std;int max(float x,float y)float z;z=xy?x:y;return(z);int main()float a,b;int c;cinab;c=max(a,b);coutMax is cendl;return 0;,运行结果:2.6,8.9 Max is 8,4.4 函数的调用函数调用一般形式 函数名(实参表列);说明:实参与形参个数相等,类型一
9、致,按顺序一一对应实参表求值顺序,因系统而定(Turbo C 自右向左),函数调用方式函数语句:例 printstar();函数表达式:例 m=max(a,b)*2;函数参数:例 m=max(a,max(b,c);,函数说明对被调用函数要求:必须是已存在的函数库函数:#include 用户自定义函数:函数类型说明函数说明一般形式:函数类型 函数名(形参类型 形参名,.);或 函数类型 函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数说明不同函数说明位置:程序的数据说明部分(函数内或外)下列情况下,可不作函数说明若函数返回值是char或int型,系统自动按int型处
10、理被调用函数定义出现在主调函数之前,例 函数说明举例,调用函数时需要一定的时间和空间的开销。下图表示函数调用的过程:,4.5 内置函数,内置函数(内联函数)在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。指定内置函数,只需在函数首行的左端加一个关键字inline。例4.4 函数指定为内置函数。#include using namespace std;,inline int max(int,int,int);/函数声明,注意左端有inlineint main()int i=10,j=20,k=30,m;m=max(i,j,k);couta)a=b;/求a,b,c中的最大者 i
11、f(ca)a=c;return a;,实参代替形参,被置换成if(ji)i=j;if(ki)i=k;m=i;,注意:inline可以写在声明函数或定义函数时优点:内置函数节省运行时间缺点:增加了目标程序的长度。对内置函数的要求:规模很小,一般为5个语句以下使用频繁的函数不包括复杂的控制语句,如循环语句和switch语句,函数的重载:一组概念相同,处理对象(参数)不同的过程,出于方便编程的目的,用同一个函数名字来命名的技术称为函数重载重载是不同的函数,以参数的类型,个数和顺序来分辨函数体可以相同也可以不同,4.6 函数的重载,例:void print(double);void print(int
12、);void func()print(1);/void print(int);print(1.0);/void print(double);print(a);/void print(int);print(3.1415f);/void pirnt(double);,例4.5 求3个数中最大的数(分别考虑整数、双精度数、长整数的情况)。#include using namespace std;int main()int max(int a,int b,int c);/函数声明double max(double a,double b,double c);/函数声明long max(long a,lo
13、ng b,long c);/函数声明 int i1,i2,i3,i;cini1i2i3;/输入3个整数 i=max(i1,i2,i3);/求3个整数中的最大者 couti_max=iendl;,double d1,d2,d3,d;cind1d2d3;d=max(d1,d2,d3);coutg1g2g3;g=max(g1,g2,g3);couta)a=b;if(ca)a=c;return a;,double max(double a,double b,double c)if(ba)a=b;if(ca)a=c;return a;long max(long a,long b,long c)if(ba
14、)a=b;if(ca)a=c;return a;,运行情况如下:185-76 567 i_max=567 56.87 90.23-3214.78d_max=90.2367854-912456 673456 g_max=673456,例4.6参数个数不同。#include using namespace std;int main()int max(int a,int b,int c);/函数声明 int max(int a,int b);/函数声明 int a=8,b=-12,c=27;cout“max(a,b,c)=“max(a,b,c)endl;cout“max(a,b)=“max(a,b)
15、endl;return 0;,int max(int a,int b,int c)if(ba)a=b;if(ca)a=c;return a;int max(int a,int b)if(ab)return a;else return b;运行情况如下:max(a,b,c)=27max(a,b)=8两次调用max函数的参数个数不同,系统就根据参数的个数找到与之匹配的函数并调用它。,定义函数模板的形式:template 或 template 通用函数定义 通用函数定义在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。类型参数可以不只一个,可以根据需要确定个数。如:t
16、emplate 注意:它只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板。,4.7 函数模板,例4.7 将例4.6程序改为通过函数模板来实现。#include using namespace std;template/模板声明,其中T为类型参数T max(T a,T b,T c)if(ba)a=b;if(ca)a=c;return a;,int main()int i1=185,i2=-76,i3=567,i;double d1=56.87,d2=90.23,d3=-3214.78,d;long g1=67854,g2=-912456,g3=673
17、456,g;i=max(i1,i2,i3);d=max(d1,d2,d3);g=max(g1,g2,g3);couti_max=iendl;coutf_max=fendl;coutg_max=gendl;return 0;,int max(int a,int b,int c)if(ba)a=b;if(ca)a=c;return a;,函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。例如:,4.8 有默认参数的函数,int add(int x=5,int y=6)return x+y;,void main(void)add(10,20);/10
18、+20 add(10);/10+6 add();/5+6,默认形参值必须从右向左顺序声明,并且在默认形参值的右面不能有非默认形参值的参数。因为调用时实参取代形参是从左向右的顺序。例:,int add(int x,int y=5,int z=6);/正确int add(int x=1,int y=5,int z);/错误int add(int x=1,int y,int z=6);/错误,调用出现在函数体定义之前时,默认形参值必须在函数原型中给出;而当调用出现在函数体定义之后时,默认形参值需在函数定义时给出。例:,int add(int x=5,int y=6);void main(void)a
19、dd();/调用在定义前int add(int x,int y)return x+y;,int add(int x=5,int y=6)return x+y;void main(void)add();/调用在定义后,例4.8 求2个或3个正整数中的最大数,用带有默认参数的函数实现。#include using namespace std;int main()int max(int a,int b,int c=0);int a,b,c;cinabc;coutmax(a,b,c)=max(a,b,c)endl;coutmax(a,b)=max(a,b)endl;/c取默认值return 0;,in
20、t max(int a,int b,int c)if(ba)a=b;if(ca)a=c;return a;,运行情况如下:14-56 135max(a,b,c)=135max(a,b)=14,在相同的作用域内,默认形参值的说明应保持唯一,但如果在不同的作用域内,允许说明不同的默认形参。例:int add(int x=1,int y=2);void main(void)int add(int x=3,int y=4);add();/使用局部默认形参值(实现3+4)void fun(void).add();/使用全局默认形参值(实现1+2),4.9函数的嵌套调用嵌套调用C规定:函数定义不可嵌套,但
21、可以嵌套调用函数,例如:求三个数中最大数和最小数的差值,#include using namespace std;int dif(int x,int y,int z);int max(int x,int y,int z);int min(int x,int y,int z);int main()int a,b,c,d;cinabc;d=dif(a,b,c);coutMax-Min“dendl;return 0;,int dif(int x,int y,int z)return max(x,y,z)-min(x,y,z);int max(int x,int y,int z)int r;r=xy?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数和预处 函数 PPT 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5469840.html