欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第11章函数与文件.ppt

    • 资源ID:5329730       资源大小:214.01KB        全文页数:26页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第11章函数与文件.ppt

    第11章 函数与文件,在本章的学习中,要重点掌握以下内容:理解文件和函数的关系;头文件和源文件的关系;如何组织多文件工程,并学会在至少一种环境下开发多文件工程;递归函数的使用;内部函数和外部函数的使用。,11.1 多文件的程序,使用文件来组织程序可以提高程序的结构性,使各个功能的模块更为清晰。本章将先讨论源文件和头文件的关系,再介绍一个完整的C工程是如何组织的,最后通过一个实例来演示多文件的C工程的使用。,11.1.1 源文件和头文件,C文件可以分为.c文件和.h文件两类,其中.c文件是后缀名为“.c”的文件,也称为源文件。.h文件是后缀名为“.h”的文件,也称为头文件。一个程序经常含有多个源文件,编译时每一个源文件都会作为单独的编译单元,生成对象文件。通常情况下,每一个源文件都会有对应的头文件,作为源文件之间的接口。,11.1.1 源文件和头文件,头文件原则上只存放可能被外部使用的内容,一般包含以下部分。类型声明,例如:typedef int int32_t;函数声明,例如:void hello_world(void);常量定义,包括具名常量和const常量,例如:#define ARRAY_SIZE 50const int MAX 256,11.1.2 C工程的组织结构,当程序规模继续扩大,程序任务十分浩大的时候,函数会变得很多,只使用多函数的方式也不足以保证程序的结构清晰。这时就需要使用多个源文件,把相关性强的函数归类,每一类作为一个集合放在一个单独的源文件中。同时还应适当地使用头文件,将其作为源文件的接口描述,以提高程序的可维护行和结构组织的合理性。当程序规模继续扩大时,会导致出现有很多的文件,那么把太多的文件放在一个目录下也会略显混乱,这时就需要将文件归类,分别放到不同的文件夹下。,11.1.2 C工程的组织结构,当程序规模较大时,一般会称程序为“工程”。在本书的论述中,工程也就是一个完整的C程序,可以只有一个C文件,也可以有成百上千个C文件。如下图就是C工程的组织结构图。,11.1.3 一个简单的多文件工程,本节将展示一个简单的多文件工程:该工程包含6个文件,其中3个为头文件,3个为源文件,如范例11-1所示。在11.1.4节中将围绕本工程详细介绍如何在各种开发环境中开发多文件工程。,11.2 创建和运行多文件工程,在11.1节中已经介绍了含多个文件的C工程,由其可看出,该工程中文件繁多,如果使用第2章中介绍的方法来创建和运行这个工程是行不通的。本节将以范例11-1为例,来演示如何在两种不同的编译环境中创建和运行多文件工程。,11.3 函数的调用,前面的内容中已经讨论了在main函数中调用函数的方法,此外也可以在函数中调用函数。本节将讨论如何在其他函数中调用函数,包括嵌套调用和递归调用。同时,将通过几个范例来演示递归调用的使用。最后,将分析递归调用的利弊,并讨论如何实现递归与循环的转化。,11.3.1 嵌套调用,由于C语言规定函数不能定义在函数体内,即不能嵌套定义。但是可以通过在函数中调用函数来实现函数的嵌套,即嵌套调用。实际上,在main函数中调用函数就是函数的嵌套调用,因为main函数也是函数。在其他函数内调用函数的方法和执行与在main函数中调用函数完全一样。,11.3.2 递归调用,上一小节讨论的是使用函数调用其他函数,本节将讨论如何调用函数本身,即函数的递归调用。函数的递归调用有两种形式:直接递归调用和间接递归调用。1.直接递归调用直接递归调用就是在函数内部调用函数本身。例如:void func(void)操作1;func();/*调用本身*/操作2;,11.3.2 递归调用,在逻辑上,对自身的调用,也可以视为一般的调用其他函数。以func函数为例,可以假定函数中有很多个定义了很多个func函数。直接递归调用的执行顺序可描述如下图所示。,11.3.2 递归调用,2.间接递归调用当一个函数A调用另一个函数B,而B函数中又调用了C函数,而C函数中又调用了D函数直到某一个函数又重新调用了函数A,构成一个循环调用的结构。这种情况就是函数的间接递归调用。例如:void fun1(void)操作1;func2();/*调用func2函数*/操作2;void fun2(void)操作3;func1();/*调用func1函数*/操作4;,11.3.2 递归调用,这两个函数彼此相互调用,语句执行顺序如下图所示。,11.3.2 递归调用,实际上,间接递归调用在逻辑上可以分为直接递归调用。例如,将上述的func_2函数在func_1函数内展开,可以将间接递归调用转换化为如下直接递归调用的形式。void fun1(void)操作1;操作3;func1();/*调用本身*/操作4;操作2;提示:递归调用效率低,因此少使用递归调用;同时,应尽量避免使用间接递归。,11.3.3 递归调用使用举例,递归作为一种算法在程序设计语言中被广泛应用。当一个问题可以分解为多个步骤,而这些步骤的执行逻辑完全一样时,便可以使用递归方法来解决。使用递归可以大大减少程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁。一般来说,递归需要有边界条件、递归控制段和递归返回段。当边界条件不满足时,递归控制。当边界条件满足时,递归返回。下面是三个递归的应用。,11.3.3 递归调用使用举例,1.计算数列1到n的和将该和序列记为:f(n)=1+2+3+n。f(x)的值具有以下特点:f(n)=f(n 1)+n;f(n 1)=f(n 2)+n 1;f(1)=f(0)+1;f(0)=0;总结可得:当x大于1时,f(x)=f(x 1)+1,其中(x 1)即为递归进行;当x等于0时,f(0)=0,此即为边界条件。,11.3.3 递归调用使用举例,2.将输入的十进制数以二进制形式输出本例中会用到函数值传递的特性。假定有一个输入数,其二进制形式共有有N位。若要输出第1位数,必须要先输出第2位。若要输出第2位,必须先输出第3位;依此类推,若要输出第N-1位,必须先输出第N位。总结可得:若要输出第n位数时,必须先输出后Nn+1位的数,然后再输出该位数。描述为代码如下所示。输出二进制形式(x)如果x的二进制位数多于一位;输出二进制形式(x/2);/*x/2即为x去掉最后一位*/输出x二进制形式的最后一位,对2求余即可。否则输出x;/*满足边界条件,结束递归调用*/,11.3.3 递归调用使用举例,3.使用折半法在升序数组中查找目标数在一个升序数组中查找一个数,需要执行以下步骤。(1)可以将目标数与该数组的中间数进行比较:如果目标数比中间数大,那么将查找范围缩小为从中间数到原数组末尾的范围,将这些元素作为一个新数组继续查找。如果该目标数比中间数小,那么将查找范围缩小到数组的前半部分,将这些元素作为一个新数组继续查找。如果相等,那么返回数组编号。(2)继续在新数组内执行与第(1)步一样的操作,直到找到该目标数,或者新数组为空。,11.4 内部函数与外部函数,关键字extern和static可以用来声明函数,使用extern声明的函数为外部函数。使用static声明的函数为内部函数。本节将介绍两者的概念和区别,最后通过实例来演示内部函数和外部函数的使用。,11.4.1 外部函数,使用关键字extern声明函数的形式如下所示。extern 返回值类型 函数名(形参列表);extern声明有以下两个作用。在没有定义某函数的源文件里使用extern声明该函数,便可以在这个文件内使用该函数。在函数定义的函数声明中使用关键字extern,那么该函数就允许为其他文件的函数使用。,11.4.1 外部函数,C语言中规定,所有函数默认声明为extern类别,即外部函数。也就是说在之前的所有例子中定义的函数都是外部函数。下列两种函数定义方式是等价的:int func(void);extern int func(void);使用了extern声明函数后,就可以不用预处理命令#include。实际上两者原理是一样的,#include的功能是将其后的文件全部替代到该命令处。,11.4.2 内部函数,使用关键字static声明函数的形式如下:static 返回值类型 函数名(形参列表);由于static声明的函数的作用域被局限于本文件,因此C语言允许多个文件内可以有同名的static内部函数,且互不干扰。static的这种优势在多人协作编程时十分有效,每个人在自己的源文件里编程时,只要将专用函数声明为内部函数,便可以不必担心所用函数名是否与其他人缩写的函数同名。如果试图使用一个外部的static函数的做法是不允许的,编译器在链接时将报错。,11.4.3 应用举例,当存在多个源文件时,文件间函数的调用就是对外部函数的调用;同一个文件内的函数的调用就是内部函数的调用。,11.5 综合练习,1。将范例11-5的递归函数使用循环结构来实现。,11.5 综合练习,2。将加减乘除4种算法实现在一个文件中,并在另一文件中的main函数依次调用。【提示】在文件file2.c中实现4种算法,并为其添加一个头文件file2.h以包含4种算法函数的声明;最后在file1.c中的main函数中调用各个函数。,

    注意事项

    本文(第11章函数与文件.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开