办公应用与计算思维案例教程教学课件汇总完整版电子教案

办公应用与计算思维案例教程教学课件汇总完整版电子教案

ID:81929386

大小:15.78 MB

页数:679页

时间:2023-10-26

上传者:可爱的嘎嘎
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第1页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第2页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第3页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第4页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第5页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第6页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第7页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第8页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第9页
办公应用与计算思维案例教程教学课件汇总完整版电子教案_第10页
资源描述:

《办公应用与计算思维案例教程教学课件汇总完整版电子教案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第1章计算机组成及工作原理

1目录1.1计算机概述1.2微电子技术1.3计算机组成与工作原理1.4PC的组件

21.1计算机概述1.1.1计算机发展历史1946年,美国宾夕法尼亚大学研制成大型电子数字积分计算机ENIAC。

3第一代——电子管计算机(1946年~1959年)第二代——晶体管计算机(1959年~1964年)第三代——中小规模集成电路计算机(1964年~1970年)第四代——大规模、超大规模集成电路计算机(1970年至今)计算机的发展共经历了四代

4计算机使用的电子元器件

5按照计算机的结构原理可分为模拟计算机、数字计算机和混合式计算机。按计算机用途可分为专用计算机和通用计算机。较为普遍的一种分法是按照计算机的运算速度、字长、存储容量等综合性能指标,可分为巨型机、大型机、小型机、微型机和嵌入式计算机等。1.1.2计算机分类

61.巨型机是一种超大型电子计算机,具有很强的计算和处理数据的能力,其主要特点表现为高速度和大容量,配有多种外部和外围设备及丰富的、高性能的软件系统。

72.大型机又称大型主机,使用专用的处理器指令集、操作系统和应用软件。

83.小型机小型机是指采用精简指令集处理器,性能和价格介于PC服务器和大型主机之间的一种高性能计算机。

94.微型机由大规模集成电路组成的体积较小的电子计算机。它是以微处理器为基础,配以内存储器及输入输出(I/O)接口电路和相应的辅助电路而构成的裸机。主要包括台式机、电脑一体机、笔记本电脑、平板电脑和智能手机等。

10

115.嵌入式计算机嵌入式技术是针对网络、通信、音频、视频、工业控制等的“专用”计算机技术,一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及应用程序等4个部分组成。

121.2微电子技术1.2.1集成电路集成电路(IntegratedCircuit,IC)又称微电路、微芯片、芯片,是把一定数量的常用电子元件,如电阻、电容、晶体管等,以及这些元件之间的连线,通过半导体工艺集成在一起的具有特定功能的电路。

13集成电路的分类按集成度的高低可分为:小规模集成电路(SSI):<100;中规模集成电路(MSI):100~1000;大规模集成电路(LSI):1000~10万;超大规模集成电路(VLSI):10万~100万;特大规模集成电路(ULSI):100万~1亿;极大规模集成电路(GSI):>1亿。

141.2.2摩尔定律当价格不变时,集成电路上可容纳的元器件的数目每隔约18-24个月便会增加一倍,性能也将提升一倍。摩尔定律其实是一个预言,很大程度上是人类有意控制的结果。

151.3计算机的组成与工作原理1.3.1冯·诺依曼体系结构

16冯·诺依曼设计思想计算机应包括运算器、存储器、控制器三个核心部件,以及输入和输出设备计算机的数制采用二进制程序每条指令一般具有一个操作码和一个地址码将编好的程序和原始数据送入存储器,计算机在不需操作人员干预的情况下,自动逐条取出指令和执行指令,并最终完成整个任务

171.3.2五大基本部件冯.诺依曼机的硬件系统主要由5大基本部分组成:运算器、控制器、存储器、输入设备和输出设备。

181.运算器运算器的主要任务是执行算术运算(如加、减、乘、除等)和逻辑运算(如与、或、非、比较、移位等),所以运算器也被称为算术逻辑单元(ArithmeticandLogicUnit,简称ALU)。运算器的核心部件是加法器和若干个寄存器,加法器用于运算,寄存器用于存储参加运算的各种数据以及运算后的结果。

192.控制器控制器是整个计算机系统的指挥中心。控制器的主要特点是采用程序控制方式。控制器主要由程序计数器(PC)、指令寄存器(IP)、指令译码器(ID)、时序控制电路以及微操作控制电路等组成。运算器和控制器是计算机的核心部件,现在它们被做在一块集成电路芯片中,称为中央处理器CPU。

203.存储器存储器用来存储数据和程序,可分为内存储器和外存储器两种。内存储器也称主存储器、主存或内存,用来存放现行程序的指令和数据,可以直接与运算器和控制器交换信息。内存具有存取速度快、容量小的特点外存储器也称为辅助存储器、辅存或外存,用来存放需要长期保存的信息,不能直接与运算器、控制器交换信息,需要通过内存进行交换。外存的特点是存取速度较慢、存储容量大、成本低。

21存储器的层次结构为了使整个计算机系统的存储器的性能/价格比达到最优,计算机往往采用层状的塔式结构

224.输入输出设备输入设备是将数据输入到计算机中的设备,常用的输入设备有键盘、鼠标、扫描仪、光笔、麦克风等。输出设备是将计算机处理过的中间过程和最终结果,以人们能够识别的字符、表格、图形或图像等形式表现出来,常见的输出设备有显示器、打印机、音响、绘图仪等。输入设备和输出设备统称为I/O设备(Input/Output)。

231.3.3计算机的工作原理1.计算机基本工作原理存储程序和程序控制

24计算机基本工作原理计算机的基本工作过程就是不断地重复取指令、分析指令及取数、执行指令的过程,如此周而复始,直到遇到停机指令或外来事件的干预为止。

252.指令及指令系统指令是能被计算机识别并执行的二进制代码,它规定了计算机能完成的某一种操作。一条指令通常由操作码和操作数两部分组成。一台计算机的所有指令的集合称为该计算机的指令系统。根据指令系统设计架构的不同,分为复杂指令系统和精简指令系统两种。

26指令及指令系统计算机工作的过程就是执行程序的过程。程序是一系列有序指令的集合,计算机执行程序就是执行这一系列的有序指令。

273.指令的执行过程取指令->分析指令及取操作数->执行指令->保存结果

281.4PC的组件人们经常使用的台式机,简单地从外观上看,其硬件包括两部分:主机系统和外围设备。主机是指安装在PC机箱内部的一个整体,包括主板、硬盘、光驱、电源和风扇等。主板上安装了CPU、内存、总线和I/O控制器等。

291.4.1主板主板又叫母板,是微型计算机中最大的一块集成电路板。

30主板一般为矩形电路板,能提供一系列接合点,供处理器、显卡、声卡、硬盘、存储器、外围设备等部件连接1.主板概述

312.主板的重要芯片(1)芯片组:芯片组(chipset)是主板的核心组成部分,几乎决定了这块主板的功能。(2)BIOS芯片:BIOS是基本输入输出系统,把一组程序固化到主板上的一个ROM芯片中。(3)CMOS芯片:主板上一块可读写的RAM芯片。

32(1)芯片组芯片组几乎决定着主板的全部功能,如能安装内存的最大容量、速度及可使用的内存条的类型。芯片组一般由两块大规模集成电路组成:南桥芯片和北桥芯片。

33北桥芯片和南桥芯片北桥芯片在主板芯片组中起主导作用,是存储控制中心,用于高速连接CPU、内存条、显卡,并与南桥芯片互连。南桥芯片是输入/输出控制中心,主要负责I/O接口控制及高级电源管理等。

34北桥芯片和南桥芯片

35(2)BIOS芯片BIOS即“基本输入/输出系统”,是一组固化在计算机主板上的ROM(当前以FlashROM为主)芯片中的机器语言程序。主要包含四个部分的程序:加电自检程序、系统启动自举程序、CMOS设置程序、主要I/O设备的驱动程序和中断服务程序。

36①加电自检程序计算机接通电源后,会自动运行固化在BIOS芯片上的程序,通常称为POST加电自检。完整的POST包括对CPU、内存、扩展内存、ROM、主板、CMOS芯片、串并口、显示卡、软硬盘子系统及键盘等设备的测试。自检中如果发现严重故障则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;如果发现非严重故障则给出提示或声音报警信号,等待用户处理。

37②系统启动自举程序POST自检通过后,CPU将执行BIOS中的引导装入程序,按照CMOS中预先设定的启动顺序,依次搜寻硬盘、光盘或U盘,读入操作系统引导记录,然后将控制权交给引导记录,由引导记录完成操作系统的启动

38③CMOS设置程序CMOS设置程序主要用于对CPU、软硬盘驱动器、显示器、键盘等部件进行管理和设置,也可以排除系统故障或者诊断系统问题。开机时用特殊热键(一个或一组键)启动可进入CMOS设置界面。这个设置CMOS参数的过程,习惯上也称为“CMOS设置”。

39④主要I/O设备的驱动程序和中断服务程序外设驱动程序中包含了计算机中所有可用外设的驱动程序,如果BIOS中不包含某种I/O设备的驱动程序,系统就不支持该设备。BIOS中断服务程序是计算机系统软、硬件之间的一个可编程接口,用于程序软件功能与计算机硬件实现的衔接。

40(3)CMOS芯片CMOS是主板上一块可读写的RAM芯片,用来存放BIOS中的设置信息以及系统时间日期。CMOS是一种易失性存储器,需要使用电池供电,以保证其信息不丢失。

41BIOS与CMOS它们既相关又不同:BIOS中的系统设置程序是完成CMOS参数设置的手段;而CMOS本身只是一块存储器,仅仅用来保存数据,对CMOS中各项参数的设定和修改需要通过BIOS的设定程序来实现。日常生活中我们经常听说的CMOS设置,完整的说法应该是“通过BIOS设置程序对CMOS参数进行设置”。

423.总线与I/O接口(1)总线总线是各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束。接口的功能是负责实现CPU通过系统总线把I/O电路和外围设备联系在一起。

43总线的主要技术指标总线位宽是指总线能够同时传输的二进制数据的位数。总线工作频率以MHz为单位,工作频率越高,总线工作速度越快,总线带宽越宽。总线带宽是指单位时间内总线上可传输的最大数据量。总线带宽(MB/s)=(总线位宽/8)×总线工作频率(MHz)×传输次数

44总线标准常见的总线标准有:PCI总线、PCI-E总线等。PCI总线是一种32位并行总线(可扩充为64位),可在主板上和其他系统总线(如ISA、EISA或MCA)相连接,系统中的高速设备挂接在PCI总线上,而低速设备仍然通过ISA、EISA等低速I/O总线支持。PCI-E是串行总线,采用高速串行传输以点对点的方式与主机进行通信。每个设备都有自己的专用连接,独享带宽。

45(2)I/O接口各种外部设备通过接口与计算机主机相连,与外部设备相连的接口称为I/O接口。由于I/O设备的种类繁多,每种I/O设备的工作方式也不相同,因此每个I/O设备都有各自专用的控制电路,即I/O控制器。由I/O控制器上的控制电路延伸出来的插头或插座,就是I/O接口。通过I/O接口,可以把打印机、扫描仪、U盘、移动硬盘、数码相机等外部设备连接到主机上。

46①SATASATA是SerialATA的缩写,即串行ATA。它的主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输。

47USB接口一个USB接口通过级联方式最大可以支持127个外设,并且支持热拔插,真正做到了即插即用,是目前计算机中使用非常广泛的接口,几乎所有的外设都有USB接口。

48HDMI接口适合影像传输的专用型数字化接口,可同时传送音频和影像信号,最高数据传输速度为48Gbps(2.1版),同时无需在信号传送前进行数/模或者模/数转换。

491.4.2CPU中央处理器(CPU,CentralProcessingUnit)是一块超大规模的集成电路,是一台计算机的运算和控制中心。它的功能主要是解释计算机指令以及处理数据。

501.CPU的物理结构运算单元运算器是计算机对数据进行加工处理的中心,它主要由算术逻辑部件(ArithmeticandLogicUnit,缩写为ALU)、通用寄存器组和状态寄存器组成。ALU主要完成对二进制信息的定点算术运算、逻辑运算和各种移位操作,也可执行地址运算和转换。控制单元控制器是计算机的控制中心,它决定了计算机运行过程的自动化。它不仅要保证程序的正确执行,而且要能够处理异常事件。控制器一般包括指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑等几个部分。

512.CPU的性能指标-1(1)字长字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制数位数,由微处理器对外数据通路的数据总线条数决定。(2)主频主频用来表示CPU的运算、处理数据的速度。通常,主频越高,CPU处理数据的速度就越快。(3)缓存缓存也叫高速缓冲存储器,是一种高速、小容量的存储器,使用它是为了解决CPU与内存速度不匹配的矛盾。高速缓冲存储器位于CPU与内存之间(一般集成在CPU内部),存储CPU即将访问的指令或数据,先于内存与CPU交换数据。

522.CPU的性能指标-2(4)CPU扩展指令集CPU扩展指令集指的是CPU增加的多媒体或者是3D处理指令,这些扩展指令可以提高CPU处理多媒体和3D图形的能力。著名的有MMX(多媒体扩展指令)、SSE(因特网数据流单指令扩展)和3DNow!指令集。(5)多线程让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。(6)多核芯多核芯,也叫单芯片多处理器,其主导思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。

531.4.3存储器1.内存储器内存储器又称内存,内存通常由半导体材料构成,也被称作半导体存储器。按照工作方式,即是否能随机存取,分为随机存取存储器(RandomAccessMemory,简称RAM)和只读存储器(Read-OnlyMemory,简称ROM)两类。

54半导体存储器

55(1)随机存储器随机存储器是一种可以随机读∕写数据的存储器,也称为读∕写存储器。RAM有以下两个特点:一是可以读出,也可以写入。读出时并不损坏原来存储的内容,只有写入时才修改原来所存储的内容;二是RAM只能用于暂时存放信息,一旦断电,存储内容立即消失,即具有易失性。RAM是易失性存储器,断电后存储器中的内容立即消失。根据保存数据的机理不同可将RAM分为动态随机存储器DRAM和静态随机存储器SRAM两种。

56动态随机存储器由于DRAM存储单元的结构简单,所用元件少,集成度高,功耗低,所以目前已成为大容量RAM的主流产品。DRAM利用电容来存储数据,每一个bit只需要一个晶体管另加一个电容,电容的有电和没电状态分别表示0和1。由于电容不可避免的存在衰减现象,因此电容必须被周期性的刷新(预充电)以保持数据,这是DRAM的一大特点。

57静态随机存储器SRAM用触发器存储数据,接通代表1,断开表示0,并且状态会保持到接收了一个改变信号为止,也就是SRAM不需要刷新。SRAM的特点是存取速度特别快。但如同DRAM一样,一旦停机或断电,它们也会丢掉信息。由于一个触发器需要四到六个晶体管和其他零件,因此除了价格较贵外,SRAM芯片在外形上也较大。

58(2)只读存储器ROM(ReadOnlyMemory)是只读存储器,顾名思义,它的特点是只能读出原有的内容,不能由用户再写入新内容,一般用来存放专用的固定的程序和数据。只读存储器是一种非易失性存储器,一旦写入信息后,无需外加电源来保存信息,不会因断电而丢失。目前ROM主要采用可在线改写内容的快擦除ROM(FlashROM)。

592.外存储器外存储器也叫外存、辅助存储器、辅存,可以用来长期存放程序和数据,一般只和内存进行信息交换。当电源关闭时,外存里存储的信息不会丢失,所以也称它为永久性存储器。外存储器有硬盘、光盘、U盘、移动硬盘和存储卡等。

60(1)硬盘硬盘是计算机中主要的存储媒介之一,硬盘有机械硬盘、固态硬盘、固态混合硬盘。固态硬盘采用闪存颗粒来存储,机械硬盘采用磁性碟片来存储,混合硬盘是把磁性碟片和闪存集成到一起的一种硬盘。

61机械硬盘硬盘由磁性盘片(存储介质)、主轴与电机、控制电路、伸缩臂以及伸缩臂上的磁头等组成。硬盘的磁性盘片由一个或者多个碟片组成,碟片的上下两面都覆盖有铁磁性材料,通过磁性材料粒子的磁化来记录数据,磁性材料粒子有两种不同的磁化方向,分别用来表示“0”或“1”。

62盘片的结构一个硬盘通常由多个盘片组成,每个盘片被划分为磁道和扇区。因为扇区的单位太小,因此把它捆在一起,组成一个更大的单位更方便进行灵活管理,这就是“簇”。簇是硬盘存放信息的最小单位。通常连续的若干扇区形成一个簇。簇的大小是可以变化的,是由操作系统在“高级格式化”时规定的,因此管理也更加灵活。

63固态硬盘固态硬盘(SolidStateDrive,缩写为SSD),也可简称固盘。固态硬盘是用固态电子存储芯片阵列制成的硬盘,由控制单元和存储单元组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘完全相同,在产品外形和尺寸上也完全与普通硬盘一致。

64固态硬盘的结构固态硬盘的存储介质分为两种,一种是采用闪存作为存储介质,另外一种是采用DRAM作为存储介质。基于闪存的固态硬盘是固态硬盘的主要类别,这也是通常所说的SSD。其内部构造十分简单,固态硬盘内主体其实就是一块PCB板,这块PCB板上最基本的配件就是控制芯片,缓存芯片(部分低端硬盘无缓存芯片)和用于存储数据的闪存芯片。主控芯片是固态硬盘的大脑,其作用一是合理调配数据在各个闪存芯片上的负荷,二则是承担了整个数据中转,连接闪存芯片和外部SATA接口。不同的主控之间能力相差非常大,在数据处理能力、算法,对闪存芯片的读取写入控制上会有非常大的不同,直接导致固态硬盘产品在性能上差距高达数十倍。

65固态混合硬盘固态混合硬盘是把磁性硬盘和闪存集成到一起的一种硬盘。混合硬盘是一块基于传统机械硬盘衍生出来的新硬盘,除了机械硬盘必备的碟片、马达、磁头等,还内置了NAND闪存颗粒,这些颗粒将用户经常访问的数据进行储存,可以达到如SSD(就是固态硬盘)效果的读取性能。

66混合硬盘的工作原理固态混合硬盘通过增加高速闪存来进行资料预读取,以减少从硬盘读取资料的次数,从而提高性能,还可减少硬盘的读写次数,从而使硬盘耗电量降低,特别是使笔记本电脑的电池续航能力提高。由于一般混合硬盘仅内置8GB的MLC闪存,因此成本不会大幅提高。同时混合硬盘亦采用传统磁性硬盘的设计,没有固态硬盘容量小的不足。

67(2)移动存储器移动存储指便携式的数据存储装置,指带有存储介质且(一般)自身具有读写介质的功能,不需要或很少需要其他装置等的协助。现代的移动存储主要有移动硬盘、U盘和各种存储卡。

68移动硬盘移动硬盘有如下特点:(1)容量大(2)体积小(3)速度高(4)使用方便(5)可靠性高移动硬盘由硬盘和硬盘盒组成。移动硬盘可以提供相当大的存储容量,是一种较具性价比的移动存储产品。

69U盘U盘的组成很简单,主要由外壳+机芯组成。其中机芯是一块PCB,上面有USB主控芯片、晶振、贴片电阻、电容、Flash(闪存)芯片,以及USB接口和贴片LED(不是所有的U盘都有)等。U盘最大的优点就是:小巧便于携带、存储容量大、价格便宜、性能可靠。

70存储卡存储卡,又称为“数码存储卡”、“数字存储卡”、“储存卡”等,是用于手机、数码相机、便携式电脑、MP3和其他数码产品上的独立存储介质,一般是卡片的形态,故统称为“存储卡”。存储卡大多使用闪存作材料,但由于形状、体积和接口的不同又分为:SD卡、CF卡、MMC卡、XD卡、T-Flash卡、Mini-SD卡等。

711.4.4输入输出设备输入输出设备是计算机系统的重要组成部分。各类信息通过输入设备输入到计算机中,计算机的处理结果则由输出设备输出。

721.输入设备输入设备是用来向计算机输入命令、程序、数据、文本、图形、图像、音频和视频等信息的设备。常用的输入设备有键盘和鼠标,其他的输入设备还有数码相机、数码摄像机、扫描仪、触摸屏、手写板、条形码读入器、摄像头、麦克风、游戏操纵杆等。

73键盘键盘是最常用也是最主要的输入设备。键盘一般分为四个区:主键盘区、功能键区、控制键区和小键盘区。注意正确的键盘指法。

74鼠标鼠标的工作原理是:当用户移动鼠标时,借助于机电或光学原理,把鼠标移动的距离和方向分别转换成脉冲信号输入计算机,计算机中运行的鼠标驱动程序再把接收到的脉冲信号转换为鼠标水平和垂直方向的位移量,从而控制屏幕上鼠标的移动。

75扫描仪扫描仪是基于光电转换原理设计的:扫描仪工作时先将光线照射到待扫描的稿件上,没被吸收的光线被反射回来,然后由电荷耦合器件(CCD)接收并进行光电转换,转换成计算机可以处理的数字信号传送到计算机。

76数码相机与传统照相机的区别是:所拍摄的图像以数字形式记录存储下来,而不使用胶片。CCD像素的数目是数码相机的一个非常重要的性能指标,CCD像素越多,影像分解的点越多,图像的分辨率(清晰度)越高,图像的质量就越好。

77触摸屏目前触摸屏的使用十分广泛,它可以应用在个人便携式数字设备,如平板电脑、智能手机、GPS等,也可应用在公共场所的多媒体电脑或查询终端,如银行、邮局、火车站等。

78游戏手柄游戏手柄也是一种常见的输入部件,通过操纵其按钮等,实现对游戏虚拟角色的控制。游戏手柄的标准配置是由任天堂确立及实现的,它包括:十字键(方向),ABXY功能键,选择及暂停键(菜单)这三种控制按键。

792.输出设备输出设备能够将计算机的运行结果或过程,以数字、字符、图像、声音等形式表现出来。常用的输出设备有显示器和打印机等。

80显示器常用的显示器主要有两种类型。一种是阴极射线管CRT显示器,另一种是LCD显示器。

81显卡控制器显示适配器又称显示控制器,是显示器与主机的接口部件,以硬件插卡的形式插在主机板上。显示控制器也叫显卡,包括显示控制电路、绘图处理器、显示存储器和接口电路等部件。

82打印机打印机按照工作原理可分为击打式和非击打式两大类;按照工作方式可分为点阵打印机、针式打印机、喷墨打印机、激光打印机等。目前使用较广的是针式打印机、激光打印机和喷墨打印机。

83点阵式打印机一种击打式打印机,其工作原理主要体现在打印头上。特点:耗材成本低能多层套打打印质量低工作噪声大

84喷墨打印机喷墨打印机通过将墨滴喷射到打印介质上而形成文字或图像。喷墨打印机是家庭使用最广泛的打印机。跟点阵式打印机相比,其打印速度较快,分辨率高,打印的字符更清晰,印刷质量较好,还可方便灵活地改变字符的尺寸和字体。

85激光打印机由计算机发送来的数据信号控制激光的发射,使得扫描在硒鼓表面的光线不断变化,受到照射的地方电阻变小,电荷消失,没有光线射到的地方则仍保留有电荷,最终硒鼓表面形成了一幅由电荷组成的潜影。在硒鼓转动的同时,传动系统将打印纸送进来,经过电极时打印纸带上了与硒鼓表面极性相同的电荷,纸张经过带有墨粉的硒鼓,硒鼓表面的墨粉被吸引到打印纸上形成图像。

86打印机的性能指标打印精度是打印机的分辨率,是衡量图像清晰程度的指标。打印速度,用每分钟打印多少页纸(PPM)来衡量的。色彩表达能力是指打印机可打印的不同颜色的总数。其他。包括打印成本、噪音、打印幅面大小、可打印字体的数目及种类、与主机的接口、功耗及节能效率等。目前,家用打印机的最大打印幅面一般为A4,与主机的接口也都兼具并行和USB两种接口。

87END谢谢!

88第2章计算机软件与信息表示

89目录2.1软件概述2.2操作系统2.3信息与信息表示

902.1软件概述软件是用户与硬件之间的接口,用户主要通过软件与计算机进行交流。没有软件的计算机硬件是无法正常工作的,通常被称为“裸机”。计算机只有在安装了软件之后,才能发挥其强大的功能。

912.1.1程序与软件在形式上,软件通常以程序、数据和文档的形式存在,需要在计算机上运行来体现它的价值。软件和程序的概念是有区别的程序是软件的主体部分,指的是指挥计算机做什么和如何做的一组指令或语句序列数据是程序的处理对象和处理以后得到的结果文档是跟程序开发、维护及使用相关的资料,如设计文档、用户手册等

922.1.2软件的分类按照不同的原则和标准,可以将软件划分为不同的种类系统软件和应用软件商业软件、共享软件、免费软件和自由软件

931.系统软件和应用软件(1)(1)系统软件主要是指那些为用户有效地使用计算机系统、给应用软件开发与运行提供支持、或者为用户管理与使用计算机提供方便的一类软件。包括:操作系统,如Windows、UNIX、Linux等程序设计语言处理系统,如汇编程序、编译程序和解释程序等数据库管理系统,如ORACLE、Access等各种服务性程序,如基本输入/输出系统(BIOS)、磁盘清理程序、备份程序等

941.系统软件和应用软件(2)(2)应用软件指为特定领域开发,并为特定目的服务的一类软件,应用软件可以再细分为:通用应用软件定制应用软件

95通用应用软件类别功能流行软件举例文字处理软件文字处理、桌面排版等WPS、Word、Acrobat等电子表格软件表格定义、计算和处理等Excel等图形图像软件图像处理、几何图形绘制等AutoCAD、Photoshop、3DMAX、CoreDraw等网络通信软件电子邮件、网络文件管理、Web浏览等OutlookExpress、FTP、IE等演示软件幻灯片制作等PowerPoint等媒体播放软件播放数字音频和视频文件MediaPlayer、暴风影音等

96定制应用软件按照不同领域用户的特定应用要求而专门设计开发的软件专用性强,设计和开发成本相对较高,只有一些机构用户需要购买,因此价格比通用应用软件贵得多

972.商业软件、共享软件、免费软件和自由软件商业软件作为商品进行交易,一般售后服务较好共享软件先使用后付费免费软件(Freeware)不需要花钱即可得到使用权自由软件(FreeSoftware)可以自由使用,不受限制

982.2操作系统操作系统(OS)是管理计算机硬件的程序,它为应用程序提供基础,并且充当计算机硬件和计算机用户之间的中介。一个比较公认的定义是,操作系统是一直运行在计算机上的程序,通常称为内核,其他程序则是系统程序和应用程序。

992.2.1操作系统概述(1)1.操作系统的基本概念操作系统是最靠近硬件的一层系统软件,它是对硬件系统的第一次扩充,使得硬件裸机被改造成为一台功能完善的虚拟机。从用户角度看,硬件系统加上操作系统软件后形成虚拟计算机,使得用户的计算机使用环境更加方便、友好,因此,操作系统是用户和计算机之间的接口。从应用软件角度看,没有操作系统,其他软件就无法直接运行在计算机硬件之上,因此,操作系统是计算机硬件和其他软件的接口,同时,操作系统扩充了硬件的功能,给上层应用程序提供更多的支持。

1002.2.1操作系统概述(2)2.操作系统的作用为计算机中运行的程序管理和分配各种软硬件资源为用户提供友善的人机界面为应用程序的开发和运行提供一个高效率的平台

1012.2.1操作系统概述(3)3.操作系统的启动和关闭启动过程大致为:加载系统程序→初始化系统环境→加载设备驱动程序→加载服务程序等关闭过程为:保存用户设置→关闭服务程序→通知其他联机用户→保存系统运行状态,并正确关闭相关外部设备等

102WindowsNT内核的启动(1)第一步:主板上的控制芯片组向CPU发出一个RESET信号,CPU复位第二步:运行BIOS中的POST(Power-OnSelfTest,加电后自检)程序第三步:若无异常,根据用户指定的启动顺序从软盘、硬盘或光驱启动

103WindowsNT内核的启动(2)第四步:以从硬盘启动为例,BIOS将磁盘的第一个物理扇区加载到内存,读取并执行位于硬盘第一个物理扇区的主引导记录MBR(MasterBootRecord),接着搜索MBR中的分区表,查找活动分区的起始位置,并将活动分区的第一个扇区中的引导扇区——分区引导记录载入到内存

104WindowsNT内核的启动(3)第五步:查找并初始化ntldr文件——NT内核操作系统的启动器(WindowsLoader),将控制权转交给ntldr,由ntldr继续完成操作系统的启动。第六步:进入引导阶段后,Windows依次加载内核,初始化内核,最后用户登录。

1052.2.2操作系统的功能操作系统管理所有的计算机资源,包括硬件资源、软件资源及数据资源,具体有以下四个方面的功能。处理器管理存储管理文件管理设备管理

1061.处理器管理(1)处理器管理的实质是对处理器执行“时间”的管理,即如何将CPU真正合理地分配给每个任务,实现对CPU进行动态管理。为了提高CPU的利用率,一般操作系统都采用多道程序设计技术,即多任务处理。从宏观上看,系统中的多个程序是同时并发执行的,从微观上来看,任一时刻一个处理器仅能执行一道程序,系统中各个程序交替执行

107处理器管理(2)在多道程序或多用户的情况下,需要解决处理器的分配调度策略、分配实施和资源回收等问题,这就是处理器管理功能。在多道程序环境下,引入了进程的概念。进程是程序在处理器上的一次执行过程,是系统进行资源分配和调度的一个独立单位。

108进程和程序的区别程序是一个静态的概念,而进程是一个动态的概念。简单的讲,进程是一个执行中的程序,两个进程可能对应于同一个程序,它们所执行的代码虽然相同,但是所处理的数据不同,运行中所占用的软硬件资源也不同。

109Windows中的进程

110进程的基本状态就绪状态已获得了除处理器以外的所有资源,一旦获得处理器就可以立即执行运行状态获得必要的资源并正在处理器上运行等待状态又称阻塞状态或睡眠状态。正在执行的进程,由于发生某事件而暂时无法继续执行(如等待输入/输出完成),此时进程所处的状态为等待状态

111进程的状态图

112常用的处理器调度算法先来先服务调度算法最短作业优先调度算法时间片轮转调度算法多级队列调度算法优先级调度算法多级反馈队列调度算法等

113线程现代操作系统扩展了进程的概念——线程线程是进程内的一个执行单元,是相对独立的一个控制流序列。线程本身不拥有资源,但它可以与同属一个进程的其他线程共享进程拥有的全部资源。Windows操作系统采用了多线程的工作方式,线程是CPU的分配单位,优点是能充分共享资源,减少内存开销,提高并发性和加快切换速度。

1142.存储管理内存是计算机中最重要的一种资源,所有运行的程序都必需装载在内存中才能由CPU执行。在多任务操作系统中,如果要执行的程序很大或很多,有可能导致内存消耗殆尽,因此操作系统存储管理的主要任务是实现对内存的分配与回收、内存扩充、地址映射、内存保护与共享等功能。

115内存的分配与回收当用户提出申请存储空间时,存储管理必须根据申请者的要求,按一定的策略分析存储空间的使用情况,找出足够的空闲区域给申请者使用,使不同用户的程序和数据彼此隔离,互不干扰及破坏。若当时可使用的主存不能满足用户的申请时,则让用户程序等待,直至有足够的主存空间。当某个用户程序工作结束时,要及时收回它所占的主存区域,使它们重新成为空闲区部分,以便再装入其他程序。

116内存扩充大多数操作系统都采用了虚拟存储技术,即拿出一部分硬盘空间来充当内存使用虚拟存储技术的基本原理是基于局部性原理:一个进程在运行时不必将全部的代码和数据都装入内存,而仅需将当前要执行的那部分代码和数据装入内存,其余部分可以暂时留在磁盘上,当要执行的指令不在内存时,才由操作系统自动将它们从外存调入内存

