内容简介 本书逻辑而又巧妙地将 C 语言知识融通到 6 个有趣又实用的案例程序中, 在教授学习 C 语言知识的同时, 教授如何使用 C 语言编写程序 共包括 3 大部分 10 章 第 1 部分 1 章, 介绍了建立 C 语言程序开发环境 ; 第 2 部分 5 章, 通过案例程序简易计算器 猜数游戏和

Size: px
Start display at page:

Download "内容简介 本书逻辑而又巧妙地将 C 语言知识融通到 6 个有趣又实用的案例程序中, 在教授学习 C 语言知识的同时, 教授如何使用 C 语言编写程序 共包括 3 大部分 10 章 第 1 部分 1 章, 介绍了建立 C 语言程序开发环境 ; 第 2 部分 5 章, 通过案例程序简易计算器 猜数游戏和"

Transcription

1 C 语言程序设计 案例教程 吴绍根黄达峰编著 C 语言程序设计案例教程, 清华大学出版社,2018 ISBN: 配套的 C 语言程序设计案例教程 习题解答,2018 ISBN:

2 内容简介 本书逻辑而又巧妙地将 C 语言知识融通到 6 个有趣又实用的案例程序中, 在教授学习 C 语言知识的同时, 教授如何使用 C 语言编写程序 共包括 3 大部分 10 章 第 1 部分 1 章, 介绍了建立 C 语言程序开发环境 ; 第 2 部分 5 章, 通过案例程序简易计算器 猜数游戏和温度转换, 介绍了变量 数据类型 流程控制等 C 语言基础内容 ; 第 3 部分 4 章, 通过案例程序口算测验 数字拼图和学生信息管理系统, 介绍了数组 函数 结构 指针 文件等内容, 并同时强化第 2 部分内容的学习 本书可以作为高等学校计算机类 理工科类专业教材, 也可以作为计算机爱好者的自学教材 另外, 本书配套的 C 语言程序设计案例进阶教程习题解答 提供了本书全部 132 道编程练习题目的参考答案, 供读者选用

3 前 言 本书以全新的视角和方式教授如何编写 C 语言程序, 而不只是简单地教授 C 语言知识 C 语言被公认为是一种简洁而高效的编程语言, 历经几十年经久不衰 但对于很多 C 语言学习者来说, 学习并掌握 C 语言又是一个艰苦的过程 我们通过分析发现, 只要掌握少量的 C 语言知识, 便可以完成数量巨大的编程任务, 从而让学习者尽早进入编程状态, 并应用计算机思维进行问题分析和编程实现 基于这样的思路, 本书挑选能实现顺序 分支以及循环这三大程序结构的最少知识, 以及与这些知识相关的前置知识来组成第一阶段的学习内容, 使学习者能够快速入门, 并在后续章节逐步深化以提升学习效果 本书共 10 章, 分为 3 大部分, 通过 6 个简单有趣的案例循序渐进地把读者带进 C 语言编程的世界 第 1 部分, 准备工作 阶段, 包含第 1 章的内容, 简明扼要地介绍 C 语言的概念和常用开发工具 本书选用 Dev-C++ 和 Code::Blocks 这两个比较流行的开源软件作为主开发工具, 所有的代码均测试通过 第 2 部分, 快速入门 阶段, 包含第 2 ~ 6 章一共 5 章的内容 第 2 章通过 最小的 C 语言程序 和 经典 Hello world 程序 帮助读者快速建立起使用 C 语言进行程序设计的基本概念 第 3 ~ 5 章分别通过三个简单有趣的案例 简易计算器 猜数游戏 和 温度转换 循序渐进地把学习者最需要的知识逐步展开 第 6 章设计了 20 道编程练习题目, 读者只需在第 3 ~ 5 章掌握 C 语言的较小子集, 就可以完成第 6 章的颇有难度的编程练习题目 通过这些编程题的锻炼, 读者的编程能力可以得到有效的提升 第 3 部分, 进阶学习 阶段, 包含第 7 ~ 10 章一共 4 章的内容 其中, 第 7 章通过案例 口算测验 介绍了数组 函数和指针等进阶内容 第 8 章使用结构体和函数重构案例 口算测验 第 9 章则通过案例 数字拼图 介绍了二维数组 变长数组和动态内存分配等进阶内容 最后, 第 10 章通过案例 学生信息管理系统 主要介绍了文本文件的读写 二进制文件的读写和字符串操作等进阶内容 本书设计了 132 道练习题, 其中 129 道是编程题,3 道是简答题, 以确保学习了每一个小节相应的知识点后都至少有数道配套的编程练习题目供读者上机练习 教材配套的 C 语言程序设计案例进阶教程习题解答 提供了本书所有练习题目的参考答案, 可供读者选用 讲授本书内容需要的课时数约为 52 课时, 每章内容的参考课时数分配如下表所示 : 章序号 合计课时数 本教材第 1 章和第 10 章由吴绍根编写, 第 2 章到第 9 章由黄达峰编写 教材配套的 PPT 等资料可以通过微信公众号 从 C 开始 获取 编 者

4 目录 第一阶段准备工作... 1 第 1 章了解 C 语言 : 安装开发环境 关于 C 语言 关于 C 语言开发工具 本章小结 第二阶段快速入门 第 2 章经典 HELLO WORLD: 程序基本框架 最小的 C 语言程序 hello world 程序 本章小结 第 3 章简易计算器 : 数据类型 运算符 流程控制 计算两个整数之和 键盘输入两个整数 计算加法 计算减法和乘法 计算除法和余数 重复执行计算 支持大整数运算 退出计算器 本章小结 第 4 章猜数游戏 : 强化流程控制 标准库函数... 错误! 未定义书签 4.1 键盘输入猜测的整数... 错误! 未定义书签 4.2 判断猜测结果的对错... 错误! 未定义书签 4.3 提示结果偏大或偏小... 错误! 未定义书签 4.4 限制输入整数的范围... 错误! 未定义书签 4.5 允许用户反复猜测... 错误! 未定义书签 4.6 统计猜测次数... 错误! 未定义书签 4.7 限制猜测次数... 错误! 未定义书签 4.8 使用随机数作为目标整数... 错误! 未定义书签 4.9 本章小结... 错误! 未定义书签 第 5 章温度转换 : 浮点数 格式化输出... 错误! 未定义书签 5.1 整数温度转换... 错误! 未定义书签 5.2 高精度温度转换... 错误! 未定义书签 5.3 控制输出精确度... 错误! 未定义书签 5.4 输出温度转换列表... 错误! 未定义书签 5.5 对齐温度转换列表... 错误! 未定义书签 5.6 自定义温度转换列表... 错误! 未定义书签 5.7 本章小结... 错误! 未定义书签 第 6 章阶段练习 : 强化练习... 错误! 未定义书签 第三阶段进阶学习... 错误! 未定义书签 I

5 第 7 章口算测验 : 数组 函数 指针... 错误! 未定义书签 7.1 加法口算测验... 错误! 未定义书签 7.2 加减法口算测验... 错误! 未定义书签 7.3 成绩汇总输出... 错误! 未定义书签 7.4 随机生成题库... 错误! 未定义书签 7.5 使用函数重构代码... 错误! 未定义书签 加法口算测验... 错误! 未定义书签 加减法口算测验... 错误! 未定义书签 成绩汇总输出... 错误! 未定义书签 随机生成题库... 错误! 未定义书签 传递数组到函数... 错误! 未定义书签 7.6 本章小结... 错误! 未定义书签 第 8 章更优雅的口算测验 : 结构体... 错误! 未定义书签 8.1 使用结构体重构代码... 错误! 未定义书签 加法口算测验... 错误! 未定义书签 加减法口算测验... 错误! 未定义书签 成绩汇总输出... 错误! 未定义书签 随机生成题库... 错误! 未定义书签 8.2 使用结构体和函数重构代码... 错误! 未定义书签 加法口算测验... 错误! 未定义书签 加减法口算测验... 错误! 未定义书签 成绩汇总输出... 错误! 未定义书签 随机生成题库... 错误! 未定义书签 传递结构数组到函数... 错误! 未定义书签 8.3 本章小结... 错误! 未定义书签 第 9 章数字拼图 : 二维数组... 错误! 未定义书签 9.1 显示拼图题目... 错误! 未定义书签 9.2 美化拼图外观... 错误! 未定义书签 9.3 显示提示信息... 错误! 未定义书签 9.4 输入数字并移动... 错误! 未定义书签 9.5 判断拼图是否完成... 错误! 未定义书签 9.6 随机数据初始化拼图... 错误! 未定义书签 9.7 本章小结... 错误! 未定义书签 第 10 章学生信息管理系统 : 字符串 文件... 错误! 未定义书签 10.1 搭建系统框架... 错误! 未定义书签 10.2 录入学生信息... 错误! 未定义书签 10.3 保存学生信息... 错误! 未定义书签 10.4 列出所有学生... 错误! 未定义书签 10.5 查询学生信息... 错误! 未定义书签 10.6 修改学生信息... 错误! 未定义书签 10.7 删除学生信息... 错误! 未定义书签 10.8 本章小结... 错误! 未定义书签 附录知识点汇总 参考文献 II

6 III

7 第一阶段准备工作 导读 : 本阶段的主要内容是了解 C 语言的历史和概念, 以及学会安装一种 C 语言开发环境, 为下一阶段的学习做好准备 第 1 章了解 C 语言 : 安装开发环境 1.1 关于 C 语言 C 语言是一门通用的程序设计语言, 使用 C 语言你可以开发你所能想到的任何程序 在学习 C 语言之前, 我们对 C 语言的历史做一个简单的介绍 C 语言是 20 世纪 70 年代初期由美国贝尔实验室 (Bell Lab) 的 Dennis M. Ritchie 设计的一门程序设计语言, 正式发布于 1978 年 C 语言是在 B 语言的基础上发展起来的 由于 B 语言过于简单, 功能有限,1972 年至 1973 年间, 贝尔实验室的 Dennis M. Ritchie 在 B 语言的基础上设计了 C 语言 Dennis M. Ritchie 所设计的 C 语言既保留了 B 语言的优点又克服了 B 语言的缺点, 并且在功能上作了扩展和加强 1973 年,Ken Thompson 和 Dennis M. Ritchie 利用 C 语言改写了 Unix 操作系统 90% 的代码 ( 其余部分采用汇编语言编写 ), 取得了成功 之后, 对 C 语言又进行了多次改进, 特别是采用 C 语言改写的 Unix 的第 6 版发布后,C 语言的成功引起了人们的普遍注意 随着 Unix 操作系统的日益广泛使用,C 语言也迅速得到了推广 1978 年,Brian W. Kernighan 与 Dennis M. Ritchie 合著了影响深远的 The C Programming Language, 这本书介绍的 C 语言称为后来广泛使用的 C 语言版本的基础, 并被称为标准 C 1983 年, 美国国家标准委员会 ANSI 根据 C 语言问世以来的各种版本对 C 语言的扩充, 制定了新的标准, 称为 ANSI C 1987 年,ANSI 又对 C 语言进行规范, 公布了新的标准 ----ANSI C 年, 国际标准化组织 ISO 接受了 ANSI C 87 为 ISO 的 C 标准 目前的 ANSI C 87 版也是 C 语言的国际标准 目前流行的各种版本的 C 语言的基本部分都是以 ANSI C 为基础的, 也就是说, 各种版本的 C 语言都是 ANSI C 兼容的 为了使你编写的 C 语言程序能够在各种编译环境及操作系统上运行, 你也应尽量使你的程序保持 ANSI C 兼容 本书所叙述的 C 语言都是以 ANSI C 为基础的, 因此, 本书的例子都可以在各种编译环境及操作系统下运行 使用 C 语言编写的程序称为 C 语言源代码,C 源程序适合人来阅读, 但是, 不能直接在计算机上运行 为了能使 C 源程序能在计算机上运行, 必须首先将源程序录入到计算机中, 并通过一个称为 C 语言编译器 的工具对其进行 翻译, 将 C 源程序翻译为计算机可执行代码, 这个过程称为 编译, 编译产生的结果程序称为 可执行代码, 这个可执行代码即可直接在计算机上运行 将 C 源程序编译为计算机可执行代码的过程如图 1-1 所示 图 1-1 C 语言编译示意图 1

8 1.2 关于 C 语言开发工具 C 语言开发工具有很多, 常用的有 :Microsoft Visual C++ Dev-C++ Code::Blocks 等等 这些工具一般都把 C 语言程序的编辑 编译 执行以及调试等功能都集成到一个软件中, 称为集成开发环境, 简称为 IDE(Integrated Development Environment) 本书使用 Dev-C++ 这个 IDE 作为开发工具 下载 Dev-C++ 打开平时上网的浏览器, 在地址栏输入 Dev-C++ 开发工具的官方下载网址 : 下载页面如图 1-2 所示 : 图 1-2 Dev-C++ 官方下载页面 鼠标点击 Download 按钮即可开始下载 Dev-C++ 的安装文件 Dev-Cpp 5.11 TDM-GCC 4.92 Setup.exe ( 本例子中下载保存到 R:\download 文件夹 ) 下载结束后如图 1-3 所示, 从文件名可以看出, 集成开发环境 Dev-Cpp 目前的版本号是 5.11, 其中包含的编译器是大名鼎鼎的 GCC 编译器 ( 版本号 4.92) 2

9 图 1-3 Dev-C++ 安装文件 Dev-Cpp 5.11 TDM-GCC 4.92 Setup.exe 安装 Dev-C++ 接下来就是双击运行刚才所下载的 Dev-C++ 安装文件 Dev-Cpp 5.11 TDM-GCC 4.92 Setup.exe 运行后显示的第一个界面是让用户选择安装过程所使用的语言, 如图 1-4 所示 图 1-4 Dev-C++ 安装过程之选择语言 安装过程所使用的语言, 有英语等多种语言可选, 但可惜暂时没有中文 不过, 安装完成后 就可以选择中文界面了 这一步就使用默认的英语选项, 直接点击 OK 按钮到下一步, 显示版 权信息, 如图 1-5 所示 3

10 图 1-5 Dev-C++ 安装过程之版权信息 这一版权信息显示,Dev-C++ 这个软件是按照 GNU GPL 条款发布, 简单来说, 就是属于自由软件和代码开源 如果需要使用该源代码用来学习研究或改进功能, 大家可以访问 Dev-C++ 源代码的官网下载链接获取 : 这里我们继续点击 I Agree 按钮进入到下一步, 选择需要安装的组件, 如图 1-6 所示 图 1-6 Dev-C++ 安装过程之选择组件 4

