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

类型C程序的模块化设计课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3514878
  • 上传时间:2022-09-10
  • 格式:PPT
  • 页数:79
  • 大小:1.89MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C程序的模块化设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    程序 模块化 设计 课件
    资源描述:

    1、计算机程序设计基础(计算机程序设计基础(C C语言)语言)第第7 7章章C C程序的模块化设计程序的模块化设计计算机程序设计基础(计算机程序设计基础(C C语言)语言)本章要点本章要点C程序的模块化结构程序的模块化结构内部变量、外部变量、静态(内部变量、外部变量、静态(static)变量变量变量的存储属性变量的存储属性动态存储分配和释放动态存储分配和释放编译预处理编译预处理计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C7.1 C程序的模块化结构程序的模块化结构 7.3 7.3 变量和函数的存储属性变量和函数的存储属性 7.4 7.4 动态存储分配和释放动态存储分配和释放7

    2、.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期 7.7 7.7 本章小结本章小结 7.5 7.5 编译预处理编译预处理 7.6 综合应用举例综合应用举例计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C程序的模块化结构程序的模块化结构模块化程序设计方法的思想模块化程序设计方法的思想:将一个较大的程序按功能分割成一些模块,将一个较大的程序按功能分割成一些模块,每个模块都是功能单一、结构清晰、接口简单、每个模块都是功能单一、结构清晰、接口简单、容易理解的小任务。对每一个处于底层的小任务容易理解的小任务。对每一个处于底层的小任务编写相应的实现编写

    3、相应的实现函数函数,然后通过,然后通过函数调用函数调用的方法的方法将多个这样的函数按功能组合成一个较高层的调将多个这样的函数按功能组合成一个较高层的调用函数,多个这样的调用函数又可成为被调函数,用函数,多个这样的调用函数又可成为被调函数,并按功能组织成更高层次的调用函数。并按功能组织成更高层次的调用函数。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C程序的模块化结构程序的模块化结构模块化程序设计的基本方法:模块化程序设计的基本方法:自顶向下(或自底向上)自顶向下(或自底向上)和和逐步求精逐步求精。C语言的开发工具提供了程序语言的开发工具提供了程序工程工程开发的能力开发的能

    4、力。工程由多个源程序文件组成。工程由多个源程序文件组成。每个源程序文件可以单独编译;然后再连接成一每个源程序文件可以单独编译;然后再连接成一个大的可执行文件个大的可执行文件。每个源程序文件可以包含一个或多个函数。每个源程序文件可以包含一个或多个函数。一个工程只能有一个一个工程只能有一个main主函数。主函数。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C程序的模块化结构程序的模块化结构7.1.1 概述概述7.1.2 多源文件程序的结构多源文件程序的结构7.1.3 分割编译分割编译计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C7.1 C程序的模块化结构

    5、程序的模块化结构7.1.1 概述概述函数是函数是C程序的基本组成单位。程序的基本组成单位。C编程就是在编程就是在main函数中给一些函数安排一个执函数中给一些函数安排一个执行顺序,而在这些函数中,又安排了另一些函数的行顺序,而在这些函数中,又安排了另一些函数的执行顺序。执行顺序。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C7.1 C程序的模块化结构程序的模块化结构7.1.1 概述概述main()f1();f2();f1()g1()f2()h1();h2();k1()g1()k1()h1()h2()k1()图图7.1由若干个函数组成的一个程序由若干个函数组成的一个程序计算

    6、机程序设计基础(计算机程序设计基础(C C语言)语言)1.1 1.1 算法、算法、C C语言和程序设计语言和程序设计7.1.1 概述概述问题:问题:计算机程序设计基础(计算机程序设计基础(C C语言)语言)1.1 1.1 算法、算法、C C语言和程序设计语言和程序设计7.1.2 多源文件程序的结构多源文件程序的结构当一个程序由许多函数构成时,如果所有的函数都当一个程序由许多函数构成时,如果所有的函数都放在一个放在一个.c程序文件中,势必会造成文件体积庞大,程序文件中,势必会造成文件体积庞大,查找函数困难,阅读理解困难,函数取名困难,安查找函数困难,阅读理解困难,函数取名困难,安排函数的顺序也困

    7、难。排函数的顺序也困难。程序员编程时,往往采用模块化程序设计方法,将程序员编程时,往往采用模块化程序设计方法,将一个大的程序分解为功能单一的小模块。一个大的程序分解为功能单一的小模块。计算机程序设计基础(计算机程序设计基础(C C语言)语言)1.1 1.1 算法、算法、C C语言和程序设计语言和程序设计7.1.2 多源文件程序的结构多源文件程序的结构将图将图7.1的所有函数组织在三个程序文件的所有函数组织在三个程序文件file1.c、file2.c和和file3.c中。中。/*file1.c*/extern void f1();extern void f2();void main()f1();

    8、f2();/*file2.c*/void g1();void k1();void f1()g1();void g1()k1();void k1()/*file3.c*/void h1();void h2();extern void k1();void f2()h1();h2();k1();void h1()void h2()计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C7.1 C程序的模块化结构程序的模块化结构7.1.3 分割编译分割编译编译是以源文件为单位进行的。编译是以源文件为单位进行的。在编译该程序时,可以以源文件为单位分别进行编在编译该程序时,可以以源文件为单位分

    9、别进行编译,相应产生目标文件,然后再用连接程序将分别译,相应产生目标文件,然后再用连接程序将分别编译产生的多个目标文件连接成一个可执行文件,编译产生的多个目标文件连接成一个可执行文件,这样的过程称为这样的过程称为分割编译分割编译。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.1 C7.1 C程序的模块化结构程序的模块化结构7.1.3 分割编译分割编译编写多源文件程序的步骤基本:编写多源文件程序的步骤基本:编译:编译:必须对程序中的每个源程序文件单独进行编译,编必须对程序中的每个源程序文件单独进行编译,编译通过后生成相应的文件名同源程序文件名,扩展名译通过后生成相应的文件名同源程

    10、序文件名,扩展名为为.obj的目标程序文件。由于有多个源程序文件,因此有的目标程序文件。由于有多个源程序文件,因此有多个目标程序文件。多个目标程序文件。连接:连接:连接器把上一步生成的多个目标程序文件和系统的连接器把上一步生成的多个目标程序文件和系统的库函数代码结合在一起生成扩展名为库函数代码结合在一起生成扩展名为.exe的可执行程序文的可执行程序文件。件。运行:运行:运行生成后的可执行文件。运行生成后的可执行文件。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变

    11、量7.2.2 静态(静态(static)变量)变量7.2.3 作用域及生存期作用域及生存期计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量1内部变量内部变量:也称局部变量,即在函数内部定义的:也称局部变量,即在函数内部定义的变量。变量。以下变量都是内部变量:以下变量都是内部变量:在函数内部定义的变量,其作用范围只在该函数内在函数内部定义的变量,其作用范围只在该函数内部。部。函数定义时的形参,其作用范围只在该函数内部。函数定义时的形参,其作用范围只在该函数

    12、内部。在复合语句中定义的变量,其作用范围只在该复合在复合语句中定义的变量,其作用范围只在该复合语句内。语句内。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量内部变量的特点:内部变量的特点:块作用域块作用域:所有内部变量的作用域都是局部的,称所有内部变量的作用域都是局部的,称为程序块作用域。为程序块作用域。自动生存期自动生存期:局部变量具有自动存储期限。当调用局部变量具有自动存储期限。当调用函数时,函数时,“自动自动”分配局部变量的存储单元,当函分配局部

    13、变量的存储单元,当函数返回时释放变量所在存储空间数返回时释放变量所在存储空间注意:当再次调用注意:当再次调用函数时,无法保证函数时,无法保证变量始终保留原来变量始终保留原来的值。的值。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量讨论下面程序的内部变量及其特点:讨论下面程序的内部变量及其特点:void main()int a,b;int x10,y10;if(ab)int t;t=a;a=b;b=t;Fun(x);void Fun(int x)int

    14、a,b;计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量2外部变量外部变量:也称全局变量,在任何函数之外定义:也称全局变量,在任何函数之外定义的变量。其特点如下:的变量。其特点如下:全局生存期:一直占据所分配的存储空间直至整个全局生存期:一直占据所分配的存储空间直至整个程序(工程)运行结束。程序(工程)运行结束。文件作用域:从变量定义点开始到整个源程序结束文件作用域:从变量定义点开始到整个源程序结束处,跟在外部变量声明后的所有函数都可以访问它。处,跟在外

    15、部变量声明后的所有函数都可以访问它。还可以通过还可以通过extern存储类型说明,把作用域扩大到存储类型说明,把作用域扩大到该源程序文件外部变量声明之前的函数或者该工程该源程序文件外部变量声明之前的函数或者该工程的其它源程序文件中。的其它源程序文件中。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量分析下列程序不同位置上的变量分析下列程序不同位置上的变量n及其特点:及其特点:int n=5;void fun(void);void main()printf

    16、(“1.main:n=%d n”,n);fun();printf(“2.main:n=%d n”,n);void fun(void)n=10;printf(“3.fun:n=%d n”,n);计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量外部变量的作用:外部变量的作用:计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部

    17、变量外部变量外部变量计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量外部变量外部变量注意:全局变量只能定义一次,注意:全局变量只能定义一次,可多次用可多次用extern声明以扩大作用域。声明以扩大作用域。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量外部变量与内部变量可以同名外部变量与内部变量可以同名时时,内部变

    18、量的优,内部变量的优先级高于外部变量。先级高于外部变量。#include int n=5;int main()int n=50;printf(“main:n=%d n”,n);fun();void fun(void)printf(“fun:n=%d n”,n);计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.1 内部变量、外部变量内部变量、外部变量3外部变量的利与弊外部变量的利与弊 在多个函数共享一个变量或者少数几个函数共在多个函数共享一个变量或者少数几个函数共享大量变量时,外部变量很有用。然

    19、而,外部变量享大量变量时,外部变量很有用。然而,外部变量破坏了破坏了函数的独立性函数的独立性。独立性是重用代码的起码条。独立性是重用代码的起码条件,只有完全不存在外部变量的函数才有独立性,件,只有完全不存在外部变量的函数才有独立性,因此,尽量少用外部变量,可以通过形式参数在函因此,尽量少用外部变量,可以通过形式参数在函数之间传递数据的方法消除外部变量。数之间传递数据的方法消除外部变量。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.2 静态(静态(static)变量)变量 在模块化程序设计中,

    20、为了发挥程序的模块在模块化程序设计中,为了发挥程序的模块作用,有必要引入一种作用,有必要引入一种模块内的全局变量模块内的全局变量,它区别,它区别于前面介绍的局部变量和全局变量。于前面介绍的局部变量和全局变量。这种变量具有这种变量具有全局寿命和局部可见性全局寿命和局部可见性的特点;的特点;且默认初始化的值为且默认初始化的值为0。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.2 静态(静态(static)变量)变量静态变量的定义格式如下:静态变量的定义格式如下:static 数据类型数据类型 变

    21、量名表变量名表;例如,例如,static int x,y;注意注意静态全局变量静态全局变量和静态局部变和静态局部变量之分。量之分。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.2 静态(静态(static)变量)变量1.静态全局变量:在所有函数之外定义的静态变量。静态全局变量:在所有函数之外定义的静态变量。特点:只在定义的文件范围内可见,在其他程序文特点:只在定义的文件范围内可见,在其他程序文件中不可见。件中不可见。例例7.7 分析下列程序,由两个源程序文件组成:分析下列程序,由两个源程序文

    22、件组成:/*test.c*/#include extern void f1();extern void f2();void main()f1();f2();f1();f2();/*test1.c*/#include static int i;void f1(void)printf(“f1:i=%dn”,+i);void f2(void)printf(“f2:i=%dn”,+i);计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.2 静态(静态(static)变量)变量2静态局部变量:在函数内部定

    23、义的静态变量。静态局部变量:在函数内部定义的静态变量。特点:它只在定义它的函数内部可见特点:它只在定义它的函数内部可见。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.2 静态(静态(static)变量)变量例例7.8 分析下列程序,注意全局变量、静态局部变量分析下列程序,注意全局变量、静态局部变量和局部变量的区别。和局部变量的区别。#include void f1();int n=1;void main()int a=0,b=-10;printf(“main:a=%d,b=%d,n=%dn”

    24、,a,b,n);f1();printf(“main:a=%d,b=%d,n=%dn”,a,b,n);f1();void f1()static int a=2;int b=5;a+=2,b+=5;n+=12;printf(“f1:a=%d,b=%d,n=%dn”,a,b,n);运行结果如下:main:a=0,b=-10,n=1f1:a=4,b=10,n=13main:a=0,b=-10,n=13f1:a=6,b=10,n=25计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.3 作用域及生存期作用

    25、域及生存期计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.3 作用域及生存期作用域及生存期计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.3 作用域及生存期作用域及生存期void Fun(int x)int a,b;void main()int a,b;int x10,y10;if(ab)int t;t=a;a=b;b=t;Fun(x);计算机程序设计基础(计算机程序设计基础(C C语言)语言

    26、)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期例例2,分析下列程序变量的作用域:,分析下列程序变量的作用域:#include void f1();int n=1;void main()int a=0,b=-10;printf(“main:a=%d,b=%d,n=%dn”,a,b,n);f1();printf(“main:a=%d,b=%d,n=%dn”,a,b,n);f1();void f1()static int a=2;int b=5;a+=2,b+=5;n+=12;printf(“f1:a=%d,b=%d,n=%dn”,a,b,n);7.2.3 作

    27、用域及生存期作用域及生存期计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.3 作用域及生存期作用域及生存期代码区代码区全局数据区全局数据区栈区栈区堆区堆区变量存在变量存在的区域的区域计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.3 作用域及生存期作用域及生存期变量在不同的内存变量在不同的内存区域,将决定了其区域,将决定了其有不同的生存期。有不同的生存期。计算机程序设计基础(计算机程序设计基础

    28、(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期7.2.3 作用域及生存期作用域及生存期计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期例例 分析下列程序变量的生存期:分析下列程序变量的生存期:#include void f1();int n=1;void main()int a=0,b=-10;printf(“main:a=%d,b=%d,n=%dn”,a,b,n);f1();printf(“main:a=%d,b=%d,n=%dn”,a,b,

    29、n);f1();void f1()static int a=2;int b=5;a+=2,b+=5;n+=12;printf(“f1:a=%d,b=%d,n=%dn”,a,b,n);7.2.3 作用域及生存期作用域及生存期计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型7.3.2 函数的存储属性函数的存储属性计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型计算机程序设计基础(计算机程序设计基础(C C

    30、语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型#include int a;int main(void)bb

    31、.c#include extern int a;int fun1(void)cc.c#include int fun2(void)extern int a;aa.c计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.1 变量的存储类型变量的存储类型计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.2 7.2 内部变量、外部变量和作用域、生存期内部变量、外部变量和作用域、生存期分析下列程序的运行结果:分析下列程序的运行结果:#include void f1();int n=1;void main()int a=0,b=-1

    32、0;printf(“main:a=%d,b=%d,n=%dn”,a,b,n);f1();printf(“main:a=%d,b=%d,n=%dn”,a,b,n);f1();void f1()static int a=2;int b=5;a+=2,b+=5;n+=12;printf(“f1:a=%d,b=%d,n=%dn”,a,b,n);7.3.1 变量的存储类型变量的存储类型计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.2 函数的存储属性函数的存储属性计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数

    33、的存储属性变量和函数的存储属性7.3.2 函数的存储属性函数的存储属性其定义格式如下:其定义格式如下:static static 数据类型数据类型 函数名函数名(形参列表形参列表)计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.3 变量和函数的存储属性变量和函数的存储属性7.3.2 函数的存储属性函数的存储属性其定义格式如下:其定义格式如下:数据类型数据类型 函数名函数名(形参列表形参列表)说明语句部分说明语句部分执行语句部分执行语句部分 外部函数可以被同一工程中的其它文件调用,外部函数可以被同一工程中的其它文件调用,但必须在其它文件中进行声明,声明格式如下:但必须在其它文件中进

    34、行声明,声明格式如下:extern extern 数据类型数据类型 函数名函数名(形参列表形参列表););计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.1 申请动态内存申请动态内存7.4.2 动态内存的释放和重新分配动态内存的释放和重新分配7.4.3 void指针类型指针类型计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放 包括动态存储分配:包括动态存储分配:malloc函数和函数和calloc函数;函数;动态存储释放及重新分配:动态存储释放及重新分配:free函数和函数和re

    35、alloc。在使用这些函数时,应当用在使用这些函数时,应当用“#include”编译预处理命令,把编译预处理命令,把stdlib.h头文件包含到程序文头文件包含到程序文件中。件中。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.1 申请动态内存申请动态内存 C语言允许建立内存动态分配区域:需要时随语言允许建立内存动态分配区域:需要时随时开辟,不需要时随时释放。时开辟,不需要时随时释放。数据是临时存放在一个特别自由的存储区,称数据是临时存放在一个特别自由的存储区,称为堆区。为堆区。申请动态内存的函数有申请动态内存的函数有malloc函

    36、数和函数和calloc函数。函数。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.1 申请动态内存申请动态内存1malloc函数函数函数原型为:函数原型为:void *malloc(unsigned int size);说明:说明:该函数的功能是申请分配指定该函数的功能是申请分配指定size个字节的存储区。个字节的存储区。若申请成功,返回一个指向该存储区的首地址;若没若申请成功,返回一个指向该存储区的首地址;若没有足够的内存空间分配,函数返回空有足够的内存空间分配,函数返回空(NULL)。计算机程序设计基础(计算机程序设计基础(C

    37、C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.1 申请动态内存申请动态内存例如,例如,int *pi;/*申请内存空间,强制数据类型转换申请内存空间,强制数据类型转换*/pi=(int*)malloc(sizeof(int);/*如果申请成功,将如果申请成功,将123存储于刚分配的存储空间中存储于刚分配的存储空间中*/if(pi!=NULL)*pi=123;计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.1 申请动态内存申请动态内存2calloc函数函数函数原型为:函数原型为:void *calloc(unsig

    38、ned n,unsigned size);说明:说明:该函数可以给该函数可以给n个同一类型的数据项分配连续的存储空间个同一类型的数据项分配连续的存储空间由由calloc所分配的存储单元,系统自动置初值所分配的存储单元,系统自动置初值0 例如:例如:char *pc;pc=(char*)calloc(80,sizeof(char);/*pc指向具指向具有有80个连续个连续char型的存储区域的首地址型的存储区域的首地址*/计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.2 动态内存的释放和重新分配动态内存的释放和重新分配用用mallo

    39、c和和calloc函数在堆中分配的存储空间,函数在堆中分配的存储空间,随时可以调用随时可以调用free函数释放函数释放,也可以通过,也可以通过realloc函数函数对动态分配的内存区调整大小。对动态分配的内存区调整大小。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放1free函数函数函数原型为:函数原型为:void free(void*p);说明:说明:函数执行后,函数执行后,p指向的存储空间交还给系统,指针变量指向的存储空间交还给系统,指针变量p就没有确切的指向了。就没有确切的指向了。7.4.2 动态内存的释放和重新分配动态内存的释放和

    40、重新分配计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放2realloc函数函数函数原型为:函数原型为:void*realloc(void*p,unsigned int size);说明:说明:该函数的功能是将该函数的功能是将p所指向的已动态分配存储区的大小所指向的已动态分配存储区的大小改变为改变为size,size可比原来分配的空间大或小。可比原来分配的空间大或小。7.4.2 动态内存的释放和重新分配动态内存的释放和重新分配计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.3 v

    41、oid指针类型指针类型void *指针变量名;指针变量名;C99允许使用基类型为允许使用基类型为void的指针类型,其定义格式如下:的指针类型,其定义格式如下:说明:说明:这种类型的指针不指向任何具体的数据。这种类型的指针不指向任何具体的数据。在将它的值赋给另一指针变量时要进行强制类型转换,在将它的值赋给另一指针变量时要进行强制类型转换,使之适合于被赋值变量的类型。使之适合于被赋值变量的类型。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.4 动态存储分配和释放动态存储分配和释放7.4.3 void指针类型指针类型例例7.9 建立动态数组。输入建立动态数组。输入5个学生的成绩,调

    42、用一个函数个学生的成绩,调用一个函数检查其中有无低于检查其中有无低于60分的成绩,输出这些不合格的成绩。分的成绩,输出这些不合格的成绩。#include#include void main()void check(int*);int*p1,i;void*p2;p2=malloc(5*sizeof(int);p1=(int*)p2;printf(输入输入5个学生的成绩:个学生的成绩:);for(i=0;i5;i+)scanf(%d,p1+i);check(p1);free(p2);void check(int*p)int i;printf(不合格的成绩有:不合格的成绩有:);for(i=0;i5

    43、;i+)if(pi(y)?(x):(y).main()int a,b,c,d,t;.t=MAX(a+b,c+d);宏展开:宏展开:t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y)return(xy?x:y);main()int a,b,c,d,t;.t=max(a+b,c+d);例例 用宏定义和函数实现同样的功能用宏定义和函数实现同样的功能7.5 编译预处理编译预处理7.5.1 宏定义宏定义计算机程序设计基础(计算机程序设计基础(C C语言)语言)带参宏函数处理过程不分配内存简单的字符置换分配内存先求实参值,再代入形参处理时间编译时程序运行时参数类型无

    44、类型问题定义实参,形参类型程序长度变长不变运行速度不占运行时间调用和返回占时间7.5 编译预处理编译预处理7.5.1 宏定义宏定义计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.5 编译预处理编译预处理7.5.1 宏定义宏定义例,例,#define PI3.1415926#undef PI计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.5 编译预处理编译预处理一般形式:一般形式:#include “文件名文件名”或或#include 7.5.2 文件包含文件包含#include “file2.c”file1.cfile2.cfile1.cBABA说明:说明:其作用是

    45、把指定文件的内容包含(复制)到当前其作用是把指定文件的内容包含(复制)到当前源文件里。源文件里。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.5 编译预处理编译预处理一般形式:一般形式:#include “文件名文件名”或或#include 7.5.2 文件包含文件包含说明:说明:这两种使用形式有差别,其差异在于预处理程序这两种使用形式有差别,其差异在于预处理程序定位头文件的方式不同:定位头文件的方式不同:#include ,预处理程序直接到系统,预处理程序直接到系统指定的指定的include目录中查找所需的文件。目录中查找所需的文件。#include “文件名文件名”,预处理

    46、程序首先在源文,预处理程序首先在源文件所在目录里查找,如果没找到,再到系统指定件所在目录里查找,如果没找到,再到系统指定的的include目录查找。目录查找。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.5 编译预处理编译预处理条件编译命令有条件编译命令有6个,分别是:个,分别是:#if 整型表达式整型表达式#else#elif整型表达式整型表达式 /*else if的缩写,分支测试的缩写,分支测试*/#endif /*标识标识if作用范围结束作用范围结束*/#ifdef 标识符标识符 /*等价于等价于#if defined标识符标识符*/#ifndef标识符标识符 /*等价于

    47、等价于#if undefined标识标识符符*/7.5.3 条件编译条件编译计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.5 编译预处理编译预处理条件编译的作用是直接取舍程序语句和协调多个头条件编译的作用是直接取舍程序语句和协调多个头文件。文件。例如,例如,#ifdef NEWC#include#else#include#endif7.5.3 条件编译条件编译计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.6 综合应用举例综合应用举例例例7.12 输入输入10个学生个学生5门课的成绩,并实现如下功能:门课的成绩,并实现如下功能:计算每个学生的平均分;计算每个学生的

    48、平均分;计算每门课的平均分;计算每门课的平均分;找出所有找出所有50个分数中最高的分数所对应的学生和课个分数中最高的分数所对应的学生和课程。程。计算平均分方差:计算平均分方差:21011012)(1nxxniiii其中其中xi为某学生的平均分。为某学生的平均分。计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.7 本章小结本章小结本章主要包括以下内容:本章主要包括以下内容:(1)C程序的模块化结构设计程序的模块化结构设计(2)内部变量、外部变量和作用域、生存期)内部变量、外部变量和作用域、生存期静态变量有:静态全局变量;静态局部变量静态变量有:静态全局变量;静态局部变量(3)变量和

    49、函数的存储属性)变量和函数的存储属性变量的存储属性:变量的存储属性:auto(默认默认),register,extern,static函数的存储属性有:函数的存储属性有:static和和extern计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.7 本章小结本章小结例如,例如,int a;extern int b;static int c;void f(int d,register int e)auto int g;int h;static int i;extern int j;register int k;计算机程序设计基础(计算机程序设计基础(C C语言)语言)7.7 本章小

    50、结本章小结变量名变量名内内/外变量外变量生存期生存期作用域作用域a外部变量外部变量全局生存期全局生存期文件,可扩展到别的文件文件,可扩展到别的文件b外部变量外部变量全局生存期全局生存期文件,在别的文件中定义文件,在别的文件中定义c外部变量外部变量全局生存期全局生存期本文件本文件d内部变量内部变量自动生存期自动生存期块块e内部变量内部变量自动生存期自动生存期块块g内部变量内部变量自动生存期自动生存期块块h内部变量内部变量自动生存期自动生存期块块i内部变量内部变量全局生存期全局生存期块块j内部变量内部变量全局生存期全局生存期块,在别的文件中定义块,在别的文件中定义k内部变量内部变量自动生存期自动生

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

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


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


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

    163文库