117虚拟存储技术的关键点调度问题决定哪些程序和数据应被调入主存地址映射问题在访问主存或辅存时如何把虚拟地址变为主存或辅存的物理地址。此外还要解决主存分配、存储保护与程序再定位等问题替换问题决定哪些程序和数据应被调出主存更新问题确保主存与辅存的一致性

118地址映射虚拟存储技术可以使用户感觉自己好像在使用一个比实际物理内存大得多的内存,由于虚拟内存空间和实际物理内存空间不同,进程在使用虚拟内存中的地址时,必须由操作系统协助相关硬件,把虚拟地址转化为真正的物理地址。虚拟地址(又叫逻辑地址),对应虚拟存储空间物理地址,是存储单元的真实地址,与地址总线相对应

119Windows的页式调度方式硬盘上有一个特殊的“分页文件”,它是虚拟内存所占用的硬盘空间每一个虚拟内存页面的大小是4KBWindowsXP及之后的Windows系列版本中,分页文件的文件名是pagefile.sys,位于系统盘的根目录下(通常情况下看不到,必须关闭资源管理器对系统文件的保护功能才能看到)

120Windows中可调节虚拟内存大小

121内存保护与共享在多道程序环境下,操作系统提供了内存共享机制,使多道程序能共享内存中的那些可以共享的程序和数据,从而提高了系统的利用率操作系统还必须保护各进程私有的程序和数据不被其他用户程序使用和破坏

1223文件管理文件保存在外存上的一组相关信息的集合文件夹用于管理文件的一种结构

