kj-第7章函数ppt课件(全).ppt
《kj-第7章函数ppt课件(全).ppt》由会员分享,可在线阅读,更多相关《kj-第7章函数ppt课件(全).ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 函数函数l本章概述本章概述 l本章的学习目标本章的学习目标l主要内容主要内容第第7章章 函数函数l本章概述本章概述 本章介绍函数定义的形式、调用本章介绍函数定义的形式、调用的方法、函数嵌套调用和递归调用的的方法、函数嵌套调用和递归调用的方法、数组做函数参数的使用方法、方法、数组做函数参数的使用方法、局部变量和全局变量的使用方法、变局部变量和全局变量的使用方法、变量存储类别、内部函数和外部函数等量存储类别、内部函数和外部函数等内容。内容。第第7章章 函数函数 本章教学目的:掌握函数定义的形式,调用的方本章教学目的:掌握函数定义的形式,调用的方法,掌握函数嵌套调用和递归调用的方法,掌握
2、数组法,掌握函数嵌套调用和递归调用的方法,掌握数组做函数参数的使用方法,掌握局部变量和全局变量的做函数参数的使用方法,掌握局部变量和全局变量的使用方法,掌握变量存储类别,了解内部函数和外部使用方法,掌握变量存储类别,了解内部函数和外部函数。函数。本章教学重点:函数的定义和调用,嵌套调用和本章教学重点:函数的定义和调用,嵌套调用和递归调用,数组做函数参数,局部变量和全局变量。递归调用,数组做函数参数,局部变量和全局变量。本章教学难点:嵌套调用和递归调用,数组做函本章教学难点:嵌套调用和递归调用,数组做函数参数,局部变量和全局变量。数参数,局部变量和全局变量。本章的学习目标本章的学习目标:第第7章
3、章 函数函数l7.1 函数概述函数概述l7.2 函数的定义函数的定义l7.3 函数的参数和函数的返回值函数的参数和函数的返回值l7.4 函数的调用函数的调用l7.5 函数的嵌套和递归调用函数的嵌套和递归调用l7.6 数组作为函数的参数数组作为函数的参数l7.7 局部变量和全局变量局部变量和全局变量l7.8 变量的存储类别变量的存储类别l7.9 内部函数和外部函数内部函数和外部函数l7.10 程序设计举例程序设计举例主要内容主要内容:7.1 函数概述l在进行程序设计时,设计人员通常把一个较大的程序在进行程序设计时,设计人员通常把一个较大的程序划分为若干个程序模块,每一个程序模块用来实现一划分为若
4、干个程序模块,每一个程序模块用来实现一个特定的功能,通常把每个程序模块称作一个子程序。个特定的功能,通常把每个程序模块称作一个子程序。l在在C语言中,子程序的功能是由函数来完成的,一个语言中,子程序的功能是由函数来完成的,一个C程序可由一个主函数和若干个函数构成。由主函数调程序可由一个主函数和若干个函数构成。由主函数调用其它函数,其它函数也可以互相调用,同一个函数用其它函数,其它函数也可以互相调用,同一个函数可以被一个或多个函数调用任意多次。可以被一个或多个函数调用任意多次。l在程序设计中,常将一些常用的功能模块编写成函数,在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供编程时选
5、用。在程序设计时,如果能放在函数库中供编程时选用。在程序设计时,如果能够善于使用函数,则可以减少重复编写程序段的工作够善于使用函数,则可以减少重复编写程序段的工作量。量。一个简单的函数调用的例子:一个简单的函数调用的例子:#include#define N 10int scoreN=97,90,88,82,79,78,73,68,66,65;void function1()int i,s=0;for(i=1;iN;i+)s=s+scorei;printf(“平均分为:平均分为:%fn”,(float)s/N);return;int function2(int n)int i,j,k=-1;fo
6、r(i=1;i=0)printf(“该分数在该分数在%d个分数个分数 中排名第中排名第%。”,N,t+1);else printf(“不存在此分数!不存在此分数!”);return 0;函数函数function1实现计算平均分;函数实现计算平均分;函数function2用来查找给定分数的位置,若给定分数在数组中用来查找给定分数的位置,若给定分数在数组中不存在,则返回值为不存在,则返回值为-1。在在C语言中,从函数定义的角度看,函数可分为如下两种:语言中,从函数定义的角度看,函数可分为如下两种:(1)标准函数,即库函数。是由)标准函数,即库函数。是由C编译系统提供的,用户编译系统提供的,用户不必
7、自己定义、可以直接使用的函数。例如:不必自己定义、可以直接使用的函数。例如:printf、scanf、getchar、putchar等函数都是标准函数。等函数都是标准函数。附录附录D中给出了常用的库函数。中给出了常用的库函数。(2)用户自定义函数。是由用户自己编写的函数,以解决用户自定义函数。是由用户自己编写的函数,以解决用户的专门需要。用户的专门需要。例例7.1中的中的star和和square1函数是用户自定义函数。函数是用户自定义函数。7.2 函数的定义根据有无参数,可以将函数分为如下两种形式:根据有无参数,可以将函数分为如下两种形式:1无参函数无参函数定义形式如下:定义形式如下:类型标识
8、符类型标识符 函数名(函数名()/*函数的首部函数的首部*/声明部分声明部分 /*函数体函数体*/执行部分执行部分 类型标识符用来说明函数返回值的类型,也称为函数的类类型标识符用来说明函数返回值的类型,也称为函数的类型。若省略类型标识符,默认返回值类型为整型;当函数型。若省略类型标识符,默认返回值类型为整型;当函数无返回值时,可以指定函数的类型为无返回值时,可以指定函数的类型为void。在例在例7.1中的中的function1函数为无参函数。函数为无参函数。2有参函数有参函数例例7.2 编写一个函数,编写一个函数,求两个数的最大值。求两个数的最大值。程序为:程序为:int max(int a,
9、int b)int x;if(ab)x=a;else x=b;return x;上面定义了有参函数上面定义了有参函数max,参数为,参数为a和和b。return语语句用来返回句用来返回函数值。函数值。l定义形式如下:定义形式如下:l类型标识符类型标识符 函数名(形参表列)函数名(形参表列)l /*函数的首部函数的首部*/l l 声明部分声明部分 /*函数体函数体*/l 执行部分执行部分l l例例7.1中的中的function2函数为有参函数。函数为有参函数。l对函数定义的几点说明:对函数定义的几点说明:l(1)函数名的命名要符合标识符的命名规则,同一程序中)函数名的命名要符合标识符的命名规则,
10、同一程序中函数不能重名,一个函数名用来唯一标识一个函数。函数不能重名,一个函数名用来唯一标识一个函数。l(2)无参函数的形参表是空的,但)无参函数的形参表是空的,但“()()”不能省略;有不能省略;有参函数,要说明每一个形参的类型,形参可以是变量名、参函数,要说明每一个形参的类型,形参可以是变量名、数组名、指针变量名等,形参表列中若多于一个形参,则数组名、指针变量名等,形参表列中若多于一个形参,则形参之间用逗号分隔。形参之间用逗号分隔。l(3)花括号内的部分称为)花括号内的部分称为“函数体函数体”。函数体由声明部分。函数体由声明部分和执行部分构成。声明部分对函数内所使用变量的类型和和执行部分构
11、成。声明部分对函数内所使用变量的类型和被调用的函数进行定义和声明;执行部分是实现函数功能被调用的函数进行定义和声明;执行部分是实现函数功能的语句序列。的语句序列。l(4)当函数体为空时,称此函数为空函数。调用空函数时,)当函数体为空时,称此函数为空函数。调用空函数时,什么工作也不做。什么工作也不做。l(5)函数定义时,旧版的)函数定义时,旧版的C语言中,函数首部中的形参表语言中,函数首部中的形参表列仅包含形参,形参的类型另起一行来说明;新版的列仅包含形参,形参的类型另起一行来说明;新版的C语言语言中,函数首部中的形参表列包含形参的类型和形参。中,函数首部中的形参表列包含形参的类型和形参。l例如
12、:例如:int max(int x,int y)为新版的函数定义方式,为新版的函数定义方式,l 而而 int max(x,y)l int x,y;l为旧版的函数定义方式。为旧版的函数定义方式。l一般来说,在新版的一般来说,在新版的C语言中以上两种定义方式都能使用。语言中以上两种定义方式都能使用。7.3 函数的参数和函数的返回值 7.3.1 形式参数和实际参数形式参数和实际参数l定义函数时的参数称为定义函数时的参数称为形式参数形式参数,简称为,简称为形参形参。形参在该函。形参在该函数数未被调用时是没有确定的取值未被调用时是没有确定的取值的,只是形式上的参数。调的,只是形式上的参数。调用函数时的参
13、数称为用函数时的参数称为实际参数实际参数,简称为,简称为实参实参。实参可以是变实参可以是变量、常量或表达式,有确定的取值量、常量或表达式,有确定的取值,是实实在在的参数。函,是实实在在的参数。函数定义时形参不占内存,只有发生调用时,形参才被分配内数定义时形参不占内存,只有发生调用时,形参才被分配内存单元,接受实参传来的数据。存单元,接受实参传来的数据。l定义函数时必须定义形参的类型。定义函数时必须定义形参的类型。函数的形参与实参要求在函数的形参与实参要求在个数上相等,并且对应的形参和实参的类型要相同。个数上相等,并且对应的形参和实参的类型要相同。形参和形参和实参可以同名,形参是该函数内部的变量
14、,即使形参和实参实参可以同名,形参是该函数内部的变量,即使形参和实参同名,也是两个不同的变量,占用不同的内存单元。同名,也是两个不同的变量,占用不同的内存单元。l例例7.3 数组中存储若干个数码数组中存储若干个数码(可以重复可以重复),编写一个函数,对于给定的一,编写一个函数,对于给定的一个数码,统计该数码在数组中出现的次数。主函数可以多次调用上面的个数码,统计该数码在数组中出现的次数。主函数可以多次调用上面的函数,实现多次统计输出。函数,实现多次统计输出。l#includelvoid fun(int b)/*函数定义,函数定义,b为形参为形参*/l int st20=2,6,3,5,7,1,
15、4,3,4,2,2,6,6,1,7,5,5,2,1,7;l int k,n=0;l for(k=0;k20;k+)if(stk=b)n+;l printf(n%d appear%d times.n,b,n);llint main()l int a,yn=0;l while(yn=0)l printf(Input a number(09):);l scanf(%d,&a);fun(a);/*调用函数,调用函数,a为实参为实参*/l printf(If continue,please input 0,otherwise input 1:);l scanf(%d,&yn);l l return 0;
16、l l例例7.3 数组中存储若干个数码数组中存储若干个数码(可以重复可以重复),编写一个函,编写一个函数,对于给定的一个数码,统计该数码在数组中出现的数,对于给定的一个数码,统计该数码在数组中出现的次数。主函数可以多次调用上面的函数,实现多次统计次数。主函数可以多次调用上面的函数,实现多次统计输出。输出。l运行程序,显示及输入输出可以如下:运行程序,显示及输入输出可以如下:lInput a number(09):3l3 appear 2 times.lIf continue,please input 0,otherwise input 1:0lInput a number(09):9l9 ap
17、pear 0 times.lIf continue,please input 0,otherwise input 1:17.3.2 函数的返回值函数的返回值 l在执行被调用函数时,如果要将被调用函数的值在执行被调用函数时,如果要将被调用函数的值返回给调用它的函数,则需要使用返回给调用它的函数,则需要使用return语句。语句。return语句返回的数据,称为返回值。返回值的语句返回的数据,称为返回值。返回值的类型,由定义函数时的函数类型来决定。类型,由定义函数时的函数类型来决定。return语句的格式为:语句的格式为:l return 表达式;表达式;或或 return(表达式);(表达式);
18、lreturn后面的表达式,即为函数的返回值,表达后面的表达式,即为函数的返回值,表达式可以是变量、常量或表达式。若不需要函数返式可以是变量、常量或表达式。若不需要函数返回任何数据时,可以指定函数的类型为回任何数据时,可以指定函数的类型为void。例例7.4 编写函数,求两个实数编写函数,求两个实数x、y的和,求的和,求x2和和y2的平均值。的平均值。include float fadd(float a,float b)/*函数定义函数定义*/float s;s=a+b;return(s);/*返回计算结果:两个实数的和返回计算结果:两个实数的和*/int main()float x,y,su
19、m,aver;scanf(“%f,%f”,&x,&y);/*输入两个实数输入两个实数*/sum=fadd(x,y);/*函数调用函数调用*/aver=fadd(x*x,y*y)/2;printf(“n%f,%f”,sum,aver);return 0;例例75 求求3到到100之间的所有素数。调用函数判断一个数是否是素数,要求:之间的所有素数。调用函数判断一个数是否是素数,要求:若函数的返回值是若函数的返回值是1,表示该数是素数;若函数的返回值是,表示该数是素数;若函数的返回值是0,则表示该数不,则表示该数不是素数是素数。#include#include int prime(int i)/*函
20、数定义函数定义*/int j,k,flag=1;k=sqrt(i);for(j=2;j=k;j+)if(i%j=0)flag=0;break;return flag;int main()int i;for(i=3;i100;i+)if(prime(i)=1)/*函数调用函数调用*/printf(%4d,i);printf(n);return 0;输出如下:输出如下:3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 7.4 函数的调用函数的调用7.4.1 函数调用的一般形式函数调用的一般形式函数调用的一般形式
21、为:函数调用的一般形式为:函数名(实参表列);函数名(实参表列);如果是调用无参函数,则实参表列可以没有,但括如果是调用无参函数,则实参表列可以没有,但括弧不能省略。弧不能省略。如果实参表列包含多个实参,则各参数间用逗号隔如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,类型应一致。实参开。实参与形参的个数应相等,类型应一致。实参与形参应按顺序一一对应,实参传递数据给形参。与形参应按顺序一一对应,实参传递数据给形参。7.4.2 函数调用的方式函数调用的方式l按函数在程序中出现的位置来划分,可以有以下三种按函数在程序中出现的位置来划分,可以有以下三种函数调用方式:函数调用方
22、式:l1函数语句。函数语句。把函数调用作为一个语句,如例把函数调用作为一个语句,如例7.1中中的的function1()的调用,这时不要求函数带回值,只的调用,这时不要求函数带回值,只要求函数完成一定的操作。要求函数完成一定的操作。l2函数表达式。函数表达式。函数调用出现在一个表达式中,如函数调用出现在一个表达式中,如例例7.4中中aver=fadd(x*x,y*y)/2,这时要求函数带回一,这时要求函数带回一个确定的值参加表达式的运算。个确定的值参加表达式的运算。l3函数的参数。函数的参数。函数调用作为另一个函数的实参。函数调用作为另一个函数的实参。l函数调用作为另一个函数的参数,实质上也是
23、函数表函数调用作为另一个函数的参数,实质上也是函数表达式形式调用的一种,因为函数的参数本来就要求是达式形式调用的一种,因为函数的参数本来就要求是表达式。表达式。l例例7.6 编程求编程求4个整数的最大值,要求调用个整数的最大值,要求调用“求两个整数最大值求两个整数最大值”的函数来完成。的函数来完成。l#include lint imax(int x,int y)/*函数定义函数定义*/lreturn(xy?x:y);lint main()l int n1,n2,n3,n4,d;lscanf(“%d,%d,%d,%d”,&n1,&n2,&n3,&n4);ld=imax(imax(n1,n2),i
24、max(n3,n4);/*函数调用函数调用*/lprintf(“The max=%d”,d);lreturn 0;l7.4.3 函数调用的说明函数调用的说明l1函数调用的过程函数调用的过程l函数调用的过程是:函数调用的过程是:l(1)传递参数值。对有参函数进行调用时,)传递参数值。对有参函数进行调用时,计算各个实参表达式的值,为所有的形参分配计算各个实参表达式的值,为所有的形参分配内存单元,并按顺序把实参的值传递给相应的内存单元,并按顺序把实参的值传递给相应的形参。形参。l(2)进入函数的声明部分,为函数体内声明)进入函数的声明部分,为函数体内声明的局部变量分配内存单元。的局部变量分配内存单元
25、。l(3)执行函数中的语句,实现函数的功能,)执行函数中的语句,实现函数的功能,当遇到当遇到return语句或最外层的语句或最外层的“”时,释放时,释放形参和本函数体内定义的局部变量所占的内存形参和本函数体内定义的局部变量所占的内存空间,返回到调用它的函数。空间,返回到调用它的函数。2函数调用需要具备的条件函数调用需要具备的条件l在一个函数中调用另一函数(即被调用函数)需要具备如下一在一个函数中调用另一函数(即被调用函数)需要具备如下一些条件:些条件:l(1)首先被调用函数必须是已经存在的函数(是库函数或用户)首先被调用函数必须是已经存在的函数(是库函数或用户自定义的函数)。自定义的函数)。l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- kj 函数 ppt 课件
限制150内