C语言课件:函数讲座.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言课件:函数讲座.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 函数 讲座
- 资源描述:
-
1、函数学习指导函数学习指导学习方法建议学习方法建议1. 掌握掌握C语言的基本语法规则语言的基本语法规则2. 掌握程序设计的一般思想和方法掌握程序设计的一般思想和方法3. 多阅读程序、多动手上机编写、调试程序多阅读程序、多动手上机编写、调试程序4. 熟练程序的调试过程熟练程序的调试过程一、一、 C语言基本组成结构语言基本组成结构v基本数据类型基本数据类型v数据的输入输出数据的输入输出v选择程序设计选择程序设计v循环程序设计循环程序设计v数组数组v函数函数v指针指针v编译预处理编译预处理v结构体、共用体结构体、共用体v文件文件 本章知识点本章知识点函数的定义函数的定义函数的函数的声声明明函数参数函数
2、参数的传递的传递函数的调用函数的调用函数的返回值函数的返回值函数的递归调用函数的递归调用变量的作用域和存储方法变量的作用域和存储方法内部函数和外部函数内部函数和外部函数一、函数定义一、函数定义定义函数应包括的内容:定义函数应包括的内容:(1)指定函数的名字,以便以后按名调用;)指定函数的名字,以便以后按名调用;(2)指定函数的类型,即函数值的类型;)指定函数的类型,即函数值的类型;(3)指定函数的参数的名字和类型(有参);)指定函数的参数的名字和类型(有参);(4)指定函数执行的操作,即函数完成的功能。)指定函数执行的操作,即函数完成的功能。 定义函数的一般形式定义函数的一般形式类型标识符类型
3、标识符 函数名函数名(形式参数表形式参数表) 说明部分说明部分 语句语句若无参数,写若无参数,写void或空。或空。是被初始化的内部变量,是被初始化的内部变量,寿命和可见性仅限于函寿命和可见性仅限于函数内部数内部不说明类型,自动按整不说明类型,自动按整型处理型处理.建议都指定类型建议都指定类型函数体(一段程序,实现函数体(一段程序,实现函数的功能)函数的功能)二、函数的调用二、函数的调用(1) 函数语句函数语句: (把(把函数调用作为一个语句)函数调用作为一个语句) 一般形式:一般形式:函数名(实际参数表);函数名(实际参数表);(2) 函数表达式函数表达式:(函数调用出现在一个表达式中,必须
4、(函数调用出现在一个表达式中,必须带回一个值)带回一个值) 一般形式:一般形式:变量名变量名=函数表达式函数表达式 函数调用函数调用执行过程:执行过程: 计算各个表达式(计算各个表达式(TC2.0,VC+6.0实参求值顺序实参求值顺序自右至左自右至左); 把得到值赋给对应的形参把得到值赋给对应的形参; 执行函数体执行函数体; 遇到遇到return或执行完最后一条语句或执行完最后一条语句,返回到函数调用处返回到函数调用处.三、函数的返回值三、函数的返回值 1. 函数的返回值语句函数的返回值语句 一般形式:一般形式:return 表达式表达式; 或或 return (表达式);(表达式); 功能:
5、功能:退出函数,将表达式的值带回主调函数,回退出函数,将表达式的值带回主调函数,回到程序原来的位置继续执行。到程序原来的位置继续执行。 returnreturn语句只能把语句只能把一个返回值一个返回值传递给调用函数。传递给调用函数。 若若returnreturn语句中表达式类型与函数类型不一致,以语句中表达式类型与函数类型不一致,以函数类型函数类型为准为准。 返回值可以是返回值可以是有确定值有确定值的常量、变量或表达式,也可以是地的常量、变量或表达式,也可以是地址。当返值是地址时,应该用指针接受。址。当返值是地址时,应该用指针接受。 无返回值的函数,应定义为无返回值的函数,应定义为voidvo
6、id类型类型( (无类型函数)。无类型函数)。 (VC+6.0必须指定函数类型)。必须指定函数类型)。 一个函数中可以有多个返回语句。一个函数中可以有多个返回语句。1. 值传递值传递: 在函数调用时,实参将其在函数调用时,实参将其值值传递给形参。传递给形参。 实参对形参的数据传递是实参对形参的数据传递是“单向传递值传递单向传递值传递”,只由,只由实参实参传递给传递给形参形参,而不能由形参传回来给实参。,而不能由形参传回来给实参。 实参与形参占用不同的单元。在调用函数时,给形参实参与形参占用不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束分配存储单元,并将实参对
7、应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。在执后,形参单元被释放,实参单元仍保留并维持原值。在执行被调用函数时,形参的值如果发生变化,并不会改变主行被调用函数时,形参的值如果发生变化,并不会改变主调函数中实参的值。调函数中实参的值。如:简单变量、常量、表达式、下标变量、函数调用等。如:简单变量、常量、表达式、下标变量、函数调用等。四、函数参数的传递四、函数参数的传递2.2.地址传递地址传递:函数调用时,函数调用时,将实参的将实参的地址地址传递给形参传递给形参。 实参和形参指向同一内存空间,对形参的修改,直接实参和形参指向同一内存空间,对形参的修改,直接影响实参。影
8、响实参。 如:数组名、变量的地址作参数如:数组名、变量的地址作参数。例例: 有函数调用语句:有函数调用语句: int i=3; printf(”%d,%d”,i,+i);输出结果为:输出结果为:4,4 若改为:若改为: int i=3, j; j=i; printf(”%d,%d”,i,+j);输出结果为:输出结果为:3,4 main () int x=1,y=2,z=1; printf(%d %dn,(+x,y+,z+),x+y+z+); 2 4 例例1 1 编写函数交换两个变量的值。编写函数交换两个变量的值。 #include “stdio.h” void swap ( int x, in
9、t y) int temp; temp=x; x=y; y=temp; printf ( x=%d, y=%dn, x, y);main ( ) int a, b; a=5; b=10; printf ( a=%d, b=%dn, a, b); swap(a, b); printf ( a=%d, b=%dn, a, b);运行结果:运行结果:a=5 ,b=10 x=10 ,y=5a=5 ,b=10例例2:编写函数求三个数中的最大值。:编写函数求三个数中的最大值。#include “stdio.h”int max(int x,int y,int z) int t; if(x=y) t=x; e
10、lse t=y; if(tz) t=z; return t;main() int x,y,z; scanf(“%d%d%d”.&x,&y,&z); printf(“max=%d”,max(x,y,z);实参单项值传递,带回一个返回值。例例3:删除字符串中指定字符,在主函数中调用并输出删除子:删除字符串中指定字符,在主函数中调用并输出删除子串后的字符串。串后的字符串。void del( char s , int i, int n)int j, k, length=0; while(slength!= 0) A ; j=-i; k=i+n; while(klength) sj+=sk+; sj=
11、0;main( ) char str=management; del( B ); printf(The new string is: %sn, str);答案答案 A: length+ B: str,3,4实参与形参是地址传递,实参与形参是地址传递,对形参的操作就是对实对形参的操作就是对实参的操作。参的操作。无需返回值输出:mament 例例4: 编写函数,编写函数,找出任意一个二维数组中的鞍点。鞍点即是该位找出任意一个二维数组中的鞍点。鞍点即是该位置上的元素在所在行中最大而在所在列中最小。要求输出鞍点的置上的元素在所在行中最大而在所在列中最小。要求输出鞍点的位位置置,无鞍点时给出有关信息。,
12、无鞍点时给出有关信息。 #include stdio.h#define M 4#define N 4voit andian(int aMN)int i,j,k,max,jj,flag=0; for(i=0;iM;i+) max=ai0; for(j=0;jmax) max=aij; jj=j; for(k=0;kM;k+) if(akjj=M) printf(%d %d %dn,i,jj,aijj); flag=1; if(flag=0) printf(无鞍点无鞍点!n); main() int i,j,aMN; for(i=0;iM;i+) for(j=0;jN;j+) scanf(“%d”
13、,&aij); andian(a);运行情况:运行情况:输入:输入:1 9 7 6 4 6 0 5 8 7 8 2 3 8 9 8输出:输出:1 1 6例例5 5:以下函数的功能是利用顺序查找法从给定的数组中检索关键字:以下函数的功能是利用顺序查找法从给定的数组中检索关键字m m,若,若找到此元素或查找到数组尾时结束,若找到,返回此元素的下标;若未找找到此元素或查找到数组尾时结束,若找到,返回此元素的下标;若未找到,返回值到,返回值-1-1。#include int search(int a10,int n) int i; for(i=0;i10;i+) if( A ) return (i)
14、; return (-1);main() int i,a10=2,1,0,3,4,6,7,9,5,8,m,no; scanf(“%d”,&m); no=search(a, m); if( B ) printf(“nOK,Found! %d”,no+1); else printf(“nSorry,Not Found! ”); A: ai=n B: no!=-1例例6:使用函数编写一个竞赛评分程序。(设有:使用函数编写一个竞赛评分程序。(设有6位选手,位选手,5位评位评委)。可以使用随机数函数获取数据,随机函数包含在委)。可以使用随机数函数获取数据,随机函数包含在stdlib.h中,函数原型:中,
15、函数原型:int rand(void)。 注注意:为了使每次生成的随机数都不同,在使用意:为了使每次生成的随机数都不同,在使用rand()函数之函数之前要使用包含在前要使用包含在time.h中的中的srand(time(NULL)函数重新部署一函数重新部署一次种子。如:次种子。如: #include #include #include main() int a30,i; srand(time(NULL); for(i=0;i30;i+) ai=rand()%90+10; 程序示例程序示例/*评分程序*/#include stdio.h#include #include #define M 6#
16、define N 5void mark(float aMN,float dM)int i,j,k,b=0,c=0;float sum,max,min; for(k=0,i=0;iM;i+,k+) min=max=ai0; sum=ai0; b=c=0;for(j=1;jmax) max=aij; b=j; if(aijmin) min=aij; c=j; sum=sum+aij; dk=(sum-aib-aic)/3; for(k=0;kM;k+) printf(第%d名的成绩是:%.2fn,k+1,dk);main()float aMN,dM;int i,j;srand(time(NULL)
17、; /* 重新部署一次种子重新部署一次种子 */ printf(请按顺序输入N位评委对每位选手的评分并按回车:n);for(i=0;iM;i+) /* 随机产生选手成绩随机产生选手成绩*/ for(j=0;jN;j+) aij=rand()%90+10; for(i=0;iM;i+) /* 输出随机产生的选手成绩输出随机产生的选手成绩*/ for(j=0;j=0;i-) printf(%d ,ai); main()int n=5;scanf(%d,&n); transfer(n);五、递归程序设计递归的概念:递归的概念: 在调用一个函数的过程中在调用一个函数的过程中直接或间接地直接或间接地 调
展开阅读全文