123文件(1)文件名是存取文件的依据形式:<主文件名.扩展名>Windows10的命名规则:文件名长度最多可使用256个字符除开头外,文件名中可以使用空格和汉字,但不能有以下符号:?\/*“<>|:显示时保留文件名的大小写形式,但不以大小写区分文件名文件名中可以有多个分隔符“.”,但最后一个分隔符后的字符串用于指定文件类型

124文件(2)常见的文件扩展名文件类型扩展名说明可执行文件EXE、COM可执行的程序文件文本文件TXT存放不带格式的纯字符文件Office文件DOC、XLS、PPT办公自动化软件Office中Word、Excel、PowerPoint创建的文件图像文件BMP、JPG、GIF图像文件,不同的扩展名表示不同格式的图像文件流媒体文件WMV、RM、QT能通过Internet播放的流式媒体文件,无须下载即可播放压缩文件ZIP、RAR压缩文件,可以减少外存的使用空间音频文件WAV、MP3、MID声音文件,不同的扩展名表示不同格式的音频文件网页文件HTM、ASP不同格式的网页文件源程序文件C、CPP、BAS、ASM程序设计语言的源程序文件

125文件(3)文件属性系统属性隐藏属性只读属性归档属性

126文件夹(1)目录结构一般采用多级层次式结构(树状结构)

127文件夹(2)路径绝对路径:从根目录开始的完整目录路径相对路径:只从当前目录开始的目录路径文件夹属性除了有存档、只读、隐藏等常规属性外,在Windows中还有“压缩”、“加密”和“编制索引”等高级属性

128文件系统操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统的主要功能包括:管理和调度文件的存储空间提供文件的逻辑结构、物理结构和存储方法实现文件从标识到实际地址的映射实现文件的控制操作和存取操作实现文件信息的共享并提供可靠的文件保密和保护措施提供文件的安全措施

129Windows使用的文件系统FAT早期使用FAT16,现在一般使用FAT32NTFSWindowsNT所采用的文件系统结构,建立在保护文件和目录数据的基础上,同时兼顾节省存储资源、减少磁盘占用量exFAT超过4GB的U盘使用的一种文件系统ReFSNTFS文件系统的继任者,在Windows8.1和WindowsServer2012中开始引入

1304.设备管理(1)设备管理应具备的功能:设备分配设备处理缓冲管理设备独立性

1314.设备管理(2)设备驱动程序每个物理设备配置有驱动程序,由驱动程序负责把逻辑设备的I/O操作转换为具体物理设备的I/O操作设备驱动程序的特点是在请求I/O的进程与设备控制器之间的一个通信程序与I/O设备的特性紧密相关与I/O控制方式紧密相关部分驱动程序用汇编语言编写,固化在ROM-BIOS中

1322.2.3常见操作系统目前用户在PC上使用最多的操作系统是Windows,Linux也有一定的踪影,但相对较少。而在服务器领域占主导地位的是UNIX和Linux,其中UNIX主要用于大型设备和高端机上,在中小服务器端则是Linux的天下。形成这种局面往往与技术优势无关,而仅仅是网络规模效应的作用。

1331.WindowsWindows是由美国微软公司开发的一种在PC上广泛使用的操作系统,支持多任务处理和图形用户界面。最新的Windows10是为所有硬件提供一个统一平台,构建跨平台共享的通用技术,包括从4英寸屏幕的“迷你”手机到80英寸的巨屏电脑,让这些设备拥有类似的功能

1342.UNIX早期的UNIX用汇编语言开发,修改、移植都很不方便。从UNIX的第三版开始,采用C语言重写了内核,成为当时应用面最广、影响力最大的操作系统,可以应用在从巨型机到普通PC机等多种不同的平台上。自1980年代后期,UNIX开始了商业化。目前在电信、金融、油田、移动、证券等行业的关键性应用领域仍处于垄断地位

1353.LinuxLinux是按照公开的UNIX系统标准POSIX重新编写的一个全新的操作系统。它的设计思想与UNIX相似,但并没有采用任何UNIX的源代码Linux1.0在发布时就正式采用了GPL(GeneralPublicLicense)协议,允许用户可以通过网络或其他途径免费获得此软件,并任意修改其源代码

1364.MacOSMacOS是运行于苹果Macintosh(简称Mac)系列电脑上的操作系统,它是首个在商用领域成功的图形用户界面操作系统MacOS的两个系列:老旧且已不被支持的“Classic”MacOS,终极版本是MacOS9,采用Mach作为内核新的MacOSX(X为10的罗马数字写法),结合了BSDUNIX、OpenStep和MacOS9的元素

1375.手机操作系统智能手机操作系统在嵌入式操作系统基础之上发展而来,除了具备嵌入式操作系统的功能,如进程管理、文件系统、网络协议栈等外,还有针对电池供电系统的电源管理部分、与用户交互的输入/输出部分、对上层应用提供调用接口的嵌入式图形用户界面服务、针对多媒体应用提供底层编解码服务、针对移动通信服务的无线通信核心功能及智能手机的上层应用等。

138(1)Android是一种以Linux为基础的开源操作系统,主要使用于便携设备。Android系统是开源的,版本并不统一Google开发的Android原生系统的一些操作习惯对于中国人来说不适应,因此在中国诞生了很多本土化的AndroidOS,如小米的MIUI、锤子的SmartisanOS、魅族的FlymeOS等,都属于经过优化的Android系统

139(2)iOSiOS操作系统以Darwin为基础,属于类Unix的商业操作系统。iOS采用了伪后台技术,任何第三方程序都不能在后台运行,另外在iOS中用于UI的指令权限最高,所以用户的操作能立马得到响应,所以iOS的用户体验更流畅。iOS系统的封闭性在一定程度上能够带来更为安全的保证,但是封闭式的开发模式决定了iOS的影响力有限

1402.3信息与信息表示2.3.1信息信息(information)看不见也摸不着,但是它的价值远远超过了许多看得见摸得着的东西。信息的爆炸,使人类社会加速向前迈进,成为推动社会进步的巨大推动力。

1411.信息的定义(1)信息奠基人香农认为:信息是用来消除随机不确定性的东西这一定义常被人们看作是经典性定义加以引用控制论创始人维纳认为:信息是人们在适应外部世界,并使这种适应反作用于外部世界的过程中,同外部世界进行互相交换的内容和名称也被作为经典性定义加以引用

1421.信息的定义(2)经济管理学家认为:信息是提供决策的有效数据电子学家、计算机科学家认为:信息是电子线路中传输的信号我国著名的信息学专家钟义信教授认为:信息是事物存在方式或运动状态的直接或间接的表述

1431.信息的定义(3)美国信息管理专家霍顿给信息下的定义是:信息是为了满足用户决策的需要而经过加工处理的数据我们的理解:经过加工以后的数据或者,信息是数据处理的结果

1442.信息量单位(1)比特“二进位数字”、“二进位”或简称为“位”信息的最小单位只有两种取值,即0和1,且无大小之分比特在计算机中的表示与存储比特的取值0和1表示的是两种状态

145(1)比特计算机内部采用二进制的原因运算规则简单只需用两种状态表示数字,物理上容易实现可靠性高容易实现逻辑运算

146(2)存储容量和单位换算比特用小写字母“b”表示比比特更大的计量单位:B(Byte,字节)、KB(千字节)、MB(兆字节)、GB(吉字节、千兆字节)和TB(太字节、兆兆字节)内存中:1B(字节)=8b(比特)1KB(千字节)=210B=1024B1MB(兆字节)=220B=210KB=1024KB1GB(吉字节、千兆字节)=230B=220KB=210MB=1024MB1TB(太字节、兆兆字节)=240B=230KB=220MB=210GB=1024GB外存中:1B=8b1KB=103B=1000B1MB=106B=103KB=1000KB1GB=109B=106KB=103MB=1000MB1TB=1012B=109KB=106MB=103GB=1000GB

147(2)存储容量和单位换算随着人类所处理的数据量越来越大以及大数据技术的发展,比TB更大的计量单位还有PB、EB、ZB、YB、BB等。1PB(拍字节)=1024TB1EB(艾字节)=1024PB1ZB(泽字节)=1024EB1YB(尧字节)=1024ZB1BB(Brontobyte,千亿亿亿字节)=1024YB

148(3)比特的传输在数字通信和网络技术中,信息的传输实际上就是比特的传输。每秒钟可传输的二进位数目就表示比特的传输速率,传输速率的常用单位有:比特/秒(b/s),也称“bps”(bitspersecond)千比特/秒(Kb/s),1Kb/s=103b/s=1000b/s兆比特/秒(Mb/s),1Mb/s=106b/s=1000Kb/s吉比特/秒(Gb/s),1Gb/s=109b/s=1000Mb/s太比特/秒(Tb/s),1Tb/s=1012b/s=1000Gb/s

1492.3.2数制与数制转换1.数制计算机内部采用二进制在计算机的理论和应用中还使用两种辅助的进位制——八进制和十六进制。无论是十进制、二进制、八进制还是十六进制,其共同之处都是进位计数制。

150计算机中常用的进位计数制任何一种R进制数N可以写成按其权值展开的多项式之和:

1512.不同进制数的相互转换(1)R进制数转十进制数【例2.2】将二进制数1011.11转换为十进制数。解:(1011.11)2=1×23+0×22+1×21+1×20+1×2-1+1×2-2=8+2+1+0.5+0.25=11.75【例2.3】将八进制数37.24转换为十进制数。解:(37.24)8=3×81+7×80+2×8-1+4×8-2=24+7+0.25+0.0625=31.3125【例2.4】将十六进制数B4.A转换为十进制数。解:(B4.A)16=11×161+4×160+10×16-1=176+4+0.625=180.625

1522.不同进制数的相互转换(2)十进制数转R进制数整数“除R取余法”,小数“乘R取整法”【例2.5、2.6、2.7】将十进制数130转换为二进制数、八进制数、十六进制数。(130)10=(202)8(130)10=(82)16(130)10=(10000010)2

1532.不同进制数的相互转换(3)【例2.8、2.9、2.10】将十进制小数0.325转换为二进制数、八进制数、十六进制数(精确到4位小数)。(0.325)10≈(0.0101)2(0.325)10≈(0.2463)8(0.325)10≈(0.5333)16

1542.不同进制数的相互转换(4)【例2.11、2.12、2.13】将十进制小数130.325转换为二进制数、八进制数、十六进制数(精确到4位小数)。由例2.5和例2.8可知:(130.325)10≈(10000010.0101)2由例2.6和例2.9可知:(130.325)10≈(202.2463)8由例2.7和例2.10可知:(130.325)10≈(82.5333)16

155二进制数与八进制数、十六进制数之间的互换(1)

156二进制数与八进制数、十六进制数之间的互换(2)二进制数→八进制数:“取三合一法”二进制数→十六进制数:“取四合一法”【例2.14、2.15】将二进制数10111010.11011转换为八进制数、十六进制数。

157二进制数与八进制数、十六进制数之间的互换(3)八进制数→二进制数:“取一分三法”十六进制数→二进制数:“取一分四法”【例2.16】将八进制数376.25转换为二进制数。【例2.17】将十六进制数5F.3C转换为二进制数。

1583.二进制的运算算术运算加法:0+0=00+1=11+0=11+1=0(向高位进1)减法:0-0=01-0=11-1=00-1=1(向高位借1)逻辑运算逻辑与:0∧0=00∧1=01∧0=01∧1=1逻辑或:0∨0=00∨1=11∨0=11∨1=1逻辑异或:0⊕0=00⊕1=11⊕0=11⊕1=0逻辑非:0取反后是1,1取反后是0

159【例2.18】分别求10101100+10011101,10101100-10011101,10101100∧10011101,10101100∨10011101,10101100⊕10011101,

1602.3.3数值的编码数值是指通常意义上的数学中的数。计算机中的数值信息分为整数和实数两大类。整数不使用小数点,或者说小数点始终隐含在个位数的右面,所以整数也叫做“定点数”。实数通常是指既有整数部分又有小数部分的数,由于实数的小数点不固定,所以实数在计算机中也称为“浮点数”。将各种数值在计算机中表示的形式即编码方式,称为机器数或机器码,机器码的特点是采用二进制数表示。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为“真值”,后者称为“机器码”。

1611.无符号整数的表示无符号整数只能表示正整数,且所有位数都用于表示数值大小,其机器码就是将该数直接转换为二进制,不足的位数用0补齐。对于一个用n位二进位来表示的无符号整数,其可表示的数据范围是0~2n-1。例如,一个8位无符号整数的表示范围为(00000000)2~(11111111)2,即0~255(28-1),16位无符号整数的表示范围为0~65535(216-1)。例如,对于无符号整数44,其二进制真值为101100。由于不足8位,前面用0补足8位,即00101100就是其机器码。

1622.带符号整数的表示(1)(1)原码由于带符号整数既要能表示正数也要能表示负数,因此就必须让计算机能从其编码中判断出是正数还是负数,通常采用的做法是用其编码的最左边1位即最高位来表示数值的符号,最高位为“0”表示正号,最高位为“1”表示负号。例如:00101100=+44,10101100=-44,这种表示法就叫做“原码”。对于一个用n位原码表示的整数,由于最高位被用来表示正负符号,用来有效表示数值范围的数值位就只有n-1位,其表示的数值范围就是-2n-1+1~2n-1-1。例如,一个8位原码的表示范围是-127~127(-27+1~27-1),一个16位原码的表示范围是-32767~32767(-215+1~215-1)。

1632.带符号整数的表示(2)(2)反码对于带符号的正数的反码就是其本身,和原码相同。负数的反码,只要将符号位不变,其余各位取反即可。例如:(44)反=(44)原=00101100(-44)原=10101100,(-44)反=11010011,反码的表示范围和原码相同,例如,一个8位反码的表示范围是-127~127(-27+1~27-1),一个16位反码的表示范围是-32767~32767(-215+1~215-1)。(3)补码对于带符号的正数的补码和原码相同。负数的补码,其符号位不变,其余各位是原码的每一位取反后再加1得到的结果,实际上就是反码加一的结果。例如,(44)补=(44)反=(44)原=00101100,(-44)原=10101100,(-44)反=11010011,(-44)补=11010100在计算机中,对于有符号的整数,其机器码是采用补码来表示的。

164为什么选择补码作为机器码呢?能够统一“+0”和“-0”的表示以8位二进制位来表示有符号整数为例:采用原码表示,+0的二进制表示形式为00000000,而-0的二进制表示形式为10000000;采用反码表示,+0的二进制表示形式为00000000,而-0的二进制表示形式为11111111;采用补码表示,+0的二进制表示形式为00000000,而-0的二进制表示形式为11111111+1=100000000,因为计算机会进行截断,只取低8位,所以-0的补码表示形式为00000000。对于有符号整数的运算能够把符号位同数值位一起处理(X+Y)补=X补+Y补,例如,计算-2+3,直接计算(-2)补+(3)补即可能够简化运算规则(X-Y)补=X补+(-Y)补,可以把减法运算转换为加法运算。只需要设计加法器即可,不需要单独再设计减法器。

1653.浮点数(实数)的表示(1)实数在计算机内部采用“浮点表示法”进行表示。浮点表示法是指实数在计算机内可以使用阶码和尾数两个部分来表示。阶码是一个整数,用于表示小数点在该数中的位置,阶码位数越多表示数的范围越大。尾数是一个纯小数,用于表示有效数值。

1663.浮点数(实数)的表示(2)【例2.20】假设有一单精度数(32位)的表示形式如下,请问该数的十进制真值是多少?解:符号位为1,因此该数为负数。指数:(10001011)2=139,因为有127的偏移量,因此,指数为139-127=12。尾数:将尾数前加上1和小数点,即1.10010011000101100000000。由此可知,该浮点数为:-1.10010011000101100000000×212=-(1100100110001.01100000000)2=-6449.37511000101110010011000101100000000

1672.3.4文本的编码(1)文字信息在计算机中称为“文本”(text),是计算机中最常见的一种数字媒体。文本由一系列的“字符”(character)组成,包括字母、数字、标点符号等,每个字符均使用二进制编码表示。

1682.3.4文本的编码(2)文本的处理过程

1691.西文字符的编码标准ASCII编码全称为“AmericanStandardCodeforInformationInterchange(美国信息交换标准代码)”。标准ASCII码采用一个字节表示一个字符,但只使用其中的低7位,共表示128个字符,每个字节的最高位在计算机内部通常保持为“0”。已被国际标准化组织(ISO)批准为国际标准,称为ISO-646标准。

170标准ASCII编码下列特殊字符的编码,其相互关系一般需要记住。字符’A’的编码为1000001,对应的十六进制编码为41H,对应的十进制编码为65。字符’a’的编码为1100001,对应的十六进制编码为61H,对应的十进制码为97。

171扩充ASCII码使用8位二进制数来表示字符的扩充字符集。可以使用256种数字代码表示更多的字符。在这些字符集中,从0~127的代码与ASCII保持兼容,从128~255用于其它的字符和符号。扩充出来的128个编码称为扩展ASCII编码,对应的字符称为扩展ASCII字符。国际标准化组织的ISO8859标准得到了广泛的使用。

1722.中文汉字的编码GB2312汉字编码1980年发布的国家标准,共收录了6763个汉字和682个图形符号,总计7445个字符。GB2312规定“对任意一个图形字符都采用两个字节表示,每个字GB2312汉字编码节均采用七位编码表示。”GB2312将编码表分为94个区,对应第一字节,每个区94个位,对应第二字节。由区号和位号共同构成区位码。为了避免信息通讯中汉字区位码与通讯控制码的冲突,每个汉字的区号和位号必须分别加上32(即二进制的00100000,十六进制的20H),经过这样处理的代码称为汉字的国标交换码(简称国标码)。为了区分汉字编码和ASCII码,将国标码的每个字节的最高位由0变为1,变换后的国标码称为汉字机内码(简称机内码)。

173汉字机内码、国标码、区位码之间的关系国标码=区位码+2020H机内码=国标码+8080H=区位码+A0A0H例如:“新”的区号为48,位号为34,其区位码为4834,其二进制表示为0011000000100010,其十六进制为3022H。“新”的国标码为8066(5042H)。“新”的机内码为D0C2H。

174GBK汉字编码1995年发布了另一个汉字编码标准,其全称为《汉字内码扩展规范》,简称GBK。GBK也采用双字节表示,GBK向下与GB2312完全兼容,向上支持ISO10646国际标准。在GBK中共收录了21003个汉字和883个图形符号,除了GB2312的全部汉字和符号外,还收录了繁体字和生僻字。微软公司的Windows简体中文版操作系统XP就支持GBK编码方案。

175UCS/Unicode与GB18030汉字编码国际标准化组织制定了一个能够覆盖几乎任何语言的编码表,称为UCS(对应的工业标准为Unicode),它的具体实现(如UTF-8和UTF-16)已在Windows、Unix、Linux操作系统中及许多Internet应用中广泛使用。GB18030是我国政府于2000年发布了新的汉字编码国家标准该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等少数名族文字,它向下兼容GB2312和GBK,并扩充了UCS/Unicode中的字符,目前已在许多计算机系统和软件中使用。

1762.3.5图像的编码(1)数字图像,又称数码图像或数位图像,是以二维数字组形式表示的图像,其数字单元为像素。数字图像按生成方式大致可分为两类:位图图像(bitmap)和矢量图形(vectorgraphics)。位图图像是指由扫描仪或数码相机等输入设备捕捉到的实际画面所产生的数字图像,也称取样图像或点阵图像,也就是我们常说的图像。

1772.3.5图像的编码(2)1.图像的获取与数字化数字图像获取设备数字图像获取设备的功能是将现实的景物输入到计算机内并以取样图像的形式表示。2D图像获取设备(如扫描仪、数码相机等)只能对图片或景物的2D投影进行数字化,3D扫描仪则能获取包括深度信息在内的3D景物的信息。

1782.3.5图像的编码(3)图像的数字化图像获取的过程实质上是模拟信号的数字化过程,具体的处理步骤大致分为以下四步:

1792.3.5图像的编码(4)(1)扫描将画面划分成M×N个网格,每个网格即一个取样点,又称像素。这样,一幅模拟图像就转换为M×N个取样点组成的矩阵。(2)分色将彩色图像取样点的颜色通过一种特殊的棱镜分解成三个基色,如红,绿,蓝三种颜色。如果不是彩色图像,则不必进行分色。(3)取样通过图像传感元件将每个取样点(像素)的每个分量(基色)的亮度值转换成与其成比例的电压值(灰度值)。(4)量化将取样得到的每个分量的电压值进行模数转换,即把模拟量的电压值使用数字量(一般为8~12位正整数)来表示。

1802.3.5图像的编码(5)2.图像的基本参数颜色模型在对图像进行数字化时,首先将图像离散成若干行和若干列的像素点,然后将每个点用二进制的颜色编码表示。图像中的颜色编码可以使用不同的颜色模型,颜色模型又称为颜色空间,是指彩色图像所使用的颜色描述方法。常用的颜色模型有:RGB(红、绿、蓝)、CMYK(青蓝、洋红、黄、黑)、YUV(亮度、色度)等。从理论上讲这些颜色模型都可以互相转换。

1812.3.5图像的编码(6)图像分辨率一个图像取样后得到的像素数目称为图像分辨率,是用于表示图像大小的一个参数,一般表示为“水平分辨率×垂直分辨率”的形式,其中水平分辨率表示图像在水平方向的像素数,垂直分辨率表示图像在垂直方向的像素数,如800×600,1024×768等。对于一个相同尺寸的图像,组成该图的像素数量越多,说明图像的分辨率越高,看起来就越逼真,相应地,图像文件占用的存储空间也越大;相反,像素数量越少,图像文件占用的存储空间少了,但图像显得越粗糙。

182位平面数目即矩阵的数目,也就是彩色分量的数目,如RGB的位平面数是3,而CMYK的位平面数是4。像素深度即像素的所有颜色分量的二进制位数之和,它决定了不同颜色或亮度的最大数目。例如24位真彩色,每种颜色分别用8位二进制数表示,其像素深度是8+8+8=24,它可以表示224,即16777216(约1600万)种不同的颜色。2.3.5图像的编码(7)

1832.3.5图像的编码(8)3.图像的编码一幅图像的数据量的计算公式是:图像数据量=水平分辨率×垂直分辨率×像素深度/8(单位为字节)以表2-7中1024×768的图像为例,未经压缩的24位(真彩色)图像的数据量计算方法如下:图像数据量=1024×768×24/8B=2.25MB

1842.3.5图像的编码(9)如果对图像进行压缩,则一幅图像的数据量为:图像数据量=未压缩前的图像数据量/图像压缩的倍数【例2.22】一架数码相机,其Flash存储器容量为40MB,它一次可以连续拍摄像素深度16位(65536色)的1024×1024的彩色相片60张,计算其图像数据的压缩倍数。一幅图像的数据量为:1024×1024×16/(8×1024×1024)MB=2MB60幅图像的数据量为2×60=120MB图像压缩倍数=120MB/40MB=3倍

1852.3.5图像的编码(10)4.图像编码方法分类(1)根据压缩效果可以分为有损编码和无损编码。有损编码在编码的过程中把不相干的信息都删除了,只能对原图像进行近似的重建,典型的方法有变换编码、矢量编码等,JPEG图像格式就是采用的有损压缩;而无损编码的压缩算法中仅仅是删除了图像数据中的冗余信息,解压缩时能够精确恢复原图像,典型的方法有行程长度编码(RLE)、字串表编码(LZW)、哈夫曼编码(Huffman)等,PCX、GIF,BMP,TIFF等图像格式都是采用的无损压缩。(2)根据编码原理可以分为熵编码、预测编码、变换编码和混合编码等。

1862.3.6其他信息的编码除了以上介绍的数值、文字和图像之外,计算机中所处理的信息主要还包括音频和视频。音频和视频的编码更为复杂,尤其是视频,但是,无论是何种信息,要想让计算机能够处理模拟视频,首先要将其转换为二进制数字编码的形式,即信息的数字化。音频、视频的数字化过程一致,即采样-量化-编码。

1871.声音数字化(1)(1)采样声音的采样是指每隔一定时间间隔在声音波形上取一个幅度值,把时间上连续的信号变为时间上离散的信号。该时间间隔称为取样周期。取样周期的倒数称为取样频率,即每秒钟的取样次数。(2)量化量化是将每个取样点的幅度值以数字来存储。量化位数叫采样精度或采样位数,是对模拟声音信号的幅度轴进行数字化所采用的位数。声音信号的量化位数一般取8bit、12bit或16bit,量化位数越高,声音保真度越好。量化位数也是一个影响声音质量的重要指标,它决定了表示声音振幅的精度。

1881.声音数字化(2)(3)编码编码是将采样和量化后的数字数据以一定的格式记录下来。目前,编码的方法很多,常用的编码方法是PCM(PulseCodeModulation,脉冲编码调制),其优点是抗干扰能力强,失真小,传输特性稳点,缺点是编码后的数据量比较大。

1892.声音的技术指标和压缩标准(1)声音的技术指标采样频率、量化位数声道数:声音通道的个数压缩编码方法比特率:码率

190未压缩波形声音的码率码率=采样频率(Hz)×量化位数(bit)×声道数【例2.23】用44.1kHz的采样频率,量化位数为8位,录制1秒的立体声节目,其声音文件的码率为多少?44.1×1000×8×2b/s=705600b/s=88200B/s=88.2KB/s

191(2)声音的压缩标准常见的声音压缩标准标准名称压缩后码率(每个声道)声道数目主要应用MPEG-1audio层1192kb/s(压缩4倍)2数字盒式录音带MPEG-1audio层2128kb/s(压缩6倍)2DAB、VCDMPEG-1audio层364kb/s(压缩12倍)2Internet、MP3音乐MPEG-2audio与MPEG-1层1,层2,层3相同5.1,5.7同MPEG-1DolbyAC-364kb/s(压缩12倍)5.1,5.7DVD、DTV、家庭影院

192END谢谢!

193第3章计算机网络与信息安全

194本章目录3.1通信技术3.2计算机网络基础3.3局域网3.4Internet3.5信息安全

1953.1通信技术3.1.1通信系统1.通信系统的基本模型三个基本要素:信源、信宿和信道

1962.通信的常用技术指标有效性:反映通信系统传输信息的“速率”,即快慢问题数据传输速率带宽信道容量可靠性:反映通信系统传输信息的“质量”,即好坏问题误码率延迟

1973.1.2网络传输介质传输介质与信道是两个不同范畴的概念。传输介质是指传送信号的物理实体,而信道则着重体现介质的逻辑功能。一个传输介质可能同时提供多个信道,一个信道也可能由多个传输介质级联而成。常用的传输介质分为有线传输介质和无线传输介质两大类。

1981.双绞线双绞线是一种综合布线工程中最常用的传输介质,由两根具有绝缘保护层的铜导线相互缠绕而成,“双绞线”的名字也是由此而来。根据有无屏蔽层,双绞线分为屏蔽双绞线与非屏蔽双绞线。与其他传输介质相比,双绞线在传输距离,信道宽度和数据传输速度等方面均受到一定限制,但价格较为低廉。

1992.同轴电缆同轴电缆(CoaxialCable)是指有两个同心导体,而导体和屏蔽层又共用同一轴心的电缆。同轴电缆由里到外分为四层:中心铜线(单股的实心线或多股绞合线),塑料绝缘体,网状导电层和电线外皮。同轴电缆的优点是可以在相对长的无中继器的线路上支持高带宽通信,其缺点是:体积大,成本高,不能承受缠结、压力和严重的弯曲

2003.光纤光纤(fiber)是光导纤维的简写,是一种由玻璃或塑料制成的纤维,可作为光传导的工具。通常光纤与光缆两个名词会被混淆。多数光纤在使用前必须由几层保护结构包覆,包覆后的缆线即被称为光缆。前香港中文大学校长高锟首先提出光纤可以用于通讯传输的设想,因此获得2009年诺贝尔物理学奖。光纤作为宽带接入一种主流的方式,有着通信容量大、中继距离长、保密性能好、适应能力强、体积小重量轻、原材料来源广价格低廉等的优点。

2014.无线介质无线通信利用电磁波来传输信息,不需要铺设电缆,非常适合于在一些高山、岛屿或临时场地的连网。无线介质是指信号通过空间传输,信号不被约束在一个物理导体之内,主要的无线介质包括无线电波、微波和红外线。

2023.1.3网络互连设备网络互连是指应用合适的技术和设备,将不同地理位置的计算机网络连接起来,从而形成一个范围和规模更大的网络系统,实现更大范围内的资源共享和数据通信。1.中继器中继器(Repeater)是工作在物理层的最简单的网络互连设备。中继器的功能是对接收信号进行再生和发送,从而增加信号传输的距离。因此,中继器的主要功能是将传输介质上衰减的电信号进行整形、放大和转发,本质上是一种数字信号放大器。

2032.集线器集线器的英文称为“Hub”。“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。因此,集线器可以说是一种特殊的中继器,又叫多端口中继器。HUB集线器是一种物理层共享设备,当同一局域网内的A主机给B主机传输数据时,数据包在以HUB为架构的网络上是以广播方式传输的,同一时刻网络上只能传输一组数据帧的通讯,如果发生碰撞还得重试。这种方式就是共享网络带宽。

2043.网桥网桥(NetworkBridge),又称桥接器,工作在数据链路层,独立于高层协议,是用来连接两个具有相同操作系统的同域网络的设备。网桥的作用,一是扩展网络的距离,减轻网络的负载。二是自动过滤数据包,根据包的目的地址决定是否转发该包到其他网段,因此网桥是一种存储转发设备。网桥可以是专门的硬件设备,也可以由计算机加装的网桥软件来实现。

2054.交换机交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于数据链路层。交换机可以在同一时刻进行多端口之间的数据传输,而且每个端口都可以视为各自独立的,相互通信的双方独自享有全部带宽,从而提高数据传输速率、通信效率和数据传输的安全性。交换机相比于网桥也具有更好的性能,因此,也逐渐取代了网桥。目前,局域网内主要采用交换机来连接计算机。

2065.路由器路由器(Router),用于连接多个逻辑上分开的网络。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器的基本功能就是进行路径的选择,找到最佳的转发数据路径。路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。

2076.网关网关(Gateway),又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连,主要作用就是完成传输层及以上的协议转换。大多数网关运行在应用层,可用于广域网和广域网、局域网和广域网的互连。

2083.1.4数据交换技术“交换”(switching)是指通信双方使用网络中通信资源的方式,早期主要采用电路交换,现在主要采用分组交换。1.电路交换电路交换是通信网中最早出现的一种交换方式,主要应用于电话通信网中,完成电话交换。电路交换的基本过程可分为连接建立、信息传送和连接拆除三个阶段。优点:实时性好。缺点:独占性,线路利用率低。

2092.分组交换分组交换方式以“分组”作为数据传输单元,发送端依次把各分组发送到接收端。每个分组的首部含有目的地址等控制信息。分组交换网中的结点交换机(一般是路由器)根据收到的分组首部中的目的地址等信息,把分组转发到下一个结点交换机。结点交换机使用这种存储-转发的方式进行接力转发,最后分组就能到达目的地。所谓“存储-转发”,是指分组交换机把接收到的分组放进自己的存储器中排队等候,然后依次根据分组首部中的目的地址选择相应端口转发出去。目前流行的因特网(Internet)就是采用分组交换的方式传输数据的。

210分组交换相对电路交换的优点(1):(1)分组交换不需要预先建立一条专用的物理通信线路,不存在连接的建立时延,用户随时可以发送分组。(2)由于采用存储-转发方式,路由器具有路径选择,当某条传输线路故障时可选择其它传输线路,提高了传输的可靠性。(3)通信双方的不同分组不在通信期间固定占用整条通信连接。在双方通信期间,也允许其它主机的分组通过,大大提高了通信线路的利用率。

211分组交换相对电路交换的优点(2):(4)加速了数据在网络中的传输。分组是逐个传输的,可以使后一个分组的存储操作与前一个分组的转发操作并行,这种流水线方式减少了传输时间。(5)分组长度固定,因此路由器缓冲区的大小也固定,简化了路由器中存储器的管理。(6)分组较短,出错几率较少,即使出错重发的数据量也少,不仅提高了可靠性,也减少了时延。

212分组交换相对电路交换的不足:(1)由于数据进入交换结点要经历存储-转发过程,从而引起转发时延(包括接收分组、检验正确性、排队、发送分组等),实时性较差。(2)分组必须携带首部,造成了一定的额外开销。(3)可能出现分组失序,丢失或重复,分组到达目的主机时,需要按编号进行排序并联结为报文。

2133.1.5多路复用技术(1)一般情况下,通信信道的带宽远大于用户所需的带宽,使用多路复用技术可以让多个用户共用同一个信道,共享信道资源可以提高信道利用率,降低通信成本。目前信道复用技术主要有频分复用、时分复用、波分复用、码分复用、空分复用、统计复用、极化波复用等。

2143.1.5多路复用技术(2)1.频分多路复用频分多路复用(FrequencyDivisionMultiplexing,缩写为FDM)是按频率分割多路信号的方法。即将信道的可用频带分成若干互不交叠的频段,每路信号占据其中一个频段。2.时分多路复用时分多路复用(TimeDivisionMultiplexing,缩写为TDM)在信道使用时间上进行划分。按一定原则把连续的信道使用时间划分为一个个很小的时间片,把各个时间片分配给不同的通信用户使用,以提高信道的利用率。3.波分多路复用波分多路复用(WavelengthDivisionMultiplexing,缩写为WDM),将两种或多种不同波长的光载波信号(携带各种信息),在发送端经复用器汇合在一起,耦合到同一根光纤中进行传输的技术。

2153.2计算机网络基础3.2.1计算机网络概述1.计算机网络的定义计算机网络是指将地理位置不同的多台计算机(主机)及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现信息及时传递以及其他网络应用的计算机系统。

2162.计算机网络的功能(1)数据通信数据通信或数据传输是计算机网络的基本功能之一。(2)资源共享计算机网络的主要目的是资源共享。(3)进行分布式处理由于有了网络,许多大型信息处理问题可以借助于分散在网络中的多台计算机协同完成,解决单机无法完成的信息处理任务。(4)提高系统的可靠性和可用性提高可靠性表现在网络中的计算机可以通过网络彼此互为后备,一旦某台计算机出现故障,它的任务可由网络中其他计算机代为完成。提高可用性是指网络中的工作负荷是均匀地分配给网络中的每台计算机。

2173.计算机网络工作模式(1)客户/服务器模式客户/服务器模式(Client/Servermodel)简称C/S模式,它把客户端(Client)与服务器(Server)区分开来。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。例如Internet上提供的WWW、FTP、Email服务等。(2)对等模式对等模式(PeertoPeermodel),简称P2P,通常被称为对等网,网络中的各个节点被称为对等体。与传统的C/S模式中服务都由几台Server提供不同的是,在P2P网络中,每个节点的地位是对等的,具备客户端和服务器双重特性,可以同时作为服务使用者和服务提供者。基于P2P的应用也非常多,比如BT下载软件,Skype通信软件等。

2183.2.2计算机网络的组成计算机网络是一个非常复杂的系统。不同的网络其组成也不尽相同,一般我们可以将计算机网络分为硬件和软件两个部分。硬件部分主要包括计算机设备、网络传输介质和网络互连设备。软件部分则主要包括网络通信协议、网络操作系统和网络应用软件等。

2191.计算机网络硬件系统(1)计算机设备网络中的计算机设备包括服务器、工作站、网卡和网络共享设备等。(2)网络传输介质,同轴电缆、光纤、双绞线等(3)网络互连设备,集线器、中继器、交换机、网桥、路由器等

2202.计算机网络软件系统(1)(1)网络协议软件网络中的通信双方必须共同遵守一些约定和通信规则,这就是通信协议。连入网络的计算机依靠网络协议实现互相通信。网络协议软件是指用以实现网络协议功能的软件。常用的通信协议有HTTP、TCP/IP、IPX/SPX等。(2)网络操作系统网络操作系统NOS(NetworkOperationSystem)是在网络环境下,用户与网络资源之间的接口,是运行在网络硬件基础之上的,为网络用户提供共享资源管理服务、基本通信服务、网络系统安全服务及其他网络服务,实现对网络资源的管理和控制的软件系统。网络操作系统是网络的核心,其他应用软件系统需要网络操作系统的支持才能运行。网络操作系统主要有Windows类、UNIX和Linux。

2212.计算机网络软件系统(2)(3)网络管理软件网络管理软件对网络中的大多数参数进行测量与控制,以保证用户安全、可靠、正常的得到网络服务,使网络性能得到优化。(4)网络应用系统网络应用软件是指为某一应用目的开发的网络软件,如即时通讯软件、浏览器、电子邮件程序、网页制作工具软件等等。

2223.2.3计算机网络的分类计算机网络的分类方法很多:如按传输介质可分为有线网和无线网;按数据交换方式可分为直接交换网、存储转发交换网和混合交换网;按通信传播方式可分为点对点式网和广播式网;按通信速率可分为低速网、中速网和高速网;按使用范围可分为公用网和专用网;按网络覆盖范围可分为广域网、局域网、城域网;按拓扑结构可分为总线结构、环状结构、星状结构、树状结构、网状结构以及混合结构等。

2231.按网络覆盖范围划分(1)(1)广域网(WAN)广域网又称远程网,是在广阔的地理区域内进行数据传输的计算机网络。作用范围通常为几十到几千公里,可以覆盖一个城市、一个国家甚至全球,形成国际性的计算机网络。广域网常借用公用电信网络进行通信,数据传输的带宽有限。广域网主要特点有:地理覆盖范围大、传输速率低、传输误码率高、网络结构复杂。(2)局域网(LAN)局域网是将较小地理范围内的计算机或外围设备通过高速通信线路连接在一起的通信网络。作用范围通常为几十米到几千米之间,常用于组建一个办公室、一幢大楼、一个校园、一个工厂或一个企业的计算机网络。目前常见的局域网主要有以太网和无线局域网两种。广域网的主要特点有:地理范围比较小、传输速率高、延迟和误码率较小。

2241.按网络覆盖范围划分(2)(3)城域网(MAN)城域网也称市域网,地理覆盖范围介于WAN与LAN之间,一般为几千米至几万米。所采用的技术基本上与LAN相似,是一种大型的局域网。城域网主要是在一个城市范围内建立计算机通信网。城域网技术对通信设备和网络设备的要求比局域网高,在实际应用中被广域网技术取代,没有能够推广使用。

2252.按网络拓扑结构划分(1)(1)总线结构总线型拓扑结构采用单根数据传输线作为通信介质,所有的站点都通过相应的硬件接口直接连接到通信介质上,而且能被其他所有站点接受,所有结点工作站都通过总线进行信息传输。总线结构的网络采用广播方式传输数据,因此,连接到总线上的设备越多,网络发送和接收数据就越慢。

2262.按网络拓扑结构划分(2)(2)环状结构环状结构是网络中各节点通过一条首尾相连的通信链路连接起来的闭合环路。每个节点只能与它相邻的一个或两个节点设备直接通信,如果与其他节点通信,数据需依次经过两个节点之间的每个设备。环状结构有两种类型:单环结构和双环结构,双环结构的可靠性高于单环结构。

2272.按网络拓扑结构划分(3)(3)星状结构星状结构的每个节点都由一条点对点链路与中心节点(公用中心交换设备,如交换机、集线器等)相连。星状网络中信息的传输是通过中心节点的存储转发技术实现的。一个节点要发送数据,首先需要将数据发送到中心节点,然后由中心节点将数据转发至目的节点。

2282.按网络拓扑结构划分(4)(4)树状结构树状结构也称星型总线拓扑结构,从总线和星状结构演变来的。网络中的每个节点都连接到一个中央设备如集线器上,但并不是所有的节点都直接连接到中央集线器上,大多数的节点先连接到一个次集线器,次集线器再与中央集线器连接

2292.按网络拓扑结构划分(5)(5)网状结构网状结构是将各节点与通信链路连成不规则的形状,每个节点至少与其他两个节点相连。大型互联网一般都采用网状结构,如Internet的主干网。

2302.按网络拓扑结构划分(6)(6)混合结构混合结构是由几种拓扑结构混合而成的。实际应用中的网络,拓扑结构常常不是单一的,而是混合结构。

2313.2.4计算机网络体系结构计算机网络的体系结构是网络各层及其协议的集合。网络协议依据功能一般采用分层的方式来实现,好处是:结构上各层之间是独立的,灵活性好,易于实现和维护,能促进标准化工作。

2321.通信协议介绍相互通信的两个计算机系统必须高度协调才能进行通信工作,它们之间的数据交换必须遵守事先约定好的规则,这些规则明确规定了所交换的数据的格式以及有关的同步问题。网络协议,就是为进行网络中的数据交换而建立的规则、标准或约定,一般包含语法、语义、同步几个要素。

2332.TCP/IP体系结构(1)体系结构是计算机网络及其部件应完成的功能的精确定义。为了使不同体系结构的计算机网络都能互联,国际标准化组织ISO于1978年提出了“异种机联网标准”的框架结构,这就是著名的开放系统互联基本参考模型OSI/RM,简称为OSI。

2342.TCP/IP体系结构(2)OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。只要遵循OSI标准,一个系统就可以和位于世界上任何地方的也遵循同一标准的其他任何系统进行通信。但是在市场化方面,OSI失败了。非国际标准的TCP/IP体系结构获得了最广泛的应用,成了事实上的国际标准。

2352.TCP/IP体系结构(3)TCP/IP是四层体系结构,自上而下依次是:应用层、传输层、网络层和网络接口层,但最下面的网络接口层并没有具体内容。因此往往采取折中的办法,即综合OSI和TCP/IP的优点,采用一种有五层协议的体系结构,自上而下依次是:应用层、传输层、网络层、数据链路层、物理层。TCP/IP协议栈分层结构

2362.TCP/IP体系结构(4)物理层:负责用硬件线路和硬件设备连接各主机。数据链路层:在物理连接的基础上,实现相邻两个主机之间的通信,即实现点到点的数据传输。网络层:在相邻主机之间能够传输数据的基础上,实现跨站点的通信,即实现端到端的数据传输。一般是靠中间站点转发数据分组来实现的。传输层:传输层在网络层的基础上,提高了端到端数据传输的可靠性。应用层:在任意两台主机都能可靠传输数据的基础上,开发各种具体应用,解决生产以及生活中的实际问题。

2373.TCP/IP协议TCP/IP(TransmissionControlProtocol/InternetProtocol的简写),中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础。通常所说的TCP/IP协议是指由100多个协议组成的协议系列,其中最重要的是网络层的IP协议和传输层的TCP协议。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。通俗而言:TCP协议负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP协议负责分组与重组数据及给因特网的每一台联网设备规定一个地址。

2381).IP协议IP协议又称网络互联协议,是为网络与网络之间互联而设计的数据包协议,运行于网络层。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP协议是一套由软件程序组成的协议软件,把各种不同的“帧”统一转换成“IP数据报”格式。

2391).IP协议(2)IP协议中还有一个非常重要的内容,就是给因特网上的每台计算机和设备都规定了一个唯一的地址,称为“IP地址”。正是这种唯一的地址,保证了用户在联网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己的通信对象计算机。

2401).IP协议(3)IP协议向上提供简单灵活的、无连接的、尽最大努力交付的数据报服务。也就是网络层不提供服务质量保证。这种设计的好处是:网络造价大大降低,运行方式灵活方便,能够适应各种应用。而数据传输的可靠性需求可以放在其他层来实现。

2411).IP协议(4)IP数据报格式每个数据包都有报头和报文两个部分,报头中的目的地址使不同的数据包不必经过相同的路径也能到达目的主机,并在目的主机重新组合还原成原始数据。这要求IP协议具有分组打包和集合组装的功能。

2422).TCP协议(1)不同主机的应用层之间经常需要可靠的、像管道一样的连接。但IP层提供的是不可靠的数据包传递。传输层TCP协议面临的重要任务是,在下层IP协议提供的不可靠的端到端数据传输服务的基础上,为上层应用程序提供可靠的端到端的数据传输服务。

243(1)TCP报文TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制。TCP协议对来自应用层的数据添加一些字段后封装成TCP数据包,添加的字段信息要能实现上述功能。TCP协议把TCP数据包交给IP协议,由IP协议发送到目的主机。

244TCP报文与IP数据包的关系TCP协议将TCP包的数据部分送到更高层的应用程序

245TCP报文首部格式

2463).数据报协议UDP(1)用户数据报协议(UserDatagramProtocol,UDP)在网络层IP数据报的服务之上只增加了很少一点功能,即端口功能和差错检测功能,这点可以从UDP首部8个字节的内容看出来。UDP首部8个字节

2473).数据报协议UDP(2)发送方UDP协议对应用程序交下来的报文,在添加首部后就向下交付给IP层。UDP尽最大努力交付,即不保证可靠交付,这样能提高效率。UDP没有拥塞控制,很适合多媒体通信的要求。UDP协议与应用层和IP层的关系

2483).用户数据报协议UDP(3)TCP是面向连接的,三次握手在最低限度上保证了连接的可靠性。UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号。UDP是无连接的、不可靠的一种数据传输协议。也正是因为这个特点,使得UDP的开销更小,数据传输速率更高。

2493.3局域网3.3.1局域网简介在较小地理范围内,利用通信线路把若干个主机连接起来,实现彼此之间数据传输和资源共享的系统称为局域网。局域网的主要特点如下:(1)网络覆盖的地理范围比较小,通常不超过十公里。(2)信息的传输速率高。(3)延迟和误码率较小,误码率一般在10-8~10-10之间。局域网由服务器、工作站、网卡、传输介质、网络互连设备及共享外围设备等组成。

2503.3.2以太网以太网是最早的局域网,也是使用最广泛的局域网。以太网(Ethernet)指的是由美国施乐(Xerox)公司,创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。在不涉及网络协议的具体细节时,很多人将符合IEEE802.3标准的局域网简称为以太网。IEEE802.3局域网是一种基带总线局域网,以无源的电缆作为总线传送数据帧,并以历史上曾经认为传播电磁波的以太来命名。

2511.以太网数据帧格式局域网内任何两台主机都是有传输介质直接相连的,或者说这些主机之间都是点到点连接的。在点到点物理连接的基础上,实现点到点数据传输的协议叫做数据链路层协议。数据链路层的基本功能是在物理层提供的物理连接的基础上,实现相邻主机之间的可靠通信,并为网络层提供有效的服务。以太网的数据链路层采用分组交换的方式传输数据,一个分组称为一个“数据帧”或简称“帧”,一个帧的格式。

2522.载波监听多路访问/冲突避免载波监听多路访问技术CSMA,要求发送数据帧的主机先对总线介质进行监听,以确定是否有别的主机在使用总线传输数据。如果总线空闲,则该主机可以发送数据,否则,该主机避让一段时间后再次尝试。

2533.3.3无线局域网(1)无线局域网络(WirelessLocalAreaNetworks,WLAN)。它是相当便利的数据传输系统,它利用射频(RadioFrequency;RF)的技术,使用电磁波,取代旧式碍手碍脚的双绞铜线(Coaxial)所构成的局域网络,在空中进行通信连接,使得无线局域网络能利用简单的存取架构让用户透过它,达到“信息随身化、便利走天下”的理想境界。主流应用的无线网络分为GPRS手机无线网络上网和无线局域网两种方式。无线局域网只是有线网络的扩展和补充,还不能完全脱离有线网络。无线局域网所采用的协议主要有IEEE802.11和蓝牙(Bluetooth)等。

2543.3.3无线局域网(2)无线局域网常见的接入设备有:(1)无线网卡无线网卡的作用、功能跟普通电脑网卡一样,是用来连接到局域网上的。(2)无线访问接入点无线访问接入点(AccessPoint,AP)是使无线设备(手机等移动设备及笔记本电脑等无线设备)用户进入有线网络的接入点,主要用于宽带家庭、大楼内部、校园内部、园区内部以及仓库、工厂等需要无线监控的地方。(3)无线路由器无线路由器(WirelessRouter)好比将单纯性无线AP和宽带路由器合二为一的扩展型产品,它不仅具备单纯性无线AP所有功能,而且还包括了网络地址转换(NAT)功能,可支持局域网用户的网络连接共享。可实现家庭无线网络中的Internet连接共享,实现ADSL、Cablemodem和小区宽带的无线共享接入。

2553.4Internet3.4.1Internet简介1.Internet的概念Internet,中文正式译名为因特网,又叫做国际互联网。它并非一个具有独立形态的网络而是将分布在世界各地的、类型各异的、规模大小不一的、数量众多的计算机网络互连在一起而形成的网络集合体,成为当今最大的和最流行的国际性网络。Internet采用TCP/IP作为共同的通信协议,用户只要与Internet相连,就能主动地利用这些网络资源,还能以各种方式和其他Internet用户交流信息。

2562.Internet的起源与发展Internet是在美国早期的军用计算机网ARPANET(阿帕网)的基础上经过不断发展变化而形成的。(1)Internet的雏形阶段1969年,美国国防部高级研究计划局(ARPA)开始建立一个命名为ARPANET的网络.人们普遍认为这就是Internet的雏形。(2)Internet的发展阶段美国国家科学基金会(NSF)在1985开始建立计算机网络NSFNET。NSFNET成为Internet上主要用于科研和教育的主干部分。1989年MILNET(由ARPANET分离出来)实现和NSFNET连接后,就开始采用Internet这个名称。(3)Internet的商业化阶段20世纪90年代初,美国政府逐渐将网络的经营权交给私人公司,商业机构开始进入Internet,使Internet开始了商业化的新进程。

2573.Internet在我国的发展Internet在我国的发展,大致可以分为两个阶段:第一个阶段是1987-1993年,一些科研机构通过X.25实现了与Internet的电子邮件转发的连接;第二阶段是从1994年开始的,这一年,中国科学技术网CSTNET首次实现和Internet直接连接,同时建立了我国最高域名服务器,这标志着我国正式接入Internet接着,又相继建立了中国教育科研网(CERNET)、中国公用计算机互联网(CHINANET)和中国金桥网(GBNET),从此中国的网络建设进入了大规模发展阶段。

2583.4.2IP地址1.IPv4概述IP是TCP/IP协议簇中网络层的协议,是TCP/IP协议簇的核心协议。IP协议的版本号是4(现在已扩展的还有IPv6),简称IPv4。因特网采用一种全局通用的IP地址格式,由“网络号+主机号”构成。

2592.静态IP地址和动态IP地址静态IP地址又称为“固定IP地址”。静态IP地址是长期固定分配给一台计算机使用的IP地址,也就是说机器的IP地址保持不变。一般是特殊的服务器才拥有静态IP地址。现在获得静态IP的方式比较昂贵,可以通过主机托管、申请专线等方式来获得静态IP。动态IP地址和静态IP地址相对。对于大多数上网的用户,由于其上网时间和空间的离散性,为每个用户分配一个固定的IP地址(静态IP)是非常不可取的,这将造成IP地址资源的极大浪费。因此为了节省IP资源,而是自动获得一个由ISP动态临时分配的IP地址。用户任意两次连接时的IP地址很可能不同,但是在每次连接时间内IP地址不变。

2603.下一代Internet(IPv6)当初设计IP地址时,IPv4只有43亿个地址。CNNIC发布的《第47次中国互联网络发展状况统计报告》显示:截止2020年12月底,中国网民9.89亿,而我国分配到的IP地址只有3.89亿。IPv6采用128位地址长度。在IPv6的设计过程中除了一劳永逸地解决了地址短缺问题。128位地址空间包含的准确地址数是340282366920938463463374607431768211456个。IPv6地址的无限充足意味着在人类世界,每件物品都能分到一个独立的IP地址。

2613.5信息安全3.5.1信息安全概述Internet强调了开放性和共享性,但它所采用的TCP/IP等技术的安全性是很脆弱的,本身并不提供高度的安全保护,所以需要有另外采取措施对信息进行保护。计算机网络上的通信有可能面临以下四种威胁:(1)截获:从网络上窃听他人的通信内容。(2)中断:有意中断他人在网络上的通信。(3)篡改:故意篡改网络上传送的报文。(4)伪造:伪造信息在网络上传送。

2623.5.2数据加密技术数据加密技术,是计算机通信和数据存储中对数据采取的一种安全措施,即使数据被别有用心的人获得,也无法了解其真实意思。对一段数据进行加密是通过加密算法,用密钥对数据进行处理。算法可以是公开的知识,但密钥是保密的。使用者可以简单地修改密钥,就达到改变加密过程和加密结果的目的。

2631.对称密码体制(1)指加密密钥与解密密钥相同的密码体制DES是世界上第一个公认的实用密码算法标准,曾对密码学的发展做出了重大贡献。数据加密标准(DataEncryptionStandard,DES)属于常规密钥密码体制。尽管人们在破译DES方面取得了许多进展,但至今仍未能找到比穷举搜索密钥更有效的方法。

2641.对称密码体制(2)目前较为严重的一个问题是DES的密钥太短,已经能被现代计算机暴力破解。另外一个问题是加密、解密使用同样的密钥,由发送者和接收者保存,分别在加密和解密时使用。采用这种方法的主要问题是密钥的生成、注入、存储、管理、分发等很复杂,特别是随着用户的增加,密钥的需求量成倍增加。

2651.对称密码体制(3)在网络通信中,大量密钥的分配是一个难以解决的问题。例如,若系统中有n个用户,其中每两个用户之间需要建立密码通信,则系统中每个用户须掌握(n-1)个密钥,系统中所需的密钥总数为n(n-1)/2个。一个系统中如果有较多的用户,庞大数量的密钥生成、管理、分发是一个难处理的问题。

2662.公钥密码体制(1)公钥密码体制使用互不相同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”的密码体制。公钥密码体制的产生主要是两个方面原因,一个是由于常规密钥密码体制的密钥分配问题,另一个是数字签名的需求。现有最著名的公钥密码体制是RSA体制。RSA基于数论中大数分解问题的体制,由美国三位科学家Rivest,Shamir和Adleman于1976年提出并在1978年正式发表。R、S、A分别是三人姓氏的首字母。

2672.公钥密码体制(2)在公钥密码体制中,加密密钥(即公钥)PK是公开信息,而解密密钥(即私钥或秘钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘钥SK是由公钥PK决定的,却不能根据PK计算出SK。任何加密方法的安全性取决于密钥的长度,以及攻破密文所需的计算量。在这方面,公钥密码体制并不比传统加密体制更加优越。

2682.公钥密码体制(3)非对称公钥的分配需要一个值得信赖的机构——认证中心CA。申请实体(人或机器)首先向认证中心申请一对非对称公钥,认证中心将一对非对称公钥与申请实体绑定并给其颁发证书。证书里有该实体的公钥及标识信息,而私钥由申请实体保存并保密,需要时用私钥对报文进行加密或者解密。认证中心对其颁发的证书进行了数字签名,以证实该证书确实由可信的认证中心发出。任何其他用户也都可以从可信渠道获得某个实体的公钥,即公钥是公开的。

2693.5.3身份鉴别技术身份鉴别也称为身份认证。身份认证技术是在计算机网络中确认操作者身份的过程而产生的有效解决方法。1.基于口令的身份认证技术2.数字签名3.生物识别

270数字签名(1)采用数字签名,要求也能实现手写签名的功能:(1)签名者无法否认信息是由自己发送的,即不可否认性。(2)确认信息是由签名者发送的,即接收者能够进行报文鉴别。(3)确认信息自签名后到收到为止,未被修改过,即能确认报文的完整性。

271数字签名(2)现在已有多种实现数字签名的方法,其中采用公钥的算法最容易实现。例如,A要发送一个报文X给B,A只要用自己的私钥对报文X加密成X′,即实现了对报文X的数字签名。B收到加密后的X′后,用A的公钥对X′解密,即可恢复出报文X。

272数字签名(3)若A要抵赖曾发送报文给B,B可将明文X和对应的密文X′出示给公立机构,公立机构很容易用A的公钥去证实X确实由A发送给B,因为只有A的私钥才能把X加密成X′,而只有A才拥有自己的私钥。——A不可否认。因为除A外其他人都没有A的私钥,所以除A外其他人都不能生成密文X′。因此B相信报文X是A而不是别人发送的。——B能进行报文鉴别。如果密文X′在传输过程中被人篡改(包括被B篡改),则B无法用A的公钥对密文进行解密。——确认报文的完整性。

2733.5.4防火墙(1)防火墙是由软件、硬件构成的系统,是一种特殊编程的路由器,用来在两个网络之间实施接入控制策略。接入控制策略是由使用防火墙的单位自行制定的,以最适合本单位的需要。防火墙内的网络称为“可信赖的网络”,而将外部的因特网称为“不可信赖的网络”。防火墙可用来解决内联网和外联网的安全问题。

2743.5.6防火墙(2)防火墙在互联网络中的位置

2753.5.6防火墙(3)防火墙的功能有两个:阻止和允许。“阻止”就是阻止某种类型的通信量通过防火墙(从外部网络到内部网络,或反过来)。“允许”的功能与“阻止”恰好相反。防火墙必须能够识别通信量的各种类型。不过在大多数情况下防火墙的主要功能是“阻止”。

2763.5.6防火墙(4)防火墙技术一般分为两类:(1)网络级防火墙。用来防止整个网络出现外来非法的入侵。(2)应用级防火墙。从应用程序层级进行接入控制。例如,防火墙只允许访问万维网的应用通过,而阻止FTP应用的通过。

2773.5.5计算机病毒及其防治1.计算机病毒的基本概念计算机病毒的概念在1983年由FredCohen首次提出,他认为“计算机病毒是一个能感染其他程序的程序,它靠篡改其他程序,并把自身的复制嵌入其他程序而实现病毒的感染。”EdSkoudis则认为:“计算机病毒是一种能自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程需要人工干预才能完成。”《中华人民共和国计算机信息系统安全保护条例》中明确定义,病毒指“编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。

2782.计算机病毒的特征(1)(1)繁殖性计算机病毒可以像生物病毒一样进行繁殖,当正常程序运行时,它也进行运行自身复制,是否具有繁殖、感染的特征是判断某段程序为计算机病毒的首要条件。(2)破坏性计算机中毒后,可能会导致正常的程序无法运行,把计算机内的文件删除或受到不同程度的损坏。破坏引导扇区及BIOS,硬件环境破坏。(3)传染性计算机病毒传染性是指计算机病毒通过修改别的程序将自身的复制品或其变体传染到其它无毒的对象上,这些对象可以是一个程序也可以是系统中的某一个部件。

2792.计算机病毒的特征(2)(4)潜伏性计算机病毒潜伏性是指计算机病毒可以依附于其它媒体寄生的能力,侵入后的病毒潜伏到条件成熟才发作,会使电脑变慢。(5)隐蔽性计算机病毒具有很强的隐蔽性,可以通过病毒软件检查出来少数,隐蔽性计算机病毒时隐时现、变化无常,这类病毒处理起来非常困难。(6)可触发性编制计算机病毒的人,一般都为病毒程序设定了一些触发条件,例如,系统时钟的某个时间或日期、系统运行了某些程序等。一旦条件满足,计算机病毒就会“发作”,使系统遭到破坏。

2803.计算机病毒的防范(1)(1)病毒征兆①屏幕上出现不应有的特殊字符或图像、字符无规则变或脱落、静止、滚动、雪花、跳动、小球亮点、莫名其妙的信息提等。②发出尖叫、蜂鸣音或非正常奏乐等。③经常无故死机,随机地发生重新启动或无法正常启动、运行速度明显下降、内存空间变小、磁盘驱动器以及其他设备无缘无故地变成无效设备等现象。④磁盘标号被自动改写、出现异常文件、出现固定的坏扇区、可用磁盘空间变小、文件无故变大、失踪或被改乱、可执行文件(exe)变得无法运行等。⑤打印异常、打印速度明显降低、不能打印汉字与图形等或打印时出现乱码。⑥收到来历不明的电子邮件、自动链接到陌生的网站、自动发送电子邮件等。⑦有特殊文件自动生成。⑧程序或数据神秘地消失了,文件名不能辨认等。

2813.计算机病毒的防范(2)(2)计算机病毒的预防①安装杀毒软件并及时更新病毒数据库。②注意对系统文件、可执行文件和数据写保护。③不使用来历不明的程序或数据。④不轻易打开来历不明的电子邮。⑤使用新的计算机系统或软件时,先杀毒后使用。⑥及时修补操作系统及其捆绑软件的漏洞。⑦备份系统和参数,建立系统的应急计划等。

282END谢谢!

283第4章计算机新技术

284目录4.1云计算4.2人工智能4.3物联网4.4虚拟现实与增强现实4.5区块链技术4.6数字人民币

2854.1云计算机4.1.1云计算概述1.云计算的产生人类进入了前所未有的信息爆炸时代,摩尔定律也束手无策,无论是技术上还是经济上都没办法依靠硬件解决信息无限增长的趋势,面对如何低成本地、高效快速地解决无限增长的信息的存储和计算这一问题,云计算也就应运而生。云计算这个概念的直接起源来自戴尔的数据中心解决方案、亚马逊EC2产品和Google-IBM分布式计算项目。2006年8月9日,Google首席执行官埃里克·施密特在搜索引擎大会上提出“云计算”(CloudComputing)的概念。

2862.云计算的概念云计算(CloudComputing)是整合了集群计算,网格计算、虚拟化、并行处理和分布式计算的新一代信息技术,对云计算的定义有多种说法,例如:美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件、服务等),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。IBM在其技术白皮书中指出:云计算一词描述了一个系统平台或一类应用程序,该平台可以根据用户的需求动态部署、配置等;云计算是一种可以通过互联网进行访问的可以扩展的应用程序。

2873.云计算的特点(1)超大规模。(2)虚拟化。(3)高可靠性。(4)伸缩性。(5)按需服务。(6)多租户。(7)规模化经济。

2884.云计算基本原理云计算的基本原理是把计算任务部署在“超大规模”的数据中心,而不是本地的计算机或远程服务器上,用户根据需求访问数据中心,云计算自动将资源分配到所需的应用上。云计算的常用的服务方式是:用户利用多种终端设备(如笔记本电、智能手机)连接到网络,通过客户端界面连接到“云”;“云”端接受请求后对数据中心的资源进行优化及调度,通过网络为“端”提供服务。“云”指的是在云计算基地把大量的电脑和服务器连在一起形成的基础设施中心、平台和应用服务器等。

2894.1.2云计算的分类1.按服务模式分类(1)从云计算的服务模式看,云计算架构自底向上主要分为基础即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)三种。

2901.按服务模式分类(2)(1)IaaS:将硬件设备等基础资源封装成服务供用户使用。在IaaS环境中,用户相当于在使用裸机和磁盘,既可以让它运行Windows,也可以让它运行Linux。IaaS最大优势在于它允许用户动态申请或释放节点,按使用量计费。而IaaS是由公众共享的,因而具有更高的资源使用效率。(2)PaaS:提供用户应用程序的运行环境,用户应用程序不必过多考虑节点间的配合问题。但与此同时,用户的自主权降低,必须使用特定的编程环境并遵照特定的编程模型,只适用于解决某些特定的计算问题。(3)SaaS:针对性更强,它将某些特定应用软件功能封装成服务。SaaS既不像PaaS一样提供计算或存储资源类型的服务,也不像IaaS一样提供运行用户自定义应用程序的环境,它只提供某些专门用途的服务供应用调用。

2912.按部署模式分类(1)公有云,也称外部云。由外部或者第三方提供商采用细粒度、自服务的方式在Internet上通过网络应用程序或者Web服务动态提供资源,而这些外部或者第三方提供商基于细粒度和效用计算方式分享资源和费用。(2)私有云,云基础设施由一个单一的组织部署和独占使用,适用于多个用户(比如事业部)。(3)混合云,将公有云和私有云结合到一起,用户可以在私有云的私密性和公有云的灵活性和价格高低之间自己做出一定的权衡。(4)行业云,行业云主要指的是专门为某个行业的业务设计的云,并且开放给多个同属这个行业的企业。

2924.1.3云计算的关键技术及存在的问题1.云技术的关键技术(1)编程模式(2)虚拟化技术(3)海量数据存储和管理技术(4)云计算平台管理技术

2932.云计算存在的问题(1)数据隐私问题(2)数据安全性(3)用户的使用习惯(4)网络传输问题(5)缺乏统一的技术标准(6)能耗问题

2944.2人工智能4.2.1人工智能概述关于什么是人工智能,一个比较流行的定义是由约翰·麦卡锡(JohnMcCarthy)提出的:“人工智能就是要让机器的行为看起来就像是人所表现出来的智能行为一样。”尼尔逊教授则对人工智能下了这样一个定义:“人工智能是关于知识的学科――怎样表示知识以及怎样获得知识并使用知识的科学。”而美国麻省理工学院的温斯顿教授认为:“人工智能就是研究如何使计算机去做过去只有人才能做的智能工作。”

2954.2.2人工智能的研究途径1.大脑模拟2.符号处理3.子符号法4.统计学法5.集成方法

2964.2.3人工智能的研究目标(1)9个终极目标:(1)理解人类的认识。研究人如何进行思维,而不是研究机器如何工作。应尽量深入了解人的记忆、问题求解能力、学习能力和一般的决策等过程。(2)有效的自动化。在需要智能的各种任务上可以用机器取代人,建立执行起来和人一样好的程序。(3)有效的智能拓展。有助于使我们的思维更富有成效、更快、更深刻、更清晰。(4)超人的智力。建立超过人的性能的程序。越过了这一知识阈值,就可以导致制造业的革新、理论上的突破、超人的教师和非凡的研究人员等。(5)通用问题求解。目标是可以使程序能够解决或至少能够尝试其范围之外的一系列问题,包括过去从未听说过的领域。

2974.2.3人工智能的研究目标(2)(6)连贯性交谈。类似于图灵测试,可以令人满意地与人交谈,交谈使用完整的句子,句子使用的是人类的语言。(7)自治。要求能主动在现实世界中完成任务。现实世界永远比我们的模型复杂得多,因此它是测试智能程序的唯一公正的手段。(8)学习。要求能将经验进行概括,成为有用的观念、方法、启发性知识,并能以类似方式进行推理。(9)储存信息。要求有一个类似于百科全书式的知识库,储存大量的知识。总之,无论是人工智能研究的近期目标,还是远期目标,摆在我们面前的任务十分艰巨,还有很长一段道路要走。

2984.2.4人工智能的研究领域1.模式识别模式识别是人工智能最早研究的领域之一。它是利用计算机对物体、图像、语音、字符等信息模式进行自动识别的科学。(1)模式识别的过程模式识别过程一般包括对待识别事物进行样本采集、信息的数字化、数据特征的提取、特征空间的压缩以及提供识别准则等

299模式识别的过程

300(2)模式识别的分类①统计决策法与句法方法:利用概率统计的方法进行模式识别。②监督分类与非监督分类:分类问题就是把特征空间分割成对应于不同类别的互不相容的区域,每一个区域对应一个特定的模式类,不同类别间的界面用判别函数来描述。③参数与非参数法:参数法又称参数估计法,最常用的方法是最大贝叶斯估计和最大似然估计。非参数估计方法常用的有k-最紧邻判定规则。

3012.问题求解问题求解(ProblemSolving)是指通过搜索的方法寻找问题求解操作的一个合适序列,以满足问一般情况下,问题求解程序由3个部分组成:(1)数据库。数据库中包含与具体任务有关的信息,这些信息描述了问题的状态和约束条件。(2)操作规则。数据库中的知识是叙述性知识,而操作规则是过程性知识。操作规则由条件和动作两部分组成,条件给定了操作适应性的先决条件,动作描述了由于操作而引起的状态中某些分量的变化。(3)控制策略。控制策略确定了求解过程中应采用哪一条适用规则,适用规则指从规则集合中选择出的最有希望导致目标状态的操作。

3023.自然语言理解自然语言处理(NaturalLanguageUnderstanding)俗称人机对话,是计算机科学领域与人工智能领域中的一个重要方向。研究用电子计算机模拟人的语言交际过程,使计算机能理解和运用人类社会的自然语言如汉语、英语等,实现人机之间的自然语言通信,以代替人的部分脑力劳动,包括查询资料、解答问题、摘录文献、汇编资料以及一切有关自然语言信息的加工处理。

3034.自动定理证明自动定理证明(AutomaticTheoremProving)的任务是对数学中提出的定理或猜想寻找一种证明或反证的方法。许多非数学领域的问题,如医疗诊断、信息检索、规划制定和难题求解等,都可以像定理证明问题那样进行形式化,从而转化为一个定理证明问题。自动定理证明的方法通常有:(1)自动演绎法(2)决策过程法(3)定理证明器

3045.机器视觉机器视觉(MachineVision)是人工智能正在快速发展的一个分支。机器视觉系统最基本的特点就是提高生产的灵活性和自动化程度。在一些不适于人工作业的危险工作环境或者人工视觉难以满足要求的场合,常用机器视觉来替代人工视觉。20世纪70年代,机器视觉形成了几个重要的研究分支:①目标制导的图像处理;②图像处理和分析的并行算法;③从二维图像提取三维信息;④序列图像分析和运动参量求值;⑤视觉知识的表示;⑥视觉系统的知识库等。机器视觉系统广泛地用于工况监视、成品检验和质量控制等领域。

3056.自动程序设计自动程序设计(AutomaticProgramming)是采用自动化手段进行程序设计的技术和过程。其目的是提高软件生产率和软件产品质量。由于编制和调试程序是一件费时费力的繁琐工作,为了摆脱这种状况,就要从软件开发技术方面寻找出路。人工智能是解决自动程序设计方面问题的一个良好方案。自动程序设计的实现途径可归结为演绎综合、程序转换、实例推广以及过程实现等4种。

3067.专家系统(1)专家系统(ExpertSystem)是一个具有大量的专门知识与经验的程序系统,它应用人工智能技术和计算机技术,根据某领域一个或多个专家提供的知识和经验,进行推理和判断,模拟人类专家的决策过程,以便解决那些需要人类专家处理的复杂问题。简而言之,专家系统是一种模拟人类专家解决领域问题的计算机程序系统。专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成

3077.专家系统(2)著名的专家系统:Dendral系统根据质谱仪所产生的数据,不仅可以推断出确定的分子结构,而且还可以说明未知分子的谱分析。据说该系统已经达到化学博士的水平。Mycin是第一个功能较全的医疗诊断专家系统。该系统可以在不知道原始病原体的情况下,判断如何用抗生素来处理败血病患者。只要输入患者的症状、病史和化验结果,系统就可以根据专家知识和输入的资料判断是什么病菌引起的感染,并提出治疗方案。Siri是一个通过辨识语音作业的专家系统,由苹果公司收购并且推广到自家产品内作为个人秘书功能。

3088.机器学习(1)机器学习(MachineLearning)专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。目前,常用的机器学习方法主要有以下方法:(1)决策树学习。(2)关联规则学习。

3098.机器学习(2)(3)人工神经网络。(4)深度学习。(5)支持向量机。(6)贝叶斯网络。(7)强化学习。(8)相似度量学习。(9)遗传算法。(10)基于规则的机器学习。

3109.机器人(1)机器人(Robot)是整合了控制论、机械电子、计算机、材料和仿生学的产物,在工业、医学、农业、建筑业甚至军事等领域中均有重要用途。中国科学家对机器人的定义是:“机器人是一种自动化的机器,这种机器具备一些与人或生物相似的智能能力,如感知能力、规划能力、动作能力和协同能力,是一种具有高度灵活性的自动化机器”。

3119.机器人(2)机器人一般由执行机构、驱动装置、检测装置、控制系统和复杂机械等组成。(1)执行机构。即机器人本体,包括基座、腰部、臂部、腕部、手部和行走部等。(2)驱动装置。是驱使执行机构运动的机构,主要是电力驱动装置,如步进电机、伺服电机等,它按照控制系统发出的指令信号,借助于动力元件使机器人进行动作。(3)检测装置。实时检测机器人的运动及工作情况,根据需要反馈给控制系统,与设定信息进行比较后,对执行机构进行调整,以保证机器人的动作符合预定的要求。(4)控制系统。

3124.2.5人工智能的进展(1)2017年是人工智能技术多点突破、全面开花的一年,我们几乎每天都能听到关于“人工智能”的最新消息。首先人形机器人除了在外形上更像人类,它们的动作也更加灵活了,甚至连身体机能都在向人类靠近。美国机器人公司波士顿动力的机器人Atlas拥有立体视觉、距离感应等能力,不仅能规避障碍物,跌倒了能自己爬起来,还在去年11月学会了后空翻。东京大学的人形机器人Kengoro和Kenshire完全按照人类肌肉骨骼系统搭建,通过水循环系统还能表现运动后“流汗”的反应。

3134.2.5人工智能的进展(2)2017年10月,机器人索菲娅作为小组成员参加了联合国会议,还被授予了沙特阿拉伯公民身份,成为史上首个获得公民身份的机器人。2017年1月30日,宾夕法尼亚州匹兹堡Rivers赌场,耗时20天的德州扑克人机大战尘埃落定。卡耐基梅隆大学开发的AI程序Libratus击败人类顶级职业玩家,赢取了20万美元的奖金。

3144.2.5人工智能的进展(3)围棋方面,在5月AlphaGo以3:0击败柯洁后,谷歌的DeepMind并没有停下脚步,10月,AlphaGoZero用更低的处理能力发现了此前人类和机器从来没有想到的战术,而且在三天之后就击败了它的“前辈”;12月,AlphaGoZero再进化,通用棋类算法AIAlphaZero问世。2017年5月,“谷歌大脑”(GoogleBrain)的研究人员宣布研发出自动人工智能AutoML,该人工智能可以产生自己的“子AI”系统。这个新生成的“孩子”名为NASNet,可以实时地在视频中识别目标,正确率达到82.7%,比之前公布的同类AI产品的结果高1.2%,系统效率高出4%。

3154.2.5人工智能的进展(4)无人驾驶也已成为世界性的前沿科技,Google、百度、特斯拉等科技巨头新贵纷纷布局于此。在2016年11月16日,18辆百度无人车在乌镇运营体验,是百度首次在开放城市道路情况下,实现全程无人工干预的L4级无人驾驶技术。2017年1月,斯坦福大学的研究人员开发出了基于深度学习算法的皮肤癌诊断系统,使得识别皮肤癌的准确率与专业的人类医生相当。成果论文被Nature杂志采用刊登。

3164.2.5人工智能的进展(5)人工智能技术快速发展,也和其他强大的技术一样,是一柄双刃剑。AI既能造福人类,也能被罪犯所利用。恶意使用人工智能,不仅会威胁到人们的财产和隐私,还可能带来生命威胁。人工智能还会导致工人大量失业,当机器配上人工智能,人类被代替的趋势就会愈演愈烈。特斯拉自动化工厂被曝光,整个工厂只有150个机器人,从原材料加工到成品组装,所有的生产流程都由150台机器人完成,在车间内根本看不到人的身影。麦肯锡全球研究院发布报告称,到2030年,机器人将抢走4到8亿人的饭碗,相当于当前全球劳动力总量的1/5,风险最大的行业是建筑和采矿、工厂产品生产、办公室助理和销售人员。

3174.3物联网4.3.1物联网概述1.物联网的概念(1)至今仍没有提出个权威、完整和精确的物联网定义。物联网(InternetofThings,IoT)的概念最初是由美国麻省理工学院在1999年提出的:即通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器、气体感应器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络。

3181.物联网的概念(2)中国物联网校企联盟将物联网的定义为:当下几乎所有技术与计算机、互联网技术的结合,实现物体与物体之间、环境以及状态信息实时的共享以及智能化的收集、传递、处理、执行。广义上说,当下涉及信息技术的应用,都可以纳入物联网的范畴。国际电信联盟(ITU)发布的ITU互联网报告,对物联网做了如下定义:通过二维码识读设备、射频识别(RFID)装置、红外感应器、全球定位系统和激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现智能化识别、定位、眼踪、监控和管理的一种网络。

319简单地说,物联网就是物物相连的互联网,包含三层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。其三,物联网具有智能属性,可进行智能控制、自动监测与自动操作。根据国际电信联盟的定义,物联网主要解决人与物品(HumantoThing,H2T)、人与人(HumantoHuman,H2H)、物品与物品(ThingtoThing,T2T)之间的连接。许多学者讨论物联网中,也经常会引入一个M2M的概念,可以解释成为人到人(MantoMan)、人到机器(MantoMachine)、机器到机器(MachinetoMachine)。从本质上而言,在人与机器、机器与机器的交互,大部分是为了实现人与人之间的信息交互。1.物联网的概念(3)

3202.物联网的基本特征和传统的互联网相比,物联网有其鲜明的特征。(1)它是各种感知技术的广泛应用(2)它是一种建立在互联网上的泛型网络(3)智能处理

3214.3.2物联网的关键技术(1)物联网的技术构成主要包括感知与标识技术、网络与通信技术、嵌入式系统技术等。1.感知与标识技术,是物联网的基础,负责采集物理世界中发生的物理事件和数据,实现外部世界信息的感知和识别,包括多种发展成熟度差异性很大的技术,如传感器、RFID、二维码等。2.网络与通信技术,网络是物联网信息传递和服务支撑的基础设施,通过泛在的互联功能,实现感知信息高可靠性、高安全性传送。物联网的网络技术涵盖泛在接入和骨干传输等多个层面的内容。3.嵌入式系统技术,综合了计算机软硬件、传感器技术、集成电路技术、电子应用技术为一体的复杂技术。

3224.3.2物联网的关键技术(2)如果把物联网用人体做一个简单比喻,传感器相当于人的眼睛、鼻子、皮肤等感官,网络就是神经系统用来传递信息,嵌入式系统则是人的大脑,在接收到信息后要进行分类处理。这个例子很形象的描述了传感器、嵌入式系统在物联网中的位置与作用。

3234.3.3物联网的应用物联网用途广泛,遍及智能交通、环境保护、政府工作、公共安全、平安家居、智能消防、工业监测、环境监测、路灯照明管控、水系监测、食品溯源、敌情侦查和情报搜集等多个领域。(1)物联网传感器产品已率先在上海浦东国际机场防入侵系统中得到应用(2)首家手机物联网落户广州(3)与门禁系统的结合(4)与云计算的结合(5)与移动互联结合(6)与指挥中心的结合(7)物联网助力食品溯源,肉类源头追溯系统

324总结:大数据、云计算、物联网和AI之间的关系(1)物联网和互联网是用来产生数据并将所有事物和信息联系起来,将事物和信息联系起来后,数据才有了关联,数据有了关联才能产生更大的价值。例如一辆车的位置数据没有太大价值,但几千辆车的位置数据关联起来,就可以用来判断路面拥堵情况,也可以用于交通调度。物联网和互联网产生大量的数据,这些数据肯定要找一个地方集中存储和处理,这就必须要有云计算了。云计算的作用就在于将海量数据集中存储和处理。大数据海量数据上传到云计算平台后,自然而然的就需要对数据进行深入分析和挖掘了,这就是大数据的目的。例如,将几千辆车的位置信息综合起来分析出某条路的拥堵状况。大数据是基于海量数据进行分析从而发现一些隐藏的规律、现象、原理等,而人工智能在大数据的基础上更进一步,人工智能会分析数据,然后根据分析结果做出行动,例如无人驾驶,自动医学诊断等。

325总结:大数据、云计算、物联网和AI之间的关系(2)人工智能之所以历经这么多年后才于近年大红大紫,原因归根于2006年出现的人工智能关键技术—“深度学习”,人工智能至此才有了实用价值,而深度学习正式在云计算和大数据日趋成熟的背景下才取得的实质性进展。2006年之所以是人工智能的一个拐点,因为数据量越来越大,计算能力越来越强,过去不实用的,到2006年逐步进入了实用阶段。这意味着,在通往人工智能的路上,两个不可或缺的角色:大数据、云计算,三者几乎是“铁三角”的关系,而海量数据又由物联网、互联网产生,对于人工智能而言,物联网其实肩负了一个至关重要的任务:数据收集。未来可以预见的是,云计算、大数据技术将在助力人工智能发展层面意义深远,而反之,人工智能的迅猛发展、海量数据的积累,也将会为云计算、大数据带来的未知和可能性!

3264.4虚拟现实与增强现实技术4.4.1虚拟现实技术概述1.虚拟现实技术概念虚拟现实(VirtualReality,简称VR)技术也被称为灵境技术,是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。虚拟现实技术是仿真技术的一个重要方向,是仿真技术与计算机图形学、人机接口技术、多媒体技术、传感技术、网络技术等多种技术的集合,是一门富有挑战性的交叉技术前沿学科和研究领域。虚拟现实技术主要包括模拟环境、感知、自然技能和传感设备等方面。

3272.虚拟现实发展过程虚拟现实技术的发展可以大致分成3个阶段:(1)虚拟现实技术的探索阶段(20世纪70年代前)(2)虚拟现实技术的系统化实现阶段(20世纪80年代)(3)虚拟现实技术的全面发展阶段(20世纪90年代至今)

3283.虚拟现实技术的特征(1)多感知性,除一般计算机所具有的视觉感知外,还有听觉感知、触觉感知、运动感知,甚至还包括味觉、嗅觉(目前还不成熟)的感知等,使用户感觉像是被虚拟世界包围。(2)存在感,指用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该达到使用户难辨真假的程度。(3)交互性,指交互的自然性和实时性,用来表示参与者通过专门的输入和输出设备(如数据手套、力反馈装置等),用人类的自然技能实现对模拟环境的考察与操作的程度。(4)自主性,指虚拟环境中的物体依据现实世界物理运动定律动作的程度。

3294.4.2虚拟现实技术基础及硬件设备1.虚拟现实技术基础(1)实时三维计算机图形(2)立体显示(3)声音(4)感觉反馈(5)语音

3302.虚拟现实技术硬件设备(1)数据手套数据手套(DataGlove),是美国VPL公司推出的一种传感手套,它已成为一种被广泛使用的输入传感设备,它是一种穿戴在用户手上,作为一只虚拟的手用于虚拟现实系统进行交互,可以在虚拟世界中进行物体抓取、移动、装配、操作、控制,并把手指和手掌伸屈时的各种姿势转换成数字信号传送给计算机。

331(2)三维控制器三维控制器包括三维鼠标(3DMouse)和力矩球(SpaceBall),和平常鼠标相比,普通鼠标只能感受在平面的运动,而三维鼠标可以让用户感受到在三维空间中的运动,其工作原理是在鼠标内部装有超声波或电磁发射器,利用配套的接收设备可检测到鼠标在空间中的位置与方向。力矩球通常被安装在固定平台上,用户可以通过手的扭动、挤压、来回摇摆等操作,来实现相应的操作。它是采用发光二极管和光接收器,通过安装在球中心的几个张力器来测量手施加的力,力矩球既简单有耐用,而且可以操纵物体。

332(3)人体运动捕捉设备人体运动捕捉的目的是把真实的人体动作完全附加到虚拟场景中的一个虚拟角色上,让虚拟角色表现出真实人物的动作。人体运动捕捉设备,一般由传感器、信号抽捉设备、数据传输设备和数据处理设备4部分组成,根据传感器信号类型的不同,可以将运动捕捉设备分为机械式、声学式、电磁式和光学式四种类型。效果。

333(4)头盔显示器头盔显示器(HMD,HeadMountedDisplay),即头显,是虚拟现实应用中的3DVR图形显示与观察设备,可单独与主机相连以接受来自主机的3DVR图形信号。使用方式为头戴式,辅以三个自由度的空间跟踪定位器可进行VR输出效果观察,同时观察者可做空间上的自由移动,如;自由行走、旋转等,沉浸感较强,在VR效果的观察设备中,头盔显示器的沉浸感优于显示器的虚拟现实观察效果,在投影式虚拟现实系统中,头盔显示器作为系统功能和设备的一种补充和辅助。

334(5)触觉力觉反馈设备接触感的作用一般包括两个方面:1,用户在探素虚拟环境时,利用接触感来识别所探索的对象及其位置和方向;2,用户需要利用接触感去操纵和移动虚拟物体以完成某种任务。接触感可以分为触觉反馈和力觉反馈两类,而触觉反馈是力觉反馈的基础和前提。目前,常见的触觉反馈设备主要有充气式、震动式、温度式,常见的力觉反馈设备包括力反馈鼠标,力反端手柄、力反馈手臂、力反馈手套等。

335(6)其它辅助设备常见的还有三维扫描仪和三维打印机等。三维扫描仪是一种快速获取真实物体的立体信息,并将其转化为虚拟模型的仪器,它一般通过点扫描方式获取真实物体表面上的一系列点集,通过对这些点集的插补便可形成物体的表面外形。三维打印机则是根据三维虚拟模型自动制作真实物体的仪器,其基本原理就是让软件程序将三维模型分解成若干个横断面,硬件设备使用树脂或石膏粉等材料将这些横断面一层一层地沉淀、堆积,最终形成真实物体。3D扫描仪

3364.4.3增强现实技术概述1.增强现实的概念增强现实技术(AugmentedReality,简称AR),是在虚拟现实技术的基础上发展起来的新兴研究领域,综合了计算机图形学、广电成像、融合显示、多传感器、图像处理、计算机视觉等多门学科,是一种利用计算机产生的附加信息对真实世界的景象增强或扩张的技术。增强现实技术包含了多媒体、三维建模、实时视频显示及控制、多传感器融合、实时跟踪及注册、场景融合等新技术与新手段。增强现实系统也是虚拟现实系统的一种,也被称作增强式虚拟现实系统。虚拟现实致力于完全打造沉浸式虚拟环境,而增强现实则是将虚拟资讯融入真实世界。

3372.增强现实技术的特点AR具有三个突出的特点:(1)真实世界和虚拟的信息集成AR将虚拟信息应用到真实世界中,二者叠加成一个画面,不仅展现了真实世界的信息,而且将虚拟的信息同时显示出来,两种信息相互补充、叠加。(2)具有实时交互性实时交互是指用户能够通过现实世界的信息比较及时的得到相应的反馈信息。(3)是在三维尺度空间中增添定位虚拟物体。增强现实中需要通过实时跟踪摄像机姿态,实时计算出摄像机影像位置及角度,定位出虚拟图像于真实场景中的注册位置,以实现虚拟世界与真实世界更自然的融合。

3384.4.4虚拟现实和增强现实的应用1.虚拟现实的应用(1)医疗VR在医学方面的应用具有十分重要的现实意义。在虚拟环境中,建立虚拟的人体模型,借助于跟踪球、HMD、感觉手套,可以学习了解人体内部各器官结构,对虚拟的人体模型进行手术等。

339(2)游戏/艺术/教育游戏:丰富的感觉能力与3D显示环境使得VR成为理想的视频游戏工具,VR在该方面发展最为迅猛。对于游戏的开发,角色扮演类、动作类、冒险解迷类、竞速赛车类的游戏,其先进的图像引擎丝毫不亚于目前的主流游戏引擎的图像表现效果,而且整合配套的动力学和AI系统更给游戏的开发提供了便利。艺术领域:VR所具有的临场参与感与交互能力可以将静态的艺术(如油画、雕刻等)转化为动态的,可以使观赏者更好地欣赏作者的思想艺术。另外,VR提高了艺术表现能力。同时,各种大型的文艺演出效果,也可能通过VR技术进行效果模拟。教育领域:主要是发挥其互动性和生动的表现效果,用于立体几何、物理化学等相关课件的模拟制作,解释一些复杂的系统抽象的概念如量子物理等。在相关专业的培训机构,虚拟现实技术能够提供学员更多的辅助,比如虚拟驾驶、各种交通规则的模拟,特种器械模拟操作、模拟装备等等。

340(3)应急推演对于具有一定危险性的行业(消防、电力、石油、矿产等)来说,定期执行应急推演是传统并有效的防患方式,但投入成本高,使得其不可能进行频繁性的执行。在军事与航天工业中,模拟训练一直是的一个重要课题。这些都为VR提供了广阔的应用前景。VR为应急演练或模拟训练提供了一种全新的模式,将事故现场模拟到虚拟场景中去,人为制造各种事故情况,组织参演人员做出正确响应。这样的推演大大降低了投入成本,提高了推演实训时间,从而保证了人们面对事故灾难时的应对技能,并且可以打破空间的限制方便的组织各地人员进行推演。

341(4)城市规划/地理交通VR技术对于政府在城市规划的工作中起到了举足轻重的作用。用VR技术不仅能十分直观的表现虚拟的城市环境,而且能很好地模拟飓风、火灾、水灾、地震等自然灾害的突发情况,排水系统,供电系统,道路交通,沟渠湖泊等也都一目了然。

3422.增强现实的应用(1)医疗辅助在最新的AR技术应用下,医生可以准确断定手术的位置,降低手术的风险,可以更好的提高手术的成功率。尤其是一些对手术刀操作有精确需求的外科手术,就更需要这样的辅助型设备了。最声名远播的微软HoloLens全息眼镜,医学研究人员可通过HoloLens查看人体器官、肌肉组织、人体骨骼的结构。例如,一个脊柱外科手术,AR技术的应用可以让一个螺丝更容易、更快、更安全地插入到脊椎。

343(2)电视电影节目以虚拟植入为主体的AR制作可以完成多种多样的节目需求,无论是在艺术效果上还是功能结构上,且在很大程度上弥补了画面中实景内容的不充分,丰富有效画面。在大量的节目需求和技术投入之下,虚拟植入已经被广泛地使用在了录播或直播节目当中,甚至和LED大屏幕一样成为了大小晚会和专题节目的标准配置,2017年央视春晚《清风》节目应用了大量虚拟植入技术。

344(3)广告营销AR技术在广告营销的应用非常多。例如,消费者可以通过AR技术,将想要选购的商品先叠加在真实的环境中进行试看,再决定是否购买。真实看到一件家居摆放在自己家里或者办公室里的样子。其中较具有代表性的有宜家推出的APP“家居指南”,如果用户有纸质版的家居指南,可以直接扫描对应的家具,没有的也可以先进入选择某款家具,选中后摄像头会自动打开呈现出现实画面,而被选择的家具也会被叠加到现实画面中,以供用户购买时进行参考。

3454.5区块链技术4.5.1区块链技术概述区块链(Blockchain)是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。

3464.5.2区块链的概念从科技层面来看,区块链涉及数学、密码学、互联网和计算机编程等很多科学技术问题。从应用视角来看,简单来说,区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。

3474.5.3区块链的类型公有区块链联合(行业)区块链私有区块链

3484.5.4区块链的特征去中心化开放性独立性安全性匿名性

3494.5.5区块链的架构模型

3504.5.6区块链的核心技术分布式账本非对称加密共识机制智能合约

3514.5.7区块链的应用金融领域物联网和物流领域公共服务领域数字版权领域保险领域公益领域

3524.6数字人民币4.6.1数字人民币的概念数字人民币(DigitalRMB),是由中国人民银行发行的数字形式的法定货币,由指定运营机构参与运营并向公众兑换,以广义账户体系为基础,支持银行账户松耦合功能,与纸钞硬币等价,具有价值特征和法偿性,支持可控匿名。

3534.6.2数字人民币发展历史2014年,中国人民银行成立专门团队,开始对数字货币发行框架、关键技术、发行流通环境及相关国际经验等问题进行专项研究。2017年末,中国人民银行组织部分商业银行和机构共同开展数字人民币体系研发。2020年4月19日,先行在中国深圳、苏州、“雄安新区”、成都及未来的冬奥场景进行内部封闭试点测试。2020年10月,深圳市人民政府近期联合人民银行开展了数字人民币红包试点。2020年12月,研究使用数字人民币进行跨境支付的技术测试,并作相应的技术准备2020年12月,苏州联合人民银行开展的数字人民币红包试点工作当日正式启动预约。2020年12月29日,北京市首个央行数字货币应用场景在丰台丽泽落地,数字人民币北京冬奥试点应用在北京地铁大兴机场线启动。2021年1月5日,上海交通大学医学院附属同仁医院员工食堂里,医生们正通过数字人民币“硬钱包”,实现点餐、消费、支付一站式体验。

3544.6.3数字人民币的基本理念法定货币双层运营体系以广义账户体系为基础支持银行账户松耦合其他个性设计

3554.6.4期待作用及价值意义1.期待作用(1)避免纸钞和硬币的缺点:印制发行成本高、携带不便,容易匿名、伪造,存在被用于洗钱、恐怖融资的风险。(2)满足人们一些正常的匿名支付需求,如小额支付。(3)极大节约造币所需各项成本。(4)新冠疫情之下,减少货币交易中的病毒传播机会。(5)支付宝、微信支付等电子支付方式已经成为一种公共产品或服务,一旦出现服务中断等极端情况,会对社会经济活动和群众生活产生非常大的影响。这就要求中国人民银行作为一个公共部门,要提供类似功能的工具和产品,作为相应公共产品的备份。

3562.价值意义法定数字货币的研发和应用,有利于高效地满足公众在数字经济条件下对法定货币的需求,提高零售支付的便捷性、安全性和防伪水平,助推中国数字经济加快发展。

357END谢谢!

358第5章大数据应用技术

359目录5.1大数据概述5.2大数据的获取5.3大数据存储5.4大数据处理与分析5.5大数据可视化

360物联网:产生数据物联网、云计算、大数据、AI关系云计算:存储和处理数据大数据:挖掘数据人工智能:分析数据,做出行动

3615.1.1大数据的发展背景半个世纪以来,随着计算机技术全面融入社会生活,信息爆炸已经积累到了一个开始引发变革的程度。它不仅使世界充斥着比以往更多的信息,而且其增长速度也在加快。互联网(社交、搜索、电商)、移动互联网(微博)、物联网(传感器,智慧地球)、车联网、GPS、医学影像、安全监控、金融(银行、股市、保险)、电信(通话、短信)都在疯狂产生着数据。5.1大数据概述

362数字地球根据最新预测,2020年全球数据产生量预计达到47ZB,到2035年,这一数字将达到2142ZB。1GB=2^30Bytes1TB=2^40Bytes1PB=2^50Bytes1EB=2^70Bytes1ZB=2^80Bytes

363大数据背后的驱动力美国政府认为大数据是“未来的钻石矿和新石油”,一个国家拥有数据的规模和运用数据的能力将成为综合国力的重要体现,对数据的占有和控制将成为国家间和企业间新的争夺焦点。全球著名管理咨询公司麦肯锡(McKinsey&Company)首先提出了“大数据时代”的到来并声称:“数据已经渗透到当今各行各业的职能领域,成为重要的生产因素。”2006年8月9日,Google首席执行官埃里克·施密特在搜索引擎大会上提出“云计算”全球著名咨询机构互联网数据中心(InternetDataCenter,IDC)做出的估测,人类社会产生的数据一直都在以每年50%的速度增长,也就是说,每两年数据量就会增加一倍,即已形成了“大数据摩尔定律”,这意味着人类在最近两年产生的数据量相当于之前产生的全部数据量之和。

364大数据诞生的历史2008BigData专刊IT企业研究报告科学研究“第四范式”2011-2015“十二五”规划2012美国重大研究计划2011DealingwithData专刊

3655.1.2大数据的基本概念1.大数据的定义“大数据”并不等同于“大规模数据”,那么何谓“大数据”呢?维基(Wiki)百科给出的大数据概念是:在信息技术中,“大数据”是指一些使用目前现有数据库管理工具或者传统数据处理应用很难处理的大型而复杂的数据集。其挑战包括采集、管理、存储、搜素、共享、分析和可视化;麦肯锡公司认为将数据规模超出传统数据库管理软件的获取存储管理,以及分析能力的数据集称为大数据;高德纳咨询公司(Gartner)则将大数据归纳为需要新处理模式才能增强决策力、洞察发现力和流程优化能力的海量高增长率和多样化的信息资产;徐宗本院士在第462次香山科学会议上的报告中,将大数据定义为不能够集中存储并且难以在可接受时间内分析处理,其中个体或部分数据呈现低价值性而数据整体呈现高价值的海量复杂数据集。复日大学朱扬勇教授提出,大数据本质上是数据交叉、方法交叉、知识交叉、领域交叉、学科交叉,从而产生新的科学研究方法、新的管理决策方法、新的经济增长方式、新的社会发展方式等。

3662.大数据产生的原因1)数据生产方式变得自动化。2)数据生产融入每个人的日常生活。3)图像和音频视频数据所占比例越来越大。4)网络技术的发展为数据的生产提供了极大的方便5)云计算概念的出现进一步促进了大数据的发展

3673.大数据的特征From3Vs,4Vs,5Vs,and6Vsbigdatadefinition

368大数据具备以下五个维度的特征(1)大体量(Volume)。需要采集、处理、传输的数据容量大,数据量可从数百TB到数百PB甚至EB的规模。(2)多样化(Variety)。大数据所处理的数据类型早已不是单一的文本数据或者结构化的数据库中的表,而是包括各种格式和形态的数据,数据结构种类多,复杂性高。(3)时效性(Velocity)。很多大数据需要在一定时间限度下得到及时处理,处理数据的效率决定企业的生命。(4)准确性(Veracity)。大数据处理的结果要保证一定的准确性。(5)大价值(Value)。大数据包含很多深度的价值,通过强大的机器学习和高级分析对数据进行“提纯”,能够带来巨大商业价值。

3695.1.3大数据应用经典案例从谷歌流感趋势看大数据的应用价值谷歌有一个名为“谷歌流感趋势”的工具,它通过跟踪搜索词相关数据来判断全美地区的流感情况(比如患者会搜索流感两个字)。近日,这个工具发出警告,全美的流感已经进入“紧张”级别。

3702.大数据在医疗行业的应用SetonHealthcare是采用IBM最新沃森技术医疗保健内容分析预测的首个客户。该技术允许企业找到大量病人相关的临床医疗信息,通过大数据处理,更好地分析病人的信息。在加拿大多伦多的一家医院,针对早产婴儿,每秒钟有超过3000次的数据读取。通过这些数据分析,医院能够提前知道哪些早产儿出现问题并且有针对性地采取措施,避免早产婴儿夭折。

3713.大数据在能源行业的应用在德国,为了鼓励利用太阳能,会在家庭安装太阳能,除了卖电给你,当你的太阳能有多余电的时候还可以买回来。通过电网每隔五分钟或十分钟收集一次数据,收集来的这些数据可以用来预测客户的用电习惯等,从而推断出在未来2~3个月时间里,整个电网大概需要多少电。有了这个预测后,就可以向发电或者供电企业购买一定数量的电。

3724.大数据在通信行业的应用XOCommunications通过使用IBMSPSS预测分析软件,减少了将近一半的客户流失率。XO现在可以预测客户的行为,发现行为趋势,并找出存在缺陷的环节,从而帮助公司及时采取措施,保留客户。此外,IBM新的Netezza网络分析加速器,将通过提供单个端到端网络、服务、客户分析视图的可扩展平台,帮助通信企业制定更科学、合理决策。

3735.大数据在零售业的应用我们的某个客户,是一家领先的专业时装零售商,通过当地的百货商店、网络及其邮购目录业务为客户提供服务。公司希望向客户提供差异化服务,如何定位公司的差异化,他们通过从Twitter和Facebook上收集社交信息,更深入的理解化妆品的营销模式,随后他们认识到必须保留两类有价值的客户:高消费者和高影响者。希望通过接受免费化妆服务,让用户进行口碑宣传,这是交易数据与交互数据的完美结合,为业务挑战提供了解决方案。

3745.1.4大数据处理的基本流程从数据分析全流程的角度,大数据技术主要包括数据采集与预处理、数据存储和管理、数据处理与分析、数据呈现等几个层面的内容

3751)数据采集与预处理利用ETL(Extract-Transform-Load)工具将分布的、异构数据源中的数据,如关系数据、平面数据文件等,抽取数据采集与预处理到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;也可以利用日志采集工具(如Flume、Kafka等)把实时采集的数据作为流计算系统的输入,进行实时处理分析。2)数据存储与管理利用分布式文件系统、数据仓库、关系数据库、NoSQL数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理。

3763)数据处理与分析利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析,数据分析可以用于决策支持、商业智能、推荐系统、预测系统等。4)数据呈现对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据。使用可视化技术,可以将处理的结果通过图形的方式直观地呈现给用户,标签云(TagCloud)、历史流(HistoryFlow)、空间信息流(SpatialInformationFlow)等是常用的可视化技术,用户可以根据自己的需求灵活地使用这些可视化技术;人机交互技术可以引导用户对数据进行逐步的分析,使用户参与到数据分析的过程中,使用户可以深刻地理解数据分析结果。

3775.2大数据的获取5.2.1大数据来源大量数据的产生是计算机技术和网络通信技术普及的必然结果,特别是近年来互联网、云计算、移动互联网、物联网及社交网络等新型信息技术的发展,使得数据产生来源更加丰富。大数据的产生1)企业内部及企业外延2)互联网及移动互联网3)物联网

3782.数据类型按照数据结构,数据可以分为结构化数据、半结构化数据和无结构的非结构化数据。

379结构化数据可以使用关系型数据库来表示和存储,如MySQL、Oracle、SQLServer等,表现二维表形式的数据。可以通过固有键值获取相应信息。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。结构化的数据的存储和排列是很有规律的,这对查询和修改等操作很有帮助。但是,显然,它的扩展性不好(比如,我希望增加一个字段)。SNOSNAMEDEPARTSEXBDATEHEIGHTA041司亚琦自动控制男1986/8/101.7C005赵书林计算机男1987/6/301.75C008陈丽红计算机女1986/8/201.62C011陈璐计算机女1987/5/171.62M038梁梅霞应用数学女1988/10/201.65R098陈思思管理工程男1986/5/161.8

380半结构化数据可以通过灵活的键值调整获取相应信息,且数据的格式不固定,如json,同一键值下存储的信息可能是数值型的,可能是文本型的,也可能是字典或者列表。常见的半结构数据有日志文件、XML文档、JSON文档、Email等。

381非结构化数据就是没有固定结构的数据,包含全部格式的办公文档、文本、图片、各类报表、图像和音频/视频信息等等。一般直接整体进行存储,而且一般存储为二进制的数据格式。

382按照生产主体,数据可以分为企业应用产生的少量数据、用户产生的大量数据(社交、电商等)、机器产生的巨量数据(应用服务器日志、传感器数据、图像和视频、RFID等)。按照数据作用的方式,数据可以分为交易数据和交互数据。

3835.2.2大数据采集目前获取大数据的方法有如下4种1)系统日志采集可以使用海量数据采集工具,用于系统日志采集,如Hadoop的Chukwa、Cloudera的Flume、Facebook的Scribe等2)互联网数据采集通过网络爬虫或网站公开API等方式从网站上获取数据信息,该方法可以把数据从网页中抽取出来,将其存储为统一的本地数据文件3)APP移动端数据采集APP是获取用户移动端数据的一种有效方法,APP中的SDK插件可以将用户使用APP的信息汇总给指定服务器,即便用户在没有访问时,也能获知用户终端的相关信息,包括安装应用的数量和类型等。4)与数据服务机构进行合作数据服务机构通常具备规范的数据共享和交易渠道,人们可以在平台上快速、明确地获取自己所需要的数据。

3845.2.3互联网数据抓取1.什么是网络爬虫网络爬虫有很多名字,例如,“网络蜘蛛”(WebSpider)、“蚂蚁”(Ant)、“自动检索工具”(AutomaticIndexer)。网络爬虫是一种“机器人程序”,其作用是自动采集所有它们可以到达的网页,并记录下这些网页的内容,以便其他程序进行后续处理。例如,搜索引擎可以对已爬取的网页进行分拣、归类,使用户可以更快地进行检索。

3852.网络爬虫类别一类叫作“通用爬虫”,搜索引擎背后的数据采集工作大多是由通用爬虫来做的。这种爬虫追求大的爬行覆盖范围,对于在网页中提取到的超链接会“照单全收”,能够爬取到尽可能多的网站,获取到各式各样的信息。如Googlebot、百度蜘蛛和ApacheNutch等另一类叫作“聚焦爬虫”,与通用爬虫不同的是,它会对提取到的超链接进行过滤,只对特定网站或者特定领域的网站进行爬取。这类爬虫的应用也很广泛,例如,可以在招聘网站上收集所有公司的信息,分析公司所在地分布状况和公司规模分布状况。如Hawk、WebScraper、GooSeeker、神箭手、八爪鱼等。当然如果有编程基础的话,也可以通过编写程序来开发符合自己要求的网络爬虫。

3865.2.4数据预处理获取数据后,一般要对原始数据进行清理、集成与变换等一系列数据预处理工作,然后才能达到获取数据价值的最低规范。数据预处理的常见方法有数据清洗、数据集成与数据变换。数据清洗(DataCleaning)是进行数据预处理的首要方法。其过程一般包括填补存在遗漏的数据值、平滑有噪声的数据、识别或除去异常值,并且解决数据不一致等问题。数据集成(DataIntegration)是指将多个不同数据源的数据合并在一起,形成一致的数据存储,例如,将不同数据库中的数据集成到一个数据库中进行存储。数据变换(DataTransformation)是指将数据转换或统一成适合于挖掘的形式,通常包括平滑处理、聚集处理、数据泛化处理、规格化、属性构造等方式。Python中的Pandas库功能强大,可以进行数据清洗、集成及变换等数据预处理操作。

3875.3大数据存储5.3.1数据库基础在人工方式管理的企业中,业务人员根据业务工作的需要,设计各种形式的票据,账簿和报表,如企业的合同、发票、入库单、出库单等,它们是企业存储、传输数据的载体,也是人工系统组织、管理企业数据的途径。建立信息系统后,企业的各类数据存放在计算机中,并通过专门的软件进行存取。在企业数据的输入、存储和按一定要求加工输出的这一企业数据处理过程中,必须解决如何按用户要求组织数据的逻辑存储结构,如何将逻辑存储结构转换成计算机物理存储结构,以及如何根据需要准确、迅速地存取数据等,这些问题都是数据库技术研究的主要内容。

388人工管理阶段文件系统阶段数据库系统阶段

389简单来说数据库(Database,简称DB)是存放数据的仓库,这个仓库按照一定的数据结构来组织、存储,我们可以通过数据库提供的多种方法来管理数据库里的数据。数据库是目前数据组织的最高形式,也是应用最广泛的数据组织的管理方式与技术。下图某学校数据库方式的信息系统1.数据库

390数据库具有以下特点:1)数据结构化数据结构化是数据库的主要特征之一。通过数据的结构化,可以大大降低系统数据的冗余度。2)数据共享性数据共享性是大量数据集成的结果。同一组数据可以服务于不同的应用要求,满足不同管理部门的处理业务。3)数据独立性在数据库系统中,数据独立性是指数据的结构与应用程序间相互独立,它包括逻辑独立性和物理独立性两个方面。以上是数据库的主要优点,按照不同的理解,数据库还有数据的完整性、一致性和安全性等优点。数据库的这些优点将弥补文件方式的不足。

3912.数据库管理系统数据库管理系统(DataBaseManagementSystem,简称DBMS)是位于用户与操作系统之间的一层数据管理软件。数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制。数据库管理系统使用户能方便地定义数据和操纵数据,并能够保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。DBMS的主要功能有:数据库定义,数据库操纵,数据库的运行管理,数据组织、存储与管理,数据库的保护,数据库的维护,以及通信。

3923.数据库系统数据库系统(DataBaseSystem,简称DBS)是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。

3931)硬件数据库系统的硬件部分包括CPU、内存、磁盘、磁带以及其他外部设备。2)软件数据库系统的软件部分包括如下内容:操作系统(OS)、数据库管理系统(DBMS)、应用于开发应用程序的具有数据库接口的高级语言及其编译系统、以DBMS为核心的应用开发工具、为某应用环境开发的数据库应用系统。3)人员管理、使用和开发数据库的人员主要有数据库管理员(DataBaseAdministrator,简称DBA)、系统分析员和数据库设计人员、应用程序员和最终用户。

3944.数据模型1)信息描述数据库系统是面向计算机的,而应用是面向现实世界的,两个世界存在着很大差异,要直接将现实世界中的语义映射到计算机世界是十分困难的,因此要引入信息世界和数据世界作为现实世界通向计算机世界的桥梁。从客观事物的物理状态到计算机内的数据,要经历现实世界、信息世界、数据世界和计算机世界四种状态的转换。(1)现实世界现实世界是指存在于人们头脑之外的客观世界,事物及其相互间联系就处在这个世界之中。(2)信息世界信息是现实世界中的客观事物在人们头脑中的反映。人的头脑对于这些事物经过认识、选择、描述之后进入信息世界。客观事物在信息世界中称为实体,反映事物间联系的是实体模型或概念模型。概念模型的表示方法很多,其中最为常用的是P.P.S.Chen于1976年提出的实体-联系方法(entity-relationship)。该方法用E-R图来描述现实世界的概念模型。

395E-R模型E-R模型有三个基本元素,即实体、实体之间的联系和属性,它们分别用矩形框、菱形框和椭圆形框来表示,并且将对应的名字填入框内以作标识,用无向边把实体与其属性连接起来,将参与联系的实体用线段连接,并标上联系的数量,如下图所示为学生选修课程的E-R图。其中实体间的联系有三种类型:一对一联系如果A中的每个实体至多和B中的一个实体有联系,反之亦然,那么A和B的联系称为“一对一联系”,记为“1:1”。一对多联系如果A中的每个实体与B中的任意个(零个或多个)实体有联系,而B中的每个实体至多与A中的一个实体有联系,则称A与B是“一对多联系”,记为“1:n”。多对多联系如果A中的每个实体与B中的任意个(零个或多个)实体有联系,反之亦然,那么称A与B的联系是“多对多联系”,记为“m:n”。

396(3)数据世界数据世界中研究的对象是数据,数据是对信息的符号化表示。它与信息世界之间存在对应关系。信息世界中的一个实体对应于数据世界里的一条记录。对应于属性的数据为数据项或字段;对应于实体集的数据称为文件;描述数据和数据之间关系的模型称为数据模型,它与信息世界中的实体-联系模型相对应。(4)计算机世界数据世界中的数据经过编码、加工后就进入计算机世界。在计算机世界中,数据用二进制编码表示。程序的任务之一就是在计算机所承认的二进制数与人们所习惯的数据表示法之间进行转换。因此,建立数据库系统的过程,实际上就是将现实世界与计算机世界紧密结合的过程。

3972)数据模型数据模型是对客观事物及其联系的数据化描述。在数据库系统中,基本的数据模型有四种:层次模型、网络模型、关系模型和面向对象模型。其中层次和网状模型统称为非关系模型。目前使用最多的是关系数据模型,因此。我们这里只介绍关系数据模型。关系数据模型或称关系模型,是目前最重要的一种数据模型。关系数据库就是采用关系模型作为数据的组织方式。关系数据库管理系统(RelationalDatabaseManagementSystem:RDBMS)就是管理关系数据库,并将数据逻辑组织的系统。(1)关系模型的数据结构关系数据模型源于数学,它把数据看成是二维表中的元素,而这个二维表就是关系。例如,管理学生基本信息的关系模型的形式如下表所示。学号姓名班级性别1442402034高潇雨轨14智能控制女1442402035朱涛轨14智能控制男1442404002严垚轨14车辆男表1

398学生登记表(S)选课成绩表(SC)CNOCNAMELHOURSEMESTERCC112软件工程60春CS202数据库45秋EE103控制工程60春ME234数学分析40秋MS211人工智能60秋SNOSNAMEDEPARTSEXBDATEHEIGHTA041司亚琦自动控制男1986/8/101.7C005赵书林计算机男1987/6/301.75C008陈丽红计算机女1986/8/201.62C011陈璐计算机女1987/5/171.62M038梁梅霞应用数学女1988/10/201.65R098陈思思管理工程男1986/5/161.8SNOCNOGRADEA041CC11281A041ME23478A041MS21195C005CC11279C005CS20262M038ME23473R098CS20266R098MS21182课程开设表(C)

399用关系(表格数据)表示实体和实体之间联系的模型称为关系数据模型。关系模型把数据看成是二维表中的元素,一张表就是一个关系(Relation)。表中的每一行称为一个元组(Tuple),它相当于一个记录值。表中的每一列是一个属性(Attribute)值集,属性的取值范围称为域(Domain),属性相当于数据项或字段,例如表1中有四个属性(学号,姓名,班级,性别)。表中的某个属性或者某几个属性,可以唯一确定一个元组,称为主码(PrimaryKey),也称为主键或主关键字。例如,表1所示的例子中,学号就是此学生表的主码,因为它可以唯一地确定一个学生。而表2所示的关系的主码就是(学号,课程号),因为一个学生可以修多门课程,而一门课程也可以有多个学生学,因此,只有(学号,课程号)一起才能共同确定一条记录。我们称由多个列共同组成的主码为复合主码。

400学号课程号成绩1442402034c01781442402034c02841442402035c01981442402035c02681442404002c0392元组中的一个属性值称之为分量。如果表格有n列,则称该关系为n元关系或关系模式,关系模式实际对应关系表的表头。关系模式一般表示为:关系名(属性1,属性2,…,属性n)。例如表1所示的学生表的关系模式为:学生(学号,姓名,班级,性别)表2

401关系一般满足如下性质:关系中的每一列属性都是不能再分的;一个关系中的各列都被指定一个相异的名字;各行相异,不允许重复;行、列的次序均无关;每个关系都有一个唯一标识各元组的主关键字,它可以是一个属性或属性组合。

402(2)关系模型的数据操作关系模型中的数据操作是基于集合的操作,操作对象和操作结果都是集合(或关系)数据查询用户可以查询关系数据库中的数据,包括一个关系内的查询及关系间的查询。数据删除数据删除的基本单位是一个关系内的元组,它的功能是将指定关系内的指定元组删除。数据插入数据插入仅对一个关系而言,在指定关系中插入一个或多个元组。数据修改数据修改是在一个关系中修改指定的元组与属性。

403(3)关系模型的数据完整性约束实体完整性约束(EntityIntegrityConstraint)实体完整性约束规定基本关系的所有主关键字对应的主属性都不能取空值,且取值唯一,通过主关键字我们可以区别不同的记录(行)。参照完整性约束(ReferenceIntegrityConstraint)限制一个表中的某列的取值受另一个表的某列的取值范围约束的特点就称为参照完整性。在关系数据库中用外码或外键来实现参照完整性。例如,我们只要将选课表中的“学号”定义为引用学生表的“学号”的外码,就可以保证选课表中的“学号”的取值在学生表的已有“学号”范围内。用户定义的完整性约束(UserdefinedIntegrityConstraint)用户定义的完整性实际上就是指明关系中属性的域,即限制关系中的属性的取值类型及取值范围,防止属性的值与应用语义矛盾。

4045.结构化查询语言(SQL)1)SQL概述人与人交互必须使用某种人类的自然语言,如英语、汉语和蒙语等。人与数据库交互就不能使用人类的自然语言了,而需要使用SQL(StructuredQueryLanguage),即结构化查询语言。人们使用SQL语言可以告诉具体的数据库系统要干什么工作,让其返回什么数据等。

405(1)SQL的历史SQL语言是20世纪70年代由Boyce和Chamberlin提出的。1979年,IBM公司第一个开发出SQL语言。20世纪80年代初,美国国家标准局(ANSI)开始着手制定SQL标准,并在1986年10月公布了最早的SQL标准。扩展的标准版本是1989年发表的SQL-89。1992年制定的版本SQL-92。1999年ISO发布的版本SQL-99。SQL标准几经修改和完善,其功能更加强大,但目前很多数据库系统只支持SQL-99的部分特征,而大部分数据库系统都能支持1992年制定的SQL-92。

406(2)SQL的特点具有综合统一性非过程化语言语言简洁,用户容易接受以一种语法结构提供两种使用方式面向集合的操作方式

4072)SQL语言的组成SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。可以完成数据库系统的所有操作。数据定义语言DDL(DataDefinitionLanguage):用来创建数据库中的各种对象-----表、视图、索引等。数据查询语言DQL(DataQueryLanguage):数据检索语句,用于从表中获取数据。数据操纵语言DML(DataManipulationLanguage):数据的插入、更新、删除。数据控制语言DCL(DataControlLanguage):用来授予或回收访问数据库的某种特权等。

4083)SQL的执行环境SQL语言提供了两种不同的执行方式:一种是联机交互式执行,就是用户在某数据库系统的SQL执行工具中把SQL作为独立语言交互式执行,例如,在MySQL命令行中、SQLServer的查询分析器中、Oracle的SQL*Plus中使用;另一种执行方式是将SQL语言融入到某种高级语言(例如,VB、VC、Java、Python、PHP等)中使用,这样便可利用高级语言的过程结构弥补SQL语言在实现复杂应用方面的不足。

4094)SQL语言的内容为了介绍SQL语言的基本用法,这里使用“教学管理系统”数据库中的三张基本表作为例子来讲解SQL语言基本使用方法。下面例子所涉及的表是:Student(sid,sname,class,sex,birthday)学生表(学号,姓名,所在班级,性别,出生日期)Course(cid,cname,credit)课程表(课程号,课程名,学分)Grade(sid,cid,score)成绩表(学号,课程号,成绩)

410

411书中SQL语句的运行环境:MySQL5.5MySQL是一个功能强大、方便灵活的关系型数据库管理系统。MySQL因体积小、速度快、总体拥有成本低等优点,尤其是开放源码这一特点,成为目前最流行的数据库管理系统之一。在数据库世界里,关于MySQL的新闻一直萦绕在程序员的耳边。2008年,Sun公司以10亿美元收购了MySQL,标志着MySQL数据库已经成为世界上的主流数据库之一。2010年,Oracle公司收购了Sun公司,标志着MySQL数据库成为Oracle公司的主流数据库产品。随着MySQL数据库的逐渐成熟,Google公司决定使用该数据库,国内很多大型公司也开始使用MySQL数据库,如网易、新浪等。

412MySQL是基于客户端/服务器的数据库管理系统客户端软件和服务器软件可能安装在两台计算机或一台计算机上。不管在不在相同的计算机上,客户端软件和服务器软件都可以进行通信,从而实现数据的相关操作。①服务器软件为管理MySQL数据库的软件,可以在本地计算机上或者具有访问权限的远程服务器上安装该软件。②客户端软件为可以操作MySQL服务器的软件,通常为官方客户端MySQLCommandLineClient、CMD命令窗口或第三方图形化工具。

413MySQL的各种版本社区版可以自由下载而且完全免费,但是官方不提供任何技术支持,适用于大多数普通用户;企业版不仅不能自由下载而且收费,但是该版本提供了更多的功能,享受完备的技术支持,适用于对数据库的功能和可靠性要求比较高的企业客户MySQL的版本号有GA、RC、Alpha和Bean,它们的含义分别如下。GA(GeneralAvailability):官方推荐广泛使用的版本。RC(ReleaseCandidate):候选版本,最接近正式版。Alpha和Bean:测试版本,其中Alpha是内测版本,Bean是公测版本。

414MySQL数据库存储引擎MySQL常用MyISAM、InnoDB和Memory这三种存储引擎。MyISAM存储引擎:该存储引擎不支持事务,也不支持外键,所以访问速度比较快。对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。InnoDB存储引擎:该存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比MyISAM存储引擎占用更多的磁盘空间。如果需要进行频繁的更新、删除操作,同时对事务的完整性要求比较高,需要实现并发控制,则适合使用该存储引擎。Memory存储引擎:该存储引擎使用内存来存储数据,因此数据访问速度快,但是安全上没有保障。如果应用中涉及数据量比较小,需要进行快速访问,则适合使用该存储引擎。

415(1)表的创建(CREATETABLE)SQL语言中创建表将用CREATETABLE语句来实现。CREATETABLE语句可以定义各种表的结构、约束以及继承等内容。CREATETABLE将在当前数据库创建一个新的、初始为空的数据表,该表将由发出此命令的用户所有。下面是CREATETABLE语句的基本语法格式。CREATETABLE<表名>(<列名1><数据类型>[NOTNULL][DEFAULT<默认值>],[<列名2><数据类型>[NOTNULL][DEFAULT<默认值>],……<列名n><数据类型>……);具体说明如下:表名:给出要创建的基本表的名称;列名:给出列名或字段名;NOTNULL:为可选项,如果在某列名或字段名后加上该项,则向表添加数据时,必须给该列输入内容,即不能为空;DEFAULT<默认值>:为可选项,如果在某列名或字段名后加上该项,则向表添加数据时,如果不向该列添加数据,系统就会自动用默认值填充该列。

416【例5.1】在ems数据库中创建一个Student表,设置字段为学号(sid)、姓名(sname)、班级(clas)和性别(sex),4个字段都不能为空,学号(sid)为主键。其创建语句如下所示:CREATETABLEStudent(sidCHAR(10)NOTNULLPRIMARYKEY,snameVARCHAR(30)NOTNULL,classVARCHAR(30)NOTNULL,sexCHAR(2)NOTNULL)ENGINE=INNODB;假设在MySQL数据库中已经创建了名字为“ems”的数据库,下面通过两个例题来介绍CREATETABLE语句的使用方法。

417【例5.2】在ems数据库中创建Grade表,并设置“学号(sid)”和“课号(cid)”两个字段为联合主键,分别为Student和Course表的外键。CREATETABLEGrade(sidCHAR(10)NOTNULL,cidCHAR(10)NOTNULL,scoreSMALLINTNOTNULL,CONSTRAINTpk_sid_cidPRIMARYKEY(sid,cid),CONSTRAINTfk_StudentGradeFOREIGNKEY(sid)REFERENCESStudent(sid),CONSTRAINTfk_CourseGradeFOREIGNKEY(cid)REFERENCESCourse(cid))ENGINE=INNODB;

418(2)表结构的修改(ALTERTABLE)在数据库操作时,可能需要更改表结构,使用ALTERTABLE语句可以修改字段的类型和长度,可以添加新字段,还可以删除不需要的字段等。下面分别介绍使用ALTERTABLE修改字段、添加字段和删除字段的语法格式。ALTERTABLE<表名>[ADD<新字段名>数据类型[完整性约束]][DROP[完整性约束]][ALTERCOLUMN<列名><数据类型>;其中<表名>是要修改的基本表,ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的完整性约束条件,ALTERCDLUMN子句用于修改原有的列定义。

419【例5.3】在Student表中,增加新字段“出生日期”,该字段的类型为日期型。其SQL语句如下所示。ALTERTABLEStudentADDbirthdayDATE;(3)删除表(DROPTABLE)当不再需要数据库中的某表时,就应当删除该表,释放该表所占有的资源。在SQL语言中,删除数据表使用DROPTABLE语句。

420例如,下面的语句用于删除Student表。DROPTABLEStudent;说明:有时,在使用DROPTABLE语句删除数据表时会出现删除失败的情况。导致删除失败的绝大多数原因是该表可能与数据库中的其他表存在联系。此时,应当先解除表之间的联系,然后再使用DROPTABLE语句删除表。例如使用下面SQL语句就可以删除例5.2中Grade表和Student表之间的联系。ALTERTABLEgradeDROPFOREIGNKEYfk_StudentGrade;

421(4)表的查询(SELECT)一条SELECT语句可以很简单,也可以很复杂。一个较复杂的查询操作可以使用多种方法完成,即SELECT语句的编写方法也是灵活多样的,就像一道数学题有多种解法一样,所以SELECT语句没有绝对的固定格式。最基本的语法格式SQL语言中的SELECT查询语句用来从数据表中查询数据,其完整的语法格式由一系列的可选子句组成。下面首先介绍SELECT语句最基本的语法格式。SELECT*FROM<表名>

422具体说明如下:SELECT关键字后的“*”,代表查询数据表中的所有(字段)的内容。在这个位置也可以指定要查询的字段名列表。FROM关键字后的<表名>,指明要从哪个表查询数据,可以是一个表,也可以是多个表,多个表用逗号隔开。所有SELECT语句必须有SELECT子句和FROM子句,书写时可以将两个子句写在一行中。【例5.4】查询Student数据表中的所有内容。SELECT*FROMStudent【例5.5】查询Student数据表中的学号、姓名、性别字段。SELECTsid,sname,sexFROMStudent

423带有主要子句的语法格式前面介绍了SELECT语句最基本的语法格式,实际上SELECT语句的完整语法格式要比其复杂得多。下面将经常用到的主要子句的语法格式归纳如下。SELECT[DISTINCT|ALL]<目标列表达式>[,<目标列表达式>]…FROM<表名>[WHERE<条件表达式>][GROUPBY<列名>][HAVING<条件表达式>][ORDERBY<列名>[ASC|DESC]]具体说明如下:SELECT子句:必选子句。可选关键字DISTINCT用于去除查询结果集中的重复值所在的记录;关键字ALL用于返回查询结果集中的全部记录,它是默认的关键字,即当没有任何关键字时返回全部记录。目标列表达式为星号(*),或者用逗号分隔的字段名列表,或者引用字段名的表达式,或者其他表达式(常量或函数)。该子句决定了结果集中应该有什么字段。

424FROM子句:必选子句。其中表名可以是一个基本表名称,或者一个视图名称,或者为用逗号分隔的基本表名称列表,或者为视图名列表,或者为基本表名和视图名混合列表。该子句决定了要从哪个(哪些)数据源查询数据。WHERE子句:可选子句。该子句用于指定查询条件,DBMS将满足条件的行显示出来(或者添加到结果集中)。GROUPBY子句:可选子句。其中列名为一个字段名,或者用逗号分隔的字段名列表。该子句用于按HAVING条件表达式分组(分类)查询到的数据。ORDERBY子句:可选子句。该子句用于按字段名排序查询结果。如果其后有ASC(默认值),则按升序排序结果;如果其后有DESC,则按降序排序结果。如果没有该子句,查询结果将以添加记录时的顺序显示。注意:如果SELECT语句中有ORDERBY子句,则必须将其放在所有子句的后面。

425【例5.6】从Student表中查询所有学生的学号、姓名、班级和出生日期,并按出生日期排序。SELECTsid,sname,class,birthdayFROMStudentORDERBYbirthday;【例5.7】从Course表中查询所有内容。要求将查询结果按照学分降序排序。SELECT*FROMCourseORDERBYcreditDESC;【例5.8】从Course表中查询所有内容。要求将查询结果按照学分降序排序,当学分相同时按照课号升序排序SELECT*FROMCourseORDERBYcreditDESC,cid;【例5.9】查询选修了课程的学生学号SELECTdistinctsidFROMGrade

426为了增强查询功能,在查询语句中可以使用SQL提供的内置函数,这里列出几个常的函数:COUNT(*)统计查询结果中的记录个数COUNT(<列名>)统计查询结果中某列值的个数MAX(<列名>)取字段最大值MIN(<列名>)取字段最小值SUM(<列名>)计算字段的总合AVG(<列名>)取字段平均值NOW()返回当前时间(完整时间,包括年月日小时分秒)YEAR(<日期型数据>)返回某个日期中的年份

427【例5.10】计算c01号课程的学生平均成绩。SELECTAVG(score)FROMGradeWHEREcid='c01';【例5.11】从Student表中查询学生的姓名、出生日期和年龄,并按年龄降序排序记录。SELECTsname,birthday,YEAR(NOW())-YEAR(birthday)AS年龄FROMStudentORDERBY3DESC;

428条件查询如果要使用WHERE子句,则必须学会编写条件表达式。条件表达式其实是关系表达式、逻辑(布尔)表达式和几个SQL特殊条件表达式的统称。条件表达式只有真(True)和假(False)两种值。在学习编写条件表达式之前,首先应当了解条件运算符。SQL语言中常使用的条件运算符有下面一些:比较运算符:=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于),<>(不等于)逻辑(布尔)运算符:NOT(非),AND(与),OR(或)确定范围:BETWEENAND(在某个范围内),NOTBETWEENAND(不在某个范围内)确定集合:IN(在某个集合中),NOTIN(不在某个集合中)字符匹配:LIKE(与某种模式匹配,其中“*”匹配任何长度,“?”匹配一个字符),NOTLIKE(不与某种模式匹配)空值:ISNULL(是NULL值),ISNOTNULL(不是NULL值)

429【例5.12】从Course表中,查询所有4学分的课程信息。SELECT*FROMCourseWHEREcredit=4;【例5.13】从Student表中,查询名叫“林强”的学生。SELECT*FROMStudentWHEREsname='林强'【例5.14】从Student表中,查询出生日期大于“1996-01-01”的学生。SELECT*FROMStudentWHEREbirthday>'1996-01-01';【补充】查询出生日期为空的学生学号、姓名。SELECTsid,snameFROMStudentWHEREbirthdayisNull有时需要查询某个范围内的数据,此时可以在WHERE子句中使用BETWEEN运算符,该运算符需要两个值,即范围的开始值和结束值。【例5.15】从Grade表中,查询考试成绩在70~80分之间的所有学生的学号、课程号和成绩。SELECTsid,cid,scoreFROMGradeWHEREscoreBETWEEN70AND80;

430【例5.16】从Student表中,查询1996年1月1日~1997年1月1日之间出生的学生姓名、出生日期和所属班级。SELECTsnameas姓名,birthdayas出生日期,classas所属班级FROMStudentWHEREbirthdayBETWEEN'1996-01-01'AND'1997-01-01';【例5.17】从Student表中查询“轨14车辆”班中的所有女生,并将结果按学号升序排序。SELECT*FROMStudentWHEREclass='轨14车辆'ANDsex='女'ORDERBYsid;【例5.18】从Course表中查询学分为2、3、4的课程的信息,并按学分降序、课号升序排序。SELECT*FROMCourseWHEREcreditIN(2,3,4)ORDERBYcreditDESC,cid;

431使用LIKE运算符和通配符可以对表进行模糊查询,即仅仅使用查询内容的一部分查询数据库中存储的数据。当然,LIKE运算符也可以单独使用,单独使用时,其功能与等于运算符(=)相同。不过,需要注意的是LIKE运算符只支持字符型数据。下面的例题演示了LIKE运算符的使用方法,因为没有使用通配符,实际上没有什么太大意义,只是演示了使用方法而已。【例5.19】从Student表中查询“轨14车辆”班中所有学生的信息,并按学号升序排序。SELECT*FROMStudentWHEREclassLIKE'轨14车辆'ORDERBYsid;下面的例题演示了结合使用“%”和LIKE运算符,实现模糊查询功能的具体方法。【例5.20】从Student表中,查询所有姓“张”的学生信息。SELECT*FROMStudentWHEREsnameLIKE'张%';SELECT*FROMStudentWHEREsnameLIKE'%志%';//姓名中包含“志”的学生信息

432【例5.21】查询每门课程的课程号、平均成绩。SELECTcid,AVG(score)FROMGradeGROUPBYcidSELECTcid,ROUND(AVG(score))FROMGradeGROUPBYcid//ROUND是四舍五入函数SELECTcid,ROUND(AVG(score),1)FROMGradeGROUPBYcid//保留小数点后1位【例5.22】查询平均分大于等于80的学生学号、平均成绩。SELECTsid,AVG(score)FROMGradeGROUPBYsidHAVINGAVG(score)>=80【例5.23】查询平均分(不包含c01课程)大于等于80的学生学号、平均成绩,并按平均成绩降序排序。SELECTsid,AVG(score)FROMGradeWHEREcid<>'c01'GROUPBYsidHAVINGAVG(score)>=80ORDERBY2DESC

433需要注意having和where的用法区别:having只能用在groupby之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。where肯定在groupby之前where后的条件表达式里不允许使用聚合函数,而having可以。当一个查询语句同时出现了where,groupby,having,orderby的时候,执行顺序和编写顺序是:执行where对全表数据做筛选,返回第1个结果集。针对第1个结果集使用groupby分组,返回第2个结果集。针对第2个结果集中的每1组数据执行select,有几组就执行几次,返回第3个结果集。针对第3个结集执行having进行筛选,返回第4个结果集。针对第4个结果集排序。

434连接查询前面的查询都是针对一个表进行的。若一个查询同时涉及两个以上的表,则称之为连接查询。连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、外连接查询和复合条件连接查询等。连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词,连接条件一般由连接运算符(比较运算符)构成,当连接运算符为“=”时,称为等值连接,使用其他运算符称为非等值连接。【例5.24】查询每个学生的基本信息和所选课程情况。SELECTStudent.*,Grade.*FROMStudent,GradeWHEREStudent.sid=Grade.sid;

435若在等值连接中,把目标列中重复的属性列去掉,则为自然连接。【例5.25】对例5.24用自然连接完成查询。SELECTStudent.sid,sname,class,sex,birthday,cid,scoreFROMStudent,GradeWHEREStudent.sid=Grade.sid;在通常的连接操作中,只有满足连接条件的记录才能作为结果输出。但在上例中,由于一些学生并没有选课,所以在Grade表中没有相应的记录,造成Student表中这些记录在连接时被舍弃了。有时希望以Student表为主体列出每个学生的基本情况及其选课情况。若某个学生没有选课,仍想把这些学生的记录保存在结果关系中,而在Grade表的属性上填空值,这时就需要使用外连接。外连接又分为左连接(LEFTJOIN)和右连接(RIGHTJOIN)。左连接列出左边关系(如本例Student)中所有的记录,右连接列出右边关系(Grade)中所有的记录。

436【例5.26】使用左连接改写例5.25SELECTStudent.sid,sname,class,sex,birthday,cid,scoreFROMStudentLEFTJOINGradeONStudent.sid=Grade.sid;除了外连接之外,还有内连接(INNERJOIN),只返回两个表中连接字段相等的行。【例5.27】使用INNERJOIN改写例5.25SELECTStudent.sid,sname,class,sex,birthday,cid,scoreFROMStudentINNERJOINGradeONStudent.sid=Grade.sid;结果和等值连接相同。

437上面各个连接查询中,WHERE子句中只有一个条件,即连接谓词。WHERE子句中可以有多个连接条件,称为复合条件连接。【例5.28】查询选修了“c01”课程且成绩在80分以上的所有学生SELECTStudent.sid,snameFROMStudent,GradeWHEREStudent.sid=Grade.sidANDGrade.cid='c01'ANDGrade.score>80;连接操作除了可以是两表连接、一个表与其自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接。【例5.29】查询每个学生的学号、姓名、选修的课程名及成绩。SELECTStudent.sid,sname,cname,scoreFROMStudent,Grade,CourseWHEREStudent.sid=Grade.sidANDGrade.cid=Course.cid;

438嵌套查询在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。【例5.30】查询选修了c02号课程的学生姓名。SELECTsnameFROMStudentWHEREsidin(SELECTsidFROMGradeWHEREcid='c02')等价于SELECTsnameFROMStudent,GradeWHEREGrade.sid=Student.sidANDGrade.cid='c02'

439【例5.31】查询平均分大于等于所有学生平均分的学生学号、平均成绩,并按平均成绩降序排序。SELECTsid,AVG(score)FROMGradeGROUPBYsidHAVINGAVG(score)>=(SELECTAVG(score)FROMGrade)ORDERBY2DESC

440(5)插入语句(INSERT)插入记录的语句格式为INSERTINTO<表名>[(<列名1>[,<列名2>,...])]VALUES(<常量1>[,<常量2>,...])其功能是将新记录插人指定表中。其中新记录的属性列1的值为常量1,属性列2的值为常量2…,如果INTO子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值。【例5.32】将一个新学生记录(‘1442405036’,‘汪影’,‘轨14建环与能源工程’,‘女’,1996/5/7)插入到Student表中。INSERTINTOStudentVALUES('1442405036','汪影','轨14建环与能源工程','女','1996/5/7');

441(6)修改语句(UPDATE)修改操作又称为更新操作,其语句的一般格式为UPDATE〈表名〉SET列名1=常量表达式1[,列名2=常量表达式2...]WHERE<条件表达式>[AND|OR<条件表达式>...]【例5.33】将Course表中的“数据库技术”这门课的学分修改为4UPDATECourseSETcredit=4WHEREcname='数据库技术';

442(7)删除语句(DELETE)删除语句的一般格式为DELETEFROM〈表名〉[WHERE<条件表达式>[AND|OR<条件表达式>...]]【例5.31】从Grade表中删除“1442402034”同学的“c01”课程的成绩记录DELETEFROMGradeWHEREsid='1442402034'andcid='c01';

4436.数据库设计数据库设计目前一般采用生命周期(LifeCycle)法,即将整个数据库应用系统的开发分解成目标独立的几步:需求分析,概念结构设计,逻辑结构设计,物理结构设计。

4447.数据仓库数据仓库(DataWarehouse)有多种定义,很难提出一种严格的定义。最广义的说法是数据仓库是一个数据库,它与企业的操作数据库分别维护。数据仓库系统要集成各种应用系统,为历史数据分析提供统一的平台,并支持决策信息处理。著名的数据仓库专家W.H.Inmon在其著作《BuildingtheDataWarehouse》中对数据仓库作了如下描述:“数据仓库是一个面向主题的、集成的、随时间变化的、相对稳定的数据集合,用于支持管理决策。”该定义将数据仓库与其他数据存储系统(如关系数据库系统和文件系统)相区别。对于数据仓库的概念可以从两个层次予以理解。首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,数据仓库是对多个异构的数据源的有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。

4458.分布式数据库系统分布式数据库是指利用高速计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。分布式数据库系统(DDBS)包含分布式数据库管理系统(DDBMS)和分布式数据库(DDB)。在分布式数据库系统中,一个应用程序可以对数据库进行透明操作,数据库中的数据分别在不同的局部数据库中存储、由不同的DBMS进行管理、在不同的机器上运行、由不同的操作系统支持、被不同的通信网络连接在一起。

4465.3.2关系型数据库关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。

447常用的关系型数据库产品有:1)Oracle数据库Oracle数据库系统是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(Client/Server)或B/S体系结构的数据库之一。Oracle数据库是目前世界上使用最为广泛的数据库管理系统,2)MySQL数据库MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。3)SQLServer数据库SQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。4)PostgreSQL数据库PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的BSD风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如MySQL和Firebird),和专有系统(比如Oracle、Sybase、IBM的DB2和MicrosoftSQLServer)之外的另一种选择。5)Access数据库MicrosoftOfficeAccess是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。

4485.3.3非关系型数据库1.从关系型数据库到非关系型数据库传统的关系数据库可以较好地支持结构化数据存储和管理,它以完善的关系代数理论作为基础,具有严格的标准,支持事务ACID特性,借助索引机制可以实现高效的查询。但是,在大数据时代,数据类型繁多,包括结构化数据和各种非结构化数据,其中非结构化数据的比例更是高达80%以上。关系数据库已经无法满足各种类型的非结构化数据的大规模存储需求。

4492.非关系型数据库的定义非关系型数据库,又被称为NoSQL(NotOnlySQL),意为不仅仅是SQL(StructuredQueryLanguage,结构化查询语言)3.NoSQL简介NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称。它所采用的数据模型并非传统关系数据库的关系模型,而是类似键/值、列族、文档等非关系模型。NoSQL数据库没有固定的表结构,通常也不存在连接操作,也没有严格遵守ACID约束。因此,与关系数据库相比,NoSQL具有灵活的水平可扩展性,可以支持海量数据存储。

4504.NoSQL的种类NoSQL数据库虽然数量众多,但是归结起来,典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图数据库。①键值存储数据库(Key-ValueDatabase)相关产品:Memcached、Risk、Redis、SimpleDB、Chordless、Scalaris②列存储(Column-Oriented)数据库相关产品:Cassandra、HBase、BigTable、Hadoopdb、GreenPlum、PNUTS。③面向文档(Document-Oriented)数据库相关产品:MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Perservere、Jackrabbit。④图形数据库相关产品:Neo4J、InforGrid、Orientdb、InfiniteGraph、Graphdb

4515.从NoSQL到NewSQL数据库NoSQL数据库可以提供良好的扩展性和灵活性,很好地弥补了传统关系数据库的缺陷,较好地满足了Web2.0应用的需求。但是,NoSQL数据库也存在自己的天生不足之处。由于采用非关系数据模型,因此它不具备高度结构化查询等特性,查询效率尤其是复杂查询方面不如关系数据库,而且不支持事务ACID四性。NewSQL是对各种新的可扩展、高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。目前,具有代表性的NewSQL数据库主要包括Spanner、Clustrix、Geniedb、Schooner、VoltDB、Rethinkdb、Scaledb、Akiban、CodeFutures等。此外,还有一些在云端提供的NewSQL数据库,包括AmazonRDS、MicrosoftSQLAzure等。

4525.3.4大数据存储技术简介大数据的出现,必将颠覆传统的数据管理方式。在数据来源、数据处理方式和数据思维等方面都会对其带来革命性的变化。必须清楚的是,从数据库(DB)到大数据(BD),不仅仅是规模的变大,而是随着互联网、云计算、移动和物联网的迅猛发展。无所不在的移动设备、RFID、无线传感器每分每秒都在产生数据,数以亿计用户的互联网服务时时刻刻在产生巨量的交互,要处理的数据量实在是太大、增长太快了,而业务需求和竞争压力对数据处理的实时性、有效性又提出了更高要求,传统的常规技术手段根本无法应付。在这种情况下,技术人员纷纷研发和采用了一批新技术,主要包括分布式文件系统、分布式数据库、云数据库等大数据存储方案。

4531.分布式文件系统HDFS大数据时代必须解决海量数据的高效存储问题,为此,谷歌开发了分布式文件系统(GoogleFileSystem,GFS),通过网络实现文件在多台机器上的分布式存储,较好地满足了大规模数据存储的需求。Hadoop分布式文件系统(HadoopDistributedFileSystem,HDFS)是针对GFS的开源实现,它是Hadoop两大核心组成部分之一,提供了在廉价服务器集群中进行大规模分布式文件存储的能力。HDFS具有很好的容错能力,并且廉价的硬件设备,因此可以以较低的成本利用现有机器实现大流量和大数据量的读写。

4542.分布式数据库HbaseHBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌Bigtable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。下图描述了Hadoop生态系统中HBase与其他部分的关系。

4553.云数据库云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易,同时也虚拟化了许多后端功能。云数据库具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。在云数据库中,所有数据库功能都是在云端提供的,客户端可以通过网络远程使用云数据库提供的服务。

4565.4大数据处理与分析大数据的数据规模极大,数据结构极其复杂,为了提高大数据处理的效率,需要使用大数据并行计算模型和框架来支撑大数据的计算,而大数据的分析主要依赖数据挖掘、机器学习等技术。由于大数据处理和分析技术非常复杂,对实验硬件设备要求非常高。限于实验环境和篇幅,本书对于大数据处理和分析只做简单的介绍,不涉及具体处理技术。在简单介绍大数据处理与分析相关内容后,主要介绍Python编程基础以及利用Pandas实现对数据的处理及分析。

4575.4.1大数据处理与分析简介1.大数据计算模式大数据计算模式,是指根据大数据的不同数据特征和计算特征,从多样性的大数据计算问题和需求中提炼并建立的各种高层抽象和模型。目前主要的大数据计算模式有数据查询分析计算系统、批处理系统、流式计算系统、选代计算系统、图计算系统和内存计算系统。

4582.大数据分析大数据时代的分析技术主要有统计分析、数据挖掘、机器学习、可视化分析等技术。统计分析是基于统计理论,运用数学方式,建立数学模型,对通过调查获取的各种数据及资料进行数理统计和分析,形成定量的结论。数据挖掘可以认为是发现大数据集中数据模式的一种计算过程。许多数据挖掘算法已经在人工智能、机器学习、模式识别、统计和数据库领域得到了应用。10大数据挖掘算法,包括C4.5、k-means、SVM、Apriori、EM、PageRank、AdaBoost、kNN、朴素贝叶斯和CART,覆盖了分类、聚类、回归和统计学习等方向。

459机器学习是一门研究机器获取新知识和新技能,并识别现有知识的学问,其理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法从数据中自动分析获得规律,并利用规律对未知数据进行预测。利用可视化技术,实时呈现当前分析结果,引导用户参与分析过程,根据用户反馈信息执行后续分析操作,完成用户与分析算法的全程交互,实现数据分析算法与用户领域知识的完合结合。

4605.4.2Python编程基础0.计算思维和程序设计基础1)计算思维的概念随着计算机的日益“强大”,它在很多应用领域中所表现出的智能也日益突出,成为人脑的延伸。与此同时,计算机在不断强大和普及的过程中,反过来对人类的学习、工作和生活都产生了深远的影响,同时也大大增强了人类的思维能力和认识能力。要让计算机更好地为人类服务,我们就应该要懂得计算机的工作方式和思维形式,把我们日常事务规范得更“计算机”一些。只有我们让要求解问题的空间和计算机空间相一致,才能更容易、高效率的让计算机为人类服务。计算思维是人的思维,是人接受了计算机的工作方式和思维形式之后,顺应计算机特点的一种思维方式。

4612006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(JeannetteM.Wing)教授在世界计算机权威期刊《CommunicationsoftheACM》杂志上给出的计算思维(ComputationalThinking)的定义为:“计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。”

462国际教育技术协会(ISTE)和计算机科学教师协会(CSTA)在2011年给计算思维的定义为:计算思维是一个问题解决的过程,该过程包括以下特点:1)制定问题,并能够利用计算机和其他工具来帮助解决该问题。2)要符合逻辑地组织和分析数据。3)要通过抽象(如模型、仿真等)再现数据。4)通过算法思想(一系列有序的步骤)支持自动化的解决方案。5)分析可能的解决方案,找到最有效的方案,并且有效结合这些步骤和资源。6)将该问题的求解过程进行推广并移植到更广泛的问题中。

4632)计算思维与算法使用计算思维解决问题的一般步骤:问题分析(理解问题)→通过数学建模设计相应算法(抽象)→编程实现→得到答案计算思维的本质是抽象(Abstract)和自动化(Automation)。它反映了计算的根本问题,即什么能被有效的自动执行。算法(Algorithm)就是对基于计算思维的解决问题的方法的描述。它通常由一系列操作步骤组成,通过这些步骤的自动执行可以解决指定的问题。也就是说,通过一定规范的输入,人或计算机自动执行这一系列操作步骤即算法,在有限时间内可获得所要求的输出。

464【例】已知一矩形的长和宽,描述求矩形面积的算法#1.定义三个变量x,y,s;#2.通过键盘输入矩形的长并赋值给x;#3.通过键盘输入矩形的宽并赋值给y;#4.将x*y赋值给s;#5.在屏幕输出s的值;上例中的x、y、s为矩形长、宽、面积的符号化抽象,依次执行算法#2~#5行的操作步骤,即可求得矩形的面积并输出,这些操作步骤就是求矩形面积的一种算法。

4652)计算思维与算法(1)算法的基本特征解决不同的问题往往需要不同的算法,即使解决相同的问题也可能有多种算法。虽然算法千变万化,但所有算法一般应具有以下五个基本特征:1)有穷性(Finiteness)算法的有穷性是指算法必须能在执行有限个步骤之后终止;2)确切性(Definiteness)算法的每一步骤必须有确切的定义;3)输入项(Input)一个算法有0个或多个输入,以取得运算对象的初始情况,所谓0个输入是指算法本身定出了算法执行的初始条件;4)输出项(Output)一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是无意义的;5)可行性(Effectiveness)算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,每个计算步骤都可以在有限时间内完成(也称之为有效性)。

466(2)算法的要素1)数据对象的运算和操作算法中用到的基本运算和操作主要有一下四类:①算术运算:加减乘除等运算②逻辑运算:或、且、非等运算③关系运算:大于、小于、等于、不等于等运算④数据传输:输入、输出、赋值等运算2)算法的控制结构一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。一个算法一般都可以有顺序、选择、循环三种结构组成。

467(3)算法的描述描述算法的方法有多种,常用的有自然语言、结构化流程图、伪代码和PAD图等。例6.1中算法的描述即采用的自然语言,但描述算法最常用的是流程图。符号名称图形功能起止框表示算法的开始和结束处理框表示算法中一般的处理过程,如计算赋值等判断框对一个给定的条件进行判断流程线用流程线连接各种符号和图形,表示算法的执行顺序输入、输出框表示算法中的输入、输出操作连接点成对出现,同一对连接点中填入相同的数字,用于将不同位置的流程图连接起来注释框对算法中某一步骤进行注释、说明

468【例】用流程图描述求矩形面积的算法输入x输入ys=x*y输出s开始结束

4693)算法与程序将解决指定问题的算法书写成计算机可以识别、执行的指令序列,把指令序列存储在计算机内部存储器中,在人们给出执行命令之后,计算机就可以按照指令的执行顺序自动进行相应操作,从而解决指定的问题。人们把这种可以连续执行的指令序列称为“程序”,编写这些程序的过程被称为“程序设计”。编写这些程序的语言叫“计算机程序设计语言”

470计算机程序设计语言1.机器语言2.汇编语言3.高级语言包括C,C++,C#,Java,JavaScript,Python,PHP,R,GO,MATLAB等【例】用机器语言(Intel80x86)实现“2+6”功能的指令序列#1.1011000000000110#2.0000010000000010#3.101000100101000000000000【例】用汇编语言(ASM80x86)实现“2+6”功能的指令序列#1.MOVAL,6#2.ADDAL,2#3.MOVX,AL【例】用高级语言(Python)实现“2+6”功能的指令序列#1.x=2+6;

471TIOBE编程语言社区发布的2021.10月编程语言应用情况排行榜:

4724)程序设计程序设计也被称为编程,就是让计算机为人解决某个问题。人们通过编程解决问题的过程通常如下:1)确定问题2)分析问题3)设计算法4)程序实现5)程序测试6)程序维护

4731.Python概述1)Python简介Python是由荷兰人GuidovanRossum发明的一种面向对象的解释型高级编程语言,被广泛应用于生活中的各个领域,是最受欢迎的程序设计语言之一。Python的应用领域很广泛,主要有科学计算、大数据处理、人工智能、Web开发、网络编程、数据库应用、多媒体开发、电子游戏应用等众多领域。Python为用户提供了非常完善的基础代码库以及大量的第三方库。尤其在数据科学领域,Python拥有着庞大而活跃的第三方程序包生态系统。

4742)Python的版本Python版本实际上指的是Python解释器的版本。解释器可以让计算机读懂并运行Python程序。目前,Python有两个版本:2.x版和3.x版这两个版本互不兼容。

4753)搭建Python开发环境(1)安装Python从Python的官方网站中,下载对应的Python版本。本书使用Python3.8.7稳定版(64位)(2)Python开发工具Python安装完成后,会自带一个叫IDLE的集成开发环境,本书也将采用IDLE开发工具来编写程序。除了Python自带的IDLE开发工具以外,还有很多有名的第三方开发工具,譬如PyCharm、Eclipse+PyDev、Anaconda3等

4764)编写并运行第一个Python程序(1)交互式运行Python命令行解释器窗口IDLE窗口(2)文件式运行Windows命令提示符对话框中运行py文件IDLE窗口运行py文件

4775)Python的语法特点(1)注释单行注释多行注释(2)代码缩进在Python中,采用代码缩进和冒号“:”区分代码块之间不同的层次关系。缩进可以使用空格或者健,但二者不能混用。其中,使用空格时,默认采用4个空格作为一个缩进量,而使用健时,则采用一个健作为一个缩进量。

478在Python中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束,则表示一个代码块的结束。

4796)Python中的库Python中的库包含标准库和第三方库。标准库中的内置函数可以直接使用,而标准库中的其他模块和第三方库中的模块需要先导入才能使用。(1)标准库标准库主要包含内置函数(print()等)和一些模块(math、random等)。(2)第三方库第三方库需要安装以后才能使用。第三方库最常用最便捷的安装方式是采用pip工具在线或离线安装。pipinstall第三方库的名字离线安装时第三方库的名字应该是包含.whl文件或.tar.gz压缩包的存放路径及文件名piplist//列出当前系统中己经安装的第三方库

480(3)模块的导入无论是标准库中的模块还是第三方库中的模块,要想使用模块中的对象,必须先使用import关键字导入模块。导入模块有三种方式。方式一:import模块名调用:模块名.函数名方式二:from模块名import函数名1,函数名2...通过这种方式导入,在调用函数时只能使用函数名,不能加上模块名。方式三:from模块import*这是一种简单的导入模块中所有项目的方式,但不建议过多的使用这种方式。

4812.Python语言基础1)数据类型Python中的数据类型可以分为两大类:一类是基本数据类型,另一类是复合数据类型。基本数据类型包括数值、字符串、布尔类型和空值。复合数据类型一般包括列表、元组、字典和集合。(1)数值类型整数(int):整数包括十进制整数、八进制整数、十六进制整数和二进制整数。例如:101,0,-8182等是十进制整数。以0X或0x开头,如0X101、0xFF、-0x5B2等是十六进制整数。以0O或0o开头(第2个符号是英文字母O或o),如0o2、-0O235等是八进制整数。以0B或0b开头,如0B001、0b101010等是二进制整数。浮点数(float):浮点数就是带小数的数。在Python中,浮点数也可以用科学记数法表示,例如123.45可以表示为1.2345e2。科学记数法中的E或e表示10的幂。复数(complex):形如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j。

482(2)字符串(str)一个字符串是一组字符的有序序列。在Python中用单引号'或者双引号"或者三引号('''或""")括起来的文本就是字符串。例如:'a'、'12345'、"你好!"、"""python@"""、'''Hello,World'''都是字符串。单引号、双引号、三单号可以互相嵌套(同类型不能嵌套),用来表示更复杂的字符串。例如'''Hi,Bob,"Let'sgo"'''>>>print('''Hi,Bob,"Let'sgo"''')Hi,Bob,"Let'sgo"Python语言还允许使用一种特殊形式的字符,称为转义字符。它是以反斜杠\开头的一个字符序列,采用指定形式来表示指定的特殊字符。例如

483表示换行符。

484Python中的常用转义字符如下表所示。

485(3)布尔值(bool)一个布尔值只有True、False两种值,表示逻辑真和逻辑假。在Python中,None、任何数值类型中的0、空字符串""或''、空元组()、空列表[]、空字典{}、空集合等都等价于False。其他的值等价于True。(4)空值(NoneType)空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。(5)列表(list)列表是写在方括号[]之间、用逗号分隔开的数据元素序列。列表是有序的,可以使用列表的索引或位置来访问每一个元素,索引默认是从0开始。>>>[1,2,3][1,2,3]

486(6)元组(tuple)元组是写在圆括号()之间、用逗号隔开的数据元素序列。例如:>>>(10,20,30)(10,20,30)(7)字典(dict)字典是写在大括号{}之间、用逗号分隔的数据元素集合。字典中的每个数据元素由一对关键字和值组成,中间用分号:连接。例如:>>>{'sid':'2140302011','sname':'赵岚','age':19}{'sid':'2140302011','sname':'赵岚','age':19}(8)集合(set)集合是写在大括号{}之间、用逗号分隔的数据元素集合。例如:>>>{1,'ss',1,'Tom','ss','Tom'}{1,'ss','Tom'}

4872)变量和常量(1)变量变量是指在程序运行过程中可以改变的量。在Python中,不需要先声明变量名及其类型,直接赋值即可创建各种类型的变量。但是变量的命名并不是任意的,应遵循Python标识符规则。标识符是用来标识一个变量、函数、类、模块或其他对象的名称。Python中标识符命名应遵循如下规则:标识符中可用的符号有英文字母、汉字、数字和下画线;第1个字符不能是数字;英文字母大写和小写是有区别的,即对大小写敏感;Python有一些标识符有固定含义和作用,被称为关键字或保留字,关键字不能用做变量名、函数名或类名等。

488为变量赋值可以通过赋值运算符“=”来实现。例如:把整数1的值赋给a,这个时候就创建了变量a,a的类型为整型。>>>a=1例如:把字符串'Python'的值赋给py,这个时候就创建了变量py,py的类型为字符串。>>>py='Python'>>>type(py)例如:把列表[7.8,'python',-3,2+15j,0]的值赋给data,这个时候就创建了变量data,data的类型为列表。>>>data=[7.8,'python',-3,2+15j,0]>>>data[0]7.8>>>type(data)

489(2)常量所谓常量就是在程序中一直不变的量,比如常用的数学常数π就是一个常量。常量可以分为字面常量和符号常量。字面常量就是像1、3.5、'Happy'、True和False这些数据,使用的就是其字面意义上的值或内容。符号常量就是用一个标识符来代表一个字面常量的值。在Python中,通常用全部大写的标识符表示常量,例如:PI=3.1415926

4903)运算符计算机的大量功能都是通过各种各样的运算来完成的,为了完成这些运算,Python提供了丰富的运算符,如算术运算符、赋值运算符、关系(比较)运算符、逻辑运算符等。使用运算符将不同类型的数据按照一定的规则连接起来的式子,称为表达式。例如,使用算术运算符连接起来的式子称为算术表达式,使用逻辑运算符连接起来的式子称为逻辑表达式。

491(1)算术运算符

492【例5.35】计算三个数的平均值a,b,c=6,4,9ave=(a+b+c)/3print(ave)运行结果:6.333333333333333

493在进行运算的时候,有可能运算对象是不同类型的数据,如果数据类型不匹配,就可能发生错误。此时可以使用数据类型转换函数,例如。int(x)可以将x转换为整数类型的值,float(x)可以将x转换为浮点类型的值,str(x)可以将x转换为字符串类型的值。

494(2)赋值运算符赋值运算符的主要作用是把赋值运算符右边的值或者表达式的值赋给左边的变量。

495在Python中,可以通过链式赋值和同步赋值给多个变量赋值。例如:链式赋值可以将同一个值赋给多个变量。>>>a=b=c=1同步赋值可以将多个值赋给多个变量,值和变量个数要一致。>>>a,b,c=1,2,3

496比较运算符通常用在条件语句中作为条件判断的依据。(3)关系运算符关系运算符,也称比较运算符,用于对变量或表达式的结果进行大小关系的比较,如果比较结果为真,则返回True,如果为假,则返回False。

497在关系表达式中,被比较的对象一般为相同类型的可比较数据,但整数和浮点数之间可以进行比较。在Python中,允许在一个关系表达式中比较多个值。但大小关系不具有传递性,仅当表达式中的多个关系运算的计算结果都为True时,才显示True的结果。例如:>>>a=3>>>1>>1

498(4)逻辑运算符Python中的逻辑运算符主要包括and(逻辑与)、or(逻辑或)、not(逻辑非)。

499(5)运算符的优先级多个运算符组合在一起构成复合表达式,复合表达式中哪个运算符先进行计算是由运算符的优先级决定的。Python运算符的运算规则是:优先级高的运算符先执行,优先级低的运算符后执行。也可以像四则运算那样使用小括号,括号内的运算最先执行。运算符优先级相同时,由运算符的结合方向决定求值顺序。

5004)数据的输入和输出(1)数据输入在Python中,使用内置函数input()可以接收用户的键盘输入,返回值为字符串。input函数的基本用法如下:变量=input([prompt])其中,变量用于保存键盘输入的内容,可选参数prompt表示输入时的提示内容。

501在使用input()进行输入时,无论输入的是数字还是字符都将被作为字符串读取。例如:>>>a=input("请输入一个整数:")请输入一个整数:100↙>>>a'100'如果想要读取一个数值,则需要使用int()或float()函数进行类型转换。例如:>>>a=int(input("请输入一个整数:"))请输入一个整数:100↙>>>a100

502【例5.36】从键盘输入正方形的边长,计算正方形的面积a=int(input("请输入正方形的边长:"))print('正方形的面积=',end='')print(a*a)运行结果:请输入正方面的边长:4↙正方形的面积=16注意:使用int()或float()函数进行数据类型转换的方式只能输入一个数值。

503若想要一次输入多个数据并转换成整型或浮点数,则要使用map()函数和字符串对象的split()方法来实现。例如:从键盘输入两个整数分别赋值给a,b变量。>>>a,b=map(int,input('请输入两个整数(用空格间隔):').split())请输入两个整数(用空格间隔):14>>>a1>>>b4

504split()方法的功能是通过指定分隔符对字符串进行拆分,并返回分割后的字符串列表。map()函数会将指定的函数(第一个参数)依次作用在指定序列(第二个参数)中的每个元素上。例如:从键盘输入两个浮点数分别赋值给a,b变量。>>>a,b=map(float,input('请输入两个浮点数(用空格间隔):').split())例如:从键盘输入两个字符串分别赋值给a,b变量>>>a,b=input('请输入两个字符串(用空格间隔):').split()

505(2)数据输出在Python中,使用内置的print()函数可以将结果输出到IDLE或者标准控制台上。其基本格式为:print(value,[end='

506'])参数value是要输出的内容,内容可以是数字和字符串(字符串需要使用引号括起来),或包含运算符的表达式。可选参数end='

507'表示输出内容后默认换行,如果不想换行,可以设置end=''。

508可以使用%运算符实现字符串的格式化输出,例如:>>>'Hello,%s'%'world''Hello,world'常用的格式符号有:%d表示用整数替换%f表示用浮点数替换,%.2f表示用浮点数替换并保留两位小数%s表示用字符串替换如果字符串中有多个格式符号,%运算符后面的输出对象要放在圆括号中,并且个数及类型要与格式符号相对应。

509【例5.37】从键盘输入长方形的长和宽,计算长方形的周长。a,b=map(float,input('请输入长方形的长和宽(用空格间隔):').split())print('长方形的周长=',2*(a+b))运行结果:请输入长方形的长和宽(用空格间隔):3.68.38↙长方形的周长=23.96

5103.流程控制语句一个完整的Python程序一般包含若干条语句。按照程序中语句出现的先后次序依次执行的结构称为顺序结构。根据条件选择执行不同语句的结构称为选择结构。根据条件重复执行相关语句的结构为循环结构。有了这3种基本结构,就可以编写各种复杂的程序。

5111)选择结构Python中选择结构主要有3种形式。(1)单分支if语句语句格式为:if条件表达式:语句块条件表达式可以是布尔值、关系表达式、逻辑表达式和其他有计算结果的表达式。

512例如:条件表达式为整数>>>if1:print('hello')例如:条件表达式为关系表达式a=5ifa!=5:print('abc')print('xyz')

513(2)双分支if..else语句双分支if语句格式为:if条件表达式:语句块1else:语句块2

514【例5.38】输入两个整数,按从大到小输出a,b=map(int,input('请输入两个整数(用逗号间隔):').split(','))ifa>b:print(a,b)else:print(b,a)

515上面的例题还可以使用条件运算符进行简化。Python条件运算符的格式为:表达式1if条件表达式else表达式2执行流程:先计算条件表达式,当条件计算结果为True或等价于True,返回表达式1的计算结果,当条件计算结果为False或等价于False,则返回表达式2的计算结果。用条件运算符实现例5.38a,b=map(int,input('请输入两个整数(用逗号间隔):').split(','))print(a,b)ifa>belseprint(b,a)

516(3)多分支if..elif..else语句多分支if语句格式为:if条件表达式1:语句块1elif条件表达式2:语句块2……else:语句块nelse子句可以省略,当省略else时,如果所有条件表达式都不成立,则不执行任何语句。

517【例5.40】输入某个学生的成绩,按分数输出其等级,即90分及以上为A,80到89分为B,70到79分为C,60到69分为D,60分以下为E。grade=float(input('请输入学生的成绩:'))ifgrade>=90:level='A'elifscore>=80:level='B'elifscore>=70:level='C'elifscore>=60:level='D'else:level='E'print('等级为:',level)

518(4)选择结构的嵌套一个选择结构的内部可以包含另一个选择结构被称为选择结构的嵌套。选择结构中的单分支if语句、双分支if..else和多分支if..elif..else之间可以相互嵌套。下面是双分支if语句中嵌套双分支if..else语句,形式如下:if条件表达式1:if条件表达式2:语句块1else:语句块2else:if条件表达式3:语句块3else:语句块4

519【例5.41】输入一个年份,判断是否为闰年。(能被4整除但不能被100整除或者能被400整除的就是闰年)year=int(input('请输入年份:'))ifyear%4==0andyear%100!=0:print('%d年是闰年'%year)else:ifyear%400==0:print('%d年是闰年'%year)else:print('%d年不是闰年'%year)

5202)循环结构Python中的循环结构主要有两种类型:while循环和for循环。(1)while循环while循环的语法格式如下:while条件表达式:语句块

521【例5.42】编程求1+2+3+•••+100的值count=1sum=0whilecount<=100:sum+=countcount+=1print(sum)

522(2)for循环for循环可以遍历(依次访问)任何序列中的每个元素,例如遍历列表、元组、字典、集合或者字符串中的元素。for循环的语法格式如下:for循环变量in序列:语句块循环变量用于存放从序列变量中读取出来的元素。

523【例5.43】输入一个字符串,逐个输出每个字符(字符串的遍历)。string=input('请输入一个字符串:')forchinstring:print(ch+'',end='')

524也可以通过序列索引的方式执行for循环,例如例5.43也可以用下面代码实现。string=input('请输入一个字符串:')foriinrange(len(string)):print(string[i]+'',end='')这里使用了两个内置函数len()和range()。len()返回字符串、列表、字典、元组等序列的长度或元素个数。range()用于生成一系列连续的整数,多用于for循环语句中。

525range()用于生成一系列连续的整数,多用于for循环语句中。其语法格式如下:range(start,end,step)参数说明:start:用于指定计数的起始值,可以省略,如果省略则从0开始,例如,range(5)等价于range(0,5)。end:用于指定计数的结束值,但不包括该值,如range(3),则得到的值为0、1、2,不包括3,不能省略。当range()函数中只有一个参数时,即表示指定计数的结束值。step:用于指定步长,即两个数之间的间隔,可以省略,如果省略则默认步长为1。在Python3.x中range()函数的返回值的是一个可迭代对象,需要通过list()函数转换成列表才能输出列表信息。

526(3)循环控制语句在执行循环时,有时候会需要提前结束循环。Python提供了break语句和continue语句来实现这种功能。break语句用来跳出当前循环,从而提前结束该循环,循环中break后面的语句将不会被执行。跳出循环后,程序会继续执行该循环后面的语句。continue语句可以提前结束本次循环,跳过本次循环中continue后面的语句,转而执行下一次的循环。break语句和continue语句一般要和if语句结合使用。

527【例5.45】输入一个正整数,判断其是否为素数。a=int(input('请输入一个正整数:'))ifa>1:foriinrange(2,a):ifa%i==0:print(a,'不是素数')breakelse:print(a,'是素数')else:print(a,'不是素数')for循环的可选语句。只有在for循环中的语句都正常运行结束,else语句才会被运行。如果for循环因为执行了break语句而跳出循环时,不会执行else语句。

528【例5.46】输出10以内的奇数。foriinrange(10):ifi%2==0:continueprint('%d'%i,end='')

529在Python中,还有一种pass语句,表示空语句,就是不做任何事情,一般只用做占位语句,常用于各种控制语句及函数定义中。之所以使用空语句,是为了保持程序结构的完整性。比如例5.46也可以用下面的代码实现:foriinrange(10):ifi%2==0:passelse:print('%d'%i,end='')

530(4)循环嵌套一个循环体中包含另一个循环,称为循环嵌套。在Python中,允许while循环和for相互嵌套,for循环可以包含for循环或while循环,while循环也可以包含while循环或for循环。外循环可以包含多个内循环,多个内循环之间属于平行关系。【例5.47】输出100以内所有的素数。fornuminrange(2,100):foriinrange(2,num):ifnum%i==0:breakelse:print(num,'',end='')

5314.序列数据结构数据结构是计算机存储、组织数据的基本方式。Python提供了一些内置的数据结构,如字符串、列表、元组、字典和集合等,这些被称为序列结构。Python的序列结构又分为有序序列和无序序列。其中,字符串、列表和元组属于有序序列,字典和集合属于无序序列。此外序列还可以分为可变序列和不可变序列。其中,列表、字典和集合属于可变序列,可以随意修改序列中的内容;而元组和字符串属于不可变序列,不可修改序列中的内容。

5321)字符串(1)字符串的创建使用单引号、双引号、三引号和str()函数创建一个空字符串>>>s=''>>>s=str()使用str()可以将其他Python数据类型转换为字符串。>>>str(1.23)

533(2)字符串的引用使用字符串索引可以访问字符串中的字符。>>>s='Python'>>>s[1]'y'>>>s[-1]'n'注意:因为字符串是不可变序列,所以通过索引只能访问字符串中的字符,不能修改、添加、删除字符。

534(3)字符串的运算使用+或+=可以将多个字符串或字符串变量拼接起来,+会生成新字符串,+=在原字符串变量基础上拼接字符串。字符串*整数,可以使字符串重复整数倍,会生成新字符串。字符串*=整数可以使原字符串变量重复整数倍,不生成新字符串。使用成员测试运算符in测试字符串中是否包含某个字符,运算结果为布尔型。

535(4)字符串常用的内置函数使用len()函数求字符串长度(字符个数)使用max()求字符串最大值。使用min()求字符串最小值。使用sorted()函数对字符串元素排序(默认升序,设置reverse参数为True进行降序排序)。使用zip()函数将多个字符串对应索引位置的元素拉链式组合成元组,并返回zip对象,需要使用list()方法将zip对象转换成列表输出。使用enumerate()函数将字符串的索引值和字符串元素值组合成元组,并返回enumerate对象,需要使用list()方法将enumerate对象转换成列表输出。

536(5)字符串的切片切片操作可以从一个字符串中抽取子字符串(字符串的一部分)。对一个字符串s,切片操作的基本形式:s[start:end:step]其中,start表示切片开始的索引位置,默认为0;end表示切片结束的索引位置,默认为字符串的长度;step表示切片的步长,默认为1。切片得到的子串包含从start开始到end-1的全部字符。

537下面通过举例说明字符串切片的基本用法。定义一个字符串s>>>s='Hello,World!'提取从开头到结尾的整个字符串。>>>s[:]>>>s[0:-1]从索引5(第6个字符)提取到字符串结尾。>>>s[5:]提取从索引2(第三个字符)到4(第5个字符)的字符串(Python的提取操作不包含最后一个索引对应的字符,所以end的值应为5)。>>>s[2:5]提取最后三个字符。>>>s[-3:]

538提取倒数第6个字符到倒数第4个字符之间的字符串。>>>s[-6:-3]从开头提取到结尾,步长为2>>>s[::2]从开头提取到第8个字符(索引为7,end为8),步长为2>>>s[:8:2]从索引2(第3个字符)提取到索引9(第10个字符),步长为2。>>>s[2:10:2]如果步长为负值,表示从右到左反向进行提取操作。例如步长为-1,start为-1或者默认值,end为默认值,则可实现字符串逆序。>>>s[::-1]>>>s[-1::-1]

539(6)字符串对象常用方法字符串对象提供的方法非常多,这里通过举例介绍一些常用方法的用法。使用lower()将字符中字符转为小写,返回新字符串。使用upper()将字符中字符转为大写,返回新字符串。使用find()方法查找一个字符串在另一个字符中首次出现的索引位置,没找到返回-1。使用count()方法统计一个字符串在另一个字符串中出现的次数,如果没有出现返回0。使用split()方法用指定分隔符对字符串进行分隔,返回列表。使用replace()方法替换字符串中指定的字符串。使用join()方法可以将序列结构中的多个字符串以指定字符进行连接,返回新字符串。使用strip()方法删除字符串两端的空白或指定字符,lstrip()方法删除左端的空白或指定字符,rstrip()方法删除右端的空白或指定字符。

5402)列表(1)列表的创建使用[]或list()函数创建空列表>>>list1=list()>>>list1[]>>>list2=[]>>>list2[]

541(2)列表的引用使用索引访问列表中的元素>>>list3=[1,2,3]访问list3中索引为0和-1的的元素>>>list3[0]>>>list3[-1]修改list3中索引为1的元素值为5>>>list3[1]=5列表中的元素可以是各种类型,甚至是一个列表,即二维列表。二维列表通过两个索引访问元素。>>>list_list=[[1,2],3.8,['abc','xyz']]>>>list_list[2]>>>list_list[2][1]

542(3)列表对象的常用方法使用append()方法为列表尾部添加元素4。>>>list4=[1,2,3]>>>list4.append(4)使用insert()方法在列表索引1的位置添加元素9。>>>list4.insert(1,9)使用extend()方法为列表尾部添加另一个列表[5,6,7]。>>>list4.extend([5,6,7])使用pop()方法删除索引为1的元素,并返回元素值。>>>list4.pop(1)使用remove()方法删除元素4。>>>list4.remove(4)使用clear()方法删除列表所有元素。>>>list4.clear()

543使用index()方法返回元素3首次出现的索引位置。>>>list5=[1,2,3,4,3,6,3]>>>list5.index(3)使用reverse()方法实现对列表逆序。>>>list5.reverse()>>>list5使用sort()方法实现对列表排序(默认升序,设置reverse参数进行降序排序)。>>>list5.sort()>>>list5.sort(reverse=True)

544(4)列表的遍历列表的遍历通常要结合循环来实现。>>>list6=["hello",1.3,"world",12,True]>>>foriteminlist6:print(item)hello1.3world12True列表中的切片、+、+=、*、*=、in运算符、常用内置函数都和字符串用法类似,这里不再赘述。

5453)元组(1)元组的创建使用()或tuple()创建空元组。>>>t1=()>>>t2=tuple()元组中的元素可以是不同的类型。>>>t3=(1,'a','Python',3.5)>>>t3(1,'a','Python',3.5)

546当元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当做运算符使用。>>>t4=('a')>>>t4'a'>>>t5=(1,)>>>t5(1,)

547(2)元组元素的引用元组和列表一样,使用索引访问元组中的元素。>>>t6=(1,2)>>>t6[1]2>>>t6[-2]1元组中的切片、+、+=、*、*=、in运算符、常用内置函数都和列表用法类似,这里不再赘述。

5484)字典字典是包含若干“键值对(key:value)”的序列。字典中的元素是没有顺序的,因此不能像字符串、列表一样通过索引位置来访问元素。字典中的键必须是唯一的,可以通过“键”来访问元素的值。(1)字典的创建使用{}或dict()函数可以创建空字典。>>>dict1={}>>>dict2=dict()

549字典中的值可以是任何Python类型。>>>dict3={'1':'a','2':2}字典中的键通常是字符串,但也可以是其他任意的不可变类型,如布尔型、整型、浮点型、元组、字符串等,例如:>>>dict4={'name':'张三',123:123}字典不允许同一个键出现两次,在创建时如果同一个键被赋值两次,后一个值会覆盖前面的值。>>>dict4={'name':'张三',123:123,123:10000}

550(2)字典元素的引用通过“键”访问字典中的元素值。>>>dict5={'Python':89,'C':78,'Java':94}>>>dict5['Java']通过字典对象的get()方法访问元素值。>>>dict5.get('Python')通过“键”修改字典元素的值>>>dict5['Python']=95使用del命令删除字典中的元素。>>>deldict5['C']使用字典对象的pop()方法删除字典中指定“键”的元素,并返回元素的值。>>>dict5.pop('Java')使用字典对象的clear()方法删除所有字典元素。>>>dict5.clear()

551(3)字典中的运算符字典里的in运算符用于判断某个键是否在字典里,如果键存在,返回True,键不存在,返回False。对于元素值不适用。{'Python':95,'C':78,'Java':94}>>>'Python'indict5True前面介绍的字符串中的常用内置函数在字典中也适用,这里不再赘述。

552(4)字典的遍历>>>dict5={'Python':89,'C':78,'Java':94}使用items()方法遍历字典中的键和值。>>>foritemindict5.items():print(item[0],item[1])使用keys()方法遍历字典中的键。>>>foritemindict5.keys():print(item)使用values()方法遍历字典中的值。>>>foritemindict5.values():print(item)

5535)集合集合是一个无序不重复的可变序列,集合的基本功能是进行成员关系测试和删除重复元素。(1)集合的创建可以使用大括号{}或者set()函数创建集合。但是创建一个空集合必须用set(),因为{}被用来创建一个空字典。>>>set1=set()集合中不能有重复元素,如果有重复元素会自动删除。>>>set2={1,2,3,5,1,2}>>>set2{1,2,3,5}

554(2)集合的运算可以使用“-”“|”“&”运算符进行集合的差集、并集、交集运算。>>>set3=set('hello')>>>set4=set('world')>>>set3-set4{'e','h'}>>>set3|set4{'r','w','e','o','h','d','l'}>>>set3&set4{'o','l'}集合可以使用in运算符测试成员关系。>>>set5=set('Python')>>>'y'inset5True

5555.函数在Python中,我们已经使用过很多函数。例如input()、print()、range()等函数,这些都是Python安装包提供的内置函数。除了这些内置函数以外,Python还支持自定义函数。下面介绍一下如何自定义函数。1)函数的定义在Python中,函数定义的基本语法形式如下:def函数名([形式参数列表]):函数体return表达式或值

556自定义函数时,需要遵循以下规则:在Python中采用def关键字来定义函数,其后是函数名和一对圆括号,函数名必须是合法标识符,即使没有参数圆括号也不能少。函数中的形式参数(简称形参)可以是零个(无参函数)、一个或者多个(有参函数)。当有多个参数时参数之间用逗号分隔。函数参数不用指定参数类型,Python会自动根据值来维护其类型。在Python中,函数定义中的缩进部分是函数体。在函数体中使用return返回函数结果,函数返回值可以是一个或多个,返回值的类型可以是任意类型。return语句可以在函数体内的任何地方出现,表示函数调用执行到此结束;如果没有return语句,会自动返回None,如果有return语句,但是return后面没有接表达式或者值,也是返回None。在Python中,定义函数时可以为形参指定默认值。

557定义一个没有参数的hello函数,打印“HelloWorld”。defhello():print('HelloWorld')定义有一个参数的hello函数,根据参数的值打印多个“HelloWorld”。defhellon(n):foriinrange(n):print('HelloWorld')定义有两个参数的area函数,实现求长方型的面积,并返回面积值。defarea(a,b):returna*b

558定义有两个参数两个返回值的sum_and_diff函数,实现求两个数的和与差,并返回和与差的值。defsum_and_diff(a,b):returna+b,a-b定义有默认参数值的add_list函数,实现给一个列表中添加数据,并返回这个列表。defadd_list(a,list=[]):list.append(a)returnlist在定义函数的时候,函数体可以是空语句。在Python中,使用pass语句表示空语句,pass不做任何事情,一般用做占位语句。例如:defabc():pass

5592)函数的调用函数的调用即执行函数。在Python中,所有函数包括用户自定义函数和系统内置函数都要在用户编写的程序中被调用时才能执行。调用函数的基本语法形式为:函数名([实际参数列表])

560调用函数时需要注意以下几点:调用函数时函数名后面的“()”不能省略。调用函数时,“()”内的实际参数(简称实参)与函数定义中的形式参数(简称形参)要数量一致,顺序相对应并且类型兼容;有多个实参时,参数之间用逗号分隔;如果形参有默认参数值时,实参数量可以少于等于形参数量。函数调用语句必须出现在函数定义之后才能调用函数。在执行函数调用语句时,实参的值会被传递给形参,然后执行被调用函数,在被调用函数第一次遇到return语句或者函数体的最后一条语句后,被调用函数执行完成。然后会返回到调用这个函数的位置继续向后执行。

561【例5.48】定义一个函数,实现判断一个数是不是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如:121,123321等都是回文数。defpalindrome(n):temp=nm=0whiletemp>0:m=m*10+temp%10temp//=10return'是回文数'ifm==nelse'不是回文数'print(palindrome(123))print(palindrome(123321))

5626.文件操作在Python中对文件的操作非常方便,一般分为下面3个步骤:第一步,使用open()函数打开或新建文件,并返回一个file对象。第二步,使用file对象的方法对文件进行读取或写入操作。第三步,使用file对象的close()方法关闭文件。

5631)打开或新建文件要访问文件,必须先打开文件,在Python中使用内置函数open()打开或新建一个文件对象。open()最常用的语法格式如下:flle=open(filename,mode='r',buffering='-1',encoding=None)参数说明:flle:open()返回的文件对象。filename:必选参数,指明要打开的文件名,它既可以是绝对路径,也可以是相对路径。

564mode:可选参数,用于指定文件的打开模式,可以使用的值如表5-11所示,默认值为'r',表示只读。buffering:可选参数,用于指定读写文件的缓冲模式,默认值为-1,表示使用系统默认的缓冲区大小;值为0表示不缓冲;值为1表示只缓存一行数据;如果大于1,则表示缓冲区的大小。encoding:可选参数,用于指明文本文件使用的编码方式,默认值为None,表示使用系统默认编码方式。在处理中文时,通常使用'utf-8'或'gbk'编码。

565假设D盘下有一个abc.txt的文本文件,文件内容如下:Hello,World以下代码以读取文本文件的方式打开abc.txt文件。>>>file=open('D:/abc.txt')或者>>>file=open('D:\\abc.txt')当以只写模式打开一个不存在的文件时,则表示创建一个新文件。例如D盘不存在a.txt文件,以下代码表示创建a.txt文件。>>>file=open('D:/a.txt','w')如果文件内容中有中文信息,读写文件的时候可以指定文件编码。>>>file=open('D:\\abc.txt','r',encoding='utf-8')

5662)关闭文件关闭文件可以使用文件对象的close()方法实现。close()方法的语法格式如下:file.close()3)读取文本文件Python中读取文本文件内容主要通过调用文件对象的三个方法read()、readline()、readlines()来完成。4)写入文本文件Python中写入文本文件内容主要通过调用文件对象write()方法writelines()方法来完成。

5675.4.3Pandas数据处理与分析Pandas是一个开源的、功能强大的数据处理与分析Python工具库。常用于数据挖掘和数据分析,同时也提供数据清洗功能。Python与Pandas一起被广泛应用于学术和商业如金融、经济学、统计学、分析学等领域。

568下面简单介绍一下Pandas的基本用法。1.安装Pandaspipinstallpandas2.Pandas的数据结构Pandas包含两种数据类型:Series和Dataframe。Series是一种一维数据结构,能够容纳任何类型的数据(整数,字符串,浮点数,python对象等)。每一个元素都带有一个索引,与一维数组的含义相似,其中索引可以为数字或字符串。

569例如:使用列表创建Series>>>importpandasaspd>>>a=[1,2,3,4]>>>pds=pd.Series(a)例如:使用字典创建Series>>>dict1={'2020':39698.16,'2019':37556.89,'2018':34858.28}>>>pds1=pd.Series(dict1)

570Dataframe是一种二维数据结构,数据以表格形式(与excel、数据库二维表类似)存储,有对应的行和列。每行和每列可以是不同的值类型(数值、字符串、布尔值等),DataFrame既有行索引也有列索引,可以被看做是由Series组成的字典。例如:使用列表创建DataFrame,每列值类型不同。>>>df1=pd.DataFrame([['教授','副教授','讲师'],[18,67,72]])>>>df1例如:使用列表创建DataFrame,每行值类型不同。>>>df2=pd.DataFrame([['教授',18],['副教授',67],['讲师',72]])>>>df2

571创建DataFrame的时候可以指定行索引和列索引的值。>>>df3=pd.DataFrame(a,index=['a','b','c'],columns=['职称','人数'])>>>df3例如:使用字典创建DataFrame>>>dict2={'年份':[2020,2020,2020,2010,2010],'职称':['教授','副教授','讲师','讲师','教授'],'人数':[18,67,72,15,3]}>>>df4=pd.DataFrame(dict2)>>>df4

5723.数据处理实例在使用Pandas处理数据时,通常都是先导入文件(csv文件或excel文件)或数据库中的数据,然后进行处理和分析。处理完成后再把处理好的数据导出到文件或数据库或直接可视化输出。

5735.5大数据可视化5.5.1数据可视化简介1.什么是数据可视化数据可视化是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。数据可视化技术的基本思想是将数据库中每一个数据项作为单个图元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析。

5742.数据可视化的作用在大数据时代,可视化技术可以支持实现多种不同的目标。(1)观测、跟踪数据(2)分析数据(3)辅助理解数据(4)增强数据吸引力

5755.5.2数据可视化工具目前已经有许多数据可视化工具,其中大部分都是免费使用的,可以满足各种可视化需求,主要包括入门级工具(Excel)、信息图表工具(GoogleChartAPI、D3、Visual.ly、Raphael、Flot、Tableau、大数据魔镜)、地图工具(ModestMaps、Leaflet、PolyMaps、Openlayers、Kartograph、pogleFushionTables、QuanumGIS)、时间线工具(Timetoast、timeline、Timeslide、Dipity)高级分析工具(Processing、Nodebox、R、Weka和Gephi)等

5765.5.3大数据可视化典型案例1.滴滴出行大数据北京早高峰通勤流动图显示,早高峰时,通勤人群从通州、房山等四周向中心地区聚集。

577晚高峰与早高峰刚好相反,通勤人群市中心的国贸、金融街、中关村等地向外围扩散。

5782.天猫销售大数据2017天猫“双11”活动各地区销售额数据图。数据显示,广东地区消费额,位居全国第一,浙江、江苏位居第二和第三,北京、上海的销量也是紧随其后。

5793.百度迁徙数据图这张震动大图是2017年春节前全国活动人口的迁出流向。人们从最亮的点,涌向全国的五湖四海返乡过年。图中选出了迁出量最高的前20个城市,而就是这20个城市承载了全国超越40%的人口迁出量。

5804.网络技术与浏览器关系图“网络的演变”是谷歌推出为了说明网络技术与浏览器相互作用,让我们的网络越来越强大的网站。第一条彩带都代表一门网络技术,可以看不同时间浏览器对技术产生不同的影响,特别是手机端Safari和Chrome加入后,让网络技术变得越来越强大和复杂。

5815.上海地铁系统进站流量图展示的是上海公交换乘地铁站点在工作日和休息日乘客进站流量图

5826.网络攻击地图显示了正在发生DDoS攻击的地区,DDoS攻击就是通过利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。

5835.5.4Python数据可视化Python中的可视化库非常多,比较常用的有Matplotlib、Pandas、Pyecharts、Seaborn、Ggplot、Plotnine等。ECharts是近年来非常热门的一个国产数据可视化开源JS库。Pyecharts是将Python与ECharts结合的可视化库,用于通过Python生成ECharts图表。下面就通过几个简单例子来介绍一下Pyecharts的用法。要使用Pyecharts制作图表,首先需要安装Pyecharts库,可以使用pip命令安装。安装语句如下:pipinstallpyecharts

584【例5.54】制作某单位员工职称情况饼图

585【例5.55】制作词云图

586【例5.56】制作2020年中国GDP十强城市特效散点图

587END谢谢!

588第6章计算思维与程序设计

589目录6.1计算思维基础6.2一个简单的计算机程序6.3顺序结构程序6.4选择结构程序6.5循环结构程序6.6Windows窗口程序

5906.1计算思维基础

5916.1.1计算思维的概念人类通过思考自身的计算方式,研究是否能制造工具进行模拟、代替我们实现计算的过程,从而诞生了各种各样的计算工具。随着计算机的日益“强大”,它在很多应用领域中所表现出的智能也日益突出,成为人脑的延伸。与此同时,人类所制造出的计算机在不断强大和普及的过程中,反过来对人类的学习、工作和生活都产生了深远的影响,同时也大大增强了人类的思维能力和认识能力。2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(JeannetteM.Wing)教授在世界计算机权威期刊《CommunicationsoftheACM》杂志上给出的计算思维(ComputationalThinking)的定义为:“计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。”

5926.1.1计算思维的概念国际教育技术协会(ISTE)和计算机科学教师协会(CSTA)在2011年给计算思维的定义为:计算思维是一个问题解决的过程,该过程包括以下特点:1)制定问题,并能够利用计算机和其他工具来帮助解决该问题。2)要符合逻辑地组织和分析数据。3)要通过抽象(如模型、仿真等)再现数据。4)通过算法思想(一系列有序的步骤)支持自动化的解决方案。5)分析可能的解决方案,找到最有效的方案,并且有效结合这些步骤和资源。6)将该问题的求解过程进行推广并移植到更广泛的问题中。

5936.1.2计算思维与算法计算思维的本质是抽象(Abstract)和自动化(Automation)。它反映了计算的根本问题,即什么能被有效的自动执行。算法(Algorithm)就是对基于计算思维的解决问题的方法的描述。它通常由一系列操作步骤组成,通过这些步骤的自动执行可以解决指定的问题。也就是说,通过一定规范的输入,人或计算机自动执行这一系列操作步骤即算法,在有限时间内可获得所要求的输出。

5946.1.2计算思维与算法【例6.1】已知一矩形的长和宽,描述求矩形面积的算法#1.定义三个变量x,y,s;#2.通过键盘输入矩形的长并赋值给x;#3.通过键盘输入矩形的宽并赋值给y;#4.将x*y赋值给s;#5.在屏幕输出s的值;例6.1中的x、y、s为矩形长、宽、面积的符号化抽象,依次执行算法#2~#5行的操作步骤,即可求得矩形的面积并输出,这些操作步骤就是求矩形面积的一种算法。

5956.1.2计算思维与算法1.算法的基本特征解决不同的问题往往需要不同的算法,即使解决相同的问题也可能有多种算法。虽然算法千变万化,但所有算法一般应具有以下五个基本特征:1)有穷性(Finiteness)算法的有穷性是指算法必须能在执行有限个步骤之后终止;2)确切性(Definiteness)算法的每一步骤必须有确切的定义;3)输入项(Input)一个算法有0个或多个输入,以取得运算对象的初始情况,所谓0个输入是指算法本身定出了算法执行的初始条件;4)输出项(Output)一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是无意义的;5)可行性(Effectiveness)算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,每个计算步骤都可以在有限时间内完成(也称之为有效性)。

5966.1.2计算思维与算法2.算法的要素1)数据对象的运算和操作算法中用到的基本运算和操作主要有一下四类:①算术运算:加减乘除等运算②逻辑运算:或、且、非等运算③关系运算:大于、小于、等于、不等于等运算④数据传输:输入、输出、赋值等运算2)算法的控制结构一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。一个算法一般都可以有顺序、选择、循环三种结构组成。

5976.1.2计算思维与算法3.算法的描述描述算法的方法有多种,常用的有自然语言、结构化流程图、伪代码和PAD图等。例6.1中算法的描述即采用的自然语言,但描述算法最常用的是流程图。符号名称图形功能起止框表示算法的开始和结束处理框表示算法中一般的处理过程,如计算赋值等判断框对一个给定的条件进行判断流程线用流程线连接各种符号和图形,表示算法的执行顺序输入、输出框表示算法中的输入、输出操作连接点成对出现,同一对连接点中填入相同的数字,用于将不同位置的流程图连接起来注释框对算法中某一步骤进行注释、说明

5986.1.2计算思维与算法【例6.2】用流程图描述求矩形面积的算法输入x输入ys=x*y输出s开始结束

5996.1.3算法与程序将解决指定问题的算法书写成计算机可以识别、执行的指令序列,把指令序列存储在计算机内部存储器中,在人们给出执行命令之后,计算机就可以按照指令的执行顺序自动进行相应操作,从而解决指定的问题。人们把这种可以连续执行的指令序列称为“程序”,编写这些程序的过程被称为“程序设计”。

6006.1.3算法与程序1.计算机程序设计语言2.机器语言3.汇编语言4.高级语言【例6.5】用机器语言(Intel80x86)实现“2+6”功能的指令序列#1.1011000000000110#2.0000010000000010#3.101000100101000000000000【例6.6】用汇编语言(ASM80x86)实现“2+6”功能的指令序列#1.MOVAL,6#2.ADDAL,2#3.MOVX,AL【例6.7】用高级语言(C语言)实现“2+6”功能的指令序列#1.x=2+6;

6016.1.3算法与程序20172016语言名称占有率变化情况11Java13.268%-4.59%22C10.158%+1.43%33C++4.717%-0.62%44Python3.777%-0.46%56C#2.822%-0.35%65JavaScript2.474%-0.39%78VB.net2.471%-0.83%85R1.906%+0.08%97PHP1.590%-1.33%1018MATLAB1.596%-0.25%TIOBE编程语言社区发布的2016、2017年编程语言应用情况排行榜:

6026.1.4程序设计程序设计也被称为编程,就是让计算机为人解决某个问题。人们通过编程解决问题的过程通常如下:1)确定问题2)分析问题3)设计算法4)程序实现5)程序测试6)程序维护

6036.2一个简单的计算机程序

6046.2.1程序代码几个概念程序、源程序、翻译软件、语法规则、C语言编译程序【例6.8】欢迎进入C语言的世界!#1./*#2.该程序显示如下信息:#3.欢迎进入C语言的世界!#4.*/#5.#include"stdio.h"#6.intmain()#7.{#8.printf("欢迎进入C语言的世界!

