书签 分享 收藏 举报 版权申诉 / 37
上传文档赚钱

类型C语言课件:函数讲座.ppt

  • 上传人(卖家):罗嗣辉
  • 文档编号:2088407
  • 上传时间:2022-02-14
  • 格式:PPT
  • 页数:37
  • 大小:334KB
  • 【下载声明】
    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);五、递归程序设计递归的概念:递归的概念: 在调用一个函数的过程中在调用一个函数的过程中直接或间接地直接或间接地 调

    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);按下列要求编写程序:

    32、按下列要求编写程序:(1 1)生成)生成1010个个2 2位随机正整数并存在位随机正整数并存在a a数组中;数组中;(2 2)编写函数实现按从小到大顺序排序,并调用它;)编写函数实现按从小到大顺序排序,并调用它;(3 3)任意输入一个数,并插入到数组中,使之仍然有序;)任意输入一个数,并插入到数组中,使之仍然有序;(4 4)任意输入一个)任意输入一个0 0到到9 9之间的整数之间的整数k k,删除,删除akak 。分析:在长度为分析:在长度为n+1n+1的有序数组中插入一个数的有序数组中插入一个数, ,首先要确定插首先要确定插入位置。从第一个数开始比较,若入位置。从第一个数开始比较,若 aja

    33、jkk, ,则则k k就应插在就应插在ajaj 前面。先移动(从最后一个数开始移动),后插入。前面。先移动(从最后一个数开始移动),后插入。 例例16 :函数编程举例:函数编程举例10203040K=24a0 a1 a2 a3 a4 a0 a1 a2 a3 a4 1020 304024 main() int i,j,k,t,n,aN; n=N; for(i=0;iN;i+) ai=rand()%90+10; printf(“%4d”,ai); printf(“n”); sort(a,n);#include “stdlib.h”#define N 10void sort (int array ,

    34、 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; for(i=0;iN;i+) /* 打印排序后的数组打印排序后的数组 */ printf(“%4d”,ai);printf(“n please input a insert number:n”);scanf(“%d”,&k);for (i=0; iN; i+) /* 找插入位置找插入位置 */ if(ki; j-) /* aj (j=n-1,n-2,i+1)后移一个位置后移一个位置 */ aj=aj-1;aj=k; /*将将k插入到插入到ai */n=n+1; /* 数组增加一个元素数组增加一个元素 */ printf(“n 请输入要删除数组元素的下标请输入要删除数组元素的下标 k:n”);scanf(“%d”,&k);for (j=k; jn-1; j+) /* aj+1 (j=k,k+1,n-2)前移一个位置前移一个位置*/ aj=aj+1;n=n-1;for(i=0;in;i+) /* 打印删除后的数组打印删除后的数组 */ printf(“%4d”,ai);printf(“n”);

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C语言课件:函数讲座.ppt
    链接地址:https://www.163wenku.com/p-2088407.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库