(第四版)C语言程序设计7-10章课件

上传人:我*** 文档编号:141175399 上传时间:2020-08-05 格式:PPT 页数:286 大小:2.94MB
返回 下载 相关 举报
(第四版)C语言程序设计7-10章课件_第1页
第1页 / 共286页
(第四版)C语言程序设计7-10章课件_第2页
第2页 / 共286页
(第四版)C语言程序设计7-10章课件_第3页
第3页 / 共286页
(第四版)C语言程序设计7-10章课件_第4页
第4页 / 共286页
(第四版)C语言程序设计7-10章课件_第5页
第5页 / 共286页
点击查看更多>>
资源描述

《(第四版)C语言程序设计7-10章课件》由会员分享,可在线阅读,更多相关《(第四版)C语言程序设计7-10章课件(286页珍藏版)》请在金锄头文库上搜索。

1、2020/8/5,程序设计,C/C+,教师姓名:赵 敏,信息学院计算中心,2020/8/5,目录,第一章 C语言概述 第二章 数据类型及基本运算 第三章 顺序结构程序设计 第四章 选择结构程序设计 第五章 循环结构程序设计,第六章 数组 第七章 函数 第八章 指针 第九章 结构与其它自定义类型 第十章 文件,2020/8/5,第 七 章 函数,2020/8/5,7.1 函数的概念 7.1.1 函数实例及分析 一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能,用子程序实现模块的功能。 在语言中,子程序的作用是由函数完成的。通过函数的调用与连接来实现程序的化繁为简、化整为零

2、的模块化程序设计。 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。 先举一个简单的函数调用的例子。,2020/8/5,不带参数的函数调用,2020/8/5,【例】给出如下两个函数: printstar() printf(* * * * * * * * * * * * * * * * * n);,print-message() printf(How do you do!n);,main() printstar();* 调用printstar函数 * print-message();* 调用print message */ p

3、rintstar(); * 调用printstar函数 * ,返回,2020/8/5,运行情况如下: * * * * * * * * * * * * * * * * * How do you do! * * * * * * * * * * * * * * * * *,2020/8/5,总结: 1、库函数和自定义函数; 2、在C语言中,一个程序可由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数之间可以互相调用。同一个函数可以被一个或多个函数调用任意多次。下图是一个程序中函数调用的示意图。,2020/8/5,2020/8/5,7.2 函数的定义 7.2.1 函数定义形式 第一种: 函数

4、类型 函数名 (形式参数说明表) 函数体 ,实现函数功能的语句序列,代表函数所返 回的值的类型,用户标识符,代表函数的自变量, 多个时用逗号分隔,2020/8/5,【例】定义一个函数,求点(x,y)到原点的距离。,double distance(double x, double y),第一行函数头的句末不能加分号; 大多数函数都有值返回,如果无值返回则使用void; 返回的函数值类型与所定义的函数类型相一致,若不一致,则以函数的类型为准。, double z; z=sqrt(x*x+y*y); return z; ,2020/8/5,第二种: 函数类型 函数名 (形式参数表) 形式参数说明 函

5、数体 ,实现函数功能的语句序列,代表函数所返 回的值的类型,用户标识符,代表函数的自变量, 多个时用逗号分隔,2020/8/5,【例】定义一个函数,求点(x,y)到原点的距离。 double distance(x, y) double x,y; double z; z=sqrt(x*x+y*y); return z; ,形式参数说明,形式参数表,2020/8/5,【例】请等价变换函数的定义形式。 int max(a,b,c) int a,b,c; a=ab?a:b; printf(“max=%dn”,ac?a:c); ,int max(int a, int b, int c) a=ab?a:b

6、; printf (“max=%dn”, ac?a:c); ,2020/8/5,7.2.2 说明事项 大多数函数都有值返回,函数体中必须使用return语句将函数值返回出去;return语句的三种形式为: return(表达式) return 表达式 return,2020/8/5,7.3 函数的调用 7.3.1 函数调用形式 函数名 (实在参数列表),1、多个参数用逗号分开; 2、被调用的是无参函数,圆括号不能省;,【例】 调用无参函数。 print-message() printf(How do you do!n);,main() print-message();*调用无参函数print_

7、message( )*/ ,返回,2020/8/5,【例】调用有参函数。 int sum(float a,float b) return a+b; ,main( ) float x=3.5,y=5.2; printf(“%dn”,sum(x,y); ,2020/8/5,【例】编写程序,实现下列算式的计算。 X12+42+72+402 Y23+43+63+403,float f(int a,int m,int step) int i; long sum=0; return sum; ,#include ,由所给算式看出它们的通式为: f=( im ) (i=a, a+step, a+2*step

8、, , 40),for(i=a;i=40;i=i+step) sum=sum+pow(i,m);,2020/8/5,main( ) long x,y; x=f(1,2,3); y=f(2,3,2); printf(“x=%ld t y=%ldn”,x,y); ,【思考题】下列函数调用语句正确吗? xf(1 , 2),错误,错误,错误,xf (2 , 3 , 1),xf (1 , 2.0 , 3),float f(int a,int m,int step) int i; long sum=0; for(i=a;i=40;i=i+step) sum=sum+pow(i,m); return sum