605");#9.return0;#10.}

6066.2.2空白和注释【例6.8】欢迎进入C语言的世界!#1./*#2.该程序显示如下信息:#3.欢迎进入C语言的世界!#4.*/#5.#include"stdio.h"#6.intmain()#7.{#8.printf("欢迎进入C语言的世界!

607");#9.return0;#10.}

6086.2.3预处理指令【例6.8】欢迎进入C语言的世界!#1./*#2.该程序显示如下信息:#3.欢迎进入C语言的世界!#4.*/#5.#include"stdio.h"#6.intmain()#7.{#8.printf("欢迎进入C语言的世界!

609");#9.return0;#10.}

6106.2.4函数【例6.8】欢迎进入C语言的世界!#1./*#2.该程序显示如下信息:#3.欢迎进入C语言的世界!#4.*/#5.#include"stdio.h"#6.intmain()#7.{#8.printf("欢迎进入C语言的世界!

611");#9.return0;#10.}

6126.2.5程序输出【例6.8】欢迎进入C语言的世界!#1./*#2.该程序显示如下信息:#3.欢迎进入C语言的世界!#4.*/#5.#include"stdio.h"#6.intmain()#7.{#8.printf("欢迎进入C语言的世界!

613");#9.return0;#10.}

6146.2.6程序的编译运行1.程序的编译C语言源程序需要翻译成机器语言程序才能在计算机上运行。编译程序以C源程序作为输入,以翻译好的机器语言程序作为输出。1)编译预处理2)编译3)优化4)汇编5)链接C语言的编译程序有很多种,它们有的是不同厂家推出的针对不同软硬件环境的不同产品,有的是同一产品的不同版本。目前比较流行的C编译程序有GNU的GCC、微软的VisualC++、Borland的TurboC等。