11 这里选择安装组件的界面已经默认帮我们选择了 Full, 即安装全部的组件 为了方便学习 C 语言程序设计, 一般我们就采用这个默认全部安装的选项, 因此这里只需要点击 Next 按钮 进入到下一步, 选择安装位置, 如图 1-7 所示 图 1-7 Dev-C++ 安装过程之选择安装位置 一般来说, 如果没有什么特殊需求的话, 这里安装路径采用默认的安装位置就可以了 需要留意的是, 安装位置是否有足够的硬盘空间 这里的显示信息表明, 安装 Dev-C++ 需要 346.8MB 的硬盘空间, 目前所选择的安装位置有 27.8GB 的剩余空间, 所以是满足条件的, 继续点击 Install 按钮开始安装 Dev-C++ 开发环境, 安装完成后, 将进入到下一步, 也就是安装过程的最后一步了, 如图 1-8 所示 图 1-8 Dev-C++ 安装过程之安装完毕 5

12 这里提示信息表明,Dev-C 已经安装完成 由于 Dev-C++ 在第一次运行时候需要进行一些简单的配置, 主要是选择运行界面的语言和风格, 所以为了方便我们, 这里默认打勾选择了运行 Dev-C++ 的选项, 接下来我们继续点击 Finish 按钮, 就可以运行刚刚安装好的 Dev-C , 以便进行首次的配置 提示 : 整个安装过程中, 我们全部使用默认选项, 所以只需要使用鼠标不断点击 Next Finish 等按钮就可以成功安装了 第一次运行 Dev-C++ 第一次运行 Dev-C++, 会自动进入到首次配置界面, 如图 1-9 所示 图 1-9 Dev-C++ 首次配置之选择语言 这里可以选择 简体中文 作为 Dev-C++ 的显示语言, 然后点击 Next 按钮进入到下一步, 选择主题, 如图 1-10 所示 6

13 图 1-10 Dev-C++ 首次配置之选择主题 这里的主题, 是指设置 Dev-C++ 运行界面所使用的字体类型以及字体颜色等风格的总称 一 般情况下我们使用默认效果就可以了, 所以这里直接点击 Next 按钮进入到下一步, 也就是最 后一步了, 如图 1-11 所示 图 1-11 Dev-C++ 首次配置之设置成功 到了这里已经显示设置成功, 因此我们只需要点击 OK 按钮就大功告成! 接着会自动显示 Dev-C++ 运行后的中文主界面, 如图 1-12 所示 7

14 图 1-12 Dev-C++ 中文主界面 提示 : 这里首次运行的配置操作, 虽然只有两个步骤, 但对于大部分初学者来说, 可能最关键的地方就是在第一步选择语言的界面一定要记得把原来默认的 English 选项改为 简体中文 也就是说, 从上一小节的安装到这一小节的配置, 只有选择语言这一步不使用默认值 English 而改选 简体中文, 其它步骤都使用默认值就可以了 设置 Dev-C++ 多国语言界面 如果前面的安装过程和配置过程全部使用了默认值, 那么运行 Dev-C++ 后显示的是英文主界 面, 如图 1-13 所示 图 1-13 Dev-C++ 英文主界面 8

15 如果需要设置 Dev-C++ 为简体中文的主界面, 可以点击菜单 Tools -> Environment Options 进行设置, 如图 1-14 所示 图 1-14 Dev-C++ 环境选项配置 在这里就可以选择 简体中文 作为 Dev-C++ 的默认显示语言了 最后点击 OK 按钮保存 刚才的更改即可 练习 1-1 请按照本节的介绍下载并安装 Dev-C++ 软件 练习 1-2 如前所述,Code::Blocks 也是常用的 C 语言开发工具之一 请使用你熟悉的搜索引擎, 例如 等, 搜索关键字 code blocks 找到 Code::Blocks 的官方网站, 然后下载并安装该软件 9

16 1.3 本章小结 1. 关于 C 语言 C 语言是一门通用的程序设计语言, 诞生于 20 世纪 70 年代初 C 语言的作者是美国贝尔实验室的 Dennis M. Ritchie 和 Ken Thompson C 语言白皮书 The C Programming Lanugage 的作者是 Brian W. Kernighan 和 Dennis M. Ritchie 使用 C 语言编译器可以把 C 语言源程序编译为可执行代码 2. 关于 C 语言开发工具 Microsoft Windows 系统下常用的 C 语言开发工具有 :Microsoft Visual C++ Dev-C++ Code::Blocks 等 10

17 第二阶段快速入门 导读 : 本阶段首先在第 2 章使用两个小例子 最小的 C 语言程序 和 hello world 介绍 C 语言程序的基本框架, 然后在第 章使用三个简单而有趣的例子介绍 C 语言的变量 数据类型 运算符 流程控制 标准库函数等基本内容, 最后在第 6 章精心设计了 20 道编程练习题目供读者上机练习, 强化程序设计的思维, 体现学以致用的原则 前后章节之间按照循序渐进的原则来编写, 每个案例之中也按照先易后难的原则分解为若干个步骤来编写程序代码, 所以建议读者按照章节顺序进行学习 第 2 章经典 hello world: 程序基本框架 一般来说, hello world 程序 是学习 C 语言或其它编程语言的入门程序 比 hello world 程序 更简单的 C 语言程序, 在本书中称为 最小的 C 语言程序 先学习 最小的 C 语言程序 再学习 hello world 程序, 体现了循序渐进的原则 通过本章的学习, 读者可以逐步理解和掌握 C 语言程序的基本框架 2.1 最小的 C 语言程序 每一个 C 语言程序, 无论规模大小, 都是由函数和变量组成的 函数中包含有若干用于指定所要做的计算操作的语句, 变量则用于在计算过程中保存相关数值 这里所说的函数和变量, 比较类似于数学中的函数与变量, 但又不完全相同 刚刚接触这些概念, 可能会让人难以理解, 不要紧, 万事开头难, 后面我们会对这些概念一一介绍 一个符合 C 语言标准的最小程序可以仅由 4 行简单代码组成, 如源代码 2-1 nothing.c 所示 当然了, 这个程序只是搭建了一个 C 语言程序的框架而已, 事实上并没有从键盘接收任何数据, 也没有向屏幕输出任何信息 这个程序非常简单, 只有一个函数, 函数名字是 main 这个程序目前没有定义变量 01 int main() 02 { 03 return 0; 04 } 源代码 2-1 nothing.c 一般来说, 我们可以根据需要给函数起一些有代表意义的名字, 但 C 语言规定, 整个 C 语言程序的入口必须是名字为 main 的函数, 而这里只有一个函数, 因此这里必须命名为 main 宏观上一个 C 程序的结构是由若干个并列关系的函数构成, 整个程序从 main 函数开始执行, 然后通过调用和控制其它函数进行工作 每个函数又由若干语句组成 main 函数和其它函数工作结束后, 有时候是需要传回一个值给该函数的调用者来使用 C 语言是一种强类型的程序设计语言, 因此这里定义 main 函数的同时需要说明函数结束时候要返回的值是什么类型 C 语言规定 main 函数的返回值类型必须是整数 (Integer) 类型, 用关键字 int 表示 11

18 main 函数后面跟着一对圆括号 ( ) 圆括号内可以接收一些变量作为参数传递给函数进行工作 本程序目前不需要传递参数, 因此圆括号内可以留空白 概括起来, 本程序第 1 行的功能是 : 定义一个名字为 main 的函数作为整个 C 语言程序的执行入口函数, 不需要接收变量作为参数, 函数结束后将会返回一个整数类型的数值给 main 函数的调用者 第 2~4 行代码则是 main 函数的函数体, 表明了调用 main 函数后实际要执行的具体代码 函数体中的 C 语言语句由一对花括号 { } 括起来 本例中,main 函数的函数体只包含了一个语句, 即第 3 行的语句 第 3 行代码是一个由 C 语言关键字 return 和整数 0 组成的语句,return 和 0 之间用空格隔开, 语句的末尾用分号结束 return 语句的功能是结束当前的函数并返回一个整数值给该函数的调用者 这里, 为什么必须返回整数 0? 因为在第 1 行, 我们定义 main 函数必须返回一个整数 至此, 我们可以了解到, 这个最小的 C 语言程序, 其功能是实现了一个 C 语言所规定的必不可少的入口函数 main( ), 函数体只有一个 return 语句, 用于结束当前函数并返回整数值 0 给 main 函数的调用者, 除此之外就没有其它语句了 由于 main 函数是整个程序的执行入口, 结束了 main 函数就是相当于终止了该程序的运行 本例子使用了 C 语言的 2 个关键字 :int 和 return 关键字(Key word), 又称 保留字, 是已经定义了含义和功能的词语, 不能作为其它用途使用, 例如不能用作函数名字或变量名字等 ANSI C 标准定义了 32 个关键字, 如表 2-1 所示 我们先了解一些这些关键字, 在后续的章节中, 我们会对这些关键字的含义和用法作介绍 表 2-1 ANSI C 关键字 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 提示 : main 不是 C 语言的关键字, 而是具有特殊用途的函数名字 编辑源代码 现在可以启动 Dev-C++ 开发工具进行源代码的编辑录入了 鼠标点击菜单 文件 -> 新建 -> 源代码, 就可以创建一个新文件来编辑录入 C 程序源代码 注意, 为了便于讲解程序功能, 源代码 2-1 所示的源代码是在每一行特意人为加上了行号的, 后面其它例子的源代码也是一样 因此, 我们录入源代码到 Dev-C++ 开发工具就不需要输入行号的, 输入如下源代码即可 : int main() { return 0; } Dev-C++ 开发工具默认是自动显示行号的, 如图 2-1 所示 行号仅仅是用来辅助显示以方便我 们阅读, 并不是源代码的一部分 12

19 图 2-1 Dev-C++ 默认显示行号 C 语言是区分大小写的, 因此录入源代码的时候请注意,int main 和 return 这 3 个英文单词要求全部小写 C 语言用到的其它符号, 要求在英文输入法状态下输入 这里圆括号 ( ) 花括号 { } 和分号 ; 需要在英文输入法下输入, 不能在中文输入法或其它非英文输入法下输入 第 3 行 return 语句前面的空白, 可以输入 4 个空格键或者输入一个 Tab 键来实现 有些程序员喜欢使用 2 个空格或 8 个空格来缩进代码 这里我们统一采用 4 个空格的方案 其实,C 语言对于缩进多少是没有要求的, 在没有引起歧义的情况下, 甚至不留任何空格也是完全没有问题的 例如, 这个例子我们完全可以写作 1 行代码 : int main(){return 0;} 这里,int 和 main 之间必须至少有一个空格或 Tab 键来分隔,return 和 0 之间也一样, 否则它们就会产生歧义 这样的写法, 虽然缩短了源代码的长度, 节约了版面, 但是可读性大大降低, 弊大于利 代码量一多, 阅读起来将会非常困难和低效 这是一个非常糟糕的习惯, 千万不要使用这样的风格来编辑你的代码! 我们把空格 Tab 键以及 Enter 键这 3 种符号统称为 空白 (White-space) 我们应该在适当的地方留有足够多的空白, 以提高源代码的可读性 初学者应该先严格按照本书的示范例子来排版源代码, 然后勤思考多总结, 哪些地方该缩进, 哪些地方该留空白, 逐渐养成良好的缩进和留白习惯 提示 : 一个 Tab 键可以向右缩进多少个空格, 这是可以由软件来设置的 Dev-C++ 默认是 4 个空格 如果在一个源代码里面混合使用空格和 Tab 键来缩进代码, 那么以后在其它开发工具打开且其 Tab 键的设置跟原来不同, 将会引起缩进混乱, 反而严重影响代码的可读性 应该在同一个源代码文件中只使用一种缩进方案 要么空格, 要么 Tab 键, 不可混用 保存源代码 刚才编辑录入的源代码需要保存到一个扩展名为.c 的文件才能进行编译 鼠标点击菜单 文 件 -> 保存, 就会出现保存文件的对话框, 如图 2-2 所示 首先在 保存在 栏目中选择一个用于存放该源代码文件的文件夹 ( 本例子使用 D:\C 13

20 Book\hello world 文件夹存放 ), 接着选择保存类型为 C source files(*.c), 最后输入文件名 nothing ( 本例子使用 nothing 作为主文件名, 由于选择了保存类型为 C source files(*.c), 因此会在主文件名后面自动加上扩展名.c 组成完整的文件名 nothing.c ) 本例中, 最终保存文件的绝对路径是 D:\C Book\hello world\nothing.c 图 2-2 Dev-C++ 保存文件对话框 提示 : 建议按照如下先后顺序来操作保存对话框 : 1 [ 保存在 ] 2 [ 保存类型 ] 3 [ 文件名 ] 不少初学者往往在填写了文件名后就顺手按 [ 保存 ] 按钮, 导致文件的 [ 保存类型 ] 为默认的 C++ source file(*.cpp), 并没有修改为 C source file(*.c) C 和 C++ 是两种不同的语言, 这两种语言有很多共同一致的地方, 但两者的差别在很多时候也是比较显著的 为了避免以后在编译和运行 C 语言的过程中出现一些莫名其妙的错误, 从一开始我们就应该严格按照这个顺序来操作, 以避免不必要的折腾 编译源代码 鼠标点击菜单 运行 -> 编译, 或者直接按键盘功能键 F9, 可以把当前源代码编译为可执行文件 在 编译日志 小窗口可以看到编译过程的提示信息 我们要关注错误 (Error) 的数量和警告 (Warning) 的数量 一般情况下, 如果前面的录入编辑是正确的, 那么这里两个数量都正常显示为 0, 如图 2-3 所示 14

21 图 2-3 Dev-C++ 编译日志窗口 如果错误数量为 0, 那么 Dev-C++ 就会在该源代码同一个文件夹下生成一个扩展名为.exe 的可执行文件, 本例中具体是 D:\C Book\hello world\nothing.exe, 如图 2-4 所示 图 2-4 源代码文件 nothing.c 以及对应的可执行文件 nothing.exe 如果错误数量不为 0, 那么就不会生成可执行文件 这时候需要根据具体的出错提示信息, 认真检查源代码是否有录入错误, 排除错误后再重新编译 提示 : Microsoft Windows 系统的资源管理器默认不显示已知文件类型的扩展名, 即图 2-4 中的.c 和.exe 是看不到的 这不影响我们的使用, 我们可以根据 类型 这一列信息了解文件的类型和扩展名 如果要像上图一样直接显示 主文件名. 扩展名 形式的完整文件名, 可以在 Windows 系统的 控制面板 -> 所有控制面板项 -> 文件夹选项 中选择 查看 栏目, 取消 隐藏已知文件类型的扩展名 前面的打勾, 然后按 确认 按钮即可, 如图 2-5 所示 15