9、; ,2020/8/5,7.3.2 函数调用方式 1)函数的调用出现在表达式中,2)以独立的函数语句调用 这种调用方式,函数一般无值返回或者函数有值返回,但不是通过return语句返回,而是直接利用指针参数带出函数体。,若函数有值返回就用表达式来调用:xf(1,2,3),返回,2020/8/5,7.3.3 参数传递 调用函数和被调用函数之间发生的数据传递有两种:传值和传地址。,形式参数,实际参数,1)“传值”调用,【例】 int sum(float a,float b) return a+b; main( ) float x=3.5,y=5.2; printf(“%dn”,sum(x,y);

10、,2020/8/5,“传值”的过程总结:,调用发生后,原先并不占据实际存储空间的形参获得了编译系统为其临时分配的内存单元,实参就将自身的值复制到形参所在的内存单元中,调用一结束,形参所占据的内存单元立即被系统收回,其值亦不复存在,因此在函数体中,即使形参的值被改变,它也无法影响原先传值给它的实参。,2020/8/5,“传值”调用的缺点: 数据的传递是单向性的,是实参向形参传递,而形参无法将自身值反传给实参。 来看下面这个例子:,【例】对由键盘输入的n个数中的正整数求和并统计个数。编写f(int n,int count),调用f函数完成功能。,2020/8/5,0,5,k5,y=0,3,2020

11、/8/5,2)“传地址”调用 当形参为地址变量(例如数组名或指针名)时,调用开始后,实参与形参的结合是一个传地址的过程,实参传递给形参的是自身的存储地址或指向已经确定的某内存地址。,“传地址”调用的过程: 调用时,若实参将自身的存储地址传给形参,就使形参直接指向了实参,此时形参和实参同时指向一个内内存单元,函数体中对形参所作的一切改变就是对实参所作。,2020/8/5,“传地址”调用的优点: 能实现形参与实参之间双向传值。 【例】修改上面这个例子,使函数f的功能改变为对一维整型数组array的n个元素中的正整数求和并统计个数。,2020/8/5,f( int array , int n, in

12、t result2 ) int i,sum=0,count=0; for(i=0;i0) sum=sum+arrayi; count+; result0=sum; result1=count; ,数组元素result0存储正整数和,数组元素result1存储正整数个数,2020/8/5,#include main( ) int x10, r2, j; printf(“Input x and y:n”); for(j=0;j10;j+) scanf(“%d”,实参数组x将自身数组的存储首地址传给了形参数组array,实参数组r将自身数组的存储首地址传给了形参数组result,使形参数组与对应的实

13、参数组共占同一段内存单元,调用发生,f( int array , int n, int result2 ) int i,sum=0,count=0; for(i=0;i0) sum=sum+arrayi; count+; result0=sum ;result1=count; ,2020/8/5,printf(“The sum of x is:%dnThere are positive number:%dn”,r0,r1); ,2020/8/5,形参数组与实参数组内存占用情况示意图,调用情况:,x0,x8,x9,x1,r0,r1,array0,array1,array8,array9,resu

14、lt0,result1,返回,2020/8/5,形式:函数类型 函数名(参数类型声明) 或 函数类型 函数名( ),7.3.4 函数声明 1、自定义函数声明,【注意】函数同变量一样需要先声明再引用。如果函数定义出现在主函数之后,那么要在主函数中对函数进行函数声明。,【例】通过函数调用求2个数中的大数。,2020/8/5,main( ) int a,b,result; scanf(“%d%d”, ,int big(int x,int y) return xy?x:y; ,int big(int,int);,/*函数遵循先声明后引用的规则*/,2020/8/5,被调函数与主函数在同一个文件中;,【

15、例】,总结:函数声明的另外两种情况:,2020/8/5,被调函数与主函数在不在同一个文件中; 【例】改写上一个例子,在不同的环境下调用被调函数。,2020/8/5,2、库函数声明 形式: #include 或 #include “头文件名”,2020/8/5,7.4 函数的嵌套与递归 语言的函数定义都是互相平行、独立的,即在一个函数定义的内部不允许再出现另一个函数的定义;如下所示:,2020/8/5,但C允许函数在自身的定义中去调用另一个函数,称之为函数的“嵌套”调用,如下图所示:,2020/8/5,C还允许函数在自身的定义中去调用自身,称之为函数的“递归”调用,如下图所示:,7.4.1 嵌套函数,2020/8/5,1、嵌套函数应用举例 【例】已知坐标平面上有2个点(x1,y1),(x2,y2),求离原点最远的那个点。 /*函数的功能:求坐标点(x,y)到原点的距离*/ #include float distance(x,y) float x,y; return sqrt(x*x+y*y); ,2020/8/5, if(

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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