6156.2.6程序的编译运行2.程序的运行操作系统执行程序读入内存创建进程执行该进程进程执行结束用户程序的一般执行过程操作系统调用执行用户程序中的入口程序完成初始化入口程序调用执行用户程序中的main函数main函数执行,中间可调用其它函数main函数执行结束后,程序终止

6166.2.6程序的编译运行3.程序的调试1)语法错误指的是用户编写的程序违背了程序语言的语法规则使得程序不能被正确编译,这些错误通常在程序编译、链接过程中可以被发现。2)逻辑错误指的是程序设计的思路错误导致程序没能按照设计者的设计意图运行。3)运行错误指的是程序在运行过程中偶尔发生的错误,这种错误往往是由于考虑不周、程序运行环境发生变化引起的,这种错误比较隐蔽。

6176.3顺序结构程序设计

6186.3.1数据与输出几个概念常量、整数、实数、字符、字符串【例6.9】在C语言程序中使用常量#1.intmain()#2.{#3.100;#4.20.5;#5.'a';#6."abc";#7.return0;#8.}

6196.3.1数据与输出数据的输出1.输出字符串的方法如下:printf("一个字符串%s

620",”abc”);2.输出整型数据的方法如下:printf("一个整数%d

621",100);3.输出实型数据的方法如下:printf("一个实型数%f

622",20.5);4.输出字符型数据的方法如下:printf("一个字符%c

623",'a');

6246.3.1数据与输出变量定义变量的方法数据类型变量名;intx;//定义一个变量x,用来保存一个整数floaty;//定义一个变量y,用来保存一个实数charc;//定义一个变量c,用来保存一个字符chars[100];//定义一个变量s,用来保存一个字符串,最多99个字符变量名的命名规则可以由字母、数字、下划线组成,但数字不能放在变量名的起始位置。为了防止混淆,变量名也不能和C语言中已固定了含义的符号重名

6256.3.1数据与输出变量的使用1.将变量x赋值为100,即将100保存到x所代表的内存中:x=100;2.将变量y赋值为20.5,即将20.5保存到y所代表的内存中:y=20.5;3.将变量c赋值为'a',即将'a'保存到c所代表的内存中:c='a';//内存单元中保存的是’a’的ASCII值974.将变量s赋值为"abc",即将"abc"保存到s所代表的内存中。strcpy(s,"abc");输出这些变量的值

6266.3.2数据输入1.输入整型数据的方法如下:scanf("%d",&x);2.输入实型数据的方法如下:scanf("%f",&y);3.输入字符的方法如下:scanf("%c",&c);4.输入字符串的方法如下:scanf("%s",s);5.读入多个变量scanf("%d%f",&x,&y);

6276.3.3算数运算1.常见运算+加法运算符-减法运算符*乘法运算符/除法运算符%模(求余)运算符2.常见运算的书写形式如下:操作对象1运算符操作对象2例如:5+6100%3

6286.3.3算数运算3.注意事项操作对象可以是常量也可以是变量,如果是变量,操作对象的值是变量所对应的内存中存储的数值。除了求余运算要求两个操作对象必须是整数外,操作对象可以为整型数值或实型数值,以上五种算术运算不会改变操作对象的值。如果两个操作对象是不同类型的数据,系统会先把它们转成相同类型(这个转换并不会改变操作对象的值),然后再进行运算,运算结果值的类型也是转换后的类型.除法运算的两个操作对象如果是整型,则结果是去掉小数部分后的整型,例如19/10表达式的值是1。

6296.3.3算数运算【例6.11】输入一个长方形的长和宽,求该长方形的面积#1.#include#2.intmain()#3.{#4.floatx,y;//x,y分别用来保存长方形的长宽#5.floats;//s用来保存长方形的面积#6.printf("请依次输入长方形的长宽:");#7.scanf("%f%f",&x,&y);#8.s=x*y;#9.printf("长方形的面积为%f

630",s);#10.return0;#11.}

6316.3.3算数运算复合表达式在复合表达式中,与数学中的运算规则相似,运算优先级高的运算符先运算,优先级相同的则从左向右依次运算。【例6.12】求复合表达式的值10+20/10【例6.13】求复合表达式的值10*2/5【例6.14】求复合表达式的值(2+10)*2/5+((5+3)%4)*2【例6.15】编写程序,输入一个长方体的长、宽、高,求该长方体的表面积

6326.3.4使用函数自顶向下、逐步分解复杂功能的方法就是程序设计中经常采用的模块化程序设计方法,该方法解决了人类思维能力的局限性和所需处理问题的复杂性之间的矛盾。C语言中的函数可分为库函数和用户自定义函数两种:(1)库函数由C编译程序提供或第三方提供,如printf、scanf、strcpy等,有了它们用户不再需要为实现这些功能编写代码,可减少重复劳动、提高程序开发效率。(2)用户自定义函数由用户根据需要自己编写的函数即用户自定义函数,这些函数可以是程序细化后的子功能函数,也可以是需要反复使用的子功能函数。

6336.3.4使用函数函数的定义数据类型函数名(参数列表){声明部分语句…}数据类型用于说明函数执行结束后返回的结果的数据类型,若无返回结果可以用“void”说明。函数名是一个名字,其命名规则和变量名相同。函数名后面必须有一对“()”,“()”内的参数列表用来接收传递给本函数的数据,被称为函数参数;函数名后面的一对“{}”内为函数体,可以在函数体内的声明部分定义在该函数内使用的变量,语句部分用于实现该函数的具体功能。

6346.3.4使用函数【例6.16】编写一个函数求两个整数的和。#1.intf(intx,inty)#2.{#3.intt;#4.t=x+y;#5.returnt;#6.}说明:#1行数据类型int说明函数执行结束后返回的结果的数据类型是一个int型数值,函数的名称是f,函数在执行时接受两个整型数值并保存到函数内的整型变量x、y中。#2行与#6行的一对“{}”表示函数体的开始和结束。#3行定义了一个整型变量t。#4行的表达式语句把变量x,y的值相加,和保存到变量t中。#5行return是一条控制语句,它用来结束函数的运行并把变量t的值返回给上级函数。在函数结束后,函数中创建的变量x、y、t占用的内存空间被自动释放。

6356.3.4使用函数函数的调用调用函数的一般形式为:函数名(参数列表);【例6.17】编写一个程序调用“例6.16”中的f函数,输出两个整数的和。#1.intmain()#2.{#3.intx=10,y=20,z;#4.z=f(x,y);#5.printf("%d

636",z);#6.return0;#7.}

6376.3.5几个常用函数1.系统命令函数system()system()函数是库函数,该函数可以发出系统命令,使用该函数需要包含“stdlib.h”头文件,常用系统命令如下:设置窗口大小:modecon命令可设置窗口大小,以下函数调用设置窗口大小为80列、50行:system("modeconcols=80lines=50");设置窗口颜色:color命令可以设置窗口颜色。0=黑色、1=蓝色、2=绿色、3=湖蓝色、4=红色、5=紫色、6=黄色、7=白色、8=灰色、9=淡蓝色、A=淡绿色、B=淡浅绿色、C=淡红色、D=淡紫色、E=淡黄色、F=亮白色,以下命令设置窗口背景色为蓝色、前景色(文字的颜色)为淡绿色:system("color1A");清屏:cls命令可以清除窗口内显示的所有内容,用法如下:system("cls");

6386.3.5几个常用函数2.键盘输入检测函数kbhit()kbhit()是库函数,该函数可以检查当前是否有键盘输入,若有则返回一个非0值,否则返回0,使用该函数需要包含“conio.h”头文件,用法如下:intx;x=kbhit();3.读取字符函数getch()getch()是库函数,该函数可以从键盘读取一个字符并返回该字符,但不在屏幕上显示该字符,使用该函数需要包含“conio.h”头文件,用法如下:charc;c=getch();该函数与scanf的最大区别是,不需要用户键入【ENTER】键也能读取用户输入的字符。

6396.3.5几个常用函数4.产生随机数函数rand()rand()是库函数,该函数根据初始值产生一个随机整数,使用该函数需要包含“stdlib.h”头文件。rand的初始值可用srand函数进行设置,用法如下:intx;srand(100);//设置初始值为100x=rand();5.程序暂停函数Sleep()Sleep()是库函数,该函数可以使程序运行暂停一段时间,使用该函数需要包含“windows.h”头文件,用法如下:Sleep(2000);//使程序暂停2000毫秒

6406.3.5几个常用函数6.隐藏显示光标函数HideCursor()HideCursor()是自定义函数,用户将以下函数录入到程序中可以控制光标的显示与隐藏,使用该函数需要并包含头文件“windows.h”。voidHideCursor(intx)//x=0隐藏光标,x=1显示光标{CONSOLE_CURSOR_INFOcursor_info={1,x};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);}用法如下:HideCursor(0);//隐藏光标

6416.3.5几个常用函数7.设置光标位置函数GotoXY()GotoXY()是自定义函数,用户将以下函数录入到程序中可以设置光标在屏幕的位置,使用该函数需要并包含头文件“windows.h”。voidGotoXY(intx,inty)//goto语句{COORDpos;pos.X=x-1;pos.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}用法如下:GotoXY(10,5);//将光标定位在第5行、第10列

6426.3.5几个常用函数8.设置输出文本的颜色SetColor()颜色color取值范围0~15,分别代表0=黑色、1=蓝色、2=绿色、3=湖蓝色、4=红色、5=紫色、6=黄色、7=白色、8=灰色、9=淡蓝色、10=淡绿色、11=淡浅绿色、12=淡红色、13=淡紫色、14=淡黄色、15=亮白色。voidSetColor(intcolor){HANDLEconsolehwnd;consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(consolehwnd,color);}用法如下:SetColor(4);//设置输出的文本的颜色为红色

6436.3.5几个常用函数9.设置输出文本的背景颜色SetBkColor()颜色color取值范围0~15,代表颜色与SetColor()中相同。voidSetColorBk(intcolor){HANDLEconsolehwnd;consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(consolehwnd,color<<4);}用法如下:SetColorBk(4);//设置输出的文本背景色为红色

6446.4选择结构程序设计

6456.4.1关系运算C语言提供了以下六种关系运算符:==等于运算符!=不等于运算符>大于运算符>=大于等于运算符<小于运算符<=小于等于运算符表达式形式:操作对象1关系运算符操作对象2

6466.4.1关系运算【例6.18】关系运算#1.#include#2.intmain()#3.{#4.intx=1,y=4,z=14;#5.printf("%d,",x=x-y);#8.printf("%d,",x+y!=z);#9.printf("%d

647",z>3*y+10);#10.printf("%d,",x

648",z>y>x);#12.return0;#13.}

6496.4.2逻辑运算1.C语言提供了以下三种逻辑运算符:!逻辑非运算符&&逻辑与运算符||逻辑或运算符逻辑运算符被用于对操作对象的值进行逻辑运算,对于逻辑运算符,它的操作对象只有0和非0的区别,运算结果表达式的值为0或1,逻辑运算不改变操作对象的值。2.表达式形式:!操作对象操作对象1&&操作对象2操作对象1||操作对象2

6506.4.2逻辑运算【例6.19】逻辑运算#1.#include#2.intmain()#3.{#4.intx=2,y=3,z=4;#5.printf("%d,",x<=1&&y==3);#6.printf("%d,",x<=1||y==3);#7.printf("%d,",!(x==2));#8.printf("%d,",!(x<=1&&y==3));#9.printf("%d

651",x<2||y==3&&z<4);#10.return0;#11.}

6526.4.3if语句1.if(表达式)语句复合语句如果if需要控制多条语句,则可以把这多条语句放在一对“{}”之内构成一条复合语句。表达式0非0语句

6536.4.3if语句【例6.21】编写程序,从键盘输入整数,判定它是否为大于100的数。。a>100输出符合提示结束开始0非0输出提示读入变量a

6546.4.3if语句程序代码:#1.#include#2.intmain()#3.{#4.inta;#5.printf("从键盘输入整数,判定它是否为大于100

655");#6.printf("Thenumber:");#7.scanf("%d",&a);#8.if(a>100)#9.printf("Thenumber%dislargerthan100.

656",a);#10.return0;#11.}

6576.4.3if语句2.if(表达式)语句1else语句2表达式语句10非0语句2

6586.4.3if语句【例6.21】从键盘输入一个整数,判定它是否为大于100的数。流程图如图所示:a>100输出符合提示结束开始0非0输出提示读入变量a

6596.4.3if语句程序代码:#1.#include#2.intmain()#3.{#4.inta;#5.printf("Theprogramgetsanumber,andshowsifitislargerthan100.

660");#6.printf("Thenumber:");#7.scanf("%d",&a);#8.if(a>100)#9.printf("Thenumber%dislargerthan100.

661",a);#10.return0;#11.}

6626.4.4if语句嵌套if语句中包含的子语句也可以是if语句,在if语句中又包含一个或多个if语句的结构称为if语句的嵌套,下例即为if语句嵌套的一种结构形式:if()if()语句1else语句2elseif()语句3else语句4

6636.4.4if语句嵌套【例6.27】求三个整数的最大值。流程图如图所示:a>b&&a>c结束开始0非0读入变量a,b,cb>c输出a输出c输出b非00

6646.4.4if语句嵌套#1.#include#2.intmain()#3.{#4.inta,b,c;#5.printf("Enterthreeinteger:");#6.scanf("%d%d%d",&a,&b,&c);#7.if(a>=b&&a>=c)#8.printf("max=%d

665",a);#9.else#10.{#11.if(b>c)#12.printf("max=%d

666",b);#13.else#14.printf("max=%d

667",c);#15.}#16.return0;#17.}

6686.4.5switch语句C语言提供switch语句可以直接处理多分支选择,它的一般格式如下:switch(表达式){case常数表达式1:语句序列1case常数表达式2:语句序列2……case常数表达式n:语句序列ndefault:语句序列n+1}

6696.4.5switch语句switch语句的执行流程图如图所示:==常量10非0==常量20非0......0非0==常量n0非0default0非0求switch表达式的值语句序列1;break;......语句序列2;break;语句序列n;break;语句序列n+1

6706.4.5switch语句【例6.28】编写程序,输入1~5的一个数字,输出以该数字打头的一个成语。x==1结束开始0非0读入变量x输出一帆风顺x==20非0输出二话不说x==30非0输出三心二意x==40非0输出四面楚歌x==50非0输出五湖四海default0非0输出输入有误

6716.5循环结构程序设计

6726.5.1while循环while语句用来实现“当型”循环。while语句的格式如下:while(表达式)循环体;表达式0非0语句表达式0非0语句

6736.5.1while循环【例6.29】编写程序求sum=1+2+3+…+100的值。流程图如图所示:i=1sum=0i<=100sum=sum+i输出sum0非0开始结束

6746.5.1while循环#1.#include#2.intmain()#3.{#4.inti=1,sum=0;#5.while(i<=100)#6.{#7.sum=sum+i;#8.i=i+1;#9.}#10.printf("sum=%d

675",sum);#11.return0;#12.}

6766.5.2dowhile循环dowhile语句用来实现“直到型”循环,它类似于while语句。唯一的区别是控制循环的表达式在循环底部测试是否为真,因此循环总是至少执行一次。dowhile语句的格式如下:do循环体while(表达式);表达式非00语句

6776.5.2dowhile循环【例6.31】在屏幕上随机位置以随机颜色显示字母,按任意键结束。流程图如图所示:是否有按键暂停10毫秒显示光标结束开始非00设置屏幕大小隐藏光标、清屏设置随机位置设置随机颜色输出随机字符

6786.5.2dowhile循环#1.#include#2.intmain()#3.{#4.system("modeconcols=80lines=30");#5.HideCursor(0);#6.system("cls");#7.do#8.{#9.GotoXY(rand()%75+1,rand()%25+1);#10.SetColor(rand()%16+1);#11.printf("%c",'A'+rand()%26);#12.Sleep(10);#13.}#14.while(kbhit()==0);#15.HideCursor(1);#16.return0;#17.}

6796.5.3for循环for通常用于循环次数可以确定的情况。for语句的格式为:for(表达式1;表达式2;表达式3)循环体;表达式1表达式2语句0非0表达式3

6806.5.3for循环【例6.32】用for语句输出26个大写字母。流程图如图所示:c='A',i=0i<26输出c+i结束开始0非0i=i+1

6816.5.3for循环#1.#include#2.intmain()#3.{#4.inti;#5.charc='A';#6.system("cls");#7.for(i=0;i<26;i=i+1)#8.printf("%c",c+i);#9.return0;#10.}

6826.5.4循环嵌套一个循环体内的语句又是一个循环语句,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。while循环、dowhile循环、for循环可以相互嵌套,虽然循环嵌套增加了编程的难度,对编程者的逻辑思维能力要求也提出了更高的要求,但循环嵌套的程序可以实现更加强大的功能。初学者需要注意的是外循环每执行一次,内循环都要执行一个完整的循环。即外循环执行一次,内循环中的语句执行N次(N受内循环的条件控制);外循环执行M次,则内循环中的语句需要执行M*N次。

6836.5.4循环嵌套【例6.36】修改上一节的飞机飞行程序,实现飞行循环飞行,直到用户按键退出。i>-10绘制飞机暂停50毫秒清除飞机i=i-1显示光标结束开始0非0设置屏幕大小关闭光标i=90是否有键按下否是

6846.5.4循环嵌套【例6.37】打字游戏编写字符雨程序,从程序屏幕的顶端随机坠落字母,字母落到屏幕底端后砸扁下方字母后消失,用户按下任意键盘按键退出本程序,程序运行结果如下图所示:

6856.6Windows窗口程序设计

6866.6.1Windows窗口程序结构1.程序组成开发一个Windows窗口程序,用户需要创建“程序代码”和“用户界面(简称UI)资源”两部分内容,然后使用编译器将两部分内容合并到一起构成一个EXE文件即Windows窗口应用程序。1)程序代码用WinMain函数取代了标准C语言程序中的main函数,成为Windows窗口应用程序新的入口点。Windows窗口程序对C语言的基本语法规则和功能并没有修改。2)UI资源UI资源实际上是一组用来描述程序窗口布局的数据,所以可以直接编辑这些数据实现增删窗口元素或调整窗口元素的位置和大小等。VC开发环境包含了一个UI资源编辑工具(资源编辑器),提供直观的窗口程序UI修改功能。

