c语言程序设计能力教程教学课件作者李小遐第7章

上传人:E**** 文档编号:102542482 上传时间:2019-10-03 格式:PPT 页数:31 大小:249KB
返回 下载 相关 举报
c语言程序设计能力教程教学课件作者李小遐第7章_第1页
第1页 / 共31页
c语言程序设计能力教程教学课件作者李小遐第7章_第2页
第2页 / 共31页
c语言程序设计能力教程教学课件作者李小遐第7章_第3页
第3页 / 共31页
c语言程序设计能力教程教学课件作者李小遐第7章_第4页
第4页 / 共31页
c语言程序设计能力教程教学课件作者李小遐第7章_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《c语言程序设计能力教程教学课件作者李小遐第7章》由会员分享,可在线阅读,更多相关《c语言程序设计能力教程教学课件作者李小遐第7章(31页珍藏版)》请在金锄头文库上搜索。

1、第7章 函数及其应用,7.1 函数的定义 7.2 函数的调用 7.3 数据传递方法 7.4 嵌套调用和递归调用,C源程序的组成包括,一个main函数,若干个子函数,标准函数(库函数),用户自定义函数,主函数,子函数1,子函数2,子函数3,子函数4,函数间结构示意图,例 7-1-1 根据三边计算三角形的面积。,main( ) float x, y, z,s,area; printf( “请输入三边:”); scanf(“%f,%f,%f”, ,例 7-1-2 用调用函数的方式求三角形的面积。,#include float fun(a, b, c) float a, b, c; float s;

2、s=0.5*(a+b+c); sarea=sqrt(s*(s-a)*(s-b)*(s-c); return(area); main( ) /*主函数*/ float x, y, z; printf( “请输入三边:”); scanf(“%f,%f,%f”,函数头,函数体,if (x+yz) ,7.1 函数的定义,函数定义的一般形式: 函数值类型 函数名(形式参数表列) ,函数首部,函数体,1. 函数首部 函数头有经典与现代两种形式, 现代形式称之为函数原型。 经典形式: 如: float f1(a,b,c) float a, b, c; 现代形式: 如: float f1(float a, f

3、loat b, float c) 注意,以上函数头不可以写成: float f1(float a, b, c),2. 函数体 函数体由变量定义与执行语句两部分组成。 例1:float sf(float a, float b, float c) float hl , area ; hl=0.5*(a+b+c); area=(sqrt(hl*(hl-a)*(hl-b)*(hl-c); return (area); ,函数体,3. 返回语句,通过在函数中使用返回语句, 返回一个值给函数, 同时终止函数的调用, 返回主函数。 格式: return(表达式); 或 return 表达式; 功能: (1)

4、 计算表达式的值, 将表达式的值返回给函数。 (2) 从被调用的函数返回主调函数。,函数的定义过程,(1) 确定函数值的类型。 (2) 给函数取一个名字。 (3) 设计函数的参数。 (4) 对函数中使用的变量进行定义。 (5) 对函数的执行部分进行描述。,小结,函数首部,函数体,求两个数的最大值函数,/*求两个数的最大值函数*/ float max(x, y) (1) 函数值类型float float x, y; (2) 函数名max (3) 函数参数x、 y, 类型为float float m; (4)定义变量 if (xy) m=x; else m=y; return(m); /*返回最大

5、值*/ ,(5)执行部分,/*素数判断函数*/ int pn(int n) int i; int flag ; /*素数标志*/ flag=1; for(i=2; i=n-1; i+) if (n%i=0)flag=0; break; return(flag); ,素数判断函数,long fn( int n) int i; long t; t=1; for(i=1; i=n; i+) t = t*i; return(t); ,阶乘函数,7.2 函数的调用,函数调用的一般形式:,函数名(实参表);,说明: (1) 调用时, 实参与形参的个数应相同, 类型应一致。 (2) 实参与形参按顺序对应,

6、一一传递数据。 调用后, 形参得到实参的值。 (3) 实参可以是表达式。 如是表达式实参, 先计算表达式的值, 再将值传递给形参。,例 调用素数判断函数, 求 21000之间的所有素数。,/*素数判断函数*/ int pf(int n) int i; int flag; f lag=1; for(i=2; i=n-1; i+) if (n%i=0)flag=0; break; return(flag); ,main( ) /*主函数*/ int n ; int count=0; /*统计素数个数, 用以控制输出格式*/ printf(21000之间的素数如下: n); for(n=2; n=1

7、000; n+) if (pf(n)=1) printf(%6d, n); count+; if(count %10=0) printf(n); /*每行输出5个素数*/ ,被调函数说明(申明):,用户自定义函数一般需在调用前在主调函数中进行说明。 函数说明是一种申明, 是告诉主调函数这里调用的是一个什么样的函数。 函数说明的一般形式为: 被调函数类型 被调函数名( 形参列表); 注意, 不是函数定义, 其后有分号。,求2n之间的所有素数, n 值由键盘输入。,main( ) int n, i, count=0; int pf( int ); /*函数说明*/ printf(请输入n: );

8、scanf(%d, ,有下面一些情况, 在调用函数前可不加说明: (1) 如果是整型函数或字符型函数, 可以不加说明, 系统自动按整型函数处理。 (2) 如果被调用函数的定义出现在主调函数之前, 可以不加说明。 (3) 如果已在所有函数定义之前, 或在文件的开头, 或在函数的外部已作说明, 可以不加说明。 除了上述情况, 其它情况均必须对被调用的函数在调用前进行说明。,另请注意: (1) 函数一般先定义, 后使用。 (2) 为清晰起见, 一般均对被调用的函数在调用前进行说明, 以增加程序的可读性。 (3) 函数不能重复定义, 但可以反复说明。 (4) 对于标准函数, 还应在文件开头用文件包含指

9、令include指明调用有关库函数时所需用到的信息。 例如: include stdio.h, stdio.h是一个头文件, 它包含了输入输出库函数所用到的一些宏定义信息,函数之间数据的传递,C语言程序由若干相对独立的函数组成, 在程序运行期间, 必然存在数据在函数中流动(流入或流出), 这就是函数之间的数据传递, 也是函数之间的接口。 参数传递方法: 实 参 形参,单向值传递,例如, 求三个数的最大值: 主调函数: m=max(a, b, c); a b c m 被调函数: float max(x, y, z) x y z t float x, y, z; float t; t=x; if(

10、yt) t=y; if(zt) t=z; return(t); ,分析下列程序,写出运行结果。,void swap (int x,int y) /*函数swap */ int t ; t=x ; x=y ; y=t ; main() int a,b ; printf(“nplease enter data (a,b) : ”); scanf(“%d,%d”, ,运行时键盘输入:3,6,运行结果:3,6,7.3 嵌套调用和递归调用,一、嵌套调用,函数的嵌套调用是逐级调用,逐层返回。 main() f1() f2() 调用f1() 调用f2() ,练习:P186 例7-8,二、递归调用,包含有递归

11、调用的函数称为递归函数。 递归算法具有两个基本特征: (1) 转化。 (2) 终止。,年龄问题: 有5个人坐在一起, 问第5个人多少岁, 他说比第 4 个人大2岁。问第4个人多少岁, 他说比第3个人大2岁。问第3个人多少岁, 又说比第2个人大2岁。问第2个人多少岁, 说比第1个人大2岁。最后问第1个人多少岁, 他说是10岁。请问第5个人多少岁?, 转化: n1, age(n)=age(n-1)+2 终止: n=1, age(1)=10,age(n) /*求年龄的递归函数*/ int n; int a; /*用作存放函数的返回值*/ if(n= =1) a=10; else a=age(n-1)

12、+2; return(a); main( ) printf(第5个人的年龄=%dn, age(5); ,运行结果: 第5个人的年龄=18,测 验,1. 写出程序的输出结果。 #include “stdio.h“ int min(int x, int y) return ( x y ? x : y); main( ) int a5=55,44,33,22,11,i,m ; m=a0; for (i=1; i5; i+) m=min(m,ai); printf(“%dn“, m); ,2. 写出程序的输出结果。 main() int f; f=fun(2,10); printf(“%dn”, f ); int fun(int x,int y ) int i , t=1; for(i=1;i=y;i+) t=t*x; return (t); ,上机实训,实训1 实训2 实训3 实训4,

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

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

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