【精品】函数-C++结构化程序设计精品ppt课件.ppt
《【精品】函数-C++结构化程序设计精品ppt课件.ppt》由会员分享,可在线阅读,更多相关《【精品】函数-C++结构化程序设计精品ppt课件.ppt(103页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、函数-C+结构化程序设计本章内容本章内容 函数概述函数概述 函数的定义和调用函数的定义和调用 函数原型函数原型 参数的传递机制参数的传递机制 函数与指针函数与指针 嵌套调用和递归调用嵌套调用和递归调用 函数参数的缺省函数参数的缺省 函数重载函数重载 函数模板函数模板 内联函数内联函数 系统函数系统函数 作用域、生存期与可见性作用域、生存期与可见性 编译预处理编译预处理 带参数的带参数的main()main()2例:求#include#includevoid main()double sum;sum=sqrt(4)+sqrt(9)+sqrt(16);coutsum=sumendl;3求求 4!+
2、9!+16!l遇到的遇到的问题:没有求没有求阶乘的乘的库函数!函数!l自己自己动手做函数手做函数函数函数应该有名字有名字函数有入口(函数的参数)函数有入口(函数的参数)函数有出口(函数的返回函数有出口(函数的返回值)sqrt4293164xy4Fact(n)return f;函数名函数名函数的参数(入口)函数的参数(入口)可以有多个参数可以有多个参数函数的返回值(出口)函数的返回值(出口)只能有一个返回值只能有一个返回值double Fact(int n)double f;return f;怎样实现函数的功能?怎样实现函数的功能?double Fact(int n)double f=1.0fo
3、r(int i=1;i=n;i+)f*=i;return f;函数的返函数的返回类型回类型#include double Fact(int n)double f=1.0for(int i=1;i=n;i+)f*=i;return f;void main()double sum;sum=Fact(4)+Fact(9)+Fact(16);cout“4!+9!+16!=sumendl;5#include double Factorial(int n)double temp=1.0;if(n=0)return 1.0;for(int i=1;i=n;i+)temp*=i;return temp;voi
4、d main()double s;s=Factorial(6)+Factorial(17)+Factorial(20);cout6!+17!+20!=sendl;函数的定义函数的定义函数的调用函数的调用函数的首部函数返回值的类型函数名形参的类型和名称函数体内部变量说明部分可执行语句部分两种形式两种形式作为表达式一部分作为表达式一部分语句调用语句调用实参实参函数原型函数原型与变量一样,函数也需要先声明后使用。如果函数的调用在定义之前,则需要有函数原型。形式上,函数原型与函数定义的头部相同。#include double Factorial(int x);/函数原型函数原型void main()d
5、ouble s;s=Factorial(6)+Factorial(17)+Factorial(20);cout6!+17!+20!=sendl;double Factorial(int n)double temp=1.0;if(n=0)return 1.0;for(int i=1;i=n;i+)temp*=i;return temp;8C+语言源程序的特点语言源程序的特点l源程序构成:源程序构成:一个一个C+源程序由一个主函数和若干源程序由一个主函数和若干个相关的子函数组成。个相关的子函数组成。l主主函数:函数:总是以总是以main()作为开头,是源程序执行作为开头,是源程序执行的起点,其结尾
6、是源程序运行的终点。它是的起点,其结尾是源程序运行的终点。它是唯一能唯一能够独立运行够独立运行的函数,可以位于源程序的前面、中间的函数,可以位于源程序的前面、中间或者后面。或者后面。l子函数子函数:是功能独立和简单的程序。它的运行需要是功能独立和简单的程序。它的运行需要函数间的调用指令。函数间的调用指令。l函数种类:函数种类:包括用户自编写函数、系统函数(包括用户自编写函数、系统函数(由由C+系统提供)。系统提供)。4.1 函数概述函数概述94.2 函数的定义和调用函数的定义和调用1.函数的定义函数的定义类型名类型名 函数名函数名(形式参数表形式参数表)语句序列语句序列 定义函数内容:函数名称
7、、函数返值类型、函数定义函数内容:函数名称、函数返值类型、函数参数个数和类型、以及编写实现的函数的功能的语句参数个数和类型、以及编写实现的函数的功能的语句函数定义的一般形式为:函数定义的一般形式为:10函数定函数定义各部分的含各部分的含义函函数数名名:函函数数命命名名与与变量量名名命命名名方方法法相相同同。作作为一一种种标识符符,函函数数名名命命名名最最好好反反映映该函函数数的的功功能能,做做到到“见名知意名知意”。如用。如用factorial好于好于F。形式参数表:形式参数表:用用圆括号括起来;参数括号括起来;参数间用逗号隔开;用逗号隔开;必必须指明指明类型。若无参数,型。若无参数,圆括号内
8、什么也不写或括号内什么也不写或写写void,但,但圆括号本身不能省略。括号本身不能省略。类型名:型名:实际是是返回返回值的数据的数据类型。可以是基本数型。可以是基本数据据类型、构造数据型、构造数据类型、型、指指针或引用或引用。return语句句实现函数的返函数的返值功能。功能。如果一个函数没有返回如果一个函数没有返回值,返回返回值类型型标记为void。如果定如果定义时没指定没指定类型,型,则默默认的的类型是型是int型(注意不是型(注意不是void型)。型)。11花花括括号号:花花括括号号内内是是各各种种语句句组成成的的函函数数体体,函函数数是是程程序序运运行行的的基基本本单位位。函函数数的的
9、定定义不不可可以以嵌嵌套,套,即函数体内不允即函数体内不允许定定义另一个函数。另一个函数。return语句句:return 表表达达式式;可可以以没没有有表表达达式式,只只一一个个return(此此时可可以以省省略略);如如果果没没有有return语句句,函函数数执行行至至“”返返回回。函函数数内内可可以以多多个个return语句,注意函数的返回句,注意函数的返回值只能有一个。只能有一个。/P79,例,例4.2:没有形参和返回:没有形参和返回值的函数的函数注意函数返回值是void,只能用语句方式调用。函数返回值是int(缺省)或其它,如果没有return语句,则可能返回一个任意的数。当函数有返
10、回值,如果不关心返回值是多少,也可以用语句方式调用。当函数作为表达式时,表达式的值就是函数的返回值12void alphabet()cout“abcdefgn”;main()alphabet();void alphabet()cout“abcdefgn”;return;/可以没有可以没有return语句语句main()int x;x=alphabet();coutxendl;/不能以表达式方式调用不能以表达式方式调用alphabet()/int alphabet()cout“abcdefgn”;return 1;main()int x;x=alphabet();coutxendl;/输出输出1
11、alphabet()cout“abcdefgn”;main()int x;x=alphabet();coutxendl;/x的值其实没有意义的值其实没有意义alphabet()cout“abcdefgn”;main()int dummy;dummy=alphabet();alphabet();/两种调用方法都可以两种调用方法都可以13/P79,例,例4.1:定义求:定义求xn的函数的函数#includelong power(int x,int n)long p=1;/注意类型的一致注意类型的一致for(int i=1;i=n;i+)p=p*x;return p;main()long x;dou
12、ble y;x=power(3,4);/类型一致类型一致y=power(3,2.5);/没有得到没有得到3的的2.5次方次方coutx=x,y=yendl;/求求xy,(x、y可以输入)可以输入)#includepower(int x,int n)int p=1;for(int i=1;ixy;z=power(x,y);/类型一致类型一致cout“z=zendl;/求求xy(x、y可以输入)可以输入)#includepower(int x,int n)int p=1;for(int i=1;ixy;cout“z=power(x,y)endl;/不成功的例子不成功的例子#includepower
13、(int x,int n)int p=1;cinxn;for(int i=1;i=n;i+)p=p*x;cout“p=”pendl;main()int x,y,z;x=3;y=4;z=power(x,y);cout“z=zendl;/成功但不好的例子成功但不好的例子#includepower()/不能写成:不能写成:power(int x,int n)int x,n;int p=1;cinxn;for(int i=1;i=n;i+)p=p*x;cout“z=”pendl;main()power();/函数的形参与函数内部的局部变量有什么不同?函数的形参与函数内部的局部变量有什么不同?14/P8
14、0,例,例4.3:有多个:有多个return语句函数语句函数#includemax(int a1,int a2)/函数类型函数类型int可以省略可以省略/返回返回a1、a2中大的数中大的数if(a1a2)return a1;elsereturn a2;void main()coutmax(3,4)endl;coutmax(9,8)endl;/返回语句可以有多个,但返回值只能有一个!返回语句可以有多个,但返回值只能有一个!152.函数的函数的调用用是指在一个函数执行中间,转去执行其他函数的过程。子函数一经定义,就可以被main()主函数、其他函数、甚至该子函数自身多次调用。函数调用形式为:函数调
15、用形式为:函数名函数名(实参表)(实参表);注意实参与形参在注意实参与形参在数量数量、类型类型、位置位置上的一致性上的一致性long F(int x,double y,bool z)/定义定义main()long u;u=F(3,2.5,true);/调用调用16#include double F(int x,double y,bool z)coutx=xendl;couty=yendl;coutz=zendl;return 1.5;void main()long u=F(3.5,2,6);coutu=uendl;17函数函数调用的嵌套用的嵌套函数可以反复调用。函数的定义不可以嵌套,但是函数的
16、调用可以嵌套。void main()int x,i;coutx;for(i=1;i=10;i+)coutpower(x,i)endl;long m=power(power(x,2),3);coutmendl;/如果如果x=2,则则m=64184.3 函数原型函数原型l函数原形的一般形式:函数原形的一般形式:类型名型名 函数名函数名(形参表);(形参表);l用用途途:事事先先声声明明某某函函数数的的存存在在。即即当当调用用函函数数语句句出出现在在被被调用用函函数数定定义之之前前的的时候候,必必须事先事先对该被被调用函数用函数进行原型行原型说明。明。调用在前,定用在前,定义在后,需要声明。在后,需
17、要声明。定定义在在前前,调用用在在后后,可可以以没没有有声声明明,首首部部兼兼做声明的作用。做声明的作用。l 函函数数原原型型即即函函数数定定义的的第第一一行行的的内内容容,后后面加上面加上“;”(分号分号)。19举例,P80,例4.4:求35#include int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;#include int power(int x,int n);/函数原形函数原形 void
18、 main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;#include int power(int a,int b);void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;#include int power(int,int
19、);void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;#include int power(int,int);int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;20函数原型举例,P82,例4.6#includ
20、e f1();/原型,标准写法:原型,标准写法:int f1(void);void main()coutthis is main()n;/f1();与下边的调用有什么区别?与下边的调用有什么区别?coutf1()endl;int f1(void)/int和和void都可以省略都可以省略 f1()coutthis is f1()n;return 1;int f2(void)coutthis is f2()n;return 2;int f3(void)coutthis is f3()n;coutf2()endl;return 3;#include/原型原型int f1(),f2(),f3();vo
21、id main()coutthis is main()n;coutf1()endl;int f1(void)coutthis is f1()n;coutf3()endl;return 1;输出:输出:this is main()this is f1()this is f3()this is f2()231214.4 参数传递机制参数传递机制l用实参去替换形参的过程称作参数传递。用实参去替换形参的过程称作参数传递。l当一个函数被调用时,系统会给该函数的形参分配当一个函数被调用时,系统会给该函数的形参分配存储空间,同时要求提供与形参的类型、个数存储空间,同时要求提供与形参的类型、个数一致一致的实参
22、。的实参。#include int MyAdd(int x,int y)return 2*x+3*y;void main()coutMyAdd(3,4)endl;#include int MyAdd(int x,int y)return 2*x+3*y;void main()int x=3,y=4;coutMyAdd(x,y)endl;#include int MyAdd(int x,int y)return 2*x+3*y;void main()int x=3,y=4;coutMyAdd(y,x)endl;22l数数值传递机制(机制(传值方式)方式)将各个实参的值将各个实参的值 按位置先后顺
23、序按位置先后顺序 拷贝(传递)拷贝(传递)给与之对应的各个形参。传递后的形参与对应的给与之对应的各个形参。传递后的形参与对应的实参虽然数值相同,但却是不同的变量。实参虽然数值相同,但却是不同的变量。P83,例,例4.7 将两个变量的内容交换将两个变量的内容交换#include void swap(int x,int y)int temp;temp=x;x=y;y=temp;void main()int a(15),b(18);swap(a,b);cout“调用调用swap的输出的输出:a=”a“,b=bendl;调用swap的输出:a=15,b18#include void swap(int
24、x,int y);/函数原型函数原型void main()int a(15),b(18);cout“调用调用swap前的输出前的输出:a=”a“,b=bendl;swap(a,b);cout“调用调用swap的输出的输出:a=”a“,b=bendl;void swap(int x,int y)int temp;cout“交换前的输出交换前的输出:x=”x“,y=yendl;temp=x;x=y;y=temp;cout“swap函数输出函数输出:x=”x“,y=yendl;调用用swap前的前的输出出:a=15,b=18交交换前的前的输出:出:x=15,y=18swap函数的函数的输出:出:x=
25、18,y=15调用用swap的的输出出:a=15,b=1823l传地址地址调用机制用机制 形参是一个形参是一个指指针,实参参传递的是地址。的是地址。/P84例例4.8#include void swap(int*x,int*y);/函数原型函数原型void main()int a(15),b(18);cout“调用调用swap前的输出前的输出:a=”a“,b=bendl;swap(&a,&b);cout“调用调用swap的输出的输出:a=”a“,b=bendl;void swap(int*x,int*y)int temp;cout“交换前的输出交换前的输出:*x=”*x“,*y=*yendl;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 函数 C+ 结构 程序设计 ppt 课件
限制150内