6876.6.1Windows窗口程序结构2.运行模式否程序从WinMain()开始创建窗口的定义(窗口类创建窗口使用GetMessage取得消息是否为退出消息退出程序是窗口函数处理消息处理消息程序其它模块返回操作系统Windows操作系统

6886.6.2创建Windows窗口程序1.新建项目在对话框的项目类型栏中选择“Win32Application”表示要创建Windows窗口程序项目。2.修改项目选项在“Win32应用程序向导”对话框中选择“Atypical"HelloWord!"application”选项,表示要创建一个能输出“HelloWorld!”的Windows窗口程序项目,然后点击鼠标左键单击【完成】按钮。3.编辑程序4.调试运行

6896.6.3输出文本1.输出文本函数BOOLTextOut(HDChdc,//输出文字需要的窗口参数intnXStart,//输出字符串左上角x坐标intnYStart,//输出字符串左上角y坐标LPCTSTRlpString,//输出的字符串intcchString//输出的字符串的字符个数);例如:chars[100];...TextOut(hdc,100,100,s,lstrlen(s));

6906.6.3输出文本2.设置文本颜色COLORREFSetTextColor(COLORREFcrColor)例如:COLORREFOldColor,NewColor=RGB(255,0,0);OldColor=SetTextColor(hdc,NewColor);//设置为红色…//输出文本SetTextColor(hdc,OldColor);//恢复原文本颜色3.设置文本背景颜色COLORREFSetBkColor(COLORREFcrColor)例如:COLORREFOldBkColor,NewBkColor=RGB(0,0,255);OldBkColor=SetBkColor(hdc,NewBkColor);//设置文本背景颜色蓝色…//输出文本pDC->SetBkColor(hdc,OldColor);//恢复原文本背景颜色

6916.6.3输出文本4.设置背景模式Windows系统函数intSetBkMode(HDChdc,intnBkMode)可设置文本的背景模式。背景模式决定了在绘制文本前是否用背景色覆盖输出区域。参数nBkMode指定要设置的模式,可为下列值之一:OPAQUE:缺省模式,背景在文本输出之前用当前背景色填充;TRANSPARENT:背景在绘图之后不改变。例如:intOldBkMode=SetBkMode(hdc,TRANSPARENT);//设置背景透明…//输出文本SetBkMode(hdc,OldBkMode);//恢复原文本背景模式

6926.6.4绘制图形1.绘图函数绘制直线可以先用MoveToEx(HDChdc,intx,inty,LPPOINTlpPoint)移动当前点到指定位置,再用LineTo(HDChdc,intx,inty)向指定点画线。例如:MoveToEx(hdc,10,10,NULL);LineTo(hdc,210,110);//绘制一条直线绘制矩形可以使用Rectangle(HDChdc,intx1,inty1,intx2,inty2)绘制一个矩形,通常x1,y1为矩形左上角坐标、x2,y2为矩形右下角坐标。例如:Rectangle(hdc,230,10,430,110);//绘制一个矩形

6936.6.4绘制图形绘制椭圆或圆可以使用Ellipse(HDChdc,intx1,inty1,intx2,inty2)绘制椭圆或圆。x1,y1,x2,y2为椭圆的外接矩形的顶点坐标,外接矩形宽度和高度都必须大于2且小于32767。例如:Ellipse(hdc,10,130,210,230);//绘制一个椭圆绘制圆角矩形可以使用RoundRect(HDChdc,intx1,inty1,intx2,inty2,intx3,inty3)绘制圆角矩形,其中x3值表示绘制圆角使用椭圆的宽度,y3值表示绘制圆角使用椭圆的高度。例如:RoundRect(hdc,230,130,430,230,25,25);//绘制圆角矩形

6946.6.4绘制图形2.使用画笔使用系统函数CreatePen(intnPenStyle,intnWidth,COLORREFcrColor)创建画笔。参数nPenStyle指定画笔的风格;参数nWidth指定画笔的宽度;参数crColor用来设定画笔的颜色。nPenStyle取值可以参见下表风格说明PS_SOLID创建一支实线画笔PS_DASH创建一支虚线画笔(画笔宽度<=1有效)PS_DOT创建一支点线画笔(画笔宽度<=1有效)PS_DASHDOT创建一支虚线和点交替的画笔(画笔宽度<=1有效)PS_DASHDOTDOT创建一支虚线和两点交替的画笔(画笔宽度<=1有效)PS_NULL创建一支空画笔,绘制填充图形时不显示边框PS_INSIDEFRAME创建一支画笔,该画笔在封闭形状的框架内画线

6956.6.4绘制图形画笔建立好之后,还需要将它附加到系统中。系统函数SelectObject()可以将一个画笔附加到系统中。系统在同一时间只能使用一个画笔,因此,在将一个画笔附加到系统时,通常需要保存系统内原来的画笔,以便在需要的时候进行恢复。画笔使用方法如下:HPENhNewPen=CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));//创建新画笔HPENhOldPen=(HPEN)SelectObject(hdc,hNewPen);//选择新笔、保存旧笔…//绘图SelectObject(hdc,hOldPen);//恢复旧画笔DeleteObject(hNewPen);//删除画笔

