c i p - jxcg.hfut.edu.cnjxcg.hfut.edu.cn/_upload/article/files/1c/32/a0cd4a944b2a8352d71f1fd4... ·...
TRANSCRIPT
0012.1 数字计算机
本书为教育部大学计算机课程改革项目成果,通过讲授计算机科学和技术中最基本的内容,
来介绍有关计算思维的一些概念。目的是让读者通过知识学习体会思考问题和解决问题的新方
法,培养计算思维能力。
本书共分10 章,包括了计算机基本原理、操作系统与应用软件、网络与网页、计算机安全、
算法与数据管理等方面的丰富内容。
本书采用新的角度组织教学内容,在广泛性、实用性、思想性方面具有显著特点,可作为高
校“大学计算机”课程的配套教材使用,适用于非计算机专业学生的计算机通识课或者基础课,
也可供对计算机学科或计算思维感兴趣的人员阅读。
内容提要
策划编辑 张 龙 责任编辑 张 龙 封面设计 赵 阳 版式设计 赵 阳
插图绘制 杜晓丹 责任校对 刘 莉 责任印制 毛斯璐
出版发行 高等教育出版社
社 址 北京市西城区德外大街 4号
邮政编码 100120
印 刷 北京中科印刷有限公司
开 本 787mm×1092mm 1/16
印 张 0.000
字 数 0 千字
购书热线 010-58581118
咨询电话 400-810-0598
网 址 http://www.hep.edu.cn
http://www.hep.com.cn
网上订购 http://www.hepmall.com.cn
http://www.hepmall.com
http://www.hepmall.cn
版 次 2016 年 7 月第 1版
印 次 2016 年 7 月第 1次印刷
定 价 48.00 元
本书如有缺页、倒页、脱页等质量问题,请到所购图书销售部门联系调换
版权所有 侵权必究
物 料 号 45239-00
图书在版编目(C I P)数据
大学计算机教程 : 从计算到计算思维 / 李廉,( 美 )王士弘主编 . -- 北京 : 高等教育出版社,2016.6 ISBN 978-7-04-045239 -6
Ⅰ. ①大… Ⅱ . ①李… ②王… Ⅲ . ①电子计算机 -高等学校 - 教材 Ⅳ . ① TP3
中国版本图书馆 CIP 数据核字 (2015) 第 085523 号
45239-00_CP.indd 1 16/8/26 上午9:23
序
003序
preface
计算机正在越来越深入地融合到社会与生活的各个方面,深刻地改
变了社会的运行模式和人类的生活方式。对于计算与计算思维的理解与
认知已经成为当今社会每一个公民必备的基本能力。在这个背景下,高
校计算机基础课程的重要性和基础性更加凸显。
近几年来,围绕高校计算机基础课程的新一轮改革如火如荼,这一
轮改革的目标是面向新的时代要求,着眼于学生计算机应用水平和计算
思维能力的提升,培养适应新时期各个领域信息化与专业化融合的合格
人才。
随着课程改革的推进,教材也必须作相应调整,以响应新的时代形
势和新的教学要求。由李廉教授和王士弘教授合作编写的这本教材进行
了大胆尝试,从内容到形式都给人耳目一新的感觉。我认真阅读了书
稿,感受到几个突出的特点。
首先,着眼于学生发展。非计算机专业的学生走出校门之后,将会
从事各种各样的工作,因此需要针对学生的实际需求,从繁多的计算机
知识中选取基础和适用的内容讲授给学生。这本教材做了较好的处理,
通过讲述一些基本知识和案例,引导学生去寻找其背后的基本规律和特
点,激发学生对于信息技术的好奇心和求知欲。
其次,面向计算思维。在内容组织和编排上,体现了从知识学习到
能力提升,再到计算思维培养这几个层次的递进关系。对计算思维的重
要概念还专门予以提炼和编排,使得重点突出,非常有利于对这些核心
概念的理解和掌握。
第三,生动有趣。采用了大量的日常生活中的有趣案例,既具体讲
解了相关的计算机知识,又显示了计算思维无处不在的应用。在揭示计
算思维的特征和形式的过程中,避免了抽象的说教和表述。
文前YG.indd 3 16/8/17 上午9:13
004 序
这本教材取材于美国高校的计算机课程教材,针对中国学生实际情况
加以重新编写。这种模式在我国现有的计算机基础课程教材中还鲜有前
例,值得肯定。积极学习其他国家的先进教学经验和方法,是推进国内计
算机基础课程改革的重要途径之一。
我与李廉教授在教育部教学指导委员会中共事多年,在去年大连会议
上又结识王士弘教授,看到他们愿意奉献如此多的时间和精力,为大学生
们编写一本有用、有趣的基础课教材,尤为感佩。希望这本教材能够尽快
进入校园,起到应有的示范作用。
是为序。
中国科学院院士
2016 年 3月
文前YG.indd 4 16/8/17 上午9:13
0052.1 数字计算机
foreword
前言
005前言
无处不在的计算思维Computational Thinking Everywhere
由于计算技术和计算科学的进步,计算思维成为日常生活中无处不在
的一种思考能力。它除了有助于我们更灵活地使用计算机、提升应用计算
机解决实际问题的能力外,还能扩展我们的思路、提高工作效率、避免错
误和意外,以及增加与他人沟通的能力。总之,计算思维能够使我们的生
活和事业更加多彩。
计算机是傻瓜,它只会跟随程序指令来操作数据。无论指令还是数
据都是用 0 和 1 的比特序列来表示的。然而,在有了指令和数据之后,
计算机却是无所不会的“万能”机器。理解计算机的编程、控制以及完
成任务的方式已经是令人着迷的事,更何况我们还从中学习到新的思维
模式——计算思维。学习计算机课程,除了掌握它的知识和技能之外,还
可以训练我们的思维,学会处理事务的方法,以及培养良好的工作习惯,
例如:
细致缜密——把 0 变成 1,或者变成大写的 O,就可能弄乱整个程序。
所以你需要鹰一样的眼睛和侦探一样的头脑,以及一丝不苟的态度。忽略
任何事情都可能导致失败。
准确表达——计算机只能读你的手指,而不能读你的头脑!你需要准
确和完整地表达要做的事情,不要放过任何细节,哪怕是一丁点儿的含糊
都是不能容忍的。
逻辑推导——逻辑规则是一种精确描述问题的方式,学会正确地使用
foreword
前言
文前YG.indd 5 16/8/17 上午9:13
006 第二章 比特、字节和字 Bit/Byte&Word
逻辑来思考和表达问题是非常有益的。
巧妙安排——对于一系列的任务进行巧妙而合理的安排,尽量在最短
时间内、花费最小资源来完成任务。
统筹协调——在为计算机设计算法和操作时,必须考虑各种资源的合
理使用与调度,避免冲突,并且在有些场合通过折中平衡各种矛盾。
分工合作——通过模块化的设计,以接口协议形式实现不同模块之间
的信息交互,是分工合作完成复杂任务的科学方式。
等等。
由此我们提出一个新的概念,叫做“计算化”(Computize)。计算
化是指应用计算思维来思考、分析、设计、阐述,以求实现目标。计算化
是计算思维在方法层面的表现,是利用计算机解决问题时所遵循的原则和
步骤。
本教材希望通过讲授计算机科学和技术中最基本的内容,来介绍有关
计算思维的一些概念。目的是让同学们通过学习计算机科学美妙的算法设
计、逻辑电路、体系结构、网络环境等方面的知识,体会其背后的指导原
则,诸如操作体验、用户中心、可视化等人文主义的基本思想。我们要仔
细学好教材中的内容,掌握好有关它的知识和技巧,将自己的专业和计算
机有机融合,做好信息技术在本专业的应用。在此基础上,才能真正体会
到计算思维反映出来的科学精神。无数历史经验告诉我们,真正能够改革
旧事物、创造新思想的人,一定是对于旧事物十分熟悉和精通的人。
当然,作为大学本科通识类课程的一本教材,不可能讲解有关计算思
维的深刻的内容,只是介绍一些关于计算思维的最初步的结论。尽管如此,
其中展示的内容已经是令人着迷和催人深思的了。不论是什么专业和将来
从事什么工作,需要大家在学习时牢牢铭记的是:人永远是计算机的主人
而不是奴仆,这是决定计算机科学与技术今后发展的关键。
希望读者能从中学到思考问题和解决问题的新方法,例如:不必使用
编程语言来编写程序,就能体会到熟练程序员所具有的思维和解决问题的
技巧;会用计算思维和计算化的角度来重新审视工作和生活。这些新的见
解和观点可以培养读者的计算思维能力,使我们在看待这个世界的时候多
了一个维度、多了一种视野,把一个领域的思想应用到另一个领域是实现
突破与创新的有效途径。
006 前言 Bit/Byte&Word
文前YG.indd 6 16/8/17 上午9:13
0072.1 数字计算机 007
2010 年,中国 9 所高校发表了《九校联盟(C9)计算机基础教学发
展战略联合声明》,其中明确提到“旗帜鲜明地将计算思维能力的培养作
为计算机基础教学的核心任务”。同时也表明,“培养复合型创新人才的
一个重要内容就是要潜移默化地使他们养成一种新的思维方式:运用计算
机科学的基础概念对问题进行求解、系统设计和行为理解,即建立计算思
维。无论哪个学科,具有突出的计算思维能力都将成为新时期拔尖创新人
才不可或缺的素质。国外一些著名高校开始尝试基于计算思维的课程改
革,就是为了使其继续保持在计算机科学研究与计算机技术发展中的优
势”。声明提出,“应该毫不犹豫,旗帜鲜明地把培养具有国际竞争力的
高级人才的计算思维能力作为计算机基础教学的一项重要的、长期的和
复杂的核心任务,为国内高校的人才培养引领方向,为计算机教学树立
标杆”。
本教材正是在这一号召下,根据多年的研究成果而编写的。希望能够
为大学计算机基础教学的改革起到添砖加瓦的作用。我们热切盼望读者能
够通过本书配套网站(http://ct.hfut.edu.cn)分享自己的观点和案例,真诚
希望通过汇聚各方面的贡献来促进计算思维能力的培养。
本书在编写过程中,得到了中国科学院陈国良院士、清华大学武永卫
教授、浙江大学何钦铭教授以及国防科技大学殷建平教授的帮助,他们仔
细审阅了书稿,并提出了富有针对性和深刻见解的修改意见,使得这本教
材更加贴近学生和教师,在此表示衷心感谢。
本书在编写过程中,还得到了一些研究生和本科生的帮助,他们是:
金柳颀,贵芳,李荣灿,王永近,向润昭,段荣,巩博文。其中贵芳、金
柳颀和向润昭协助开发了本书的网站,李荣灿设计了本书的卡通画,贵芳
和王永近测试了本书所有例子并编排了名词索引,段荣和巩博文整理了书
中的一些内容。没有他们的帮助,本书不可能这么快完成,在此对他们一
并表示感谢。
在这里还要特别感谢葛孝薇女士,她作为本书手稿的第一个读者,不
仅为书稿的完善提出了建设性的意见,还参与了本书前言的撰写工作。
作者
2016 年 3月
007前言
文前YG.indd 7 16/8/17 上午9:13
008 第二章 比特、字节和字 Bit/Byte&Word
. . . . . . . . . . .
008 第二章 比特、字节和字 Bit/Byte&Word
文前YG.indd 8 16/8/17 上午9:13
0092.1 数字计算机 009
contents
目录
第1章 开宗明义/001
1.1 计算机/003
1.2 图灵机/004
1.3 计算机简史/006
1.4 软件/011
1.5 程序编制/012
1.6 语法和语义/013
1.7 流程图/014
1.8 算法/016
1.9 伪代码 /017
1.10 欧几里得GCD算法/019
1.11 如何达到目标/021
1.12 不断求索/022
练习/023
第2章 比特、字节和字/025
2.1 数字计算机/027
2.2 二进制数/030
2.3 正整数和负整数/034
2.4 模算术/035
2.5 基数变换/038
2.6 字符/039
2.6.1 ASCII/039
2.6.2 Unicode/040
009目录
文前YG.indd 9 16/8/17 上午9:13
010 第二章 比特、字节和字 Bit/Byte&Word010 目录
2.6.3 汉字编码/041
2.6.4 比特模式的多种使用/042
2.7 编辑文本/043
2.8 数据输出/045
练习/046
第3章 真或假/049
3.1 数字逻辑电路/051
3.2 布尔代数/056
3.2.1 表达式与运算律/056
3.2.2 通用门/057
3.3 判定/058
3.4 位逻辑/061
3.5 流程控制与迭代/063
3.5.1 当型循环/064
3.5.2 对型循环/065
练习/068
第4章 谁在控制/071
4.1 中央处理器/073
4.2 操作系统/074
4.3 开源软件/076
4.4 图形桌面概述/076
4.5 你在跟我说?/078
4.5.1 输入焦点/079
4.5.2 事件处理/079
4.6 命令行界面/080
4.7 文件/082
文前YG.indd 10 16/8/17 上午9:13
0112.1 数字计算机 011目录
4.7.1 文件内容类型/083
4.7.2 文件树/083
4.7.3 文件管理与访问控制/085
4.8 进程/086
4.9 任务管理/088
4.10 启动与运行/089
练习/090
第5章 应用程序/091
5.1 重要程序/093
5.2 了解你的应用/094
5.3 程序配置与定制/095
5.4 进程协作/096
5.5 机器语言/097
5.6 汇编语言/099
5.7 高级语言/100
5.8 编译器/102
5.9 面向对象编程/103
练习/107
第6章 嗨,你好/109
6.1 什么是网络?/111
6.2 因特网/112
6.3 局域网和广域网/114
6.4 因特网结构/115
6.5 无线网络/117
6.6 联网协议/118
6.7 因特网协议地址/120
文前YG.indd 11 16/8/17 上午9:13
012 第二章 比特、字节和字 Bit/Byte&Word012 目录
6.8 客户/服务器模式/120
6.9 域名/122
6.10 域名解析/123
6.11 域名服务/124
6.12 域名注册/125
6.13 云计算/127
6.14 互联网经济/129
练习/133
第7章 精美网页/135
7.1 网络服务器/137
7.2 网络浏览器/138
7.3 万维网简史/139
7.4 统一资源定位符/140
7.5 HTML和HTML5/143
7.6 网页样式/144
7.7 网站托管/145
7.8 动态生成网页/146
7.9 客户端脚本/147
7.10 超文本传输协议/148
7.11 网站开发/152
7.12 网络搜索引擎/153
7.13 网络服务/154
7.14 标准网络技术/156
练习/156
第8章 保障安全/159
8.1 登录/161
文前YG.indd 12 16/8/17 上午9:13
0132.1 数字计算机 013目录
8.2 HTTPS 和 SSL/TLS/164
8.3 电子证书/165
8.4 密码学/167
8.5 公钥加密/171
8.6 RSA 公钥算法/173
8.7 数字签名/174
8.8 消息摘要/175
8.9 安全电子邮件/177
8.10 计算机病毒/180
练习/182
第9章 解决问题/185
9.1 求解谜题/187
9.1.1 煎鸡蛋/187
9.1.2 液体测量/188
9.1.3 魔术托盘/188
9.2 排序/189
9.2.1 冒泡排序/189
9.2.2 改进的冒泡排序/191
9.3 递归/193
9.3.1 最大公约数/194
9.3.2 快速排序/195
9.4 递归解法/198
9.5 汉诺塔/199
9.6 八皇后问题/201
9.7 树的遍历/205
9.8 算法复杂度/207
9.9 启发式方法/208
练习/211
文前YG.indd 13 16/8/17 上午9:13
014 第二章 比特、字节和字 Bit/Byte&Word014 目录
第10章 随处可见的数据/213
10.1 数字图像/215
10.2 光栅图像编码/217
10.2.1 光栅图像格式/217
10.2.2 矢量图/218
10.3 音频和视频/220
10.3.1 数字音频/220
10.3.2 音频编码格式/221
10.4 数字视频/222
10.4.1 视频容器/222
10.4.2 视频编码解码器/223
10.5 数据和文件结构/223
10.6 数据共享/225
10.7 标记文档/225
10.7.1 可扩展标记语言/226
10.7.2 XML文档格式/226
10.8 数据压缩/227
10.8.1 游程编码压缩/228
10.8.2 LZ77 算法/229
10.8.3 Huffman 编码/229
10.9 数据结构/231
10.10 数据库/233
10.10.1 关系型数据库/233
10.10.2 结构化查询语言/234
10.11 一些法律问题/235
练习/236
参考文献/239
索引/241
文前YG.indd 14 16/8/17 上午9:13
0152.1 数字计算机 015目录
索引A 计算思维概念/241
索引B 算法名称/242
索引C 术语汉英对照/243
索引D 英文缩略语/247
后记/251
文前YG.indd 15 16/8/17 上午9:13
我们正处在数字计算机带来的信息革命之中。即便
你不想成为计算机科学家或者信息技术的专家,也无法
逃避充斥在周围的各种信息技术。由于我们都是信息的
消费者,因此了解这些神秘事物如何运行是十分有益的
事。数字计算机的神通来源于它是“通用机器(Universal
Machine)”。“通用性”意味着通过输入程序就
可以做任何计算,解决各种问题或者执行各种任务。
我们将通过了解它的硬件和软件以及图灵机(Turing
Machine)模型来解释通用性。
下面我们就要踏入这个新鲜的、令人激动的、正在
发展而未完善的计算思维(ComputingThinking)领
域。我们将着眼于充满智慧、哲理和心智灵感的讨论,
发掘其中的金矿。同时热切希望大家把这些思想用于不
同的领域,甚至日常生活。
01开宗明义
Chapter
General Introduction
第1-2章YG.indd 1 16/7/29 下午1:44
1.1 计算机
数字计算机(Digital Computer)带来了信息时代的“数字革命”。我们日常活动越来越
多地依赖台式机、笔记本电脑、平板电脑以及智能手机。用它们随时上网访问遍布各地的网
站,立即获得各种信息以及在线服务。这些全球的信息基础设施为世界经济带来了巨大的利
益,弥补了地理上的分离,使得各地的人和企业可以方便地进行交互。毫不夸张地说,计算
机文化(Cyberculture)对于现代公民而言,与阅读和写作的能力一样重要。
计算机有多种形式,台式机是大块头的设备,在办公室或者家里承担重任。笔记本电脑
具有相同的能力,但是却可以在旅途上携带,配备有麦克风、扬声器、照相机,可以通过
Wi-Fi 无线上网。平板电脑与笔记本电脑相似,只是缺少键盘,从而更轻和更小;触摸式屏
面提供了一种新的更加方便的与计算机交互的方式。智能手机组合了手机、平板电脑和无线
通信,是粉丝们梦寐以求的手持设备。
另外,在一些大型设备中,如汽车、轮船、飞机、航天器和卫星、电网以及机器人等方
面也运行着各种专用计算机(Special-purpose Computer)。它们的快速和准确使得人们以前
所未有的精度来处理大量的数据。学习计算机如何工作以及如何应用对于所有的专业和领域
都是大有帮助的。掌握计算机的使用和计算思维的方法将是受益无穷的事。
计算机系统
计算机系统是目前人类制造出来的最复杂的系统。图 1.1 展示了一台超级小型计算机
(Raspberry Pi)。它与信用卡大小相当,使用 Linux 操作系统,价格约 200 元人民币,接上
电视和键盘就能使用,也是很好的教学工具。
数字计算机的核心是很简单的。中央处理器(Central Processing Unit,CPU)一个接一
个地执行指令。每一条指令有一个操作码,表示要实现的操作或者动作,并且还有提供给操
作的操作数。一次操作可以把结果存储到一个存储单元,并指向下一条要执行的指令。数据
0031.1 计算机
第1-2章YG.indd 3 16/7/29 下午1:44
004 第 1章 开宗明义 General Introduction
和指令存储使用 0/1 二进制代码存储在内存中。一个计算机程序,不管多么复杂和强大,总
归是一系列二进制指令和数据。现代数字计算机和之前的计算机器最大的区别,在于它是一
台可以存储程序的机器。计算机根据它执行的程序而显现不同的功能。相同的硬件可以动态
地存储和执行任何一种程序,这就使得现代计算机具有强大的能力。现代计算机也可以通过
增加 CPU 的个数以便同时执行几个操作(称为进程)来提高速度。
1.2 图灵机
阿兰·图灵(Alan Turing)被认为是计算机科学之父,出生于 1912 年 6 月 23 日。由于
(a) 概貌图
(b) 实物图
图 1.1 一台小型计算机
第1-2章YG.indd 4 16/7/29 下午1:44
0051.2 图灵机
他的杰出贡献,计算机科学最有影响的奖项——被称为计算机科学领域的诺贝尔奖——被命
名为图灵奖。他 24 岁的时候发表文章介绍了一种计算模型,现在称为图灵机。一台图灵机
是表示计算机如何工作的理论装置。
图灵机可以描述如下。
• 输入符号的集合,即机器的字母表,是一个有限的集合;通常空格符号属于这个字 母表。
• 状态(或称为内部状态)的集合,即机器的状态表,是一个有限的集合。其中有一个
状态指定为开始状态,机器开始时处于这个状态。有一些状态指定为停机状态,机器
到达这些状态时停机。
• 动作规则,根据当前所处的状态和读入的符号决定机器的当前动作和进入哪一个新状
态。机器的当前动作包括:在当前的带单元上写一个新符号,读头向前或者向后移动
一格(或者保持不动)。
刻画一个图灵机主要是明确三件事,第一是输入符号集合,第二是状态集合(包括指明
开始状态和停机状态),第三是动作规则。在一个任务执行时,机器的输入被写在一条无限
长的带子上。图灵机从指定的开始状态出发,读入位于带子第一个单元的符号,根据动作规
则一步一步地动作,直到进入某个停机状态而停机,这时带子上的内容就是输出结果。理论
上的图灵机具有无限长的带子,因此可以存储任意长的符号串。除去这一点,现代计算机被
证明等价于图灵机,其中字母表是 {0,1},数据和指令定义了它的动作和状态。能够被图
灵机完成的任务称为可计算的,或者可判定的;不能够被图灵机完成的任务称为不可计算的,
或者不可判定的。用简单的话来说,就是一个问题当且仅当能够写成一个计算机程序时,才
被认为是可计算的。
在图灵机概念出现以前,人们对于可计算性的理解是模糊的,什么是可计算的,什么是
不可计算的,缺乏一种公认的标准。
图灵机出现以后,人们逐渐认识到,
使用图灵机来定义可计算性是一种
易于为大家接受的方式。现在认为,
“凡是可计算的都是图灵机可计算
的”。这就是所谓的丘奇—图灵论题
(Church-Turing Thesis)。
图 1.2 所示为一个图灵机,在放置
一个程序后图灵机开始工作,这个图灵机有 12 个状态(0 到 11),当前的状态是 4。
计算思维:可计算性
凡是可计算的都是图灵机可计算
的,这就是丘奇—图灵论题。因此可
计算性与可以用图灵机模型计算是等
同的概念。注意,这只是一个论题,
不是已经被证明的命题。
第1-2章YG.indd 5 16/7/29 下午1:44
006 第 1章 开宗明义 General Introduction
图 1.2 图灵机
图灵机是关于计算机的抽象模型。通过抽象(Abstraction),可以剥去事物不重要的方
面而关注实质内容,从而把复杂事物
变得非常清晰。随着这本教材的学习,
你将渐渐熟悉抽象,它是一种被广泛
应用的重要的分析技巧,不仅仅在计
算中使用。它也是计算思维中十分重
要的基础概念和广泛用于各种问题求
解的基本方法。
1.3 计算机简史
借用机械装置进行记账和算术可以回溯到古代。一个典型的例子是算盘(Abacus),这
是一种简单而又方便的机械计算器,今天仍在使用,通过在细小柱子上滑动的珠子实现算术
运算。算盘的文字记载首先出现在公元 190 年,可能使用的时间要更早。图 1.3 是一个典型
的算盘,其中的珠子位置表示 37925 这个数。
更复杂的机械式计算器是查尔斯 • 巴贝奇(Charles Babbage)在 1823 年发明的差分机
(Difference Engine),使用齿轮和其他精密零件计算多项式函数。巴贝奇没能把差分机制
造出来。在他设计的基础上,后人制作了模型用于演示。其中,巴贝奇差分机 2 号(图 1.4)
现在美国加利福尼亚州的山景城(Mountain View)计算机博物馆展览。
计算思维:抽象化
在解决问题和处理事务前,首先
要进行问题的抽象,忽略掉无关紧要
的部分,专注于实质性的部分。抽象
是科学研究的基础能力,要逐步养成
科学地抽象问题的习惯。
第1-2章YG.indd 6 16/7/29 下午1:44