C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数

上传人:E**** 文档编号:89390069 上传时间:2019-05-24 格式:PPT 页数:27 大小:156KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数_第1页
第1页 / 共27页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数_第2页
第2页 / 共27页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数_第3页
第3页 / 共27页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数_第4页
第4页 / 共27页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第7章 函数(27页珍藏版)》请在金锄头文库上搜索。

1、第7章 函 数,任务:学生成绩排序 任务所需主要相关知识: 函数的定义 调用及简单应用 数组作为函数的参数 函数的嵌套调用和递归调用 变量的作用域和生存周期,7.1 函数的定义、调用及简单应用,7.1.1 函数定义的一般形式 1无参函数的定义形式 类型标识符 函数名() 变量声明部分 语句执行部分 ,实现该函数的功能,对函数体内部所用到的变量的说明,2有参函数定义的一般形式,类型标识符 函数名(形式参数表列) 变量声明部分 语句执行部分 ,在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须

2、在形参表中给出形参的类型说明,2有参函数定义的一般形式,例如,定义一个函数,用于求两个数中的最大数,可写为: int max(int a, int b) if (ab) return a; else return b; ,7.1.2 函数调用的一般形式,语言中,函数调用的一般形式为: 函数名(实际参数表) 对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。,7.1.3 函数调用的方式,在语言中,可以用以下几种方式调用函数: 1函数表达式:函数出现在一个表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的

3、运算。 例如: c=8*max(a,b); 函数max是表达式的一部分,它的值乘8再赋给c。,7.1.3 函数调用的方式,2函数语句:把函数调用作为一个语句。 例如: printstar(); 这时不要求函数带回值,只要求函数完成一定的操作,7.1.3 函数调用的方式,3函数参数:函数调用作为一个函数的参数。 例如: m=max(a,max(b,c); 其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参。m的值是a,b,c三者中最大者的值。,7.1.4 形式参数和实际参数,在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系。这就是前面提到的有参数函数。前面已提

4、到,在定义函数时函数名后面括弧中的变量名称为“形式参数”(简称“形参”),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称“实参”)。,【例7.1】利用函数求两个数中最大数(调用函数时的数据传递),【程序代码】 #include void main() int max(int a,int b); int a,b,c; scanf(“%d,%d“, ,7.2 数组作为函数的参数,数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。,7.2.1 数组元素

5、作函数实参,数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。,7.2.2 数组名作为函数参数,1用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时,即会发生错误。 2在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。,7.3 函数的嵌套调用和递归调用,7.3.1 函数的嵌套调用 语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是语言

6、允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。,【例7.4】计算s=22!+32!,本题可编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和。,【程序代码】,#include long f1(int p) int k; long r; long f2(int); k=p*p; r=f2(k); return r; ,long f2(int q) long c=1; int i; for(i=1;i=q;i+)

7、c=c*i; return c; void main() int i; long s=0; for (i=2;i=3;i+) s=s+f1(i); printf(“ns=%ldn“,s); ,7.3.2 函数的递归调用,一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。,【例7.5】用递归法计算n!,用递归法计算n!可用下述公式表示: n!=1 (n=0,1) n*(n-1)! (n1),【程序代码】,#include long ff(int n) long f

8、; if(n0) printf(“n0,input error“); else if(n= =0|n= =1) f=1; else f=ff(n-1)*n; return(f); ,void main() int n; long y; printf(“ninput a inteager number:n“); scanf(“%d“, ,7.4 变量的作用域和生存周期,7.4.1 局部变量 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。,【例7.6】局部变量用法,【程序代码】 #include void main() int i

9、=2,j=3,k; k=i+j; int k=8; printf(“%dn“,k); printf(“%dn“,k); ,7.4.2 全局变量,全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。,【例7.7】外部变量与局部变量同名,【程序代码】 #include int a=3,b=5; /*a,b为外部变量*/ max(int a,int b) /*a

10、,b为外部变量*/ int c; c=ab?a:b; return(c); void main() int a=8; printf(“%dn“,max(a,b); ,7.6 综合实例:任务的实现,【任务】对学生成绩按升序排序。 【任务分析】编写一个对数组元素由小到大排序的sort函数,排序前先显示未排序的数组元素,接着调用sort函数进行排序,再将排序后的数组返回给原调用的main()主函数,再将排序后的数组元素显示出来。,程序代码:,#include void sort(int,int); void main( ) int scoreayy=78,76,88,68,82,75,93,58,6

11、6,90; int i,n; n=sizeof(scoreayy)/sizeof(int); printf(“排序前: “); for( i=0;in;i+) printf(“ %d“,scoreayyi); ,printf(“nn“); sort(scoreayy,n); printf(“排序后: “); for(i=0;in;i+) printf(“ %d“,scoreayyi); printf(“nn“); ,程序代码:,void sort(int tayy,int index) int i,j,t; for(i=index-2;i=0;i-) for(j=0;jtayyj+1) t=tayyj; tayyj=tayyj+1; tayyj+1=t; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号