6966.6.4绘制图形3.使用画刷使用系统函数CreateSolidBrush(COLORREFcrColor)可以创建原色画刷,其中参数crColor用来设定画刷的颜色。使用系统函数CreateHatchBrush(intnIndex,COLORREFcrColor)可以创建阴影画刷,参数nIndex用来设定画刷的阴影类型。下表给出了画刷阴影类型的定义。HS_BDIAGONAL45度的向下影线(从左到右)HS_CROSS水平和垂直方向以网格线作出阴影HS_DIAGCROSS45度的网格线阴影HS_FDIAGONAL45度的向上阴影线(从左到右)HS_HORIZONTAL水平的阴影线HS_VERTICAL垂直的阴影线

6976.6.4绘制图形画刷建立好之后,还需要将它附加到系统中。系统函数SelectObject()可以将一个画刷附加到系统中。系统在同一时间只能使用一个画刷,因此,在将一个画刷附加到系统时,通常需要保存系统内原来的画刷,以便在需要的时候进行恢复。画刷使用方法如下:HBRUSHhNewBrush=CreateHatchBrush(HS_CROSS,RGB(0,0,255));//创建新画刷HBRUSHhOldBrush=(HBRUSH)SelectObject(hdc,hNewBrush);//选择新画刷、保存旧画刷…//绘图SelectObject(hdc,hOldBrush);//恢复旧画刷DeleteObject(hNewBrush);//删除画刷

