C语言程序设计函数课件.ppt
《C语言程序设计函数课件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计函数课件.ppt(49页珍藏版)》请在三一办公上搜索。
1、C语言程序设计第八章函数,8-2,主要内容,8.1 函数的定义和调用8.2 变量的存储类型及作用域8.3 函数的数据传递,8-3,概述,函数函数是C语言程序的基本结构。C语言提供了许多函数。它包括:I/O函数数学函数字符串函数、字符函数函数时间(转换和操作)函数接口函数动态地址分配函数目录函数过程控制函数字符屏幕和图形功能函数等。用户可以根据需要选择使用。这一类函数称为库函数。库函数函数的引用的方法很简单,这里不赘述。,8-4,概述,库函数库函数是由编译系统提供的现成函数。以前用过的scanf,printf,getchar等都是库函数。在编写C程序时,尽可能多用库函数,以提高编程效率和质量。要
2、调用某个库函数,需在程序的头部用包含命令(#include)将说明该函数原型的头文件包含进本程序中。使用库函数应注意以下几个问题:函数的功能;参数的数目、顺序和类型;函数返回值类型;需要使用的包含文件。,8-5,概述,常用的库函数,8-6,8.1 函数的定义和调用,函数的定义函数的定义就是创造、编制函数。函数的定义过程就是编制函数的过程。函数定义的格式,数据类型 函数名(形参类型1 形参1,形参类型n 形参n)说明语句;可执行语句;return(表达式);,例如:int myfun(int x,int y)int z;if(xy)z=x;z=y;return(z);,8-7,8.1 函数的定义
3、和调用,函数定义的说明函数返回类型:若函数无返回值,或返回整型值,可省略数据类型说明。形参:形参是函数接收外部数据的单向通道。函数调用时,调用函数的实参将其数据传递给形参。函数可以有多个或0个形参,各形参之间用逗号隔开。形参可以是变量、指针或数组等;形参不能是常量和表达式。形式参数是局部变量。作用域、生命期为函数体内。函数名:函数名的命名规则同标识符的命名规则,8-8,8.1 函数的定义和调用,return语句:如果函数有返回值,则函数的最后一条语句就是 return语句。返回的意义是:使流程返回主调函数,宣告函数的一次执行结束,在调用期间所分配的变量单元被撤消。送函数值到调用表达式中。有些函
4、数有返回值,有些函数没有返回值。return语句的使用格式是:return;或者 return(表达式);或者 return 表达式;,8-9,8.1 函数的定义和调用,注意return后的表达式的值类型必须与函数类型相同;如果函数类型为空(void)类型,则函数体中可以不使用return语句,或使用不带参数的return。一个函数允许有一个或多个return语句,流程执行到其中一个 return时即返回主调函数。如果有多个return语句,每个return后面的表达式的类型应相同。如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据自动进行类型转换。被调用函数
5、中没有return语句,则函数带回一个不确定的值。建议用void标记函数的类型,则系统可保证函数不带回任何值,即禁止在调用函数中使用被调用函数的返回值。,8-10,8.1 函数的定义和调用,C语言准许定义“空函数”。例如:dummy()调用此函数,什么工作也不做。它表明有一个函数,尚未有具体的内容,待以后将功能补充上去。一般在系统开发初期,一些没开发出来的部分用此方法。,8-11,8.1 函数的定义和调用,函数的引用函数定义好后,便可以在表达式中使用。函数引用的格式函数名(实参表列)实参的作用是在程序发生函数调用时,将其数据传递给函数的形参,即向函数传送数据。,int fun1(x1,y1)i
6、nt z;z=x1+y1;return(z);void main()int s,x=2,y=6;s=fun1(x,y);printf(“%d”,s);,运行结果:8,8-12,8.1 函数的定义和调用,实参与形参的关系实参与形参的个数要相等。多个实参时要用逗号隔开。实参与形参的数据类型相一致。实参与形参的数据的传递是单向。即实参传给形参。同时是按排列顺序依次对应传递。实参名与形参名可以相同,也可以不相同。函数返回如果函数需要返回值,就用返回值带回调用函数的处理结果。返回值用赋值语句赋给主函数中的变量,以接收其返回值。返回值和接受返回值的变量的类型必须一致。,8-13,8.1 函数的定义和调用,
7、函数调用实参和形参的个数、类型和顺序必须一致。实参可以是常量、变量名、数组名、数组元素或表达式。在调用函数前,必须先定义。,8-14,8.1 函数的定义和调用,函数调用的形式在C语言中,凡是能调用变量或表达式的地方,均可调用函数。假设已定义了一个函数,即:我们有如下三种形式调用:函数调用语句形式,如:a=max(s1,s2);这就是函数调用语句,简称函数语句。在表达式中引用,如:例:y=max(x1,x2)/max(y1,y2);函数调用函数,如:y=abs(max(rand(),rand();/其中rand()为随机函数。,int max(x,y)int x,y;int z;z=(xy)?x
8、:y;return(z);,8-15,8.1 函数的定义和调用,函数的声明如果定义的函数在使用之后,则函数必须在使用前先声明。目的是告诉编译程序该函数返回值的数据类型,以便编译程序能够检查对函数的调用是否正确,会不会发生错误的类型转换等。函数说明的格式数据类型 函数名(形参类型 形参,);函数声明注意的问题被调用函数的声明放在源文件头,则该声明对整个源文件都有效,int f1();int f2();main()f1();f2();,int f1().f2();int f2(),函数f1中没有对函数f2进行说明,其引用是错误的。,main()int f1();int f2();f1();f2()
9、;,8-16,8.1 函数的定义和调用,如果被调用函数在调用函数内部声明,则该声明仅对该调用函数有效。如果被调用函数是在函数外声明,则该声明对以后的所有调用都有效。,void main()float max(float a,float b,float c);float x,y,z,m;scanf(“%f%f%f”,8-17,8.1 函数的定义和调用,如果调用函数和被调用函数是在同一个源文件中,而且程序中被调用函数是在调用函数之前已定义,此时可以省略被调用函数的声明。,float max(float a,float b,float c)/先定义 float result;result=a;if(
10、resultb)result=b;if(resultc)result=c;return(result);void main()float x,y,z,m;scanf(“%f%f%f”,8-18,8.1 函数的定义和调用,如果所有被调用函数的说明都是在源文件开头,则在该源文件内的所有调用函数中不必再对被调用函数声明。,float f1();float f2();main()f1();f2();float f1()float f2(),声明函数 f1、f2,定义函数 f1,定义函数 f2,8-19,8.1 函数的定义和调用,如果被调用函数的声明在源文件中间且在所有函数之外某处被说明时,则在被说明之
11、后引用它时,不必再声说明;但在被说明之前调用它时,需对其进行说明。如果函数的返回值是整型或字符型时,可省略说明。,8-20,8.1 函数的定义和调用,例1 编制求两数最大值的程序。,#includevoid main()float max();/函数声明 float a,b;scanf(“%f,%f”,运行结果:5.8 3.2 max is 5.8,8-21,8.1 函数的定义和调用,例2 编程 计算任一输入整数的各位数字之和,请用函数的方法处理。思路:对输入的整数,先求其绝对值,然后分解各位上的数字,边分解边累加,直到完毕。,#include#include“math.h”int func(
12、int num);void main()int n;printf(“请输入一个整数:);scanf(%d,请输入一个整数:456result:15,8-22,8.1 函数的定义和调用,例3 编制求n!的函数。,#includefloat factorial(int n)float product;for(product=1;n0;n-)product*=n;return(product);void main()int n;printf(“请输入一个整数:);scanf(%d,运行结果:请输入一个整数:6 n!=7.200000e+002,8-23,8.1 函数的定义和调用,函数的嵌套调用C函数
13、不能嵌套定义,但允许嵌套调用,即被其他函数调用的函数可以调用另一个函数。请看示意图:,void main()int i;i=num1();,int num2(),8-24,8.1 函数的定义和调用,嵌套调用示例:计算 s=1!+2!+3!+20!=?思路:编写一个主函数和两个子函数,嵌套调用。,#includevoid main()double sum(int n);printf(s=%-12.5len,sum(20);double sum(int n)double fa(int k),s=0;int i;for(i=1;i=n;+i)s=s+fa(i);return s;double fa(
14、int k)int i;double t;t=1;for(i=1;i=k;+i)t*=i;return t;,运行结果:S=2.56133e+018,8-25,8.1 函数的定义和调用,函数的递归调用所谓函数的递归调用,就是函数直接或间接地调用自己。在设计递归函数时应当考虑到递归的终止条件。递归过程不应无限制地进行下去,不应该出现无终止的递归调用,而只应出现有限次数的、有终止的递归调用。当调用若干次以后,就应当到达递归调用的终点得到一个确定值,然后进行回代,回代的过程是从一个已知值推出下一个值。实际上这是一个递推过程。递归总是由两部分组成的:递归方式和递归终止条件。递归三要素递归形式递归规则递
15、归终结条件,8-26,8.1 函数的定义和调用,#includefloat fa(int n)float t;if(n=1|n=0)t=1;else t=n*fa(n-1);return t;void main()int i;scanf(”%d”,说明:递归包括“回推”和“递归”需有结束递归过程的条件,8-27,8.1 函数的定义和调用,4*fa(3),3*fa(2),2*fa(1),1,2*1,(3*2*1),(4*3*2*1),输出(4*3*2*1),递推,回归,计算 fa(4),8-28,8.2 变量的存储类型及作用域,对变量的访问就是对内存的访问。在C语言中变量的存储是有规定和区别的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 函数 课件
链接地址:https://www.31ppt.com/p-3874267.html