22 图 2-5 Windows 系统的文件夹选项对话框 运行程序 前面已经把源代码成功编译为可执行文件, 接下来就可以运行该程序 鼠标点击菜单 运行 -> 运行, 或者直接按键盘功能键 F10, 可以运行该可执行文件 nothing.exe 运行结果如 图 2-6 所示 Process exited after seconds with return value 0 请按任意键继续... 图 2-6 nothing.exe 运行结果 这个程序的输出结果屏幕有 4 行信息 : 第 1 行是本程序的真正输出信息 不过, 这里目前输出是空白, 因为从源代码看, 该程序并没有使用输出语句来输出信息, 因此空白的输出结果是正常结果 第 2~4 行的信息是 Dev-C++ 这个开发工具默认添加输出的辅助信息 第 2 行输出一条有多个 - 符号组成的分隔线, 以区别于前面的输出信息 第 3 行输出一句英文, 中文大意为 该进程运行时间为 秒, 并且返回值是整数 0 由于我们是使用 Dev-C++ 这个软件来运行这个 C 语言编写的程序, 即 Dev-C++ 这个软件是该 C 语言程序 main 函数的调用者, 所以 main 函数的结束语句 return 0 就把整数 0 返回给调用者, 即传 16

23 递给 Dev-C++ 软件 Dev-C++ 接收该返回值并显示在这里 第 4 行显示的信息 请按任意键继续... 是 Dev-C++ 为了方便我们观察屏幕信息而提供的辅助功能 该功能的作用是让程序暂停, 直到用户按下键盘中的任意一个键才继续 应用在这里, 就是让我们编写的 C 语言程序运行得到输出结果后, 其输出窗口不会立刻消失, 暂停等待让我们慢慢去查看输出结果 提示 : 我们可以尝试改变源代码中 return 语句后面的整数, 把 0 修改为其他整数, 例如 或者 , 然后重新保存 编译和运行, 并观察输出屏幕显示的返回值是否跟着改变 按照习惯, 一般返回值为 0 表示程序正常结束, 返回其它整数表示各种错误状态 2.2 hello world 程序 一般来说, 程序的运行过程就是一个 I-P-O 过程, 即 Input-Process-Output( 输入 - 处理 - 输出 ) 用户通过键盘等输入设备输入将要处理的数据, 然后计算机加工处理这些数据, 最后输出结果到显示器等输出设备 上面的例子是最小的 C 语言程序, 小到什么程度呢? 没有输入, 没有输出, 也没有处理! 从 main 函数入口进去, 然后执行的唯一语句就是功能为结束函数的 return 语句 main 函数运行结束了, 也就是相当于整个程序的运行也结束了 夸张一点的说法是 还没有开始就已经结束了 按照循序渐进的学习原则, 我们在上一个例子的基础上, 加上一个输出语句, 功能是在显示器屏幕上显示一句话 hello, world, 程序代码如源代码 2-2 hello.c 所示 01 #include <stdio.h> 02 int main() 03 { 04 printf("hello, world\n"); 05 return 0; 06 } 源代码 2-2 hello.c 这是 ANSI C 风格的 hello world 经典程序 第 4 行语句就是所添加的输出语句, 该语句通过调用一个名字为 printf 的 C 语言标准库函数来实现输出信息到默认显示器屏幕的功能 用双引号括住的字符序列称为字符串 (String) 字符串由中文文字 英文字母 标点符号等文字和符号组成 函数 printf( ) 接收一个字符串类型的参数, 即 hello, world\n, 并输出该内容到显示器屏幕 字符串 hello, world\n 里面的信息可以分为两种类型 : 一种是原样输出的信息, 另一种的带转义功能的信息 本例中, hello, world 是原样输出的信息, \n 是带转义功能的信息 原样输出 的意思, 是指这些文字信息在调用函数 printf( ) 输出到显示器屏幕的时候, 是不加任何修改直接复制到屏幕显示出来 比如, 原来是小写字母, 那么就在屏幕显示该小写字母, 而不会显示大写或是其它字母或者其它符号 字符序列 \n 表示换行符, 可以认为是对应于键盘上的 Enter 键 字符 n 原本是一个普通字符, 应该被原样输出的, 但由于字符 \ 具有转义功能, 两者的组合 \n 便改变了字符 n 17

24 原来的含义和功能 诸如 \n 之类的换码序列 ( 也称为 转义字符序列 ) 为表示不能打印或不可见字符提供了 一种通用可扩充机制 C 语言定义了如表 2-2 所示的换码序列 表 2-2 换码序列 换码序列 功能含义 换码序列 功能含义 \a 响铃符 \\ 反斜杠, 即 \ \b 回退符 \? 问号, 即? \f 换页符 \ 单引号, 即 \n 换行符 \ 双引号, 即 \r 回车符 \ooo 八进制整数, 例如 \031 \t 横向制表符 \xhh 十六进制整数, 例如 \x19 \v 纵向制表符 第 1 行是名为 #include 的预编译指令, 它不是 C 语言语句 预编译指令 #include <stdio.h> 的作用是在真正编译该 C 语言源代码之前, 找到一个名字为 stdio.h 的习惯上称为 头文件 的特殊文件并复制该文件的内容插入到这里 也就是说, 把整个 stdio.h 文件的内容包含进来并替换这里原来第 1 行的内容 文件 stdio.h 称为 C 语言标准库的头文件 (Header File), 包含有关标准输入输出 (Standard input/output) 功能的库函数, 供我们直接使用 函数 printf( ) 是在该头文件定义描述的 由于第 4 行代码调用了函数 printf( ), 按照 C 语言 先定义后使用 的要求, 所以这里在第 1 行就使用预编译指令 #include 把对应的标准库头文件 stdio.h 包含进来 C 语言已经编写了一些常用的程序功能, 并形成了称为 函数库 的程序集合, 称为标准库 ANSI C 标准定义了 15 个标准库, 它们对应的头文件如表 2-3 所示 关于 C 语言标准库更详细的信息可以参考 表 2-3 ANSI C 标准库 assert.h ctype.h errno.h float.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stddef.h stdio.h stdlib.h string.h time.h 为什么包括 C 语言在内的大多数编程语言一般都是输出一个 hello, world 字符串作为编程的入门例子呢? Hello world 的起源要追溯到 1972 年,Unix 系统的发明者以及 C 语言的协同发明者 Brian W. Kernighan 在撰写文章 A Tutorial Introduction to Language B 中首次使用 hello, world, 这是目前已知最早的计算机著作中将 hello 和 world 一起使用的记录 然后 Brian W. Kernighan 和 C 语言的发明者 Dennis M. Ritchie 合作撰写 C 语言圣经 The C Programming Language, 沿用了 hello, world 句式, 作为开篇的第一个程序, 如下图所示 #include <stdio.h> main( ) { printf("hello, world\n"); } 18

25 这就是著名的 K & R 风格的 hello world 程序 : (1) main 函数前面没有 int 关键字 ; (2) main 函数不需要 return 语句返回整数值 ; (3) hello, world 全部是小写, 没有感叹号, 逗号后有一个空格 从此以后, 很多程序设计语言相继效仿, 使用 hello, world 向世界打招呼逐渐成为一种习惯 提示 : 现在初学者学习 C 语言程序设计, 直接按照 ANSI C 标准编写程序即可 但由于历史原因, 现在在网络上有时候还会看到古老的 K & R 风格的程序代码例子, 我们能够识别出来即可 如果在运行这些古老代码的时候出现不兼容现象, 只要参考 ANSI C 标准对这些代码作出一些简单的修正, 使其符合现代编码规范, 一般就可以正常编译和运行了 编辑源代码 再次提醒, 为了便于讲解程序功能, 源代码 2-2 hello.c 所示的源代码是人为特意在每一行加 上了行号的, 后面其它例子的源代码也是一样 因此, 我们录入源代码到 Dev-C++ 开发工具是不 需要输入行号的, 输入如下源代码即可 : #include <stdio.h> int main() { printf("hello, world\n"); return 0; } 提示 : (1) 请认真比较上图所示的程序代码与刚刚录入到 Dev-C++ 开发工具的代码, 要做到一模一样! (2) 本例子中的字母全部是小写, 字母以及所有其它符号 ( # < > ( ) { } \ ; ) 都需要在英文输入法半角状态下输入 (3) #include 和 <stdio.h> 之间使用一个空格分隔 ; int 和 main() 之间使用一个空格分隔 ; return 和整数 0 之间使用一个空格分隔 (4) 第 4 5 行的缩进, 建议初学者统一采用 Tab 键来缩进 保存源代码 具体操作请参考前面的章节 保存源代码, 把上一例子中的 nothing 换为 hello 即可, 其它操作不变 本例中, 源文件命名为 hello.c, 最终保存文件的绝对路径是 D:\C Book\hello world\hello.c 提示 : 再次提醒, 保存的过程中, 需要选择保存类型为 C source file(*.c), 而不是 C++ source file(*.cpp) 编译源代码 19

26 鼠标点击菜单 运行 -> 编译, 或者直接按键盘功能键 F9, 可以把当前源代码编译为可执行文件 假如上一步的编辑录入没有出错, 那么应该可以在 hello.c 的同一文件夹下生成一个 hello.exe 的可执行文件 ( 绝对路径是 D:\C Book\hello world\hello.exe ), 如图 2-7 所示 图 2-7 源代码文件 hello.c 以及对应的可执行文件 hello.exe 假如录入过程中漏了一个分号 ;, 那么编译将会不成功, 即不会生成可执行文件, 同时会 给出出错信息, 如图 2-8 所示 图 2-8 编译出错信息 缺少分号 出错提示信息 [Error]experted ; before return 表明, 编译器期望在 return 关键字之前有一个分号 ; 换句话说, 就是在第 4 行代码的最后缺少一个分号 ; 据此, 我们在第 4 行的最后加上一个分号, 然后保存和重新编译即可 又假如, 编译过程中出现如图 2-9 所示的出错信息 : 20

27 图 2-9 编译出错信息 print 没有定义 那么, 根据出错提示信息 undefined reference to print ( 引用了一个没有定义的 print ), 我们稍作对比, 便知道出错的原因, 是标准输出函数 printf( ) 的名字漏了一个字母 f 添加所缺字母然后保存并重新编译即可 提示 : 标准输出函数 printf( ) 的名字是由 print formatted ( 格式化打印 ) 组合而成,printf 末尾的 f 是 formatted 的缩写 运行程序 1. 使用开发工具运行程序前面已经把源代码成功编译为可执行文件, 接下来就可以运行该程序 鼠标点击菜单 运行 -> 运行, 或者直接按键盘功能键 F10, 可以运行该可执行文件 hello.exe 运行结果如图 2-10 所示 hello, world Process exited after seconds with return value 0 请按任意键继续... 图 2-10 hello.exe 运行结果 21

28 这个程序的输出结果屏幕有 5 行信息 : 第 1~2 行是本程序的真正输出信息 第 1 行是 hello, world 的输出结果 第 2 行是 \n 的输出结果, 把光标从某个当前位置移动到下一行的行首, 即换行 由于后面没有输出任何信息了, 所以这里表现出来就是空白的一行 第 3~5 行的信息是 Dev-C++ 这个开发工具默认添加输出的辅助信息, 可以参考前面章节 运行程序 的解释说明 2. 在命令提示符下运行程序在 Dev-C++ 里使用 运行 菜单或 F10 功能键来运行编译后的可执行文件, 并不是唯一的方法 事实上,C 程序源代码一旦编译为可执行文件, 那么就可以脱离 Dev-C++ 等开发工具环境独立运行了 我们可以把编译后的可执行文件复制或网络传输到别的计算机上运行, 这些计算机是不必安装 Dev-C++ 等开发工具的 Microsoft Windows 系统提供了一个名为 命令提示符 的工具, 用来接收用户键盘输入的命令, 然后交给操作系统去调度 CPU 执行, 最后把命令运行的结果显示出来 这个 命令提示符 工具, 习惯上也称为 DOS 窗口 命令窗口 等 可以从 Microsoft Windows 系统的开始菜单 所有程序 -> 附件 找到并运行 命令提示符 运行后如图 2-11 所示 命令提示符 Microsoft Windows [ 版本 ] 版权所有 (c) 2009 Microsoft Corporation 保留所有权利 C:\Users\geecy> 图 2-11 Windows 系统自带的 命令提示符 工具 提示 : 也可以在 Microsoft Windows 系统开始菜单的搜索框中直接输入 cmd.exe 或 cmd 来找到并运行 命令提示符 工具 使用鼠标左键按住 Windows 资源管理器所显示的 hello.exe 可执行文件, 然后拖动到这个命令 窗口, 就可以避免逐一打字输入命令来运行 hello.exe, 如图 2-12 所示 命令提示符 Microsoft Windows [ 版本 ] 版权所有 (c) 2009 Microsoft Corporation 保留所有权利 C:\Users\geecy>"D:\C Book\hello world\hello.exe" Enter hello, world C:\Users\geecy> 图 2-12 使用 命令提示符 运行 hello.exe 上图中加粗字体所示的命令, 既可以像刚才那样通过拖动可执行文件自动输入, 也可以自己 从键盘打字输入进去 由于路径中的文件夹名称包含有空格 (C 和 Book 之间有 1 个空格 ), 因此系 22

29 统自动加上双引号 如果路径中的文件夹名字和文件名字都没有出现空白, 那么双引号是可以省略的 最后按下 Enter 键确认就可以在命令窗口中执行 hello.exe 了 hello.exe 在这里的输出结果跟在 Dev-C++ 中运行输出的结果是一致的, 都是输出两行信息 : 第 1 行是 hello, world ; 第 2 行是一个空行 现在是在 命令提示符 工具中运行 hello.exe 程序, 即 命令提示符 工具是 hello.exe 程序里面 main 函数的调用者, 所以 main 函数结束时使用 return 语句返回的整数值自然就传递给 命令提示符 工具 只不过, 这里默认不显示该数值而已 如果要显示该返回数值, 可以继续在命令窗口输入 DOS 命令 echo %ErrorLevel% 然后按 Enter 键确认就可以显示出来, 如图 2-13 所示 命令提示符 Microsoft Windows [ 版本 ] 版权所有 (c) 2009 Microsoft Corporation 保留所有权利 C:\Users\geecy>"D:\C Book\hello world\hello.exe" Enter hello, world C:\Users\geecy>echo %ErrorLevel% Enter 0 C:\Users\geecy> 图 2-13 使用 echo 命令显示程序 hello.exe 的返回值 echo 是 Microsoft Windows 系统下的一个 DOS 命令, 用于显示一个 DOS 变量的内容到输出屏幕 变量 ErrorLevel 则保存了在命令窗口最后一次运行的程序的返回值 提示 : 请尝试修改 hello.c 文件的 return 语句返回值为其它整数, 然后保存文件并重修编译, 接着在命令窗口运行新生成的 hello.exe, 最后使用 echo 命令显示新的返回值 练习 2-1 录入下面源代码 2-3 所示的 C 语言程序并保存文件为 myhello.c, 然后编译和运行, 最后解释 说明所看到的输出结果 01 #include <stdio.h> 02 int main() 03 { 04 printf("hello, "); 05 printf("world"); 23

