C语言程序课件ppt-第7章函数.ppt





《C语言程序课件ppt-第7章函数.ppt》由会员分享,可在线阅读,更多相关《C语言程序课件ppt-第7章函数.ppt(79页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、思考思考:1、我的程序有上百行,如何编写、调试最方、我的程序有上百行,如何编写、调试最方便?便?2、我想设计一个程序完成下面的计算、我想设计一个程序完成下面的计算 其中其中m,n为正整数且为正整数且mn,该,该如何设计程序最有效?如何设计程序最有效?内容提要:n 概述 n 函数定义函数定义n 函数参数(函数参数(简单变量、数组简单变量、数组)和函数的值)和函数的值n 函数的调用(嵌套调用、递归调用)函数的调用(嵌套调用、递归调用)n 局部变量和全局变量局部变量和全局变量的存储类别的存储类别第7章 函数1、一个、一个C程序可以分为若干个函数;程序可以分为若干个函数;2、每个程序有且只能有一个主函
2、数、每个程序有且只能有一个主函数(main),其他函数都是子函数;),其他函数都是子函数;3、子函数可以相互调用,但主函数、子函数可以相互调用,但主函数不能被调用;不能被调用;4、一个源程序由一个或多个函数构、一个源程序由一个或多个函数构成,一个源程序文件是一个编译单成,一个源程序文件是一个编译单位;位;7.1.1 函数概述函数概述abcmainde f g hhiegC程序的结构图如图所示:程序的结构图如图所示:例例7-1函数调用示例函数调用示例#include#include void printstar()void printstar()printf(*n);printf(*n);voi
3、d print_message()void print_message()printf(How do you do?n);printf(How do you do?n);void main()void main()printstar();printstar();print_message();print_message();printstar();printstar();结果:结果:*How do you do?How do you do?*例例7-2通过输入半径值,计算圆的面积。通过输入半径值,计算圆的面积。#include float area(float x)float y;y=3.14
4、*x*x;return(y);void main()float r,s;scanf(%f,&r);s=area(r);printf(%f,s);说明:说明:(1)C(1)C程序的执行从程序的执行从mainmain函数开始,调用其他函数后仍函数开始,调用其他函数后仍回到回到mainmain函数,程序在函数,程序在mainmain函数结束时结束函数结束时结束(2)(2)所有的函数都是平行的,不允许嵌套定义函数。所有的函数都是平行的,不允许嵌套定义函数。(3)(3)用户使用的角度用户使用的角度 (标准库函数、自定义函数)标准库函数、自定义函数)(4)(4)函数的形式函数的形式 (无参函数、有参函数)
5、(无参函数、有参函数)(5)(5)一个一个C应用程序由一个或多个源程序文件组成。应用程序由一个或多个源程序文件组成。C应用程序的组成见图。应用程序的组成见图。C程序的组成程序的组成7.1.2 函数定义函数定义一一、函数定义的一般形式函数定义的一般形式:类型说明类型说明 函数名函数名(形式参数说明形式参数说明)函数体函数体 n1.1.无参函数的定义形式无参函数的定义形式:类型标识符类型标识符 函数名函数名 ()()函数体函数体 n2.2.有参函数的定义形式有参函数的定义形式:n类型标识符类型标识符 函数名函数名 (形式参数表列形式参数表列)函数体函数体 例如例如:int max(int x,in
6、t y)int z;z=xy?x:y;return(z);nz并不是形式参数,而是一般变量,所以在说明部并不是形式参数,而是一般变量,所以在说明部分定义。分定义。n如果在定义函数时不指定类型,系统隐含指定函如果在定义函数时不指定类型,系统隐含指定函数为数为 int 型。型。二、函数体二、函数体:一般情况下一般情况下,函数体由两部分组成函数体由两部分组成局部变量说明局部变量说明 语句语句 局部变量:函数体内定义的变量。其有效范围仅限于所局部变量:函数体内定义的变量。其有效范围仅限于所在的函数内部,离开函数体则无意义。在的函数内部,离开函数体则无意义。n3.空函数的定义形式:空函数的定义形式:类型
7、说明符类型说明符 函数名(函数名()n此语句的功能是使程序结构清楚,可读性好,以此语句的功能是使程序结构清楚,可读性好,以后扩充新功能方便后扩充新功能方便n如:如:dummy()例例7-3计算计算s=1!+2!+3!+8!#include long jc(int k)long p;int i;p=1;for(i=1;i=k;i+)p=p*i;return p;void main()long jc_sum=0;int i;for(i=1;i=8;i+)jc_sum+=jc(i);printf(%ld,jc_sum);例例7-4 求数的立方求数的立方.#include long cub(int x
8、)long y;y=x*x*x;return y;void main()int num;long cub_num;printf(请输入一个整数:n);scanf(%d,&num);cub_num=cub(num);printf(%ld,cub_num);7.2 7.2 函数参数和返回值函数参数和返回值 7.2.1 7.2.1 形式参数和实际参数形式参数和实际参数一个一个C C程序由若干个函数组成,各函数调用时经常需要传程序由若干个函数组成,各函数调用时经常需要传递一些数据。即调用函数把数据传递给被调用函数,经被调递一些数据。即调用函数把数据传递给被调用函数,经被调用函数处理后,得到一个确定的结
9、果,在返回调用函数时,用函数处理后,得到一个确定的结果,在返回调用函数时,把结果带回调用函数。把结果带回调用函数。EG:c=max(a,b)(main EG:c=max(a,b)(main 函数函数)int max(int x,int y)(max int max(int x,int y)(max 函数函数)int z;z=xy?x:y;int z;z=xy?x:y;return (z);return (z);函数参数函数参数:用于函数间数据的传递用于函数间数据的传递 形式参数形式参数:定义函数时使用的参数定义函数时使用的参数实际参数实际参数:引用函数时使用的参数引用函数时使用的参数 一、一、
10、简单变量作为函数参数简单变量作为函数参数 简单变量作为函数参数是单向的值的传递,执行过程如下:简单变量作为函数参数是单向的值的传递,执行过程如下:创建形参变量,为每个形参变量建立相应的存储空间。创建形参变量,为每个形参变量建立相应的存储空间。值传递,即将实参的值复制到对应的形参变量中。值传递,即将实参的值复制到对应的形参变量中。执行函数体,执行函数体中的语句。执行函数体,执行函数体中的语句。返回返回(带回函数值、返回调用点、撤消形参变量带回函数值、返回调用点、撤消形参变量)。其中第其中第步完成把实参的值传给形参。步完成把实参的值传给形参。各函数间的信息的往来是由参数各函数间的信息的往来是由参数
11、传递和返回语句实现的传递和返回语句实现的例例7-5#include void main()int a,b,c;int max(int x,int y);scanf(%d,%d,&a,&b);c=max(a,b);printf(max is%d,c);int max(int x,int y)int z;z=xy?x:y;return(z);运行结果:运行结果:7,8 max is 8说明说明:(1)定义函数时定义函数时,必须说明形参的类型必须说明形参的类型.形参只能是变量或数组形参只能是变量或数组.(2)函数被调用前函数被调用前,形参不占用内存形参不占用内存;函数调用结束后函数调用结束后,形参所
12、占用形参所占用的内存也将被回收的内存也将被回收.(3)实参可以是常量、变量或表达式实参可以是常量、变量或表达式.(4)实参与形参的类型必须一致或赋值兼容实参与形参的类型必须一致或赋值兼容.(5)C语言中实参对形参的数据传递是语言中实参对形参的数据传递是”值传递值传递”,即单向传递即单向传递.它仅由参数的对应位置确定它仅由参数的对应位置确定,与名字无关与名字无关.3223axby231015abxy例例7-6读程序读程序,写出运行结果写出运行结果#include int sum(int a,int b)a=a+b;b=a+b;return a;void main()int a=1,b=3,c;c
13、=sum(a,b);printf(sum of%d,%d is%dn,a,b,c);运行结果运行结果:sum of 1,3 is 4例例7-7读程序读程序,写出运行结果写出运行结果#include void swap(float x,float y)float temp;temp=x;x=y;y=temp;void main()float x=8.5,y=3.7;swap(x,y);printf(x=%.2f y=%.2fn,x,y);运行结果运行结果:二、二、数组作为函数参数数组作为函数参数 2.数组名作函数参数数组名作函数参数(地址传递)地址传递)例如例如例如例如例如例如1.数组元素做函数
14、实参数组元素做函数实参它同变量作参数一样它同变量作参数一样,是是“值传递值传递”方式方式.说明:说明:(1)实参数组与形参数组的类型必须一致实参数组与形参数组的类型必须一致;(2)用数组名做参数时用数组名做参数时,传递的是数组的首地址传递的是数组的首地址,因此因此形参数组也可以不指定大小形参数组也可以不指定大小.但需另设一个参数但需另设一个参数,传递数组元传递数组元素的个数素的个数.(3)形参和实参是地址传递,它们共享存储单元。)形参和实参是地址传递,它们共享存储单元。56 78 99 起始地址起始地址1000a0 a 1 a2b0 b1 b2 例子例子#include int max(int
15、 x,int y)return(xy?x:y);void main()int a10,i,m;printf(Enter 10 integer:n);for(i=0;i10;i+)scanf(%d,&ai);m=a0;for(i=1;i10;i+)m=max(m,ai);printf(max is%d,m);#include int max(int x10)int i,m;m=x0;for(i=1;i10;i+)if(mxi)m=xi;return m;void main()int a10,i;printf(Enter 10 integer:n);for(i=0;i10;i+)scanf(%d,
16、&ai);printf(max is%d,max(a);3.多维数组作函数参数n多维数组可以作为函数的参数n如果形参是多维数组,可以省略第一维的大小.但不能省略其他维的大小nint array310;nint array10;n但int array;int array3;非法n 实参数组可以大于形参数组,这时只取实参数组的一部分.n实参数组:int scroe510;n 形参数组:int array310 ;n 例子实参形参传递方向常量、变量、表达式、数组元素变量传值(单向)数组名数组传数组首地址实参与形参小结7.2.2函数的返回值 一、返回函数值的方法(1)如果一个函数有返回值,就必须使用r
17、eturn语句(2)一个函数中可以有一个以上的return语句,但不论执行到哪个return都将结束函数的调用返回主调函数.如:void swap(float x,float y)float temp;temp=x;x=y;y=temp;return x;return y;(3)return语句中的括号可以省略;return后面的值可以是一个表达式.7.2.2函数的返回值 二、函数值的类型(1)函数的类型即函数值的类型.例如:函数max是int型的,也就是函数值是int型.(2)省略了类型说明的函数是int型.(3)return中表达式的值一般应与函数类型一致.(4)如果不一致,则需要进行类型
18、转换.只有数值型数据可以进行自动类型转换,以函数类型为准.例如不需要返回值的函数不需要返回值的函数(1)函数没有函数没有return语句时语句时,返回的是一个不确定的值返回的是一个不确定的值.void main()int a,b,c;a=printstar();b=print_message();c=printstar();printf(a=%d,b=%d,c=%dn,a,b,c);a,b,c表示输出字符的个数。表示输出字符的个数。(2)为了明确表示)为了明确表示“不带回值不带回值”可用可用“void”定义定义“无类型无类型”如如:void printstar().(3)如果一个函数被声明为如
19、果一个函数被声明为void类型类型,就不允许再引用它的就不允许再引用它的返回值返回值(即只能用函数语句形式调用即只能用函数语句形式调用.)n如如:void printstar().n 在使用此语句后在使用此语句后,就不能调用就不能调用 eg:a=printstar();()n 因为因为printstar()语句无返回值语句无返回值.void main()int a;a=printstar();printf(%dn,a);void printstar()printf(*n);7.3 函数的调用n 7.3.1 7.3.1 函数调用的一般形式函数调用的一般形式 n函数名函数名 (实参表列实参表列);
20、);n说明说明(1)(1)如果调用无参函数如果调用无参函数,实参表列可以省略实参表列可以省略,但括号但括号不能省不能省;n(2)(2)实参的个数和形参一般相等实参的个数和形参一般相等;n(3)(3)实参与形参的类型应一一对应实参与形参的类型应一一对应,必要时使用类型转必要时使用类型转换换.注意注意:不同系统中不同系统中,实参的计算顺序不同实参的计算顺序不同.微机上一般是从右到左微机上一般是从右到左.为避免由此引为避免由此引起的混乱起的混乱,一般应在调用函数前计算出一般应在调用函数前计算出实参数的值实参数的值.例7-13#include int f(int a,int b)int c;if(ab
21、)c=1;else if(a=b)c=0;else c=-1;return c;void main()int i=2,p;p=f(i,+i);printf(%dn,p);void main()int i=2,j,p;j=+i;p=f(i,j);printf(%dn,p);一、函数调用的方式:(1)函数语句函数语句.形式为形式为:函数名函数名(实参表列实参表列);例如例如:printstar();printf(“%d”,p);说明说明:这种方式不要求函数带返回值这种方式不要求函数带返回值,函数仅完成一定的操作函数仅完成一定的操作.(2)函数表达式函数表达式.(函数的返回值参与计算函数的返回值参与
22、计算)Eg:c=2 max(a,b);printf(“max is%d”,max(a,b)说明说明:这种调用不能用于这种调用不能用于void型函数型函数.(3)函数参数函数参数.函数调用作为一个函数的实参函数调用作为一个函数的实参.例如例如:m=max(a,max(c,b);printf(max=%dn,max(a,b);二、函数的执行过程按从右向左的顺序,计算实参中各表达式的值.按照位置,将实参的值一一对应地传给形参.执行被调用函数当遇到return(表达式)语句时,计算表达式的值,并返回主调函数例7-14读程序,写出结果#include float iabs(float x)return(
23、x0?x:-x);void main()float x=-1.2,y;y=iabs(2*x);printf(x=%f,iabs(x)=%fn,x,y);7.3.2 函数声明在程序中调用函数满足以下条件在程序中调用函数满足以下条件 (1)(1)函数必须是已经存在的函数,即遵循函数必须是已经存在的函数,即遵循”先定义先定义,后使用后使用”的的原则原则(2)(2)如果被调用函数的定义在主调用函数之后如果被调用函数的定义在主调用函数之后(位置位置),),可以先给可以先给出原型说明,函数原型包括:函数类型出原型说明,函数原型包括:函数类型 函数名函数名(参数类参数类型型1 1,参数类型,参数类型2 2.
24、);.);(3)(3)使用库函数时使用库函数时,用用#include#include命令命令,包含相应的头文件包含相应的头文件.#include#include#include#include 例7-15:#include void main()float add(float x,float y);/*被调函数类型说明*/float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sum=%f,c);float add(float x,float y)float z;z=x+y;return(z);对函数的说明也可以:float add(float,flo
25、at);说明:(1)以前C版本只声明函数名和函数类型 如:float add();但这种方式不检查函数的类型和个数(2)如果在调用之前,没有对函数作声明,则编译系统会把第一次遇到的函数名作为声明,默认为int 型。但这种形式不检查函数参数的类型和个数。(3)被调函数定义在主调函数之前时。例如:#include void main()float add(float x,float y);/*被调函数类型说明*/float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sum=%f,c);float add(float x,float y)float z;z
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 课件 ppt 函数

限制150内