6986.6.5输入处理1.菜单输入进入资源编辑界面修改菜单资源,添加菜单项修改代码,处理菜单消息LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_COMMAND:switch(wmId){caseID_DEMO://添加新菜单的IDMessageBox(hWnd,"演示菜单项","菜单消息",0);break;//处理菜单输入结束}}}

6996.6.5输入处理2.键盘输入在有针对窗口的键盘输入时,系统会调用该窗口的窗口函数。用户只要在窗口函数中添加处理功能即可获得对窗口的键盘输入。WM_CHAR为键盘输入的消息,用户需要在窗口函数的switch语句添加“caseWM_CHAR:”项处理该消息。用户键盘按键的ASCII码值通过wParam参数传入,用户根据该值即可确定用户的按键。LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_CHAR://添加键盘输入消息处理chars[100];sprintf(s,"按键:%c",wParam);MessageBox(hWnd,s,"按键消息",0);break;//处理键盘输入结束}}

7006.6.5输入处理3.鼠标输入WM_LBUTTONDOWN为鼠标左键按键时输入的消息,Windows系统在发送鼠标消息时,将鼠标x、y坐标合并成一个参数lParam,使用LOWORD(lParam)得到x坐标,使用HIWORD(lParam)得到y坐标。LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_LBUTTONDOWN://添加鼠标左键按键输入消息处理chars[100];sprintf(s,"按键:x=%d,y=%d",LOWORD(lParam),HIWORD(lParam));MessageBox(hWnd,s,"鼠标消息",0);break;//处理鼠标左键按键输入结束}}

7011.窗口重绘消息在窗口第一次显示及窗口改变大小的时候,系统都会发送WM_PAINT消息给窗口,窗口的窗口函数接到这个消息后即可重新绘制窗口内容。在需要显示的内容发生改变的时候,用户也可以重新绘制窗口,通过调用系统函数InvalidateRect向窗口发送WM_PAINT消息,方法如下:InvalidateRect(hWnd,0,1);//窗口擦除背景并重绘InvalidateRect(hWnd,0,0);//窗口不擦除背景重绘6.6.6几个重要消息

7026.6.6几个重要消息2.定时器消息创建定时器的系统函数用法如下:::SetTimer(hWnd,1,1000,NULL);处理定时器消息的方法如下:LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_TIMER://添加定时器消息处理switch(wParam){case1://标识为1的定时器...//处理定时器消息break;}break;//处理定时器消息结束}}

703END谢谢!

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