30 06 printf("\n"); 07 printf("hello, \nworld"); 08 return 0; 09 } 源代码 2-3 myhello.c 提示 : 再次提醒, 不要录入行号! 2.3 本章小结 3. 程序基本概念 C 语言程序至少由一个 main 函数组成 main( ) 函数是执行 C 语言程序的入口函数, 代码从这里开始执行 如无特殊情况, 一般是从上到下依次执行 C 语言程序的语句 main( ) 函数执行完毕意味着整个 C 语言程序执行完毕 4. 关键字 int return 5. 标准库函数 <stdio.h>: printf( ) 输出数据到屏幕 6. 换码序列 \n 换行符, 即 Enter 键 7. 预编译指令 #include 引用一个文件 8. 代码可读性 水平空白 垂直空白 适当使用空格和 Tab 以提高代码的可读性 适当使用 Enter 键以提高代码的可读性 24

31 第 3 章简易计算器 : 数据类型 运算符 流程控制 计算机能做什么呢? 首先最基本的当然是数学计算! 本章通过设计编写一个简易计算器程序, 把 C 语言的变量 数据类型 运算符 分支语句 循环语句等基本知识点逻辑而又巧妙地融通贯穿到整个案例中, 让读者在不知不觉中学会程序设计 3.1 计算两个整数之和 函数 printf( ) 除了可以输出文字信息, 也可以输出数学算式, 下面的例子使用函数 printf( ) 向 屏幕输出算式 = 13, 程序代码如源代码 3-1 SimpleCalculator_01-A.c 所示 01 #include <stdio.h> 02 int main() 03 { 04 printf("4 + 9 = 13"); 05 return 0; 06 } 源代码 3-1 SimpleCalculator_01-A.c 程序运行后输出结果如图 3-1 所示 : = 13 图 3-1 SimpleCalculator_01-A.c 运行结果 但可惜, 上面这个计算结果是我们自己计算出来的, 并不是计算机计算的 在这里, 加号 + 只是函数 printf( ) 要输出的字符串的一个普通字符, 按照规定是要原样输出到屏幕, 不具备运算功能的 要让加号 + 具备运算功能, 就不能把它放到双引号里面成为字符串的一个普通字符 源代码 3-2 SimpleCalculator_01-B.c 所示的程序代码真正实现了加号的计算功能 01 #include <stdio.h> 02 int main() 03 { 04 int result; 05 result = 4 + 9; 06 printf("4 + 9 = %d", result); 07 return 0; 08 } 源代码 3-2 SimpleCalculator_01-B.c 25

32 第 4 行代码 : 使用关键字 int 定义一个名字为 result 的整数变量 C 语言规定, 变量必须先定义后使用 定义变量的一般格式是 : 数据类型变量名 ; 整数 (Integer) 类型是一种常用的数据类型, 用关键字 int 表示 ANSI C 标准规定了 4 种基本数 据类型, 如表 3-1 所示 表 3-1 C 语言基本数据类型 关键字 数据类型 存储空间 char 字符 1 字节 (8 位 ) int 整数 2 字节 (16 位 ) 或 4 字节 (32 位 ) float 单精度浮点数 4 字节 (32 位 ) double 双精度浮点数 8 字节 (64 位 ) 变量名字的基本要求 : (1) 变量名字的第一字符必须是字母或者下划线 _, 第二个字符起可以是数字 字母或者下划线 ; (2) 变量名是区分大小写字母的, 例如 y 和 Y 是两个不同的名字 ; (3) 关键字 ( 参考前面章节 2.1 最小的 C 语言程序 的表 2-1 ANSI C 关键字 ) 不能用于变量名 ; (4) 变量名字最好能表达出变量的功能用途, 做到 见名知意 ; (5) 变量一般是描述事物的名称, 因此变量的名字建议使用 名词 或 定语 _ 名词 的形式命名 这里语句 int result 的功能是定义一个整数类型的变量 result, 并从计算机的内存中分配 4 字节的内存空间关联到该变量 这样后面的代码就可以使用变量名 result 来管理这些内存空间, 可以存放数据到这些内存空间, 也可以从这些内存空间读取数据出来使用 提示 : C 语言对 int 类型的规定, 只是要求使用不少于 2 字节 (2 字节能表示的整数范围是 ~ , 即 ~ 32767) 来表示整数, 具体的实现方案留给各个编译器来决定, 目前主流的编译器一般都是使用 4 字节来表示 int 类型的整数 这里所用的 Dev-C++ 开发工具是按照 4 字节的内存分配方案, 能够表示的整数范围是 : ~ , 即 ~ 第 5 行代码 : 这是一个赋值语句, 首先计算等号 = 右边的表达式 4 + 9, 然后把计算结果 13 保存到等号左边的变量 result 所关联的 4 个字节的内存字节中 这里 4 和 9 称为 int 类型的 常量 (Constant) 等号 = 是赋值运算符, 其功能是把等号右边的表达式计算出的结果保存到等号左边的变量所关联的内存字节中 加号 + 是加法运算符, 与数学上的加法概一致, 用于把加号左右两边的数作加法运算 26

33 提示 : 我们需要区分清楚表达式 (Expression) 和语句 (Statement) 这两个概念 : (1) 是加法运算表达式 ; (2) result = 是赋值运算表达式 ; (3) result = 4 + 9; 是赋值语句 分号是语句的结束符 表达式后面加上分号就构成表达式语句 例如, 4 + 9; 是一个合法的表达式语句, 该语句计算出 4 与 9 的和为 13, 但没有赋值给任何变量保存, 也就是说, 计算出来的结果被丢弃了 第 6 行代码 : 函数 printf( ) 使用格式说明符 %d 以十进制方式输出整数变量 result 的内容 如果函数 printf( ) 直接输出 = result, 那么就达不到我们的目的了, 这里 result 在双引号内是属于普通字符, 只能原样输出这几个字符 要输出变量的内容, 可以使用以百分号 % 开头的格式说明符, 首先在将要输出的字符串内占个位置, 然后在具体输出的时候使用对应变量的内容取代这个位置, 即实现了变量内容的输出 函数 printf( ) 规定, 使用格式说明符 %d 或 %i 以十进制整数的格式输出变量内容 提示 : d 是英文 Decimal( 十进制 ) 的首字母,i 是英文 Integer( 整数 ) 的首字母 这两个格式说明符是等价的 大部分程序员习惯使用 %d 程序运行后输出结果与上一个例子是一样的, 即如图 3-2 所示 : = 13 图 3-2 SimpleCalculator_01-B.c 运行结果 虽然是一样的输出结果, 但是已经前进了一大步 上一个例子的输出结果 13 是我们自己 计算出来的, 而本例子的结果则是计算机使用加法运算自动计算出来的 接下来, 如果需要求和的两个数不是 4 和 9, 而是其它数, 那怎么办呢? 比如, 现在要计算 7 和 8 的和, 我们需要修改第 5 行和第 6 行的代码, 然后保存并重新编译和运行 这里我们发现一个问题, 本来只需要把 4 修改为 7 以及把 9 修改为 8 即可, 但现在两行代码都需要修改, 即同一个内容需要修改两次, 这显然是不科学的! 要达到同一个内容只修改一次的目的, 我们可以修改源代码为如源代码 3-3 SimpleCalculator_01-C.c 所示的版本 01 #include <stdio.h> 02 int main() 03 { 04 int number1 = 7; 05 int number2 = 8; 06 int result; 07 result = number1 + number2; 08 printf("%d + %d = %d", number1, number2, result); 27

34 09 return 0; 10 } 源代码 3-3 SimpleCalculator_01-C.c 第 4~5 行代码 : 在定义 int 类型变量 number1 和 number2 的同时分别赋值 7 和 8 在定义变量的时候进行的赋值, 称为 初始化 第 4 行的代码等价于以下两行代码 : int number1; number1 = 7; 初始化是一种特殊的赋值, 但两者至少有以下的区别 : 初始化操作只做一次, 不允许重复操 作, 而赋值则可以反复操作 例如, 以下初始化操作重复了两次, 是不允许的, 编译过程会提示 出错 int number1 = 7; int number1 = 5; 但是赋值却可以反复操作, 例如, 以下赋值操作是合法的 : int number1; number1 = 7; number1 = 5; 第 7 行代码 : 这是一个常规的赋值操作, 首先计算赋值运算符 = 右边的表达式, 即把变量 number1 和 number2 的值读取出来并相加求和, 然后把计算结果复制一份到赋值运算符 = 左边的变量 result 中保存起来 第 8 行代码 : 函数 printf( ) 一次使用了 3 个格式说明符 %d 同时输出 3 个 int 类型变量的内容 3 个变量使用逗号分隔排列在后面, 按照格式说明符 %d 出现的先后顺序替换其内容 变量 number1 的内容取代第 1 个格式说明符 %d, 变量 number2 的内容取代第 2 个格式说明符 %d, 变量 result 的内容取代第 3 个格式说明符 %d 字符串里面的加号 等号以及空格都是普通字符, 按规定是原样输出 程序运行后输出结果如图 3-3 所示 : = 15 提示 : 图 3-3 SimpleCalculator_01-C.c 运行结果 28

35 printf 函数所需要输出的字符串内, 现在学习到有两种字符是特殊字符 : \ 和 % 这两种字符默认是不会原样输出的, 它们已经被赋予了特殊的含义, 需要结合后面的字符才能确定其具体含义 反斜杠 \ 用于换码序列, 例如 \n 表示换行符 百分号 % 用于格式说明符, 例如 %d 表示以十进制整数格式输出变量内容 练习 3-1 编写 C 语言程序, 计算 3 个整数的和, 然后按照图 3-4 所示格式输出结果到屏幕 提示 : 请参考源代码 3-3 SimpleCalculator_01-C.c = 102 图 3-4 练习 3-1 运行结果 3.2 键盘输入两个整数 上一个例子所求和的两个数, 是固定在源代码中的, 我们称之为 硬编码 (Hard-coding) 每次修改不同的数值后, 还需要重复进行源代码的保存 编译和运行等操作, 使用上是不够方便的 事实上, 为了增加灵活性, 我们可以在程序运行的时候才从键盘输入需要计算的数值 修改上一个例子, 增加键盘输入数据的功能以实现该目标, 如源代码 3-4 SimpleCalculator_02.c 所示 01 #include <stdio.h> 02 int main() 03 { 04 int number1; 05 int number2; 06 int result; 07 printf(" 第 1 个数 :"); 08 scanf("%d", &number1); 09 printf(" 第 2 个数 :"); 10 scanf("%d", &number2); 11 result = number1 + number2; 12 printf("%d + %d = %d", number1, number2, result); 13 return 0; 14 } 源代码 3-4 SimpleCalculator_02.c 第 4~5 行代码 : 29

36 定义两个 int 类型的变量 number1 和 number2 接下来会从键盘输入两个数据分别保存到这两个变量所关联的内存字节中, 所以这里就不需要初始化了 第 7~8 行代码 : 第 7 行使用函数 printf( ) 输出提示信息 第 1 个数 : 注意, 这里需要光标停留在同一行等待用户输入运算符, 因此没有必要输出换行符 \n 第 8 行使用函数 scanf( ) 从键盘输入一个整数到 int 类型的变量 number1 函数 scanf( ) 跟函数 printf( ) 都是属于标准库 <stdio.h>, 这里第 1 行代码只需要包含一次 stdio.h 头文件即可, 不需要重复包含 函数 scanf( ) 的使用跟 printf 函数也比较类似, 也是使用格式说明符 %d 来表示输入十进制整数 函数 scanf( ) 跟函数 printf( ) 的区别也是比较明显的, 至少体现在以下两个地方 : (1) 函数 scanf( ) 的格式说明字符串后面, 需要指定变量的地址, 而函数 printf( ) 是需要指定变量的名称 在变量名前加上求变量地址运算符 & 可以求出该变量的地址 提示 : 计算机的内存是以字节为单位进行管理的 为方便管理, 一般采用的方法是对内存的每一个字节分配一个整数的编号, 且编号从 0 开始 这些编号称为内存的地址 假设某计算机的内存容量是 4GB, 即一共有 = 字节的内存 那么分配给这些内存每一个字节的编号是从 0 开始一直到 ( 即 ) 在大多数情况下, 我们不必知道具体的地址编号的 比如, 这里第 8 行代码函数 scanf( ) 的工作原理大致可以这里理解 : 从键盘输入一个十进制整数, 存放到变量 number1 的所关联的内存地址所指向的内存字节中 该内存地址在我们使用 int number1; 语句定义变量 number1 的时候已经由系统分配 4 个字节内存并关联到变量名 number1 (2) 传入到函数 scanf( ) 中的字符串, 里面的字符不像函数 scanf( ) 那样输出到屏幕, 而是要求 用户从键盘输入一模一样的字符串 例如, scanf( input: %d, &number1); 这里的字符串 input: 并不会输出显示到屏幕, 而是要求用户在键盘输入一模一样的 input: 然后才能接着输入一个十进制整数值到变量 number1 中 如果没有按照要求输入, 那么变量就接收不到用户所输入的十进制整数值 所以在这里用户必须如下图那样从键盘输入数据才能把整数 123 输入到变量 number1 中 : input: 123 Enter 所以, 我们一般是在函数 scanf( ) 前面使用函数 printf( ) 输出一些提示信息, 用于友好提示用户需要输入什么数据 如果没有什么特殊需求的话, 函数 scanf( ) 的字符串一般只出现百分号开头的格式说明符即可, 以方便用户简化输入数据的操作 第 9~10 行代码 : 跟第 7~8 行代码类似, 只是把 number1 换为 number2, 道理是相同的 30

