实用程序设计技巧PPT课件_第1页
实用程序设计技巧PPT课件_第2页
实用程序设计技巧PPT课件_第3页
实用程序设计技巧PPT课件_第4页
实用程序设计技巧PPT课件_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1 7 1程序的模块化结构7 2模块的组装7 2 1文件包含与头文件的使用7 2 2模块间的连接7 2 4条件编译宏定义 第七章实用程序设计技巧 2 7 1程序的模块化结构 程序设计是一种工程性的工作 通过对任务进行分析和功能模块分解 将大任务分解为若干子任务 子任务分别进行设计之后 再进行组合 合并为功能强大而复杂的一个整体 7 1 1软件工程的思想 系统设计分四方面内容 体系结构设计模块设计数据结构与算法设计用户界面设计 3 7 1 2模块设计 在设计好软件的体系结构后 已经在宏观上明确了各个模块应具有什么功能 应放在体系结构的哪个位置 保持 功能独立 是模块化设计的基本原则 因为 功能独立 的模块可以降低开发 测试 维护等阶段的代价 功能独立并不意味着模块之间保持绝对的孤立 一个系统要完成某项任务 需要各个模块相互配合才能实现 此时模块之间就要进行信息交流 在设计一个模块时不仅要考虑 这个模块就该提供什么样的功能 还要考虑 这个模块应该怎样与其它模块交流信息 7 1程序的模块化结构 4 7 1程序的模块化结构 模块化设计时通常是将一个大型的程序自上向下的进行功能分解 分成若干个子模块 每个模块对应了一个功能 有自己的界面 有相关的操作 完成独立的功能 各个模块可以分别由不同的人员编写和调试 最后将不同的模块组装成一个完整的程序 评价模块设计优劣的三个特征因素 信息隐藏 内聚与耦合 封闭 开放性 在C语言中 用函数实现功能模块的定义 程序的功能可以通过函数之间的调用实现 5 一个完整工程项目的C程序可能由多个源程序文件组成 每一个文件中又可以包含多个函数 7 1程序的模块化结构 程序 文件1main函数 文件2函数f1函数f2 文件3函数g1函数g2函数g3 6 7 1程序的模块化结构 7 1 3使用模块化方法开发程序的好处 模块可以独立于解决方案的其他部分进行单独的编写和测试 对于大型项目各个模块的开发可以同步进行模块是解决方案的一小部分 单独测试起来更加容易经过仔细的测试之后 不需要重新测试就可以将模块直接应用于新的问题解决方案中使用模块通常可缩短程序的长度 使程序更具可读性模块的使用促使采用抽象的概念 从而允许程序员把细节 隐藏 于模块之中 这使我们能够向使用系统库函数一样使用模块 而无须考虑具体的细节 7 7 2模块的组装 在用模块化方法开发程序时 一个完整工程项目的C程序通常会由多个源程序文件组成 每一个文件中又可以包含多个函数 模块的组装既涉及到多个源文件的连接问题 也涉及到实现具体模块的函数之间的连接调用关系 多个源程序文件之间的连接可用 include命令 8 一 编译预处理命令 1 编译预处理命令 在程序编译之前对源程序进行的工作 它不属于程序中的可执行语句 不占用程序的运行时间 2 预处理命令格式预处理命令均以 打头 单独占一行 行末不加分号预处理命令可以出现在程序的任何位置 其作用域从出现点到所在源程序的末尾 一般将预处理命令放在程序的起始位置 3 预处理命令主要有 宏定义 文件包含 条件编译 7 2 1文件包含与头文件的使用 9 2 文件包含格式 include表示直接到指定的标准包含文件目录中寻找包含文件 对于 include 如果bc31在c盘上 就是到c bc31 include目录中去寻找stdio h这个文件通常使用系统提供的标准头文件时用 二 文件包含1 文件包含 一个源文件可以将另一个源文件的全部内容包含进来 文件包含是一个编译预处理命令 7 2 1文件包含与头文件的使用 使用 include 就是将此头文件中的全部内容包含到现有文件中 使用了文件包含命令 就可以使用系统库函数功能 不必自己亲手编写 10 include 文件名 使用时系统先在当前目录下 即bc31的bin目录 寻找被包含文件 如果找不到 系统再到标准包含文件目录下寻找 即bc31的include目录 通常使用用户自己编写的文件时用 使用 时 文件名可以包含有文件路径 这时系统将到指定的文件目录下去找被包含的文件例 include d teach include compute h 7 2 1文件包含与头文件的使用 11 3 说明 1 文件包含的作用就是在编译预处理时将被包含文件的全部内容复制并插入到 include命令处 2 一个include命令只能指定一个被包含文件 如果有n个被包含文件则需要用n个include命令 且一个命令占一行 3 使用文件包含时 在被包含文件中绝对不能含有main函数 4 文件包含可以嵌套使用 5 被包含文件中的全局变量在其所在的文件中有效 7 2 1文件包含与头文件的使用 例文件file1 cpp include include file2 cpp include file3 cpp voidmain intx y s1 s2 scanf d d 文件file2 cppintmax inta intb return a b a b 文件file3 cppintmin inta intb return a b a b 文件stdio h的内容 intmin inta intb return a b a b intmax inta intb return a b a b voidmain intx y s1 s2 scanf d d 注 文件file1 cpp file2 cpp file3 cpp都在目录c bc31 bin下 文件stdio h的内容 intmin inta intb return a b a b intmax inta intb return a b a b 例文件file1 cpp include include file3 cpp voidmain intx y s1 s2 scanf d d 文件file2 cppintmax inta intb return a b a b 文件file3 cpp include fill2 cpp intmin inta intb return a b a b voidmain intx y s1 s2 scanf d d 14 7 2 2模块间的连接 模块函数间的连接可以分为短暂连接和长久连接 短暂连接是指只有在模块函数被调用时通过函数参数的传递或函数返回值和其他模块发生的连接关系 这是模块连接所采用最普遍的连接方式 也叫做临时连接 当函数调用结束后连接关系就消失了 长久连接是通过全局变量或静态存储的变量和其他模块之间产生的连接关系 这种连接是长期存在的 当函数一次调用结束后连接仍然存在 只有当整个程序运行全部结束时连接关系才取消 15 模块间的短暂连接以三种形式存在 普通参数 函数调用时主调函数以实际参数赋给函数的形式参数返回值 函数调用结束后 返回指定的值给主调函数指针参数 指针形式的参数使得函数调用时 函数通过指针直接访问主调函数中变量的内存单元 以此取得变量值或将函数处理结果放到指定的内存单元中 7 2 2模块间的连接 16 模块间的长久连接以如下两种形式表现 全局变量 全局变量又称为外部变量 是定义在函数外部的变量 可以被若干个函数模块所访问 每一个程序模块访问全局变量改变其值后 全局变量的值就发生了永久的改变 函数调用结束后这种值的改变仍然生效 static静态存储类 函数内部用static声明的静态变量是存储在系统的静态存储区的 其生存期较长 不随函数的调用结束而释放 而是在整个程序运行期间一直都保持有效 7 2 2模块间的连接 17 7 2 4条件编译 1 条件编译 对源程序中的一部分内容在满足一定条件时才进行编译 即对一部分内容指定编译的条件 2 条件编译的形式 1 ifdef标识符程序段1 else程序段2 endif 作用 指定的标识符已经被 define命令定义过 则在程序编译阶段只编译程序段1 否则只编译程序段2注 else部分可以没有 18 2 ifndef标识符程序段1 else程序段2 endif 3 if表达式程序段1 else程序段2 endif 作用 当表达式的值为真时编译程序段1否则编译程序段2 作用 若指定的标识符没有被 define命令定义过 则编译程序段1 否则编译程序段2 7 2 4条件编译 19 宏定义 一 不带参数的宏定义1 格式 define标识符字符串 2 说明 1 标识符也称宏名 一般用大写字母表示 2 预处理时将程序中所有的宏名用宏体替换 该过程称 宏展开 但在程序中用 括起来的字符串中 即使有的字符串与宏名相同 也不进行替换 defineSIZE20voidmain intx x SIZE 15 printf SIZE d n SIZE 称为宏体 输出结果 SIZE 35 称为宏名 20 宏定义 3 宏定义只是一种简单的字符替代 不进行语法检查若将 defineSIZE20中20的零写成英文字母 o 程序中的x SIZE 15 会替换为x 2o 15 这时才会发现错误 4 每条宏命令要单独占一行 且行末不加分号 5 define命令出现在函数的外部 宏名的有效范围为定义命令之后到本文件结束 6 可以用 undef命令终止宏定义的作用域 7 宏定义可以嵌套使用例 defineL10 defineW20 defineSL W 8 宏定义与变量定义不同 它只作字符替换 不分配内存空间 3 使用宏替换的优点 提高程序的可读性 易于修改 21 宏定义 二 带参数的宏定义1 格式 define宏名 形参表 字符串 2 说明 1 宏定义时宏名与括号之间没有空格 若有空格则会把空格后的所有字符都看成是宏体 2 带参数的宏在替换时 不仅宏名被宏体替换 同时形参被实参替换 definePI3 14159 defineS r PI r rvoidmain floata area a 3 6 area S a printf f n area 宏替换 area 3 14159 a a 22 宏定义 3 建议带运算符的宏体和形参要用 括起来 voidmain floata b area a 3 6 b 1 2 area S a b printf f n area definePI3 14159 defineS r PI r r 宏替换 area 3 14159 a b a b 宏替换 area 3 14159 a b a b defineS r PI r r 23 宏定义 例 defineSQUARE x x x defineSQUARE x x x defineSQUARE x x x 若a 2 7 SQUARE 3 0 宏展开 a 2 7 3 0 3 0 a 2 7 3 0 3 0 a 2 7 3 0 3 0 若a SQUARE n 1 宏展开 a n 1 n 1 a n 1 n 1 a n 1 n 1 出错 出错 24 宏定义 3 带

温馨提示

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

评论

0/150

提交评论