第4章函数和预处理.ppt
《第4章函数和预处理.ppt》由会员分享,可在线阅读,更多相关《第4章函数和预处理.ppt(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学第4章函数和预处理 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学4.14.1 概述概述u模块化程序设计模块化程序设计基本思想:将一个大的程序按功能分割成一
2、些小模块基本思想:将一个大的程序按功能分割成一些小模块特点:特点:各模块相对独立、功能单一、结构清晰、接口简单各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性控制了程序设计的复杂性 提高元件的可靠性提高元件的可靠性 缩短开发周期缩短开发周期 避免程序开发的重复劳动避免程序开发的重复劳动 易于维护和功能扩充易于维护和功能扩充开发方法开发方法:自上向下自上向下,逐步分解,分而治之逐步分解,分而治之电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学一个程序中函数调用的示意图。
3、一个程序中函数调用的示意图。电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学例例4.1 4.1 在主函数中调用其他函数。在主函数中调用其他函数。#include using namespace std;void printstar(void)cout*endl;void print_message(void)cout Welcome to C+!y?x:y;z=xy?x:y;return(z);return(z);例例 有参函数有参函数 int max(int max(int x,yin
4、t x,y)int z;int z;z=xy?x:y;z=xy?x:y;return(z);return(z);例例 空函数空函数 void dummy(void)void dummy(void)函数体为空函数体为空例例 无参函数无参函数 void printstar(void)void printstar(void)cout*endl;cout*endl;void print_message(void)void print_message(void)cout Welcome to C+!endl;cout Welcome to C+!endl;电子与信息工程系电子与信息工程系COMPUTER
5、 SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学说明:说明:实参必须有确定的值实参必须有确定的值形参必须指定类型形参必须指定类型形参与实参形参与实参类型一致,个数相同类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换函数调用转换函数调用转换形参在函数被调用前不占内存形参在函数被调用前不占内存;函数调用时为形参函数调用时为形参分配内存;调用结束,内存释放分配内存;调用结束,内存释放4.3 4.3 函数参数和函数的值函数参数和函数的值u形参与实参形参与实参形式参数:形式参数:定义定义函数
6、时函数名后面括号中的变量名函数时函数名后面括号中的变量名实际参数:实际参数:调用调用函数时函数名后面括号中的表达式函数时函数名后面括号中的表达式电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学例例:计算计算x x的立方的立方#include using namespace stdfloat cube(float x)return(x*x*x);int main()float a,product;couta;product=cube(a);cout Cube of a is product
7、endl;return 0;xaproduct1.21.21.728电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学例例4.2 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=cy?x:y;return(z);例例 比较两个数并输出大者比较两个数并
8、输出大者#include using namespace std;int main()int a,b,c;int max(int x,int y);cinab;c=max(a,b);coutMax is”cy?x:y;return(z);形参形参实参实参运行情况如下:运行情况如下:please enter two integer numbers:2 3 max=3电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学u参数传递方式参数传递方式值传递值传递方式方式方式:函数调用时方式:函数调用时
9、,为形参分配单元为形参分配单元,并将实参的并将实参的值值复制复制到形参中;调用结束,形参单元被释放,到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值实参单元仍保留并维持原值特点:特点:形参与实参占用形参与实参占用不同不同的内存单元的内存单元单向单向传递传递电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学711x:y:调用前:调用前:调用结束:调用结束:711x:y:例例 交换两个数交换两个数#include using namespace std;int main()int
10、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;调用:调用:711a:b:711x:y:swap:711x:y:117a:b:temp电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学u函数的返回值函数的返回值返回语句返回语句形式:形式:return(return(表达式表达式);或或
11、 return return 表达式表达式;或或 return;return;功能:使程序控制从被调用函数返回到调用函数中,功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数同时把返回值带给调用函数说明:说明:函数中可有多个函数中可有多个returnreturn语句语句若无若无returnreturn语句,遇语句,遇 时,自动返回主调用函数时,自动返回主调用函数若函数类型与若函数类型与returnreturn语句中表达式值的类型不一语句中表达式值的类型不一致,按前者为准,自动转换致,按前者为准,自动转换-函数调用转换函数调用转换voidvoid型函数型函数例例 无返回值函数
12、无返回值函数 void swap(int x,int y)int temp;temp=x;x=y;y=temp;电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学例例:函数返回值类型转换函数返回值类型转换#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;retur
13、n 0;运行结果:运行结果:2.6,8.9 Max is 8电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学4.44.4 函数的调用函数的调用u函数调用一般形式函数调用一般形式 函数名函数名(实参表列实参表列););说明:说明:实参与形参实参与形参个数相等个数相等,类型一致类型一致,按顺序一按顺序一一对应一对应实参表求值顺序,因系统而定(实参表求值顺序,因系统而定(Turbo C Turbo C 自自右向左右向左)电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECH
14、NOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学函数调用方式函数调用方式函数语句:函数语句:例例 printstar();printstar();函数表达式:函数表达式:例例 m=max(a,b)*2;m=max(a,b)*2;函数参数:函数参数:例例 m=max(a,max(b,c);m=max(a,max(b,c);电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学u函数说明函数说明对被调用函数要求:对被调用函数要求:必须是必须是已存在已存在的函数的函
15、数库函数库函数:#include#include 用户自定义函数用户自定义函数:函数类型说明函数类型说明函数说明函数说明一般形式:一般形式:函数类型函数类型 函数名函数名(形参类型形参类型 形参名形参名,.);,.);或或 函数类型函数类型 函数名函数名();();作用:告诉编译系统作用:告诉编译系统函数类型、参数个数及类型,以便检验函数类型、参数个数及类型,以便检验函数定义函数定义与与函数说明函数说明不同不同函数说明位置:程序的数据说明部分(函数内或外)函数说明位置:程序的数据说明部分(函数内或外)下列情况下,可不作函数说明下列情况下,可不作函数说明若函数返回值是若函数返回值是charcha
16、r或或intint型,系统自动按型,系统自动按intint型处理型处理被调用函数定义出现在主调函数之前被调用函数定义出现在主调函数之前电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学例例 函数说明举例函数说明举例#includeusing namespace std;int main()int a,b;int c;cinab;c=max(a,b);coutMax is“cy?x:y;return(z);int型函数可不作函数说明型函数可不作函数说明(Borland C+不行)不行)#in
17、cludeusing namespace std;float add(float x,float y)float z;z=x+y;return(z);int main()float a,b,c;cinab;c=add(a,b);coutsum is“cendl;return 0;被调函数出现在主调函数被调函数出现在主调函数之前,不必函数说明之前,不必函数说明#includeusing namespace std;int main()float add(float,float);/*function declaration*/float a,b,c;cinab;c=add(a,b);coutsu
18、m is“cendl;return 0;float add(float x,float y)float z;z=x+y;return(z);float add();电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学#include using namespace std;long sum(int a,int b);long factorial(int n);void main()int n1,n2;long a;cinn1n2;a=sum(n1,n2);couta;long sum(int
19、 a,int b)long c1,c2;c1=factorial(a);c2=factorial(b);return(c1+c2);long factorial(int n)long rtn=1;int i;for(i=1;i=n;i+)rtn*=i;return(rtn);long sum(int a,int b);long factorial(int n);文件包含编译预处理命令文件包含编译预处理命令函数类型说明函数类型说明函数定义函数定义函数调用函数调用函数调用函数调用函数返回值函数返回值形参形参实参实参电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOG
20、Y DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学调用函数时需要一定的时间和空间的开销。调用函数时需要一定的时间和空间的开销。下图表下图表示函数调用的过程:示函数调用的过程:4.5 4.5 内置函数内置函数电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学u内置函数内置函数(内联函数内联函数)在在编译时将所调用函数的代码直接嵌入到主调函数中编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。而不是将流程转出去。指定内置函数,只需在函数首行的左端加一个关键
21、字指定内置函数,只需在函数首行的左端加一个关键字inlineinline。例例4.4 4.4 函数指定为内置函数。函数指定为内置函数。#include#include using namespace std;using namespace std;电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学inline int max(int,int,int);/函数声明,注意左端有函数声明,注意左端有inlineint main()int i=10,j=20,k=30,m;m=max(i,j,k)
22、;coutmax=ma)a=b;/求求a,b,c中的最大者中的最大者 if(ca)a=c;return a;实参代替形参,被置换成实参代替形参,被置换成if(ji)i=j;if(ki)i=k;m=i;电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学注意:注意:inlineinline可以写在声明函数或定义函数时可以写在声明函数或定义函数时优点:内置函数节省运行时间优点:内置函数节省运行时间缺点:增加了目标程序的长度。缺点:增加了目标程序的长度。对内置函数的要求:对内置函数的要求:规模很小
23、,一般为规模很小,一般为5 5个语句以下个语句以下使用频繁的函数使用频繁的函数不包括复杂的控制语句,如循环语句和不包括复杂的控制语句,如循环语句和switchswitch语句语句电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+程序设计程序设计 网网 络络 教教 学学u函数的重载:函数的重载:一组概念相同,处理对象(参数)不同的过一组概念相同,处理对象(参数)不同的过程,出于方便编程的目的,用同一个函数名字来命名的技程,出于方便编程的目的,用同一个函数名字来命名的技术称为函数重载术称为函数重载u重载是不同的函数,以参数的类型,个
24、数和顺序来分辨重载是不同的函数,以参数的类型,个数和顺序来分辨u函数体可以相同也可以不同函数体可以相同也可以不同4.6 4.6 函数的重载函数的重载例:例:void print(double);void print(int);void func()print(1);/void print(int);print(1.0);/void print(double);print(a);/void print(int);print(3.1415f);/void pirnt(double);电子与信息工程系电子与信息工程系COMPUTER SCIENCE&TECHNOLOGY DEPARTMENTC+C+
25、程序设计程序设计 网网 络络 教教 学学例例4.5 4.5 求求3 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,long b,long c);/函数声明函数声明 int i1,i2,i3,i;cini1i2i3;/输入输入3 3个整数个整数 i=max
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 预处理
限制150内