37 最后, 程序运行的结果如图 3-5 所示 第 1 个数 :12 Enter 第 2 个数 :34 Enter = 46 图 3-5 SimpleCalculator_02.c 运行结果 提示 : (1) 可以反复运行本程序, 然后输入不同的数进行加法运算, 而不需要像之前那样需要修改源代码然后重新保存和编译 (2) 在使用函数 scanf( ) 从键盘输入整数到 int 变量 number1 和 number2 的时候, 如果源代码忘记了加入求地址运算符 & 求变量的地址, 那么程序的编译依然是成功的, 正常生成可执行文件, 而且错误信息的数量和警告信息的数量也都是 0 (3) C 语言的设计理念是不对程序员作过多的限制, 因此在编译阶段不检查这种类型的错误 程序运行时候直到执行这个在变量前漏了求地址运算符 & 的函数 scanf( ), 从键盘输入的数据如果碰巧保存到了非法的内存空间, 那么就会引发程序崩溃, 被操作系统终止运行 一般会看到如图 3-6 所示的系统信息对话框提示 这时候请认真检查源代码, 是否漏了求地址运算符 & 修改后再重新编译和运行即可 图 3-6 程序停止工作提示对话框 练习 3-2 编写 C 语言程序, 从键盘读入 3 个整数并求和, 然后输出结果到屏幕 运行过程如图 3-7 所示 第 1 个数 :123 Enter 第 2 个数 :234 Enter 第 3 个数 :456 Enter = 813 图 3-7 练习 3-2 运行结果 31

38 3.3 计算加法 上面例子已经实现了在运行时候从键盘输入两个整数, 但是加法运算还依然是 硬编码 在源代码中 学会了函数 scanf( ) 的基本用法之后, 现在我们可以继续改进程序, 让用户在程序运行过程中才输入 + 以表示需要做加法运算 同时, 也为后面增加其它算术运算做好准备 改进后的程序代码如源代码 3-5 SimpleCalculator_03-A.c 所示 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 08 printf(" 运算 :"); 09 scanf("%c", &opt); 10 printf(" 第 1 个数 :"); 11 scanf("%d", &number1); 12 printf(" 第 2 个数 :"); 13 scanf("%d", &number2); 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 } 18 return 0; 19 } 源代码 3-5 SimpleCalculator_03-A.c 第 4 行代码 : 使用关键字 char 定义一个字符类型的变量 opt, 随后用于存放加法运算符 + 这里考虑到如果变量取名为 operator( 运算符 ), 则显得比较长, 不太方便, 因此这里取其缩写命名为 opt 字符类型是 C 语言的基本数据类型 ( 参考前面章节 3.1 计算两个整数之和 的表 3-1 C 语言基本数据类型 ), 系统分配给 char 类型的内存空间是 1 字节 关键字 char 是英文单词 charactor( 字符 ) 的缩写 char 类型变量可以存放 ASCII 字符集的一个字符, 例如大写字母 小写字母 数字 标点符号等 ASCII(American Standard Code for Information Interchange, 美国信息交换标准代码 ) 是基于拉丁字母的一套编码系统 ASCII 码编码系统为每个大写字母 每个小写字母 每个数字符号及每个标点符号均分配了一个唯一的代号, 称为 编码 (Encode), 这样, 在计算机中可以使用这些编码来表示这些符号 ASCII 码是现今最通用的单字节编码系统, 详见表 3-2 ASCII 字符集使用 7 位二进制编码, 一共可以包含 2 7 =128 个字符, 其中编号为 0~31 以及 127 这 33 个字符称为 控制字符 或 不可显示字符, 其余的 95 个字符称为 可显示字符 或 可打印字符 32

