版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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);五、递归程序设计递归的概念:递归的概念: 在调用一个函数的过程中在调用一个函数的过程中直接或间接地直接或间接地 调
18、用该函数本身。调用该函数本身。递归函数的执行过程:递归函数的执行过程: -递归调用:记住本次现场,递归调用。递归调用:记住本次现场,递归调用。 -终了调用:返回上次调用现场。终了调用:返回上次调用现场。特点:特点: -是无终止的递归调用,程序中是无终止的递归调用,程序中应该给定一应该给定一 个限个限制递归次数的条件。制递归次数的条件。 -结构简练。结构简练。例例8:利用递归方法,编写函数计算:利用递归方法,编写函数计算x的的n次方。次方。#include “stdio.h”double f(double x,int n)double s; if(n0) s=x*f(x,n-1);else if
19、(n=0) s=1;return s;main()int n;double x,m;printf(Input X:n);scanf(%lf,&x);printf(Input N:n);scanf(%d,&n);m=f(x,n); printf(Answer=%lfn,m);例例9:以下程序的功能是利用递归方法,计算第:以下程序的功能是利用递归方法,计算第5位学生的年位学生的年龄。龄。#include stdio.hint age(int n)if(n=1) c=10; else c=age(n-1)+2;return c;main()int n=5;printf(“age:%dn”,age(5
20、); 递推公式如下: 10 ( n=1) age(n-1)+2 (n1)age(n)=六、变量的作用域与存储方法1.1.局部变量(内部变量)局部变量(内部变量) 定义:在函数内部定义:在函数内部(包括主函数)或复合语句中(包括主函数)或复合语句中定义定义的变量,的变量,作用域作用域只能在本函数只能在本函数或定义它的复合语句或定义它的复合语句内使用。内使用。 如:形参,普通变量。如:形参,普通变量。 2. 2. 全局变量全局变量定义:定义:在函数之外定义的变量。在函数之外定义的变量。使用范围:使用范围:可以为本文件中所有的函数可以为本文件中所有的函数使使用。用。作用域:作用域:从定义变量的位置开
21、始到本文件结束从定义变量的位置开始到本文件结束。在同一个文件中,当全局变量与局部变量同名时,在在同一个文件中,当全局变量与局部变量同名时,在局部变量的作用域内,全局变量不起作用。局部变量的作用域内,全局变量不起作用。3.3.变量的存储方法变量的存储方法 自动变量、自动变量、 静态局部变量、全局变量、寄存器变量静态局部变量、全局变量、寄存器变量例例10:阅读以下程序,写出程序的运行结果。:阅读以下程序,写出程序的运行结果。main() int i=3, j=2, k; k=i+j; int k=8; if(i=4) printf(%d, , k); else printf(%d, , j); p
22、rintf(%d, %d,i,k); 运行结果:2,3,5例例11:阅读下列程序,给出程序运行结果。:阅读下列程序,给出程序运行结果。#include stdio.h“int fun(int x, int y) static int m=0, i=2; i+=m+1; m=i+x+y; return m; main() int a=2,b=3; printf(%d, , fun(a,b); printf(%dn, fun(b,a); 运行结果8,17例例12:输入:输入6名学生名学生5门课程的成绩,分别用函数求出:门课程的成绩,分别用函数求出: 每门课程的平均分;找出最高分数所对应的学生和课程
23、。每门课程的平均分;找出最高分数所对应的学生和课程。/* 求学生的成绩 d7-5-6*/#include stdio.h#include #include int n,k;int pmax(int b65) int i,j,m; m=b00; for(i=0;i6;i+) for(j=0;jm) m=bij;n=i;k=j; return m ;void sum(int b65,float w5) int i,j,s; for(i=0;i5;i+) s=0; for(j=0;j6;j+) s+=bji; wi=s/6.0; main()int a65,i,j,max; float p6; sr
24、and(time(NULL); for(i=0;i6;i+) for(j=0;j5;j+) aij=rand()%90+10; for(i=0;i6;i+) for(j=0;j5;j+) printf(%3d ,aij); printf(n); sum(a,p); for(i=0;i5;i+) printf(%5.2f ,pi); printf(n); max=pmax(a); printf(“max=%3d,coure=%3d,student=%3dn,max,n+1,k+1); 例例13: 编写函数,利用全局变量求一维数组中正数的平均值编写函数,利用全局变量求一维数组中正数的平均值和负数的
25、平均值传递给调用函数输出。和负数的平均值传递给调用函数输出。#include “stdio.h”float zaver=0,faver=0; /*定义全局变量定义全局变量*/void saver(int array ,int n) int i,z=0,f=0; for(i=0 ; i=0) zaver+=arrayi;z+; else faver+= arrayi;f+; if(z!=0) zaver=zaver/z; /*计算正数的平均值计算正数的平均值*/ if(f!=0) faver=faver/f; /*计算负数的平均值计算负数的平均值*/main() int a10=1,-3,4,6
26、,-2,7,9,-8,-5,0; saver(a,10); printf(“正数平均值正数平均值=%f,负数平均值负数平均值=%fn”,zaver,faver); 七、七、内部函数和外部函数内部函数和外部函数1 . 1 . 内部函数内部函数( (静态函数)静态函数)定义定义:只能被本文件中其它函数调用的函数。只能被本文件中其它函数调用的函数。格式格式:static static 类型标识符类型标识符 函数名(形参表)函数体函数名(形参表)函数体 例如:例如:static intstatic int fun(a, b) fun(a, b) 作用作用:函数的作用域限于所在文件,不同文件中同名函函数
27、的作用域限于所在文件,不同文件中同名函数互不干扰,便于程序的格式化。数互不干扰,便于程序的格式化。2. 外部函数外部函数定义定义:允许被其它文件调用的函数。:允许被其它文件调用的函数。格式格式: extern 类型标识符类型标识符 函数名(形参表)函数体函数名(形参表)函数体例如:例如: extern int fun(int a, int b) 2. 外部函数外部函数定义定义:如果一个函数允许被其它文件调用,称:如果一个函数允许被其它文件调用,称为外部函数。为外部函数。定义格式定义格式: extern 类型标识符类型标识符 函数名(形参表)函函数名(形参表)函数体数体 如:如:extern i
28、nt fun(int a, int b) 或或 int fun(int a, int b) 通常不加通常不加 static 标识符的函数都是外部函数。标识符的函数都是外部函数。 例例14: 下面程序由两个文件组成,请分析运行结果。下面程序由两个文件组成,请分析运行结果。/* 文件一文件一 prog1.c*/#include stdio.h#include prog2.cint x=10,y=10; extern void sub() ; void add() int y=5; y=10+x; x*=2; printf(add:y=%d; ,y); main() x+=5; add(); sub
29、();printf(main:x=%d; main:y=%dn,x,y); /* 文件二文件二 prog2.c*/#include “stdio.h”extern int x;void sub() int y=5; x-=y; printf(“sub:y=%d;”,y); 运行结果:/* 例例15该程序功能包括该程序功能包括3个计算圆形体体积的函数个计算圆形体体积的函数*/#include stdio.hdouble vol_ball() /* 计算球体体积*/double r;printf(请输入球的半径:); scanf(%lf,&r); return (4.0/3.0*3.1415926
30、*r*r*r);double vol_cylind() /* 计算圆柱体积*/double r,h;printf(请输入圆柱的底圆半径和高:); scanf(%lf%lf,&r,&h); return (3.1415926*r*r*h);double vol_cone() /* 计算圆锥体积*/double r,h;printf(请输入圆锥的底圆半径和高:); scanf(%lf%lf,&r,&h); return (3.1415926*r*r*h/3.0);main() int choice; do printf( =功能选项=n); printf( 1-计算球体体积 n); printf(
31、 2-计算圆柱体积 n); printf( 3-计算圆锥体积 n); printf( 0-退 出 n); printf(请选择: ); scanf(%d,&choice); switch(choice) case 1: printf(球体积为:%.2fn,vol_ball(); break; case 2: printf(圆柱体积为:%.2fn,vol_cylind(); break; case 3: printf(圆锥体积为:%.2fn,vol_cone(); break; case 0: break; while(choice!=0); printf(谢谢使用! n);按下列要求编写程序:按下列要求编写程序:(1 1)生成)生成1010个个2 2位随机正整数并存在位随机正整数并存在a a数组中;数组中;(2 2)编写函数实现按从小到大顺序排序,并调用它;)编写函数实现按从小到大顺序排序,并调用它;(3 3)任意输入一个数,并插入到数组中,使之仍然有序;)任意输入一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 皮革制品招投标现状解析
- 护理硕士毕业论文答辩
- 建筑维修审查合同
- 高中生物遗传病概率计算
- 植物园绿化项目聘用合同
- 运动俱乐部泳池租赁协议
- 电子科技清罐施工合同
- 石油公司电气安全检查流程
- 地铁站装修改造协议
- 矿井排水泵机租赁协议
- 新闻热点评报课件
- 安全风险评价风险矩阵法L-S、LEC法
- 第九版外科学课件泌尿系统损伤
- 2019年度第四次经济普查项目绩效自评表
- 污水处理池 (有限空间)作业安全告知牌及警示标志
- 三年级下册信息技术课件-3.争当打字小能手|人教版 (共12张PPT)
- 一年级上册音乐教案- 第十一课 郊游|湘艺版
- 某物业供水系统水泵PLC控制设计
- 中央电视台公益广告30年大盘点
- 软件系统售后服务范围及内容
- 化工设备使用与维护8第八章储存设备的使用与维护课件
评论
0/150
提交评论