第5章函数(C语言程序设计)_第1页
第5章函数(C语言程序设计)_第2页
第5章函数(C语言程序设计)_第3页
第5章函数(C语言程序设计)_第4页
第5章函数(C语言程序设计)_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章功能、5.1C功能和C程序结构。使用函数的目的是实现模块化编程。C程序的基本单位是函数,而不是语句。模块化编程的概念是什么?考虑一个图书馆管理程序的实现,包括主控模块、借阅、归还、藏书和图书查询。C语言中的模块是一个函数。图书馆管理程序的C语言实现示意图,借阅模块函数()和归还模块函数()的具体实现语句,每个模块被写成一个函数,以及藏书模块函数()的具体实现。调用图书返回功能;调用库集合函数;调用图书查询功能;调用只是一个语句,函数之间的关系是通过调用来实现的。如果不调用它也没关系。模块化软件结构示意图,思考:如何用主音和被调用来解释A,B,C,I函数之间的关系,一个C语言程序由一个主函

2、数和几个(0个用户函数)组成。C语言中的函数没有成员资格,也就是说,所有函数都是独立定义的,不能嵌套。函数通过调用来执行,这允许函数相互调用,并直接或间接地递归调用自己。主函数可以调用任何一个函数,而其他函数不能调用主函数。主动调用其他函数的函数称为主调优函数,被调用的函数称为调优函数。系统函数不需要定义,只要它们在使用时被调用。例如,printf(),scanf()是一个系统函数。用户函数需要首先定义,然后调用。如果不调用它们,它们将不会被执行。5.2函数定义和组成、存储类型数据类型函数名(形式参数表)声明变量语句的可执行语句。通常,函数名和参数的描述部分称为“函数头”,用花括号括起来的部分

3、称为“函数”,即voidprintstar()printf(* * * * * n);示例5.1,浮动区域(浮动,浮动b)浮动;s=a*b。回报;示例5.2,存储类型为:extern或staticextern外部函数(默认),静态内部函数,默认数据类型为int:函数执行后,将得到一个没有值类型的值:void,函数名为标识符,其命名规则与变量的命名规则相同。形式参数(简称为形式参数)描述如下:数据类型形式参数1、数据类型形式参数2和声明的形式参数。函数的返回值(函数值)可以是常量、变量或表达式的返回表达式;返回(表达式);返回;也可以没有返回语句(无效类型)。当定义形式参数A和B时,假设A和B有

4、值(实际上没有,形式上认为有),intsum(intx,inty,intz)int m;m=x y z;returnm定义参数x、y、z时,没有内部赋值,并且它被认为具有形式上的值。return是函数的逻辑结尾。可以有多个,但只能执行一个。intf(inta,intb)if(ab)return 1;elseif(a=b)返回0;elsereturn-1;intsum(intx,inty,intz),函数体:它可以是一个空函数,只写出函数的形式,首先考虑如何回调,然后实现定义体,5.3函数调用,函数名(参数表);s=总和(2,3,4);s=5*f(3,4,2);z=最大值(5,10);scanf

5、 (%d ,),调用函数时的参数称为实际参数,简称为实际参数。实际参数和形式参数一一对应,实际参数以值printf(“x=% d”,x)的形式表示。printf(“x=% d”,最大值(5,10);形式参数以声明变量的形式表示,函数的调用过程,floatf2(inta,intb)返回;f1()调用函数语句s=f2(x,y),主音函数,被调用函数,f1(),floatf2(inta,intb),a=x;b=y、flowere rea(inta,intb)flowers。s=a*b。回报;main()floatlength,with,s;Scanf (%f,%f ,示例5.2,找到矩形区域,20,

6、5,面积(长度,宽度);20,5,100,100,s=,100,100.00,释放函数中的变量,释放主函数中的变量,intsum(intx,inty,intz)intm;m=x y z;returnm,main()inti,j,k,s;Scanf (%d% d% d ,示例5.3)编写了一个程序来计算同时不是0的三个整数的和。,20,sum(i,j,k);0,-3,20,0,-3,17,17,sum=17,释放函数中的变量,释放主函数中的变量,intf(inta,intb)if(ab)return 1;elseif(a=b)返回0;elsereturn-1;在、c语言中,参数的求值顺序是不固定

7、的,TC是从右向左的。例5.4写出程序运行结果,main()inti=2,p;p=f(i,I);printf(%d ,p);intf(inta,intb)if(ab)else if(a=b)return 0;3,3,f(),0,0,问题:函数的执行顺序和它们的书写顺序之间有什么关系?主音功能是以前写的吗?还是先写调好的函数?函数的书写顺序有两种:1 .首先定义,然后调用,2。首先调用,然后定义。c语言规定函数的作用域从定义的位置开始,直到源文件的末尾,书写顺序不同,函数的作用域也不同,函数先定义,然后调用:max (inta,intb) if (ab)返回;elsereturnb找出两个数的最

8、大值。main()intx,y,z;Scanf (%d,%d ,编译时不会有问题,首先调用该函数,然后定义的表达式为:float max(flove,float b)if(ab)return。elsereturnb,main()intx,y,z;Scanf (%d,%d ,在大多数情况下无法编译,已修改:在调用函数之前,声明函数的原型floatmax (inta,intb);floatmax(int,int);float max();也可以放在主音函数中,特殊:函数类型是int,所以不需要声明它。示例5.5编写一个函数来查找整数的阶乘。/*首先调用,然后定义*/main()intn;long

9、fac(int);scanf(%d,long fac(intx)inti;longyif(x0)printf(data error n);elsefor(i=1,y=1;I=x;I)y=y * I;returny,main(),intn,long fac(int);scanf(%d、3、printf(%d!=%ld,n,fac(n);fac(n)、long fac(intx);inti,longy,if(x0),else,for,i=1,y=1,1,1,i=x,y=y * I;y=1*1,1,I,2,i=x,y=y * I;*2,I,3,i=x,y=y * I;*3,2,6,I,4,i=x,r

10、eturny、6、3、3!=6,3!=6,函数调用可以嵌套,即在调用一个函数的过程中可以调用另一个函数。C语言中不允许嵌套定义,但允许嵌套调用。示例5.6为了计算组合的数量,longcmn(intm,intn)返回,main()调用z=cmn(),longfac (intx)返回、y=、输出,函数的设计原则:保持函数longfac(int)中的包尽可能简单;longcmn(int,int);printf( input two integers 3360 );scanf(%d、%d 、long fac(intx)inti;longy对于(i=1,y=1;I=x;I)y=y * I;returny,longcmn(intm,intn)long fc;fc=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论