39 表 3-2 ASCII 字符集 编号字符编号字符编号字符编号字符编号字符编号字符编号字符编号字符 0 NUL 16 DLE 32 space P 96 ` 112 p 1 SOH 17 DC1 33! A 81 Q 97 a 113 q 2 STX 18 DC2 34 " B 82 R 98 b 114 r 3 ETX 19 DC3 35 # C 83 S 99 c 115 s 4 EOT 20 DC4 36 $ D 84 T 100 d 116 t 5 ENQ 21 NAK 37 % E 85 U 101 e 117 u 6 ACK 22 SYN 38 & F 86 V 102 f 118 v 7 BEL 23 ETB G 87 W 103 g 119 w 8 BS 24 CAN 40 ( H 88 X 104 h 120 x 9 HT 25 EM 41 ) I 89 Y 105 i 121 y 10 LF 26 SUM 42 * 58 : 74 J 90 Z 106 j 122 z 11 VT 27 ESC ; 75 K 91 [ 107 k 123 { 12 FF 28 FS 44, 60 < 76 L 92 \ 108 l CR 29 GS = 77 M 93 ] 109 m 125 } 14 SO 30 RS > 78 N 94 ^ 110 n 126 ~ 15 SI 31 US 47 / 63? 79 O 95 _ 111 o 127 DEL 字符常量是指使用单引号括起来的一个具体字符, 例如 a + 等都是字符常量 本例子如果 不打算从键盘输入加号运算符到变量 opt, 那么可以删除第 8~9 行的代码, 并改写第 4 行的代码 如下所示即可 04 char opt = + ; 这里使用关键字 char 定义一个字符类型的变量 opt, 并同时初始化为字符常量 + 实际上,C 语言的 char 类型在本质上其实属于整数类型 给一个 char 类型的变量赋值一个字符, 本质上保存的其实是该字符对应于 ASCII 字符集的整数编号 例如, 这里的字符 + 对应的十进制整数编号是 43, 因此等价于 : 04 char opt = 43; 要想知道某个字符在 ASCII 字符集的编号, 可以使用下面的简单程序来实现 : #include <stdio.h> int main() { char ascii = A ; printf("%d", ascii); return 0; } 由于字符 A 在 ASCII 字符集的编号是十进制整数 65, 因此变量 ascii 被赋值为 65, 然后由 printf 33

40 函数输出变量 ascii 的内容, 并使用格式说明符 %d 以十进制整数 65 的形式显示到屏幕 第 8~9 行代码 : 第 8 行输出提示信息 运算 : 注意, 这里需要光标停留在同一行等待用户输入运算符, 因此没有必要输出换行符 \n 第 9 行使用函数 scanf( ) 从键盘输入一个字符到变量 opt 保存 函数 scanf( ) 输入字符变量和函数 printf( ) 输出字符变量都是使用格式说明符 %c 跟 int 类型变量的输入要求一样, 这里 char 类型变量的输入也需要在变量前加上求地址运算符 & 用于获取变量 opt 的地址 第 14~17 行代码 : 这是一个使用 if 语句实现的分支结构 符号 == 是关系运算符, 用于比较左右两边的值是否相等 到目前为止了, 我们编写的代码都是按顺序一行接一行的执行下去的, 这称为 顺序结构 如果需要让程序代码有所选择地运行, 即某些代码如果满足某些条件才运行, 否则就不运行, 即相当于没有编写这些语句, 这种结构称为 分支结构 分支结构使得程序具有逻辑判断能力 使用 if 语句可以实现分支结构 if 语句的 最简形式 如下图所示 : if( 表达式 ){ } 语句 其工作过程可以描述如下 : (1) 计算 表达式 的值, 如果该值是整数 0, 则转到 (3); (2) 执行花括号 { } 里面的语句 ; (3) 结束 if 语句 从宏观上看, 则可以这样理解最简形式 if 语句的功能 : 如果 表达式 的值为真 ( 值不等于整数 0), 则执行花括号 { } 里面的语句 ; 如果 表达式 的值为假 ( 值等于整数 0), 则不执行花括号 { } 里面的语句 C 语言没有专门的关键字用于定义逻辑类型的变量 C 语言借助整数这一数据类型定义了逻辑值真假的概念 : 整数 0 代表逻辑值为 假 (False) 非 0 的整数代表逻辑值为 真 (True) 理论上, 可以直接使用算术运算的计算结果来判断逻辑值的真假, 例如下图的代码片段所示 : int number1 = 12; int number2 = 34; if(number1 + number2){ printf("hello"); } 34

41 这里表达式 number1 + number2 的计算结果是 46, 即非 0 整数, 所以该表达式的逻辑值为真 按照 C 语言的规定, 表达式为真, 就执行花括号里面的 printf 语句 一般来说, 只有极少数时候我们需要直接使用算术运算的计算结果去判断逻辑值真假, 因此这个例子不是一种常规的用法 更多的时候我们是使用包含关系运算符的表达式直接得出逻辑值的真假 C 语言提供了 6 种关系运算符, 用于比较两个数值的大小, 其运算结果是一个逻辑值, 如表 3-3 所示 表 3-3 关系运算符 关系运算符 名称 含义 > 大于 如果左边的值大于右边的值, 则结果为真, 否则为假 < 小于 如果左边的值小于右边的值, 则结果为真, 否则为假 == 等于 如果左边的值等于右边的值, 则结果为真, 否则为假 >= 大于或等于 如果左边的值大于或等于右边的值, 则结果为真, 否则为假 <= 小于或等于 如果左边的值小于或等于右边的值, 则结果为真, 否则为假!= 不等于 如果左边的值不等于右边的值, 则结果为真, 否则为假 我们可以使用如下所示的简单代码快速了解这 6 种关系运算的运算规则 : #include <stdio.h> int main() { printf("%d\n", 3 > 5); printf("%d\n", 3 < 5); printf("%d\n", 3 == 5); printf("%d\n", 3 >= 5); printf("%d\n", 3 <= 5); printf("%d\n", 3!= 5); return 0; } 提示 : 请按照前面的介绍, 命名一个有意义的文件名来保存上面的 C 语言代码, 然后编译和运 行程序 程序运行后的输出结果如下 :

42 C 语言规定, 非 0 的整数都代表逻辑值真, 但这里 6 种关系运算的运算结果如果是逻辑值真, 那么它并不会随便返回一个非 0 的随机整数, 而是固定返回一个整数 1 当然了, 如果运算结果 是逻辑值假, 那就肯定是返回整数 0 了 接着刚才的例子, 这里第 14~17 行代码正是典型的 if 语句的最简形式 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 } 假如程序运行后用户从键盘输入了字符 + 保存到变量 opt, 那么其工作过程可以具体描述如下 : (1) 计算表达式 opt == + 的值, 结果为真, 即返回结果是整数 1; (2) 既然表达式 opt == + 的值不是整数 0, 那么就不转到 (4); (3) 继续执行花括号 { } 里面的第 15~16 行语句 ; (4) 结束 if 语句 源代码 3-5 SimpleCalculator_03-A.c 的程序编译运行的输出结果如图 3-8 所示 : 运算 :+ Enter 第 1 个数 :123 Enter 第 2 个数 :456 Enter = 579 图 3-8 SimpleCalculator_03-A.c 运行结果 但是, 如果我们输入的运算符不是 +, 而是其它字符, 如图 3-9 所示 : 运算 :a Enter 第 1 个数 :123 Enter 第 2 个数 :456 Enter 图 3-9 SimpleCalculator_03-A.c 运行结果 这里我们故意输入字符 a 到变量 opt, 那么程序后面就没有任何输出信息了 这种情况下, 第 14~17 行代码工作过程可以具体描述如下 : (1) 由于变量 opt 的值是 a, 所以表达式 opt == + 求值的结果为假, 即返回整数 0; (2) 既然表达式 opt == + 的值是整数 0, 那么就转到 (4); (3) 不执行花括号 { } 里面的第 15~16 行语句, 就像删除了这两行语句一样 ; (4) 结束 if 语句 用户故意或不小心输错了运算符的情况是经常发生的, 我们应该输出信息告诉用户刚才输入 了非法的运算符, 而不是像现在没有任何信息输出 改进后的程序代码如源代码 3-6 SimpleCalculator_03-B.c 所示 36

43 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 08 printf(" 运算 :"); 09 scanf("%c", &opt); 10 printf(" 第 1 个数 :"); 11 scanf("%d", &number1); 12 printf(" 第 2 个数 :"); 13 scanf("%d", &number2); 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else{ 18 printf(" 非法运算!"); 19 } 20 return 0; 21 } 源代码 3-6 SimpleCalculator_03-B.c 第 14~19 行代码 : 使用 if 语句的完整形式实现如下功能 : 如果变量 opt 的值是 +, 则执行第 15~16 行代码, 否 则就执行第 18 行代码 使用关键字 if 和关键字 else 配合, 可以实现 if 语句的 完整形式, 如下图所示 : if( 表达式 ){ 语句 1 }else{ } 语句 2 其工作过程可以描述如下 : (1) 计算 表达式 的值, 如果该值是整数 0, 则转到 (3); (2) 执行语句 1, 然后转到 (4); (3) 执行语句 2, 然后转到 (4); (4) 结束 if 语句 从宏观上看, 则可以这样理解完整形式 if 语句的功能 : 如果 表达式 的值为真 ( 值不等于整数 0), 则只执行语句 1, 不执行语句 2; 如果 表达式 的值为假 ( 值等于整数 0), 则不执行语句 1, 只不执行语句 2 37

44 程序运行后, 我们再次输入一个字符 a, 那么运行结果如图 3-10 所示 : 运算 :a Enter 第 1 个数 :123 Enter 第 2 个数 :456 Enter 非法运算! 图 3-10 SimpleCalculator_03-B.c 运行结果 这种情况下, 第 14~19 行代码工作过程可以具体描述如下 : (1) 由于变量 opt 的值是 a, 所以表达式 opt == + 求值的结果为假, 即返回整数 0; (2) 既然表达式 opt == + 的值是整数 0, 那么就执行第 18 行的代码 ; (3) 结束 if 语句 练习 3-3 编写 C 语言程序, 从键盘读入 2 个整数, 如果这 2 个整数的数值相等, 则输出 相等 的信 息到屏幕, 否则输出 不相等 的信息 运行过程如图 3-11 所示 第 1 个数 :1234 Enter 第 2 个数 :5678 Enter 1234 与 5678 不相等 图 3-11 练习 3-3 运行结果 练习 3-4 编写 C 语言程序, 从键盘读入一个字符, 然后输出该字符对应的 ASCII 编号到屏幕 运行过 程如图 3-12 所示 请输入一个字符 :a Enter 字符 'a' 的 ASCII 编号是 :97 图 3-12 练习 3-4 运行结果 练习 3-5 编写 C 语言程序, 从键盘读入 2 个整数并输出这 2 个数中的最大值到屏幕 运行过程如图 3-13 所示 要求使用两种方法完成 : (1) 第一种方法使用 if 语句的 完整形式 ; (2) 第二种方法使用 if 语句的 最简形式 提示 : 38

45 请参考 表 3-3 关系运算符 中的 大于 关系运算符 第 1 个整数 :12 Enter 第 2 个整数 :34 Enter 最大值是 :34 图 3-13 练习 3-5 运行结果 练习 3-6 编写 C 语言程序, 从键盘读入 3 个整数并输出这 3 个数中的最小值到屏幕 运行过程如图 3-14 所示 要求使用两种方法完成 : (1) 第一种方法使用 if 语句的 完整形式 以及 最简形式 ; (2) 第二种方法只使用 if 语句的 最简形式, 不使用 if 语句的 完整形式 提示 : 请参考 表 3-3 关系运算符 中的 小于 关系运算符 第 1 个数 :123 Enter 第 2 个数 :-234 Enter 第 3 个数 :345 Enter 最小值是 :-234 图 3-14 练习 3-6 运行结果 3.4 计算减法和乘法 要在加法运算的基础上增加减法运算, 可以在源代码 3-6 SimpleCalculator_03-B.c 所示程序的 第 14 行开始找到 if 语句, 如下所示 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else{ 18 printf(" 非法运算!"); 19 } 然后修改为 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else{ 18 if(opt == '-'){ 19 result = number1 - number2; 39

46 20 printf("%d - %d = %d", number1, number2, result); 21 }else{ 22 printf(" 非法运算!"); 23 } 24 } 这样就实现了减法运算 同理, 如果要再增加乘法运算, 只需在刚才的基础上再修改 if 语句 为如下所示的代码即可 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else{ 18 if(opt == '-'){ 19 result = number1 - number2; 20 printf("%d - %d = %d", number1, number2, result); 21 }else{ 22 if(opt == '*'){ 23 result = number1 * number2; 24 printf("%d * %d = %d", number1, number2, result); 25 }else{ 26 printf(" 非法运算!"); 27 } 28 } 29 } 提示 : 英文输入法下, 没有对应于我们所常见的乘号 C 语言使用星号 * 作为乘法运 算符 这样修改, 功能上是比较完美了, 很好地实现了加法 减法和乘法的运算 从程序代码的可读性方面看, 这种采用 if 语句的多次嵌套不断向右缩进的方法, 表现出来的是一种递进包含的关系 这里的加法 减法和乘法 3 种运算事实上应该是一种比较明显的并列关系, 而这个程序代码不但没有比较直观的展现这种并列关系, 还让代码显得比较杂乱 所以, 通常我们会认为, 这种风格的代码其可读性不够好 那么有没有更好的解决方案呢? 有! 事实上,if 语句的花括号, 当里面只有一个语句的时候, 那么这对花括号是可以省略的 例如 : if( 表达式 ){ 语句 1 }else{ } 语句 2 40

47 如果语句 1 或语句 2 只有一个具体的语句, 那么其对应的花括号可以省略, 如下图所示 : if( 表达式 ) 语句 1 else 语句 2 但如果花括号有超过一个语句, 那么其对应的花括号就不能省略了 : if( 表达式 ){ 语句 1 语句 2 }else 语句 3 这里假定语句 3 只是一个语句, 而不是多个语句, 因此其对应的花括号可以省略, 而语句 1 和语句 2 所对应的花括号则不能省略 提示 : 按照 C 语言的语法规则, 在满足某些条件的情况下,if 语句的花括号是可以省略不写的 但我们还是强烈建议, 在真正写程序代码的时候, 大家不要怕麻烦, 不管是一个语句还是多个语句, 都不要省略其对应的花括号, 以提高源代码的可读性和避免一些不必要的麻烦 接下来, 按照这个省略的原则, 我们可以把第 17 行和第 29 行的一对花括号省略, 把第 21 行和第 28 行的一对花括号省略, 如下图所示 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else 18 if(opt == '-'){ 19 result = number1 - number2; 20 printf("%d - %d = %d", number1, number2, result); 21 }else 22 if(opt == '*'){ 23 result = number1 * number2; 24 printf("%d * %d = %d", number1, number2, result); 25 }else{ 26 printf(" 非法运算!"); 27 } 请注意, 一个 if 语句也是只算一个语句, 虽然它里面包含了多个基本语句 一个 if 语句称为 41

48 一个复合语句 复合语句由多个基本语句组成 另一方面, 我们把空格 Tab 键以及 Enter 键这 3 种符号统称为 空白 (White-space) 我们应该在适当的地方留有足够多的空白, 以提高源代码的可读性 但并不是说留有越多的空白, 源代码的可读性就越高 在这个例子, 继续删除一些多余的空白反而可以大大提高源代码的可读性 所以接下来, 我们把第 17 行和第 18 行合并为一行,else 和 if 之间只留一个空格即可 同理, 把第 21 行和第 22 行也合并为一行 然后把代码的缩进级别调整一下, 最后把多余的空行删除, 即可得到如下的 if 语句 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else if(opt == '-'){ 18 result = number1 - number2; 19 printf("%d - %d = %d", number1, number2, result); 20 }else if(opt == '*'){ 21 result = number1 * number2; 22 printf("%d * %d = %d", number1, number2, result); 23 }else{ 24 printf(" 非法运算!"); 25 } 先删除了一些可以省略的花括号, 然后再删除一些多余的空白 经过这两步操作后, 我们现 在看到的 if 语句, 相比于原先的 if 语句多次嵌套风格, 其可读性已经大大提高, 能够非常直观地 展现出加法 减法以及乘法的并列关系! 现在使用这个 if 语句取代原来源代码 3-6 SimpleCalculator_03-B.c 代码中的 if 语句, 就可以得 到如源代码 3-7 SimpleCalculator_04-A.c 所示的改进版本, 比原来增加了减法和乘法的运算功能以 及提高了代码的可读性 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 08 printf(" 运算 :"); 09 scanf("%c", &opt); 10 printf(" 第 1 个数 :"); 11 scanf("%d", &number1); 12 printf(" 第 2 个数 :"); 13 scanf("%d", &number2); 42

49 14 if(opt == '+'){ 15 result = number1 + number2; 16 printf("%d + %d = %d", number1, number2, result); 17 }else if(opt == '-'){ 18 result = number1 - number2; 19 printf("%d - %d = %d", number1, number2, result); 20 }else if(opt == '*'){ 21 result = number1 * number2; 22 printf("%d * %d = %d", number1, number2, result); 23 }else{ 24 printf(" 非法运算!"); 25 } 26 return 0; 27 } 源代码 3-7 SimpleCalculator_04-A.c 换句话说, 这个例子的实现并没有使用新知识点, 用到的只是 if 语句的 完整形式 而已, 只不过是删除了一些花括号和空白并重新排版了 经过这样的处理后, 以后需要在这个基础上扩展一些功能, 比如增加除法和求余数等运算功能, 就非常方便了 虽然这不算新知识点, 但是我们以后编写程序代码将会经常遇到这种应用场景 这里我们总结出一般的规律, 并称之为 if 语句的 扩展形式, 如下图所示 : if( 表达式 1 ){ 语句 1 }else if( 表达式 2 ){ 语句 2 }else if( 表达式 3 ){ 语句 }else if( 表达式 n ){ 语句 n }else{ } 语句 n+1 其工作过程可以参考 if 语句的 最简形式 和 完整形式 从宏观上看, 则可以这样理解扩展形式 if 语句的功能 : 按照先后顺序对 表达式 1 到 表达式 n 分别测试求逻辑值 ; 如果 表达式 k (1 k n) 首先为真, 那么只执行对应的 语句 k, 其它语句都不执行 ; 如果 表达式 1 到 表达式 n 都为假, 那么只执行最后的 else 部分 语句 n+1, 其它语句都不执行 ; 最后的部分 else{ 语句 n+1 } 可以根据需要省略不写 43

50 我们可以很容易总结得出 if 语句 3 种形式之间的关系 : 最简形式是完整形式的简化版本 ; 扩展形式是最简形式和完整形式的嵌套扩展版本 ; 最核心的是完整形式 最后, 源代码 3-7 SimpleCalculator_04-A.c 编译运行后的输出结果如图 3-15 和图 3-16 所示 : 运算 :- Enter 第 1 个数 :123 Enter 第 2 个数 :456 Enter = -333 图 3-15 SimpleCalculator_04-A.c 运行结果 运算 :* Enter 第 1 个数 :123 Enter 第 2 个数 :456 Enter 123 * 456 = 图 3-16 SimpleCalculator_04-A.c 运行结果 另外, 我们还注意到一个问题 : 第 行的代码非常类似, 都是使用函数 printf( ) 输出一个等式, 这 3 行语句的差异仅仅在于它们的运算符号不一样 而变量 opt 正是保存了它们的运算符号 我们可以把这 3 行语句抽取出来, 合并为一个语句并单独放在整个 if 语句结束之后 : printf("%d %c %d = %d", number1, opt, number2, result); 这里, 函数 printf( ) 使用格式说明符 %c 输出 char 类型变量 opt 的字符 这样做之后, 又产生了一个新问题 由于这个语句是放在整个 if 语句之后, 因此当用户输入了非法运算符后经过 if 语句的判断并输出 非法运算! 提示信息, 这时候这个语句也正常执行并打印一个等式 这显然是不合理的 一种简单的解决方案是 : 在输出 非法运算! 提示信息后, 应该执行一个 return 语句结束 main 函数, 也就是结束整个程序 按照习惯,return 语句返回整数 0 表示程序正常结束 这里我们使用 return 语句返回整数 1 表示程序遇到 非法运算 这种错误类型而引起提前结束运行的 修改后的程序代码如源代码 3-8 SimpleCalculator_04-B.c 所示 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 44

51 08 printf(" 运算 :"); 09 scanf("%c", &opt); 10 printf(" 第 1 个数 :"); 11 scanf("%d", &number1); 12 printf(" 第 2 个数 :"); 13 scanf("%d", &number2); 14 if(opt == '+'){ 15 result = number1 + number2; 16 }else if(opt == '-'){ 17 result = number1 - number2; 18 }else if(opt == '*'){ 19 result = number1 * number2; 20 }else{ 21 printf(" 非法运算!"); 22 return 1; 23 } 24 printf("%d %c %d = %d", number1, opt, number2, result); 25 return 0; 26 } 源代码 3-8 SimpleCalculator_04-B.c 程序编译和运行后, 如果输入的运算符是 + - * 3 种之一, 那么就正常输出结果 ( 请 参考前面的图 3-15 和图 3-16) 但如果输入一个非法运算符, 那么输出结果如图 3-17 所示 : 运算 :a Enter 第 1 个数 :123 Enter 第 2 个数 :456 Enter 非法运算! Process exited after seconds with return value 1 请按任意键继续... 图 3-17 SimpleCalculator_04-B.c 运行结果 从运行结果可以看出, 执行了第 22 行代码 return 1; 后 main 函数就结束, 所以第 行代码就没有机会执行 练习 3-7 编写 C 语言程序, 从键盘读入一个整数, 如果该整数是 0 至 6 的范围, 则相应输出 星期天 至 星期六 到屏幕, 如果该整数不是在 0 至 6 的范围, 则输出 非法数据 运行过程如图 3-18 所示 提示 : (1) 使用 if 语句的扩展形式 (2) 请参考 表 3-3 关系运算符 中的 等于 关系运算符 45

52 请输入一个整数 :2 Enter 星期二 图 3-18 练习 3-7 运行结果 练习 3-8 某学校使用等级制评定学生成绩, 原来的百分制按照如下规则转换为等级制 :95 分及以上评为 A, 85 分及以上评为 B,70 分及以上评为 C,60 分及以上评为 D, 60 分以下评为 E 编写 C 语言程序, 从键盘读入一个代表百分制成绩的整数, 然后输出相应的等级成绩 如果分数小于 0 或大于 100, 则输出 非法数据 运行过程如图 3-19 所示 要求使用两种方法完成 : (1) 第一种方法使用 大于或等于 以及 大于 这两种关系运算符, 不能使用 小于或等于 以及 小于 这两种关系运算符 ; (2) 第一种方法使用 小于或等于 以及 小于 这两种关系运算符, 不能使用 大于或等于 以及 大于 这两种关系运算符 提示 : (1) 使用 if 语句的扩展形式 (2) 请参考 表 3-3 关系运算符 中的 大于或等于 小于或等于 大于 以及 小于 等关系运算符 请输入一个整数成绩 :80 Enter C 图 3-19 练习 3-8 运行结果 3.5 计算除法和余数 跟乘法类似, 在英文输入法下, 没有对应于我们所常见的除号 C 语言使用字符 / 作为除法运算符 字符 / 称为正斜杠, 简称斜杠 ; 字符 \ 称为反斜杠 除了常规的加 减 乘 除这四则运算之外,C 语言还提供一种 求余数 的运算 求余数运算使用百分号 % 作为运算符 C 语言一共提供了 5 种算术运算, 如表 3-4 所示 表 3-4 算术运算符 算术运算 运算符号 加法 + 减法 - 乘法 * 除法 / 求余数 % 下面的简单程序可以快速展示除法运算和求余数运算 : 46

53 #include <stdio.h> int main() { printf("%d\n", 9 / 2); printf("%d\n", 9 % 2); return 0; } 编译运行后输出结果如下 : 4 1 按照数学概念,9 2 = 4.5 但按照 C 语言规定, 两个整数相除, 结果只计算整数部分, 省略小数部分 注意 : 不是四舍五入到整数! 因此这里输出结果 9 / 2 = 4 9 % 2 = 1, 即 9 除以 2, 商是 4, 余数是 1 这跟数学概念是一致的 现在, 我们可以在源代码 3-8 SimpleCalculator_04-B.c 所示程序代码的 if 语句增加除法运算 和求余数运算了 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 }else if(opt == '-'){ 17 result = number1 - number2; 18 }else if(opt == '*'){ 19 result = number1 * number2; 20 }else if(opt == '/'){ 21 result = number1 / number2; 22 }else if(opt == '%'){ 23 result = number1 % number2; 24 }else{ 25 printf(" 非法运算!"); 26 return 1; 27 } 这样修改后, 就可以增加除法和求余数这 2 种功能了 但美中不足的是, 一旦用户故意或者是不小心输入了整数 0 当作除数, 那么我们这个程序就会运行崩溃, 程序意外终止, 并显示如图 3-20 所示的提示信息 : 提示 : 除数不能为 0, 否则会引发程序运行崩溃 因此, 在进行除法运算和求余数运算的时候应该特别小心, 避免 0 作为除数 47

54 图 3-20 程序停止工作提示对话框 要解决这个问题, 其实是不难的 可以嵌套增加一个 if 语句作判断, 如果除数不为 0, 才执 行除法和求余数运算 : 14 if(opt == '+'){ 15 result = number1 + number2; 16 }else if(opt == '-'){ 17 result = number1 - number2; 18 }else if(opt == '*'){ 19 result = number1 * number2; 20 }else if(opt == '/'){ 21 if(number2!= 0){ 22 result = number1 / number2; 23 }else{ 24 printf(" 除数不能为 0"); 25 return 2; 26 } 27 }else if(opt == '%'){ 28 if(number2!= 0){ 29 result = number1 % number2; 30 }else{ 31 printf(" 除数不能为 0"); 32 return 2; 33 } 34 }else{ 35 printf(" 非法运算!"); 36 return 1; 37 } 按照习惯,return 语句返回整数 0 表示程序正常结束 我们已经使用 return 语句返回整数 1 表示程序遇到 非法运算 这种错误类型而引起提前结束运行的 这里使用 return 语句返回整数 2 表示程序遇到 除数为 0 这种错误类型而引起提前结束运行的 请参考前面的章节 3.4 计 48

55 算减法和乘法 比较运算符!= 的功能 : 如果左边不等于右边, 则结果为真, 否则为假 请参考 表 3-3 关系运算符 使用嵌套 if 语句的方法, 确实可以解决了除数为 0 的问题 但是与之前的例子类似, 这种方案的副作用是增加了程序代码的复杂度, 降低了程序代码的可读性 要想两全其美, 那就需要使用逻辑运算符来简化编写程序的逻辑, 减少不必要的 if 语句嵌套使用 C 语言提供了 3 种逻辑运算 : 与 或 非, 对应的运算符分别为 :&&! 逻辑运算符的 运算对象是逻辑值, 也就是说参加运算的对象只有两个元素 : 真 假 逻辑运算的真值表如表 3-5 所示 表 3-5 逻辑运算真值表 X Y X && Y X Y! X 假 假 假 假 真 假 真 假 真 真 真 假 假 真 假 真 真 真 真 假 我们可以编写一个简单程序, 以快速了解逻辑运算符 && 的使用 : #include <stdio.h> int main() { printf("%d\n", 0 && 0); printf("%d\n", 0 && 1); printf("%d\n", 1 && 0); printf("%d\n", 1 && 1); return 0; } 编译并运行, 输出结果如下 : 逻辑运算 && 的特点是 : 只有两个逻辑值同时为真, 结果才为真 如果有一个逻辑值为假, 则结果就为假 现在我们可以使用逻辑运算 && 来改进复杂 if 语句的编写, 把源代码 3-8 SimpleCalculator_04-B.c 所示的程序代码改进为源代码 3-9 SimpleCalculator_05-A.c 49

56 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 08 printf(" 运算 :"); 09 scanf("%c", &opt); 10 printf(" 第 1 个数 :"); 11 scanf("%d", &number1); 12 printf(" 第 2 个数 :"); 13 scanf("%d", &number2); 14 if(opt == '+'){ 15 result = number1 + number2; 16 }else if(opt == '-'){ 17 result = number1 - number2; 18 }else if(opt == '*'){ 19 result = number1 * number2; 20 }else if( (opt == '/')&&(number2!= 0) ){ 21 result = number1 / number2; 22 }else if( (opt == '%')&&(number2!= 0) ){ 23 result = number1 % number2; 24 }else{ 25 printf(" 非法运算!"); 26 return 1; 27 } 28 printf("%d %c %d = %d", number1, opt, number2, result); 29 return 0; 30 } 源代码 3-9 SimpleCalculator_05-A.c 程序编译运行后, 我们特意输入 0 作为除数来测试, 程序能识别出来, 不会导致程序崩溃, 并显示提示信息 非法运算!, 如图 3-21 所示 运算 :/ Enter 第 1 个数 :9 Enter 第 2 个数 :0 Enter 非法运算! 图 3-21 SimpleCalculator_05-A.c 运行结果 接下来, 我们继续改进程序, 如源代码 3-10 SimpleCalculator_05-B.c 所示 50

57 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 08 printf(">>>"); 09 scanf("%d %c %d", &number1, &opt, &number2); 10 if(opt == '+'){ 11 result = number1 + number2; 12 }else if(opt == '-'){ 13 result = number1 - number2; 14 }else if(opt == '*'){ 15 result = number1 * number2; 16 }else if( (opt == '/')&&(number2!= 0) ){ 17 result = number1 / number2; 18 }else if( (opt == '%')&&(number2!= 0) ){ 19 result = number1 % number2; 20 }else{ 21 printf(" 非法运算!"); 22 return 1; 23 } 24 printf("%d %c %d = %d", number1, opt, number2, result); 25 return 0; 26 } 源代码 3-10 SimpleCalculator_05-B.c 第 8 行代码 : 输出一个我们自己设计的提示符 >>>, 让用户在此处开始输入算式 第 9 行代码 : 使用一个函数 scanf( ) 同时输入运算符和 2 个运算的整数, 并且按照数学习惯, 先输入一个整数, 接着输入一个运算符, 再输入另一个整数 程序编译运行的输出结果图 3-22 和图 3-23 所示 : >>>1234 / 5 Enter 1234 / 5 = 246 图 3-22 SimpleCalculator_05-B.c 运行结果 >>>1234 % 5 Enter 1234 % 5 = 4 图 3-23 SimpleCalculator_05-B.c 运行结果 51

58 练习 3-9 编写 C 语言程序, 从键盘读入一个整数, 然后判断该整数是奇数或者偶数, 并输出结果到屏幕 如果该整数小于 0, 则输出 非法数据 运行过程如图 3-25 所示 提示 : 请参考 表 3-4 算术运算符 中的 求余数 运算符 请输入一个整数 :135 Enter 135 是奇数 图 3-24 练习 3-9 运行结果 练习 3-10 平年与闰年的判断标准如下 : 如果年份是 100 的倍数, 且能被 400 整除, 则该年份是闰年 ; 如果年份不是 100 的倍数, 且能被 4 整除, 则该年份是闰年 ; 如果以上都不满足, 则该年份为平年 编写 C 语言程序, 从键盘读入一个代表年份的整数, 然后判断该年份是平年或闰年并输出结果到屏幕 如果年份小于等于 0, 则输出 非法数据 运行过程如图 3-25 所示 提示 : (1) 请参考 表 3-4 算术运算符 中的 求余数 运算符 (2) 请参考 表 3-3 关系运算符 中的 与 或 等逻辑运算符 请输入年份 :2018 Enter 2018 年是平年 图 3-25 练习 3-10 运行结果 练习 3-11 编写 C 语言程序, 从键盘读入一个字母, 如果是大写字母, 则输出相应的小写字母到屏幕, 如果是小写字母, 则输出相应的大写字母, 如果不是字母, 则输出 非法数据 运行过程如图 3-26 所示 请输入一个字母 :f Enter f 是小写字母, 对应的大写字母是 :F 图 3-26 练习 3-11 运行结果 3.6 重复执行计算 现在我们遇到的问题是, 每做完一次计算, 我们需要重新运行程序才可以继续计算 要解决 这个问题, 我们可以使用循环结构来实现需要重复多次执行的计算 循环结构使得程序具有重复 执行某部分语句的能力 52

59 可以使用关键字 while 来实现循环结构,while 循环的基本形式如下图所示 : while( 表达式 ){ } 语句 其工作过程可以描述如下 : (1) 计算 表达式 的值, 如果该值是整数 0, 则转到 (3); (2) 执行花括号里面的语句, 然后转到 (1); (3) 结束 while 语句 从宏观上看, 则可以这样理解 : 如果 表达式 的值为真 ( 值不等于整数 0), 则一直重复执行花括号里面的语句 ; 如果 表达式 的值为假 ( 值等于整数 0), 则立即结束 while 语句 提示 : (1) 我们一般把花括号里面的语句称为 循环体 (2) 特别地, 如果 表达式 的值在第一次测试时候就为假, 那么就不会执行循环体中的语句, 这时候 while 循环语句就等价于 if 语句的最简形式 也就是说, 这种情况下如果把 while 关键字改为 if 关键字, 那么功能上完全是等价的 我们可以编写一个简单程序, 以快速了解 while 循环语句的使用 : #include <stdio.h> int main() { int i = 0; while(i < 10){ i = i + 1; printf("%d\n", i); } return 0; } 提示 : 在 while 循环语句中的这个整数类型的变量 i 比较直观地描述了循环体的执行次数, 因 此一般把这个变量 i 称为 循环控制变量 编译并运行, 输出结果如下 :

60 当变量 i 的取值分别为 0 到 9 时, 表达式 i < 10 的值都是真, 所以循环体执行了 10 次 循环体执行了 10 次后, 变量 i 的值变为 10, 这时候表达式 i < 10 的值为假, 然后立即结束 while 语句 另外, 我们需要关注这里的语句 i = i + 1; 这是一个很简单 很基本的赋值语句, 以后我们会经常使用这种形式的赋值 这个语句的功能是 : 把赋值运算符右边的变量 i 的值读取出来复制到一个临时的存储空间, 然后把该复制的值加上 1 得到一个新的值, 最后把这个新值复制写入到原来的变量 i, 这样就实现了把变量 i 的值修改为比原来增加 1 的效果 我们可以把源代码 3-10 SimpleCalculator_05-B.c 中的第 8~24 行代码向右缩进一个层次作为 while 语句的循环体, 如源代码 3-11 SimpleCalculator_06-A.c 所示 : 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 05 int number1; 06 int number2; 07 int result; 08 while(1){ 09 printf(">>>"); 10 scanf("%d %c %d", &number1, &opt, &number2); 11 if(opt == '+'){ 12 result = number1 + number2; 13 }else if(opt == '-'){ 14 result = number1 - number2; 15 }else if(opt == '*'){ 16 result = number1 * number2; 17 }else if( (opt == '/')&&(number2!= 0) ){ 18 result = number1 / number2; 19 }else if( (opt == '%')&&(number2!= 0) ){ 20 result = number1 % number2; 21 }else{ 22 printf(" 非法运算!\n"); 23 return 1; 24 } 25 printf("%d %c %d = %d\n", number1, opt, number2, result); 26 } 54

61 27 printf(" 已经退出计算器!\n"); 28 return 0; 29 } 源代码 3-11 SimpleCalculator_06-A.c 第 8~26 行代码 : 这里我们使用 while 语句的形式为 : while( 1 ){ 语句 } 由于整数 1 代表逻辑值真, 所以循环体里面的语句将会一直重复执行下去, 无穷无尽 一般称之为 死循环 第 27 行代码 : 使用函数 pirntf( ) 输出提示信息 已经退出计算器! 虽然这里号称是死循环, 会一直循环下去, 但是事实上只要运算符不是 + - * / % 这 5 种基本算术运算符, 或者除数为 0, 都可以引发第 22 行和第 23 行代码的执行 当第 22 行输出显示 非法运算! 之后, 接着执行第 23 行的 return 语句,return 语句的功能是结束当前所在的函数, 因此将导致 main 函数结束, 即整个程序结束 可以说是间接上结束了死循环 第 27 行的代码是位于第 8~26 行的 while 循环语句之后, 只有在 while 循环语句正常结束之后才会执行第 27 行的代码 在 while 循环里面直接使用 return 语句结束整个函数, 将会导致第 27 行的代码没有机会被执行 程序编译运行后的输出结果如图 3-27 所示 : >>> Enter = 46 >>> Enter = 78 >>>1234 * 5678 Enter 1234 * 5678 = >>>123 / 45 Enter 123 / 45 = 2 >>>123 % 45 Enter 123 % 45 = 33 >>>123 / 0 Enter 非法运算! Process exited after seconds with return value 请按任意键继续... 图 3-27 SimpleCalculator_06-A.c 运行结果 55

62 如果需要做到即使有非法运算也不会导致程序结束, 即真正的死循环, 那么第 23 行就不要使用 return 语句, 因为 return 语句的功能是终止当前函数的执行 为了达到这个目的, 这里适合使用关键字 continue 来实现 在一个循环体内, 执行 continue 语句后, 将导致本次循环体里面位于 continue 后面的语句不执行并提前进行下一次的循环表达式的测试, 以确定是否继续进入循环 我们可以编写一个简单程序, 以快速了解 continue 语句的使用 : #include <stdio.h> int main() { int i = 0; while(i < 10){ i = i + 1; if(i == 5){ continue; } printf("%d\n", i); } return 0; } 编译并运行, 输出结果如下 : 请注意输出结果, 少了一个数字 5 所示 第 23 行使用 continue 语句取代 return 语句后, 最终代码如源代码 3-12 SimpleCalculator_06-B.c 01 #include <stdio.h> 02 int main() 03 { 04 char opt; 56

63 05 int number1; 06 int number2; 07 int result; 08 while(1){ 09 printf(">>>"); 10 scanf("%d %c %d", &number1, &opt, &number2); 11 if(opt == '+'){ 12 result = number1 + number2; 13 }else if(opt == '-'){ 14 result = number1 - number2; 15 }else if(opt == '*'){ 16 result = number1 * number2; 17 }else if( (opt == '/')&&(number2!= 0) ){ 18 result = number1 / number2; 19 }else if( (opt == '%')&&(number2!= 0) ){ 20 result = number1 % number2; 21 }else{ 22 printf(" 非法运算!\n"); 23 continue; 24 } 25 printf("%d %c %d = %d\n", number1, opt, number2, result); 26 } 27 printf(" 已经退出计算器!\n"); 28 return 0; 29 } 源代码 3-12 SimpleCalculator_06-B.c 此程序运行后将一直等待用户输入算式, 不管正确还是 非法运算 都会一直重复下去, 程 序不会主动结束 第 27 行的代码在这里还是没有机会被执行 程序编译运行后的输出结果如图 3-28 所示 : >>>123 / 0 Enter 非法运算! >>>123 % 45 Enter 123 % 45 = 33 >>> 图 3-28 SimpleCalculator_06-B.c 运行结果 练习 3-12 编写 C 语言程序, 从键盘读入一个整数 n, 然后按照从小到大的顺序输出前 n 个奇数到屏幕, 每 个奇数占一行 如果整数 n 小于 1, 则输出 非法数据 运行过程如图 3-29 所示 57

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Microsoft Word - 最新正文.doc

Microsoft Word - 最新正文.doc 9 21 1.1.1 1.1.2 1 2 2 Windows 7+Office 2010 3 4 5 6 4 7 1.1.3 5 1.1.4 1 3 2 NII 1993 3 CNNIC 2014 1 16 33 1 2013 12 6.18 5358 45.8% 2012 3.7 2 2013 12 5 19.1% 2012 74.5% 81.0% 2013 3G 2013 12 2.47 2012

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

C C

C C C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

第4章 信源及压缩编码

第4章  信源及压缩编码 第 4 章 信 源 及 压 缩 编 码 4. 概 述 4.2 语 音 信 号 的 特 征 4.3 语 音 编 码 4.4 图 像 信 号 的 特 征 4.5 图 像 压 缩 编 码 4.6 数 据 信 号 编 码 4. 概 述 现 代 通 信 系 统 的 一 个 重 要 标 志 是 信 源 信 号 传 输 系 统 交 换 系 统 和 信 号 处 理 等 诸 环 节 实 现 了 数 字 化 而 语 言

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

《计算机应用基础》学习材料(讲义)

《计算机应用基础》学习材料(讲义) 计 算 机 应 用 基 础 学 习 材 料 ( 讲 义 ) Fundamentals of Computer Application 2014-3-22 JIANGSU OPEN UNIVERSITY 第 二 学 习 周 计 算 机 基 础 知 识 ( 一 ) 导 学 在 本 学 习 周, 我 们 主 要 的 任 务 是 认 识 计 算 机 你 将 知 道 计 算 机 是 什 么 时 候 产 生 的,

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

C

C C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;

More information

目 录 1 正 文 乊 前... 5 1.1 目 癿... 5 1.2 本 文 内 容... 5 1.3 声 明... 5 2 字 符 编 码 相 兰 癿 背 景 知 识... 6 2.1 拉 丁 字 母... 6 2.2 什 么 是 字 符 编 码... 6 3 字 符 编 码 标 准... 8

目 录 1 正 文 乊 前... 5 1.1 目 癿... 5 1.2 本 文 内 容... 5 1.3 声 明... 5 2 字 符 编 码 相 兰 癿 背 景 知 识... 6 2.1 拉 丁 字 母... 6 2.2 什 么 是 字 符 编 码... 6 3 字 符 编 码 标 准... 8 关 键 字 字 符 编 码 详 解 版 本 : 1.0 作 者 : crifan 邮 箱 : green-waste (at)163.com 字 符 编 码,ASCII,ISO 8859,ISO 10646,UCS,Unicode,UTF-8 版 本 版 本 日 期 内 容 更 新 1.0 2011-11-02 添 加 了 编 码 相 兰 背 景 知 识 仃 绉 添 加 了 ASCII 和 EASCII

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

ebook8-30

ebook8-30 3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis

More information

C/C++语言 - 运算符、表达式和语句

C/C++语言 - 运算符、表达式和语句 C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe

More information

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期  开放本科  期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默 试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

期中考试试题讲解

期中考试试题讲解 一 选择题 ( 一 ) 1. 结构化程序设计所规定的三种基本结构是 C A 主程序 子程序 函数 B 树形 网形 环形 C 顺序 选择 循环 D 输入 处理 输出 2. 下列关于 C 语言的叙述错误的是 A A 对大小写不敏感 B 不同类型的变量可以在一个表达式中 C main 函数可以写在程序文件的任何位置 D 同一个运算符号在不同的场合可以有不同的含义 3. 以下合法的实型常数是 C A.E4

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7>

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7> 能源与动力工程学院 结构化编程 结构化程序设计 循环 循环结构 确定性循环 非确定性循环 I=1 sum=sum+i I = I +1 陈 斌 I>100 Yes No 目录 求和 :1+2+3++100 第四节循环的应用 PROGRAM GAUSS INTEGER I, SUM 计数器 SUM = 0 DO I = 1, 100, 1 SUM = SUM + I print*, I, SUM DO

More information

C

C C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;

More information

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1 Chapter 01 Photoshop CS6 的基本操作 本章内容 1.1 Photoshop 的应用领域 1.6 控制面板的显示与隐藏 1.2 位图和矢量图的特性 1.7 新建 打开与保存文件 1.3 像素和分辨率的关系 1.8 图像的缩放 1.4 色彩模式 1.9 屏幕显示模式 1.5 Photoshop CS6 界面 1.10 计算机图形图像常用的色彩模式 Photoshop CS6 艺术设计案例教程

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ;

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ; 第 3 章 数 据 在 计 算 机 中 的 表 示 3.1 数 据 与 数 制 计 算 机 中 使 用 的 数 据 一 般 可 以 分 为 两 大 类 : 数 值 数 据 和 字 符 数 据 数 值 数 据 常 用 于 表 示 数 的 大 小 与 正 负 ; 字 符 数 据 则 用 于 表 示 非 数 值 的 信 息, 例 如 : 英 文 汉 字 图 形 和 语 音 等 数 据 数 据 在 计 算

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

PT-18R PT-18R () PT-18R (CCC)

PT-18R PT-18R () PT-18R (CCC) PT-18R PT-18R PT-18R () PT-18R (CCC) PT-18R Pb Hg Cd CrVI PBB PBDE SJ/T11363-2006 SJ/T11363-2006 1 ( PT-18R ) (+)(-) (+)(-) ( PT-18R ) AC AC AC AC AC AC 2 ( ) AC AC ( PT-18R ) ( PT-18R ) AC AC AC 3 TZ

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

SuperMap 系列产品介绍

SuperMap 系列产品介绍 wuzhihong@scu.edu.cn 3 / 1 / 16 / John M. Yarbrough: Digital Logic Applications and Design + + 30% 70% 1 CHAPTER 1 Digital Concepts and Number Systems 1.1 Digital and Analog: Basic Concepts P1 1.1 1.1

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Python 入门 孙栩 xusun@pku.edu.cn 1 课程的整体介绍 目录 contents 2 Python 的介绍及如何安装 Python 3 使用 Python 编写简单小程序 1 课程的整体介绍 课程的整体介绍 Python 入门 1. Python 的介绍与安装 2. 变量与表达式 3. 一些简单的小程序 数据结构 1. 字符串 2. 列表 3. 元组 4. 字典 5. 集合 分支与循环

More information

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc C 语言开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 :201409210011 学分 :5 学分学时 :60 学时 ( 其中 : 讲课学时 :37 学时上机学时 :23 学时 ) 先修课程 : 计算机导论后续课程 :C++ 程序设计适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 C 语言开发入门 是计算机各专业必修的基础课程, 是数据结构 C++ Java

More information

Ps22Pdf

Ps22Pdf C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第 2 章 Java 语言基础 通过本章的实践, 要掌握 Java 中的标识符 关键字 常量, 熟练掌握算术 关 系 逻辑 条件 赋值 位运算符的使用, 掌握简单顺序结构的程序设计 2.1 典型习题解答 2.1 Java 中怎样进行注释? 解答 Java 语言中的注释有 3 种形式 : (1) 单行 : // (2) 多行 : /* */ (3) 文档注释 : /** */ 第三种形式是第二种形式的变形,

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

C/C++语言 - 分支结构

C/C++语言 - 分支结构 C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

Date: :32:44 若要重复运行上面的命令, 也可以在调试程序的提示符处按 E n t e r 键 Date: :35:25 若要设置断点, 必须在程序中选定一个要停止运行的位置 命令 l 用于列出程序的下面 1 0 行 再次键 l, 可以列出下面的

Date: :32:44 若要重复运行上面的命令, 也可以在调试程序的提示符处按 E n t e r 键 Date: :35:25 若要设置断点, 必须在程序中选定一个要停止运行的位置 命令 l 用于列出程序的下面 1 0 行 再次键 l, 可以列出下面的 Summary of Comments on ebook65-12 Page: 1 Date: 2001-8-5 21:25:15 P e r l 的 - d 开关可使 P e r l 以调试方式启动运行 命令行上也指明了被调试的程序 Page: 2 Date: 2001-8-5 21:26:01 每当调试程序向你显示程序中的一个语句时, 它就是准备要执行的语句, 而不是上一个运行的语句 Date:

More information

untitled

untitled Introduction to Programming ( 數 ) Lecture 3 Spring 2005 March 4, 2005 Lecture 2 Outline 數 料 If if 狀 if 2 (Standard Output, stdout): 料. ((Standard Input, stdin): 料. 類 數 數 數 說 printf 見 數 puts 串 數 putchar

More information

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 C C trio@seu.edu.cn C C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 Week3 C Week5 Week5 Memory & Pointer

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

C 语言程序设计 ( 第 33 版 )) #define PI // 下面 2 行是函数的原型说明部分 double sup_area(double r); double volume(double r); // 下面是主函数部分 { double a=-5,b,c,d; b=fab

C 语言程序设计 ( 第 33 版 )) #define PI // 下面 2 行是函数的原型说明部分 double sup_area(double r); double volume(double r); // 下面是主函数部分 { double a=-5,b,c,d; b=fab 第 1 章 C 语言基础与顺序结构 学习目标 1. 掌握 C 语言程序的结构 2. 合理选用数据类型 3. 掌握算术运算符和赋值运算符 4. 掌握控制数据的输入 输出方法 5. 掌握顺序结构以及顺序结构的流程 6. 掌握 Visual C++ 6.0 集成环境的使用方法 7. 掌握转换大小写字母的方法 8. 掌握产生随机整数的方法 计算机由硬件系统和软件系统组成, 其中硬件是物质基础, 而软件是计算机的灵魂

More information

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1A1D4F1>

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1A1D4F1> 能源与动力工程学院 结构化编程 结构化程序设计 选择 结构化编程的三种基本结构 : 顺序结构 I=1 选择 ( 分支 ) 结构 循环结构 sum=sum+i I = I +1 陈 斌 A?=B NO I>100 No YES Yes 目录 第一节逻辑运算 第一节逻辑运算 第二节 I 语句 逻辑运算 算术运算 关系运算 逻辑运算 关系运算符 运算优先级 第三节浮点数及字符的逻辑运算 90 77 功能

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

教学输入与学习者的语言输出 温晓虹 本文从三个方面探讨了语言的输入与输出的关系 首先从理论研究的角度讨 论了从语言输入到语言输出的习得过程 实验研究表明 输入的语言素材必须被学习者所接收 即使接收了的内容也并不会自动进入中介语的体系 而是需要进一步对输入语言进行 分解 归类等分析性与综合性的处理 在语言 内化 的基础上 学习者的中介语系统才能 够不断地得到重新组合 趋于目的语 另外 学习者在语言输出前和输出时需要调节

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

Microsoft PowerPoint - 03.Fortran程序设计基础1

Microsoft PowerPoint - 03.Fortran程序设计基础1 简单 Fortran 90 程序的构造形式 : 第二讲 Fortran 程序设计基础 (2) [PROGRAM 程序名 ] [ 声明语句 ] [ 执行语句 ] END [PROGRAM [ 程序名 ]] 程序的书写 (P5) PROGRAM MONEY!calculate balance after interest compounded! 根据利息计算余额 REAL BALANCE, INTEREST,

More information

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年 移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 预处理 2 预处理器 C 语言的编译系统分为编译预处理和正式编译 预处理作用 : 对源程序编译之前做一些处理, 生成扩展 C 源程序 预处理器的行为是由预处理指令控制的 宏定义 文件包含 条件编译 #define #ifdef

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

山东师大数学科学学院

山东师大数学科学学院 山东师大数学科学学院 教材 参考书 教材 C 程序设计 ( 第三版 ) 辅导书 C 程序设计实训教程 谭浩强编著 杨杰臧文科 主要内容 第一章 C 语言概述第二章数据类型 运算符与表达式第三章顺序结构程序设计第四章选择结构程序设计第五章循环结构程序设计第六章数组第七章函数第八章指针第九章结构体与共用体第十章文件 上机实习 上机地点 : 上机时间 : 上机内容 (1) 对课堂所讲内容进行验证性实验 ;

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 4.4.1 逻辑运算符及其优先次序 3 种逻辑运算符 : &&( 逻辑与 ) ( 逻辑或 )!( 逻辑非 ) && 和 是双目 ( 元 ) 运算符! 是一目 ( 元 ) 运算符 逻辑表达式 用逻辑运算符将关系表达式或其他逻辑量连接起来的式子 4.4.1 逻辑运算符及其优先次序 判断年龄在 13 至 17 岁之内? age>=13 && age

More information

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63> 基于 WINCE 平台 C# 编程要点之一 本文主要介绍在基于 Windows CE 平台的英创嵌入式主板下进行 C#(Microsoft Visual Stdio.Net 2005) 应用程序开发时会常常用到的一些功能函数以及开发方法, 这些方法适用于英创采用 WinCE 平台的所有型号嵌入式主板, 包括 EM9000 EM9260 EM9160 等 本文要点包括 : 文件的删除和复制 如何获取存取设备的空间大小

More information

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc 在 VMWare-5.5+RedHat-9 下建立 本机 QTopia-2.1.1 虚拟平台 张大海 2008-5-9 一 资源下载 1. 需要以下安装包 : tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 描述 JSP 表达式语言的语法 认识使用 JSP 表达式的优点 在 JSP 中使用表达式语言 表达式语言简介 5 1 EL 为表达式语言 由两个组开发 JSP 标准标签库专家组 JSP 2.0 专家组 JSP 表达式语言的语法 ${EL Expression} JSP EL 表达式用于以下情形 静态文本 标准标签和自定义标签 表达式语言简介

More information

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 计算概论 A 课程程序设计部分 C++ 语言基本成分 数据成分 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 再谈, 我们的进度安排 我们的学习过程 感性理性函数指针等 数据成分运算成分控制成分数组字符串 结构化的程序递归 传统学习过程 数据类型与表达式 输入输出 关系运算 控制语句 函数数组指针结构体 作业练习 感性认识作业练习 ( 以抄程序为主 ) 正常作业练习

More information

数学软件 Matlab 编程基础 ( 脚本 ) 1

数学软件 Matlab 编程基础 ( 脚本 ) 1 数学软件 Matlab 编程基础 ( 脚本 ) 1 本讲主要内容 M 文件 基本运算 : 算术 关系 逻辑 简单的输入输出 控制结构 : 顺序 选择 循环 2 M 文件 M 文件介绍 用 Matlab 语言编写的程序称为 M 文件 M 文件以.m 为扩展名 M 文件是由若干 Matlab 命令组合在一起构成的, 它可以完成某些操作, 也可以实现某种算法 两类重要的 M 文件 ( 调用方式不同 ) Script:

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

没有幻灯片标题

没有幻灯片标题 第 2 章 C 语言的基本数据类型与表达 式 2. 1 C 语言的语法基础 2. 2 C 语言的基本数据类型 2. 3 常量和变量 2. 4 运算符与表达式 2. 5 数据类型转换 用 第 2 章 C 语言的基本数据类型与表达 2.1 C 语言的语法基础 2. 1. 1 C 语言字符集 式 C 语言的基本符号可分 4 个类, 归纳如下 : (1) 英文字母 : 大小写各 26 个, 共计 52 个

More information

Microsoft Word - ZPLII中文编程说明.doc

Microsoft Word - ZPLII中文编程说明.doc ZPLII 缩 放 点 阵 字 体 = / = 0CG Triumvirate Bold Condensed) A-Z0-9EPROM ^CW A-Z0-9 = ^FW ^FW N = Normal) R = 90 Roated) I = 180 Inverted) B = 270 (Bottom) = : 15 ^CF 10-1500 2-10 = : 12 ^CV 0 10-1500 2-10

More information

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos( 第一章三角函数 1. 三角函数的诱导公式 A 组 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C ( 中诱导公式 ) B. cos( B C) cos A D. sin( B C) sin A sin60 cos( ) sin( 0 )cos( 70 ) 的值等于

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

More information