(中职)Visual C++程序设计基础(中职)Flash 8.0基础第5章 函数与预处理ppt课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第5章 函数与预处理ppt课件.ppt》由会员分享,可在线阅读,更多相关《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第5章 函数与预处理ppt课件.ppt(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(中职)Visual C+程序设计基础(中职)Flash 8.0基础第5章 函数与预处理ppt课件第第5章章 函数与预处理函数与预处理5.1 函数的定义函数的定义5.2 函数的调用函数的调用5.3 指针与函数指针与函数5.4 函数的嵌套调用函数的嵌套调用5.5 函数的递归调用函数的递归调用5.6 内联函数和重载函数内联函数和重载函数5.7 默认参数的函数默认参数的函数5.8 作用域与生命期作用域与生命期5.9 编译预处理编译预处理5.1 函数的定义函数的定义 在在C+中,程序可由一个主函数中,程序可由一个主函数main和若干个函数构和若干个函数构成。主函数是程序执行的起始点,而且程序中必须有且
2、只成。主函数是程序执行的起始点,而且程序中必须有且只能有一个主函数。程序的执行从能有一个主函数。程序的执行从main函数开始,在函数开始,在main的执行过程中可以调用其它函数,这些函数执行完毕后再的执行过程中可以调用其它函数,这些函数执行完毕后再返回到返回到main中继续执行,直到中继续执行,直到main执行结束,则整个程执行结束,则整个程序的执行结束。序的执行结束。在在C+中的一个调用关系中,调用其它函数的函数称中的一个调用关系中,调用其它函数的函数称为主调函数,被其它函数调用的函数称为被调函数。一个为主调函数,被其它函数调用的函数称为被调函数。一个函数有可能既是主调函数也是被调函数,但是
3、,主函数函数有可能既是主调函数也是被调函数,但是,主函数main只能是主调函数,主函数可以调用其它函数,但是只能是主调函数,主函数可以调用其它函数,但是不能被其它任何函数调用。不能被其它任何函数调用。5.1.1 函数概念的引入函数概念的引入#include void main()static int a20=8,12,19,23,33,39,42,55,62,69,76,85;int n=12,i,x;coutThe numbers are:n;for(i=0;in;i+)coutait;cout*n;coutx;for(i=n-1;i=0;i-)if(aix)ai+1=ai;else bre
4、ak;ai+1=x;n+;coutThe numbers are:n;for(i=0;in;i+)coutait;cout*n;l一段程序被执行了多次一段程序被执行了多次l优化程序结构优化程序结构l通用:函数库通用:函数库函数的引入函数的引入#include void main()static int a20=8,12,19,23,33,39,42,55,62,69,76,85;int n=12,i,x;arrayprint(a,n);coutx;for(i=n-1;i=0;i-)if(aix)ai+1=ai;else break;ai+1=x;n+;arrayprint(a,n);void
5、arrayprint(int a,int n)coutThe numbers are:n;for(i=0;in;i+)coutait;coutab;s=add(a,b);coutsendl;函数说明函数说明数据类型数据类型数据类型数据类型 函数名函数名函数名函数名(形参列表形参列表形参列表形参列表)double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zab;s=add(a,b);coutsendl;double area(double x,y,z)double s;if(x+yz|x+zy|y+zx)return 0;s
6、=(x+y+z)/2;s=sqrt(s*(s-x)*(s-y)*(s-z);return s;清楚了吗?清楚了吗?函数体函数体例例1 无参函数无参函数display_sum,用来计,用来计算两个数之和。算两个数之和。#include void display_sum()int x,y,sum;cout Enter a and b:x y;sum=x+y;cout x+y=sum endl;void main()display_sum();由由花花括括号号所所括括起起的的语语句句序序列列,是是完完成成函函数数功功能能所所要要执执行行的的具具体体操操作作。当当函函数数执执行行结结束束需需要要返返回
7、回一一个个值值时时,在这个函数体中还必须有一个在这个函数体中还必须有一个return语句。语句。例例2 有有参参函函数数sum,用用于于求求两个数之和。两个数之和。int sum(int x,int y)int temp;temp=x+y;return temp;void main()int s=sum(10,5);cout”sum=”s;N!三角形面积double power(int n)int i;double l=1;for(i=1;i=n;i+)l*=i;return l;double area(double x,double y,double z)double s;if(x+yz|x
8、+zy|y+zx)return 0;s=(x+y+z)/2;s=sqrt(s*(s-x)*(s-y)*(s-z);return s;5.1.3 return语句语句_语句格式:语句格式:return;/无值无值voidreturn 表达式;表达式;/有值有值return(表达式表达式);/有值有值_函函数数体体中中的的流流程程控控制制语语句句。先先计计算算表表达达式式的的值值,然然后后从从被被调调函函数数返返回回到到主主调调函函数数,表表达达式式的的值值作作为为函函数数的的返返回回值值。(注注意意:只只能能返回一个值返回一个值)_函函数数值值的的类类型型:以以函函数数定定义义的的类类型型为为准
9、准,若若不不同同,需需将将return语语句表达式的值转换类型。句表达式的值转换类型。_无无返返回回值值void时时,可可无无return语语句,执行到函数体句,执行到函数体时返回。时返回。例例 有有参参函函数数sum,用用于于求求两个数之和。两个数之和。int sum(int x,int y)int temp;temp=x+y;return temp;void main()int s=sum(10,5);cout”sum=”s;return语句语句_在在一一个个函函数数中中可可有有多多个个return语语句句,但但每每次次被被调调用用只只能能执执行行一一个个return语语句句。例例,判判断
10、断素素数数(或求三角形面积)(或求三角形面积)#includevoid main()int i;for(i=2;i100;i+)if(sushu(i)coutti;#includeint sushu(int n)int k,i;k=sqrt(double)n);for(i=2;i=k;i+)if(!(n%i)return 0;return 1;5.1.4 函数声明函数声明_函数函数原型原型的形式:的形式:数据类型数据类型 被调函数的函数名被调函数的函数名(形参类型说明形参类型说明);例:例:double area(double,double,double);_参数类型说明列表是用逗号隔开的的参
11、数类型说明,其参数个数参数类型说明列表是用逗号隔开的的参数类型说明,其参数个数和类型必须和函数定义中的参数个数和类型一致。也可以给出参和类型必须和函数定义中的参数个数和类型一致。也可以给出参数名,但对编译器没有什么意义。数名,但对编译器没有什么意义。_函数原型用来说明一个函数的返回值类型、参数的个数和类型。函数原型用来说明一个函数的返回值类型、参数的个数和类型。使编译器检查该函数被调用的正确与否。使编译器检查该函数被调用的正确与否。s=area(a,b,c);_函数必须先说明后调用。函数必须先说明后调用。_调用库函数时,一般在文件的开头用调用库函数时,一般在文件的开头用#include 命令将
12、包含该函命令将包含该函数数原型原型的头文件加入到程序中的头文件加入到程序中。_调调用用户自定义函数,用用户自定义函数,当对一个函数的调用出现在该函数定义之当对一个函数的调用出现在该函数定义之前时,必须先对函数进行原型声明。即前时,必须先对函数进行原型声明。即当被调函数的定义写在主当被调函数的定义写在主调函数后面时才需声明调函数后面时才需声明。example1:求三角形面积#include#include double area(double,double,double);/*需要需要声明声明*/void main()double a,b,c,s;coutabc;s=area(a,b,c);co
13、ut“area=“s“n”;double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zx)return 0;s=(x+y+z)/2;return sqrt(s*(s-x)*(s-y)*(s-z);#include#include double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zx)return 0;s=(x+y+z)/2;return sqrt(s*(s-x)*(s-y)*(s-z);void main()/*不需声明不需声明*/double a
14、,b,c,s;coutabc;s=area(a,b,c);cout“area=“s“n”;_实实参参表表可可包包含含多多个个参参数数,用用逗逗号号分分开开;可可为为常常量量、变变量量、函函数调用、表达式(先求值,再将值传递给形参)。数调用、表达式(先求值,再将值传递给形参)。_要求实参的类型和个数要与形参一致。要求实参的类型和个数要与形参一致。_可以没有参数,但圆括号一定要有,不能省略。可以没有参数,但圆括号一定要有,不能省略。_函数调用一般用来构成表达式。函数调用一般用来构成表达式。5.2.1 函数的调用形式函数的调用形式 函数调用是用一个表达式表示,其形式为:函数调用是用一个表达式表示,其
15、形式为:函数名函数名函数名函数名(实参列表实参列表实参列表实参列表)5.2 函数的调用函数的调用t=sqrt(t*(t-a)*(t-b)*(t-c);s=area(a,b,c);s=sum(5,7);例例5.2.2 函数调用过函数调用过程程1 1在主调函数中通过函数调用转到被调函数从而开始执行被在主调函数中通过函数调用转到被调函数从而开始执行被在主调函数中通过函数调用转到被调函数从而开始执行被在主调函数中通过函数调用转到被调函数从而开始执行被调函数。调函数。调函数。调函数。2 2执行被调函数时,遇到执行被调函数时,遇到执行被调函数时,遇到执行被调函数时,遇到returnreturn语句或函数体
16、的右大括号语句或函数体的右大括号语句或函数体的右大括号语句或函数体的右大括号,则返回主调函数继续执行下面的语句。,则返回主调函数继续执行下面的语句。,则返回主调函数继续执行下面的语句。,则返回主调函数继续执行下面的语句。3 3函数间相互独立:各函数中的变量互不相关,可同名。函数间相互独立:各函数中的变量互不相关,可同名。函数间相互独立:各函数中的变量互不相关,可同名。函数间相互独立:各函数中的变量互不相关,可同名。主调函数主调函数被调函数被调函数float area(x,y,z)return smain()s=area(a,b,c);实实 参参形形 参参 参数传递?参数传递?参数传递?参数传递
17、?返回值返回值返回值返回值 函数调用时,主调函数与被调函数之间要进行数据传递,函数调用时,主调函数与被调函数之间要进行数据传递,参数是函数之间交换数据的通道。函数之间的参数传递是按照参数是函数之间交换数据的通道。函数之间的参数传递是按照参数书写的先后次序(与参数名无关),由实参向形参的单向参数书写的先后次序(与参数名无关),由实参向形参的单向传递,因此要求实参与形参的类型、个数等必须一致。传递,因此要求实参与形参的类型、个数等必须一致。主调函数中实参可为任意表达式,但是在进行函数调用时主调函数中实参可为任意表达式,但是在进行函数调用时要具有确定的值。对于形参来说,在函数未被调用时,形参没要具有
18、确定的值。对于形参来说,在函数未被调用时,形参没有实际意义,不占用存储空间;当函数被调用时,此时系统为有实际意义,不占用存储空间;当函数被调用时,此时系统为形参分配存储单元,实参和形参之间进行数据传递;当函数调形参分配存储单元,实参和形参之间进行数据传递;当函数调用结束时,系统释放形参所占的存储单元。用结束时,系统释放形参所占的存储单元。C+中有两种不同的参数传递机制,一种称为传值调用(值中有两种不同的参数传递机制,一种称为传值调用(值调用),另一种称为引用调用。调用),另一种称为引用调用。5.2.3 参数传递机制参数传递机制 变量的值传递变量的值传递 参数使用变量的值传递方式时,形参为变量名
19、,实参可为常量、参数使用变量的值传递方式时,形参为变量名,实参可为常量、变量或表达式。调用函数时,首先计算实参的值,然后系统为形参分变量或表达式。调用函数时,首先计算实参的值,然后系统为形参分配存储单元,并将实参的值按书写顺序赋给对应的形参,即对形参进配存储单元,并将实参的值按书写顺序赋给对应的形参,即对形参进行初始化。被调函数中的操作是在形参的存储单元中进行的,形参的行初始化。被调函数中的操作是在形参的存储单元中进行的,形参的值可以改变,但不会影响到主调函数中实参的值。所以变量的值传递值可以改变,但不会影响到主调函数中实参的值。所以变量的值传递的特点是形参值的改变不会影响实参的值。的特点是形
20、参值的改变不会影响实参的值。1.传值调用:传值调用:变量的地址传递变量的地址传递使用地址传递方式时,主调函数的实参为变量的地址值,被调函数的使用地址传递方式时,主调函数的实参为变量的地址值,被调函数的形参为指针变量。函数调用时,系统将实参(地址值)赋给对应的形形参为指针变量。函数调用时,系统将实参(地址值)赋给对应的形参指针变量,则形参和实参指向同一存储单元,此时在被调函数中,参指针变量,则形参和实参指向同一存储单元,此时在被调函数中,通过改变形参指针所指向的变量值,从而实现对主调函数中变量值的通过改变形参指针所指向的变量值,从而实现对主调函数中变量值的修改。修改。因此,地址传递的实现机制就是
21、使实参和形参指向相同的存储单元,因此,地址传递的实现机制就是使实参和形参指向相同的存储单元,从而可以达到被调函数修改主调函数中多个变量值的目的。从而可以达到被调函数修改主调函数中多个变量值的目的。#include void swap(int x,int y)int t=x;x=y;y=t;void main()int a=3;int b=4;couta=ab=bendl;cout-swap-endl;swap(a,b);/调用调用swap函数函数 couta=ab=bendl;运行结果:运行结果:a=3 b=4 -swap-a=3 b=4例:编写例:编写swap函数实现两个变量值的交换函数实现
22、两个变量值的交换 变量的值传递的例子变量的值传递的例子void swap(int*x,int*y)/函数定义,形参为指针变量函数定义,形参为指针变量 int t=*x;*x=*y;/交换指针变量交换指针变量x、y所指向的变量的值所指向的变量的值*y=t;#include void swap(int*x,int*y);/函数原型说明函数原型说明void main()int a=3,b=4;couta=ab=bendl;cout-swap-endl;swap(&a,&b);/函数调用语句,实参为变量的地址函数调用语句,实参为变量的地址couta=ab=bendl;运行结果:运行结果:a=3 b=4
23、 -swap-a=4 b=3例:修改前例,使用变量的地址传递方式实现两个变量值的交换例:修改前例,使用变量的地址传递方式实现两个变量值的交换 变量的地址变量的地址传递的例子传递的例子 在在C+中中,也也可可以以通通过过在在函函数数中中使使用用引引用用参参数数来来解解决决上上面面的的问问题题。要要把把形形式式参参数数声声明明为为引引用用类类型型,只只需需在在参参数数名名字字前前加加上上引引用用运运算算符符&即即可可。简简单单地地说说,引引用用是是给给一一个个已已知知变变量量起起别别名名,它它不不占占用用任任何何存存储储单单元元,对对引引用用的的操操作作也也就就是是对对被被它它引引用用的的变变量量
24、的的操操作作,它它们们代代表表的的是是同同一一存存储储单单元元。因因此此当当形形参参为为引引用用类类型型时时,实实参参用用变变量量名名,此此时时在在被被调调函函数数中中对对引引用用的的任任何何操操作作,实实质质上上都都是是对对实实参参的的操操作作,实实参参的的值值将将随随函函数数体体内内形形参参的的改改变变而改变。通常,引用主要是用来作函数的形参和函数的返回值。而改变。通常,引用主要是用来作函数的形参和函数的返回值。2.引用调用引用调用5.2.3 参数传递机制参数传递机制#includevoid swap(int&x,int&y)/形参为引用类型形参为引用类型 int t=x;x=y;y=t;
25、void main()int a=3;int b=4;couta=ab=bendl;cout-swap-endl;swap(a,b);/函数调用语句,实参为变量名函数调用语句,实参为变量名 couta=ab=bendl;例:使用引用调用的方法实现两个变量的值的交换例:使用引用调用的方法实现两个变量的值的交换例:使用引用调用的方法实现两个变量的值的交换例:使用引用调用的方法实现两个变量的值的交换5.2.3 参数传递机制参数传递机制运行结果:运行结果:a=3 b=4-swap-a=4 b=35.3 指针与函数指针与函数#includeint fun(int*);void main()int a=8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中职Visual C+程序设计基础中职Flash 8.0基础第5章 函数与预处理ppt课件 Visual C+ 程序设计 基础 Flash 8.0 函数 预处理 ppt 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
链接地址:https://www.taowenge.com/p-88395026.html
限制150内