C语言课件:第七章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言课件:第七章.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 第七
- 资源描述:
-
1、共 6767 页 第 1 1 页共 6767 页 第 2 2 页 本章要点本章要点 函数的定义函数的定义 函数的调用函数的调用 函数间的数据传递函数间的数据传递 变量的存储类型变量的存储类型 变量的作用范围变量的作用范围 内部函数和外部函数内部函数和外部函数共 6767 页 第 3 3 页 C C程序是函数的集合体,每程序是函数的集合体,每个函数是一个独立的程序模个函数是一个独立的程序模块块。 有一个主函数,若干个子函有一个主函数,若干个子函数,程序总是从主函数开始数,程序总是从主函数开始执行;执行; 函数可集中或分散存放在一函数可集中或分散存放在一个或多个源程序文件中。个或多个源程序文件中。
2、 所有子函数地位平等,可互所有子函数地位平等,可互相调用、自我调用。相调用、自我调用。 引入函数的优点:引入函数的优点: 减少重减少重复编写程序的工作量;使程复编写程序的工作量;使程序便于调试和阅读。序便于调试和阅读。函数函数F1 ( )main ( )F11 ( )F2 ( )F21 ( )F22 ( )共 6767 页 第 4 4 页数学函数数学函数 math.h math.h字符和字符串函数字符和字符串函数 ctype.hctype.h, string.h, string.h输入输入/ /输出输出函数函数 stdio.hstdio.h动态存储分配函数动态存储分配函数 calloc(),m
3、alloccalloc(),malloc()()形式形式无参无参函数函数有参有参函数函数空函数空函数库函数库函数用户定义函数用户定义函数: :共 6767 页 第 5 5 页7-1 输入三个整数,计算它们的和并输出运算结果。输入三个整数,计算它们的和并输出运算结果。main( ) int a, b, c, sum ; scanf(%d,%d,%d,&a,&b,&c); sum=add(a,b,c); printf( sum= %dn,sum); int add(int x, int y, int z) int s; s=x+y+z; return s;函数示例定义的定义的求和函求和函数数共 6
4、767 页 第 6 6 页定义函数应包括的内容:定义函数应包括的内容:(1)指定函数的名字,以便以后按名调用;)指定函数的名字,以便以后按名调用;(2)指定函数的类型,即函数值的类型;)指定函数的类型,即函数值的类型;(3)指定函数的参数的名字和类型(有参);)指定函数的参数的名字和类型(有参);(4)指定函数执行的操作,即函数完成的功能。)指定函数执行的操作,即函数完成的功能。在程序中用到的所有函数,必须先定义,后使用。在程序中用到的所有函数,必须先定义,后使用。共 6767 页 第 7 7 页 定义函数的一般形式定义函数的一般形式类型标识符类型标识符 函数名函数名(形式参数表形式参数表)
5、说明部分说明部分 语句语句若无参数,写若无参数,写void或空。或空。是被初始化的内部变量,是被初始化的内部变量,寿命和可见性仅限于函寿命和可见性仅限于函数内部数内部若不说明类型,一律自若不说明类型,一律自动按整型处理动按整型处理函数体(一段程序,实现函数体(一段程序,实现函数的功能)函数的功能)共 6767 页 第 8 8 页1. 无参函数的定义形式无参函数的定义形式 类型标识符类型标识符 函数名(函数名( ) 说明部分说明部分 语句语句 例例7-1 print_message( ) printf(How are you !n); 共 6767 页 第 9 9 页 例例7-2 int max
6、 (int x,int y) int z; z=xy?x : y; return z; 类型标识符类型标识符 函数名(函数名(形式参数表列形式参数表列) 说明部分说明部分 语句语句 int max ( x, y) int x,y; int z; z=xy?x : y; return z; 形参变量的说明形参变量的说明(传统形式传统形式)形参变量的说明形参变量的说明(现代形式现代形式)2. 有参函数的定义形式有参函数的定义形式共 6767 页 第 1010 页 1. 函数调用的一般形式为:函数调用的一般形式为: 函数名(实际参数列表);函数名(实际参数列表); 或或 函数名(实际参数列表)函数名
7、(实际参数列表)说明:说明: 实参必须有确定的值实参必须有确定的值,可以是常量、变量、表达式及函数调用。可以是常量、变量、表达式及函数调用。 实参与形参的类型、个数、顺序必须一致。实参与形参的类型、个数、顺序必须一致。 多个实参用逗号分隔。多个实参用逗号分隔。 2. 执行过程:执行过程:计算各个表达式计算各个表达式;把得到值赋给对应的形参把得到值赋给对应的形参;执行函数体执行函数体;遇到遇到return语句或执行完最后一条语句,返回到函数调语句或执行完最后一条语句,返回到函数调用处。用处。共 6767 页 第 1111 页(1) 函数语句函数语句: (把(把函数调用作为一个语句)函数调用作为一
8、个语句) 一般形式:一般形式:函数名(实际参数表);函数名(实际参数表); 使用情况:这种方式常用于调用一个可以忽略返回值使用情况:这种方式常用于调用一个可以忽略返回值或没有返回值的函数,只要求函数完成一定的操作。或没有返回值的函数,只要求函数完成一定的操作。 例如:例如: print_message( ); (2) 函数表达式:函数表达式:(函数调用出现在一个表达式中)(函数调用出现在一个表达式中) 一般形式:一般形式:变量名变量名= =函数表达式函数表达式 使用情况:这种表达式称为函数表达式。要求函数使用情况:这种表达式称为函数表达式。要求函数带回带回 一个确定的值参加表达式的运算。一个确
9、定的值参加表达式的运算。 例如:例如:c=3+max(a, b); d=pow(c, i);共 6767 页 第 1212 页 2. 函数的返回值语句函数的返回值语句 一般形式:一般形式: return 表达式表达式; 或或 return (表达式);(表达式); 功能:功能:退出函数,将表达式的值带回主调函数,回退出函数,将表达式的值带回主调函数,回到程序原来的位置继续执行。到程序原来的位置继续执行。 1. 定义定义:通过函数调用使主调函数得到一个确定:通过函数调用使主调函数得到一个确定 的值,称为的值,称为函数的返回值函数的返回值。共 6767 页 第 1313 页说明:说明: retur
10、nreturn语句只能把语句只能把一个返回值一个返回值传递给调用函数。传递给调用函数。 返回值的类型为定义的函数类型,若返回值的类型为定义的函数类型,若returnreturn语句中语句中表达式类型与函数类型不一致,以表达式类型与函数类型不一致,以函数类型为准函数类型为准。 返回值可以是返回值可以是有确定值有确定值的常量、变量或表达式,也的常量、变量或表达式,也可以是地址。当返值是地址时,应该用指针接受。可以是地址。当返值是地址时,应该用指针接受。 无返回值的函数,定义为无返回值的函数,定义为voidvoid类型类型( (无类型函数)。无类型函数)。 一个函数中可以有多个返回语句。一个函数中可
11、以有多个返回语句。共 6767 页 第 1414 页l 例例7-3 7-3 用函数用函数factofacto计算计算 m m 阶乘。阶乘。main( )main( ) int int m; long mm; m; long mm; long facto(int long facto(int ); ); scanf(%dscanf(%d, &m);, &m); mm=facto( m ); mm=facto( m ); printf(%dprintf(%d!=%ld.n, m, mm);!=%ld.n, m, mm); long facto (intlong facto (int x ) x )
12、 long y; long y; for( y=1; x0; -x ) for( y=1; x0; -x ) y y * *= x;= x; return (y); return (y); 函数执行过程函数执行过程 main ( ) mm = facto( m );facto ( x ) return (y );调用调用返回返回函数调用共 6767 页 第 1515 页 main( ) int a,b,c; scanf (“%d,%d”,&a,&b); c=max(a,b); printf(“Max is %d”,c); 例7-4 int max(int x, int y) int z; z=
13、xy? x:y; return(z); 形参:通知系统形参:通知系统 要预留内存位置要预留内存位置.实参:在运行时实参:在运行时把值传给函数把值传给函数.把函数的把函数的 结果赋给函数名结果赋给函数名形参与实参、函数名与返回值之间的关系形参与实参、函数名与返回值之间的关系共 6767 页 第 1616 页/*1*/*2*/*3*/*4*/*5*/*11*/*12*/*13*/*14*/*15*/*16*/main()main() int int a,b,c; a,b,c; scanf(%d,%d,&a,&b scanf(%d,%d,&a,&b);); c= c=max(max(a,ba,b);
14、); printf(”max printf(”max=%dn,c);=%dn,c); int int max(x,y)max(x,y) int int x,y; x,y; int int z; z; if (xy) z=x; if (xy) z=x; else z=y; else z=y; return(z); return(z); 断点断点保护断点和保护断点和现场,转向现场,转向1111入口入口虚实结合虚实结合a-xa-x,b-yb-y返回断点返回断点恢复现场恢复现场带回函数值带回函数值共 6767 页 第 1717 页intint max(x,y) max(x,y) int int x,y
15、; x,y; int int z; z; if (xy) if (xy) z=x; z=x; else z=y; else z=y; return(z); return(z); 返回整型返回整型函数值函数值intint maxmax(x,y)(x,y) int int x,y; x,y; int int z; z; if (xy) if (xy) z=x; z=x; else z=y; else z=y; return;return; 返回不确定返回不确定的函数值的函数值 max(x,y)max(x,y) int int x,y; x,y; int int z; z; if (xy) if (
16、xy) z=x; z=x; else z=y; else z=y; 无返回语句无返回语句在此返回在此返回缺省类型说明缺省类型说明共 6767 页 第 1818 页double power(double x, int n) double p=1; int i; if(n0) for(i=1;iy? x:y; return(z); 建议都加以声明建议都加以声明共 6767 页 第 2525 页被调用函数在主调函数被调用函数在主调函数之前之前定义定义 float add (float x, float y) float z; z=x+y; return (z); main() float a, b;
17、 scanf(“ %f, %f ”,&a, &b); printf(“ sum is %f ”, add(a, b) ); 共 6767 页 第 2626 页在所有函数在所有函数定义之前说明定义之前说明char letter( char,char);float f(float,float );int i(float,float);main( ) .char letter (char c1,char c2)float f(float x,float y)int i(float,float)在所有函数之前在所有函数之前说明函数类型说明函数类型定义函数定义函数letter、f和和i共 6767 页
18、第 2727 页7.2 数组作函数参数数组作函数参数数组元素可以作函数的实参数组元素可以作函数的实参 数组元素作为表达式的组成部分做函数的实参可数组元素作为表达式的组成部分做函数的实参可以单向传递给形参。以单向传递给形参。 例如:例如: int a10; x=power( a6,5);数组名可以作函数的实参和形参数组名可以作函数的实参和形参多维数组可以作函数参数多维数组可以作函数参数共 6767 页 第 2828 页一维数组作函数参数,形参的写法为:一维数组作函数参数,形参的写法为: 类型说明符类型说明符 形参数组名形参数组名数组长度数组长度 例如:例如:float average(float
19、 array10) main() float b10;int i; for(i=0;i10;i+) scanf(“%f”,&bi); average(b); 7.2.1 一维数组作函数参数一维数组作函数参数说明:说明:形参和实参分别定义数组形参和实参分别定义数组数组做函数参数时,实参数组做函数参数时,实参应用应用数组名数组名, 必须有确切值必须有确切值实参数组和形参数组类型实参数组和形参数组类型应一致。应一致。共 6767 页 第 2929 页说明:说明: 实参数组和形参数组大小不一定一致,实参数组和形参数组大小不一定一致,形参数组可以不形参数组可以不指定大小指定大小。(指一维数组)。(指一维
20、数组)。 数组名除作为变量的标识外数组名除作为变量的标识外,还代表该还代表该数组在内存中存数组在内存中存放区域的首地址放区域的首地址。 数组名做函数实参与形参之间是数组名做函数实参与形参之间是“地址传递地址传递”,实参数实参数组将数组的起始地址传递给形参数组。编译系统不再为组将数组的起始地址传递给形参数组。编译系统不再为形参数组分配存储单元。形参数组分配存储单元。 在函数体中对形参数组的元素操作时就是对实参数组的在函数体中对形参数组的元素操作时就是对实参数组的元素进行操作。元素进行操作。形参数组各元素的值发生变化会使实参形参数组各元素的值发生变化会使实参数组各元素的值发生同样的变化数组各元素的
21、值发生同样的变化。 数组名作函数参数可实现大量数据的传递数组名作函数参数可实现大量数据的传递,无须返回数无须返回数组值。组值。共 6767 页 第 3030 页例例7-7 阅读如下程序阅读如下程序,给出打印结果给出打印结果 void swap( int a ) int t; t=a0; a0=a1; a1=t; main( ) int b2=1,2 ; swap(b); printf(“b0=%d,b1=%dn”,b0,b1); 结果:结果:程序运行演示程序运行演示可不定义 长度b数组a数组在调用函数过程在调用函数过程中改变了原数组中改变了原数组的值,实参数组的值,实参数组与形参数组共享与形参
22、数组共享一组存储空间,一组存储空间,共 6767 页 第 3131 页例例7-8 编写函数求编写函数求n元数组的平均值。元数组的平均值。程序设计:程序设计: double average(int a ,int n) int i; double s=0; for(i=0;in;i+) s=s+ai; return s/n; 主函数调用如何编写?主函数调用如何编写? 用另外一个参数表示用另外一个参数表示数组的长度数组的长度共 6767 页 第 3232 页例例7-9:用选择法对数组中:用选择法对数组中10个整数按由小到大排序个整数按由小到大排序.程序设计思想程序设计思想:函数函数sort(arra
23、y, n) :实现数组元素由小到大排序。:实现数组元素由小到大排序。主程序主程序 :输入输入array数组,调用数组,调用 sort 函数比较,输函数比较,输 出排序后的出排序后的array数组。数组。void sort (int array , int n) int i, j, k, t; for (i=0; in-1; i+) k=i; for (j=i+1; jn; j+) if (arrayjarrayk) k=j; if (k!=i) t=arrayk; arrayk=arrayi; arrayi=t; 共 6767 页 第 3333 页main ( ) int a10, i; pr
24、intf(“enter array: n”); for (i=0; i10; i+) scanf (“ %d ”,&ai); sort(a, 10); printf(“the sorted array: n”); for (i=0; i10; i+) printf (“ %d ”, ai); printf(“n”);由于地址传递,由于地址传递,实参数组实参数组 a 改变改变数组名做参数的好处:数组名做参数的好处:由于只需复制一个地址值,而无须复制全部需要处由于只需复制一个地址值,而无须复制全部需要处 理的数据,因此节约存储空间并提高效率。理的数据,因此节约存储空间并提高效率。 由于主调函数和被
25、调函数是在相同的内存区域上对由于主调函数和被调函数是在相同的内存区域上对 数据进行操作,因此可以实现数据的同步更新。数据进行操作,因此可以实现数据的同步更新。 函数调用共 6767 页 第 3434 页二维数组作函数参数,形参的写法为:二维数组作函数参数,形参的写法为: 类型说明符类型说明符 形参名形参名 数组长度数组长度1 数组长度数组长度2说明:说明: 形参数组定义时可以指定或形参数组定义时可以指定或省略第一维的大小省略第一维的大小 例如例如 : int array 310; 或或 int array 10; int array 3 ; 和和int array ;错误错误 实参数组可以实参
展开阅读全文