




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 2 25 程序设计基础 C语言 wh 1 第九章 预处理和标准函数 2020 2 25 程序设计基础 C语言 wh 2 本章内容 9 1预处理命令9 2输入输出标准函数9 3自定义头文件设计的原则小结 2020 2 25 程序设计基础 C语言 wh 3 9 1预处理命令 作用 编译之前 由编译预处理程序对源程序做一些处理 将它们转换成能由C编译程序接受的正文 种类 宏定义文件包含条件编译格式 开头占单独书写行以换行符结尾 2020 2 25 程序设计基础 C语言 wh 4 9 1 1宏定义1 简单的宏定义简单宏定义的一般形式为 define标识符单词串作用域 从 define定义之后直到该宏定义所在文件结束 说明 define行通常放在源程序开头部分 也可以放在源程序中任何位置 但必须出现在使用符号常量之前 例如 defineYES1 defineNO0程序中用符号常量YES和NO代表1和0 在预编译时就会用1和0替换所有的YES和NO 宏名 任意以回车换行结尾的文字 2020 2 25 程序设计基础 C语言 wh 5 注意 1 通常用大写字母来定义宏名 以便与变量名区别 2 宏替换只是简单的字符替换 不进行任何计算和语法检查 例如 defineX1 2inty 3 X 预处理时 会用字符串 1 2 来替换宏名X 因此y的值应该为3 1 2 结果为5 而不是3 1 2 6 3 双引号括起来的字符 即使与宏名相同 也不进行替换 例如 defineOK1printf OK 执行时输出的是OK 而不是1 4 宏定义可以嵌套定义 例如 defineR2 0 definePI3 14 defineSPI R R经预处理后 宏S将被3 14 2 0 2 0替换 2020 2 25 程序设计基础 C语言 wh 6 2 带参数的宏定义带参数的宏定义的一般形式为 define标识符 标识符1 标识符2 单词串例如 definesqr x x x definemax a b a b a b 语句printf sqr d d n 3 sqr 3 预编译时 此句将被替换成 printf sqr d d n 3 3 3 执行后输出sqr 3 9 语句printf max d d d n 2 3 max 2 3 预编译时 将被替换成 rintf max d d d n 2 3 2 3 2 3 执行后输出max 2 3 3 2020 2 25 程序设计基础 C语言 wh 7 注意 在带参数的宏定义中 如果单词串是一个含有运算符的表达式 那么单词串中的每个参数都必须用圆括号括起来 并且整个表达式也要括起来 否则替换后的内容可能和原意不同 如将上例中sqr x 的宏定义改为 definesqr x x x则表达式sqr 1 2 将被替换成 sqr 1 2 1 2 结果是5 而不是原意希望得到的9 2020 2 25 程序设计基础 C语言 wh 8 3 取消宏名定义如果需要终止宏的作用域 可以使用 undef命令 取消宏名定义的形式为 undef标识符要求 标识符应该是已定义过的宏名 例如 undefPI表示在该命令后 PI是一个未定义的标识符 不再表示3 14 2020 2 25 程序设计基础 C语言 wh 9 9 1 2文件包含文件包含命令有两种形式 include include 文件名 功能 用指定文件的全部内容替换程序中该命令行 从而使指定的文件与当前源文件连成一个源文件 程序中需要引用标准库函数时 需要在源文件开头用文件包含命令包含库函数的头文件 例如 include include 2020 2 25 程序设计基础 C语言 wh 10 文件包含两种形式的区别 使用尖括号表示编译系统根据系统头文件存放的目录路径去搜索系统头文件 而不是在源文件目录去查找 使用双引号则表示编译系统首先在当前的源文件目录中查找 若未找到才根据系统头文件存放的目录路径去搜索系统头文件 用户编程时可根据自己文件所在的目录来选择某一种命令形式 一般来说 系统定义的头文件通常用尖括号 用户自定义的头文件通常用双引号 2020 2 25 程序设计基础 C语言 wh 11 9 1 3条件编译功能 可以按不同的条件去编译不同的程序部分 因而产生不同的目标代码文件 从而有利于程序的移植和调试 1 第一种形式 ifdef标识符程序段1 else程序段2 endif作用 如果标识符已被 define命令定义过 则对程序段1进行编译 否则对程序段2进行编译 如果程序段2为空 可以写为 ifdef标识符程序段 endif 2020 2 25 程序设计基础 C语言 wh 12 例9 2 已知a1 10 a2 3 an 3an 1 an 2 求 an 前10项之和 include defineDEBUGvoidmain void inta1 10 a2 3 i x sum sum a1 a2 for i 3 i 10 i x 3 a2 a1 sum x a1 a2 a2 x ifdefDEBUGprintf x d sum d n x sum endif printf 前10项和 d n sum 程序运行如下 x 1 sum 8x 0 sum 8x 1 sum 9x 3 sum 12x 10 sum 22x 33 sum 55x 109 sum 164x 360 sum 524前10项和 524 2020 2 25 程序设计基础 C语言 wh 13 2 第二种形式 ifndef标识符程序段1 else程序段2 endif功能 如果标识符未被 define命令定义过 则对程序段1进行编译 否则对程序段2进行编译 2020 2 25 程序设计基础 C语言 wh 14 3 第三种形式 if常量表达式程序段1 else程序段2 endif功能 如常量表达式的值为真 非0 则对程序段1进行编译 否则对程序段2进行编译 因此可以使程序在不同条件下 完成不同的功能 例如 defineTEST1 ifTESTprintf string test s n string test endif 2020 2 25 程序设计基础 C语言 wh 15 9 2输入输出标准函数 9 2 1格式输出函数 printf printf函数的调用形式为 printf 格式字符串 输出项表列 功能 按格式字符串规定的格式输出输出项表列中的各项 格式字符串中有两类字符 普通字符和用于转换说明的字符 普通字符按原样输出 转换说明用于说明数据输出格式 转换说明的形式为 域宽 转换字符例如 d 5 2f 2020 2 25 程序设计基础 C语言 wh 16 printf的转换字符 2020 2 25 程序设计基础 C语言 wh 17 printf域宽说明字符 2020 2 25 程序设计基础 C语言 wh 18 例9 3 转换字符及域宽说明示例 includevoidmain void inti 97 printf d o x c n i i i i printf d 4d 04d 04d 5d n i i i i i 程序运行如下 97 141 61 a 97 97 0097 097 00097 2020 2 25 程序设计基础 C语言 wh 19 9 2 2格式输入函数 scanf scanf函数的调用形式为 scanf 格式字符串 输入项地址表列 功能 按格式字符串规定的格式 在键盘上输入各输入项的数据 并依次赋给各输入项 scanf函数中的格式字符串的构成与printf函数的基本相同 但要注意 1 空格 制表符将被忽略 其是分隔符 2 非 的普通字符 需要输入同样的字符与之匹配 3 在 与转换字符之间可以有下列选项 使对应的输入数据不赋给相应变量 m 指定输入数据宽度 h l或L 指出参数所指变量类型 2020 2 25 程序设计基础 C语言 wh 20 常见的scanf转换字符 2020 2 25 程序设计基础 C语言 wh 21 通常在scanf函数的格式字符串中不包含非 普通字符 此时输入数据遇到下列三种情况表示结束 1 从第一个非空字符开始 遇空格 Tab键或回车结束 2 遇宽度结束 3 遇非法输入结束 若在格式字符串中出现了非 普通字符 则表示在输入时应在相应的位置输入同样的字符 例9 5 输入数据示例 includevoidmain void inti j k scanf d d d 2020 2 25 程序设计基础 C语言 wh 22 9 3自定义头文件设计的原则 在编写较大的程序时常常用到大量的变量和宏定义 这些内容都和程序放在一个源文件中 使得文件的长度加大 不仅增加程序的阅读难度 而且容易出现失误 此时 程序员可以将多个文件共用的符号常量定义和宏定义等单独组成一个头文件 然后在其他需要这些定义和说明的源文件中用文件包含命令包含该头文件 2020 2 25 程序设计基础 C语言 wh 23 自定义头文件的设计应遵循以下原则 1 用途一致 头文件中的各个功能应该属于同一类问题 例如 stdio h接口中的函数都是用于输入和输出的 而math h中的函数则都是与数学计算和处理有关的 2 操作简单 头文件中的各个函数应尽量方便用户程序的调用 将各个函数功能的实现细节尽可能地隐藏起来 3 功能充足 在设计头文件前应该对设计问题进行深入广泛的调查研究和需求分析 以便保证有足够完善的功能 其功能具有一定的普遍性 以满足各类用户的需求 4 性能稳定 在设计头文件的时候 应该对每个函数的功能进行严格地测试 以确保各函数功能的实现不会受到任何特殊因素的影响 2020 2 25 程序设计基础 C语言 wh 24 小结 预处理功能是 语言特有的功能 它是在对源程序正式编译前由
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上海市房屋买卖合同
- 2025兼职劳务合同范本
- 租车合同注意事项及模板
- 婚前财产协议书有法律效力
- 网络服务与协议书
- 消防安全行业市场分析
- 复兴大坝协议书
- 许可协议书范本
- 买房协议书离婚
- 小说离婚协议书怎么
- 陕西省西工大附中2022-2023学年七年级上学期第一次月考英语试卷(含答案)
- 2025辅警考试题库(含答案)
- QGDW10212-2019电力系统无功补偿技术导则
- 牛奶面包食品配送服务 投标方案(技术方案)
- 菜鸟驿站运营管理制度
- 风管安装协议书
- 个人车位租赁合同(含充电桩安装)
- 2025年人教版小学六年级上册奥林匹克数学竞赛测试题(附参考答案)
- 第三方垫付协议合同协议
- 《鸿蒙HarmonyOS应用开发基础》全套教学课件
- 订购包装木箱合同协议
评论
0/150
提交评论