计算机程序设计理论

112
计计计计计计计计计

Upload: candace-myers

Post on 30-Dec-2015

45 views

Category:

Documents


0 download

DESCRIPTION

计算机程序设计理论. 吴文涛 :13855170994 [email protected] 丁彬勇 :15156078826 [email protected] 汪季英 :15155172387 [email protected] 曹思彤 :13637094327 @mail.ustc.edu.cn. 课程章节. 一、计算机及程序设计基础 二、 C 程序结构和设计方法 三、数据类型、运算符和表达式 四、程序的控制结构与基本算法 五、数组 六、函数 七、预处理 八、指针 九、结构体与共用体 十、位运算 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 计算机程序设计理论

计算机程序设计理论

Page 2: 计算机程序设计理论

吴文涛 :13855170994 [email protected] 丁彬勇 :15156078826

[email protected] 汪季英 :15155172387

[email protected] 曹思彤 :13637094327

@mail.ustc.edu.cn

Page 3: 计算机程序设计理论

课程章节一、计算机及程序设计基础二、 C 程序结构和设计方法三、数据类型、运算符和表达式四、程序的控制结构与基本算法五、数组六、函数七、预处理八、指针九、结构体与共用体十、位运算十一、流与文件操作十二、面向对象程序设计语言 C++ 简介

Page 4: 计算机程序设计理论

教材与参考书《 C 语言程序设计 》《计算机程序设计学习指导与练习 》《 The C Programming Language》( K&R)

Page 5: 计算机程序设计理论

第一章 计算机及程序设计 基础知识

Page 6: 计算机程序设计理论

1.1 计算机的发展史 1.2 计算机系统的组成及工作原理 1.3 微型计算机的系统结构 1.4 信息的表示及存储形式 1.5 计算机程序及算法

本章主要内容Key Questions

Page 7: 计算机程序设计理论

§1. 1 计算机发展史

在电子计算机之前,人类用于计算的辅助工具有:算盘,手摇计算机(机械式,主要由机械齿轮组成),大型微分分析仪等。最早研制电子计算机,是为了解决科技进步特别是军事应用方面运算量越来越大的问题。

Page 8: 计算机程序设计理论

世界上第一台电子计算机 诞生于 1946年 2 月的世界上第一台电子计算机,是为

美国陆军计算枪炮火力表而研制。每张火力表需要计算数百条弹道,一条飞行时间为 60 秒的弹道,手摇计算机 20 小时,大型微分分析仪 15 分钟。军方要求每天计算机 6 张火力表。

Page 9: 计算机程序设计理论

ENIAC ( 埃尼亚克 )

这台名为 这台名为 ENIAC ENIAC (( 电子数字积分计电子数字积分计算机的缩写)的机算机的缩写)的机器,使用器,使用 1880018800个电子管,个电子管, 15001500多个继电器,耗电多个继电器,耗电150150 千瓦,占地千瓦,占地170170 平方米,重达平方米,重达3030 吨,可谓“庞吨,可谓“庞然大物”也。然大物”也。

Page 10: 计算机程序设计理论

电子计算机时代的到来 ENIAC 由美国宾夕法尼亚州立

大学莫尔学院设计研制,价值40 多万美元,运算速度 5000次 / 秒。今天看来,其运算速度低得可怜,而在当时,计算一条弹道时间缩短为 30 秒。它运算两小时,相当于一个物理学家100 年的手工计算,不能不说是一个划时代的事件——表明了电子计算机时代的到来。

Page 11: 计算机程序设计理论

计算机史 从 1946 年到今天,

计算机技术已经经历了四次革命性的变化(四代),一代比一代体积缩小,功能增强,价格下降。

Page 12: 计算机程序设计理论

第一代( 1946-1958 ) 电子技术,核心元件

电子管,几千次 / 秒,用于军事与科学研究。

Page 13: 计算机程序设计理论

第二代( 1959-1963 ) 半导体技术,核心元件晶体管,几

十万次 / 秒,用于科学计算、数据和事务处理 。

1954 年,美国贝尔实验室研制成功第一台使用晶体管线路的计算机,取名“催迪克”( TRADIC ),装有 800 个晶体管。

Page 14: 计算机程序设计理论

第三代( 1964-1970 ) 固体物理技术,核心

元件中小规模集成电路,在几平方毫米单晶硅片上集成十几个至上百个电子元件;几十万至几百万次 /秒;用于各个科学领域 。

体积变小,功耗更低

价格降低

运算速度提高

应用领域进一步扩大

Page 15: 计算机程序设计理论

第四代( 1971至今) 核心元件大规模和超

大规模集成电路 (如“奔腾 4 处理器”包含 4200 万个晶体管 );上千万次至上亿次 /秒;进入现代社会各个领域。

超大规模集成电路应用的直接结果是微型计算机的诞生。

Page 16: 计算机程序设计理论

今天之计算机 迄今为止的四代计算机都是按美籍匈牙利数学家冯 ·诺依曼提出的工作原理设计制造的,所以也称为“冯 ·诺依曼型计算机”。

随着技术的发展,今天的计算机已不再是一种单纯的计算工具。今天的计算机,除了高速运算(数十亿次 / 秒),还有逻辑处理功能,是一种具有强大信息处理能力的“智能化机器”。换言之,计算机应用已从单纯的数值计算转入信息处理领域。正因为如此,才使计算机走出科研院所的“象牙之塔”,进入现代社会的各个领域。今天的电子计算机,不仅会高速进行各种各样的科学计算,而且象人脑一样,会“判断”,会“思考”,会迅速果断地处理各种问题。所以,越来越多的人开始把计算机叫做“电脑”。

Page 17: 计算机程序设计理论

计算机发展史上的重要人物 查尔斯 ·巴比奇( Charles Babbage )。这一位十九世纪的英国数学家,发明了世界上第一台机械计算机器——差分机。在 19 世纪 20、 30 年代,巴比奇就设计了差分机和分析机,他把机器设计成三个部分,一是用来储存数据信息的“仓库( The Store )”,二是进行数据运算处理的“工场( The mill )”。

而巴比奇一生的后四十年都致力于发展一部“会分析的机器”,这位高速数字电脑之父希望这部机器只要输入资料后就可不须人类直接指示,进行各种数学运算。那台怎么也算不上美观的机械,却和现代电脑一样,拥有记忆体、运算部门、控制中心和输出输入中心这四部分,可谓历史性的创造。

Page 18: 计算机程序设计理论

计算机发展史上的重要人物英国数学家图灵 (Turing):创建了自动机理论,发展了可计算机性理论,奠定了人工智能的基础。美籍匈牙利数学家冯 .诺依曼 (Von Neumann) :确立了现代计算机的基本结构,即冯 .诺依曼体系结构。其要点是

计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成数据和指令(程序)以二进制代码形式不加区别地在执行前存放在存储器中存储程序和数据的概念

Page 19: 计算机程序设计理论

计算机科学之父:阿伦·图灵 Alan Mathison Turing,1912~ 1954 ,英国数学

右图:图灵纪念馆

Page 20: 计算机程序设计理论

阿兰 ·麦席森 ·图灵, 1912 年生于英国伦敦, 1954 年死于英国的曼彻斯特,他是计算机逻辑的奠基者,许多人工智能的重要方法也源自于这位伟大的科学家。

他对计算机的重要贡献在于他提出的有限状态自动机也就是图灵机的概念,对于人工智能,它提出了重要的衡量标准“图灵测试”,如果有机器能够通过图灵测试,那他就是一个完全意义上的智能机,和人没有区别了。

Page 21: 计算机程序设计理论

图灵奖:计算机界的诺贝尔奖 ACM 是美国计算机学会的缩写。最初这是美国的

一个学术性组织,现在是美国乃至全世界最重要、影响最大的一个计算机学术团体。 1966年, ACM创建图灵奖,有 " 计算机界的诺贝尔奖 " 之称。这个奖以英国数学家图灵命名,图灵在计算机出现之前就提出了计算机的模型,设想了它由哪些部件组成,以何种方式和顺序工作,被称为图灵机,奠定了计算机科学理论的基础。但图灵的结局是个悲剧,他在 42岁正当年富力强,创造力最旺盛的时候用自杀结束了自己的生命,令世人惋惜,用他的名字命名这个奖项就是为了纪念这位伟人。

Page 22: 计算机程序设计理论
Page 23: 计算机程序设计理论

计算机之父—冯·诺依曼 著名美籍匈牙利数学

家。 1903年 12月 3日生于匈牙利布达佩斯的一个犹太人家庭。冯 ·诺伊曼自童年起在吸收知识和解题方面就具有惊人的速度。六岁时他能心算做八位数乘除法,八岁时掌握微积分,十二岁就读懂领会了波莱尔的大作《函数论》要义。一生掌握了七种语言 。

Page 24: 计算机程序设计理论

冯 ·诺依曼对人类的最大贡献是对计算机科学、计算机技术和数值分析的开拓性工作。

ENIAC 机证明电子真空技术可以大大地提高计算技术,不过, ENIAC 机本身存在两大缺点: (1)没有存储器; (2) 它用布线接板进行控制,甚至要搭接见天,计算速度也就被这一工作抵消了。

冯 ·诺依曼由 ENIAC 机研制组的戈尔德斯廷中尉介绍参加 ENIAC 机研制小组后,便带领这批富有创新精神的年轻科技人员,向着更高的目标进军。 1945年 , 他们在共同讨论的基础上 , 发表了一个全新的“存储程序通用电子计算机方案” (EDVAC) 。

Page 25: 计算机程序设计理论

EDVAC 方案明确奠定了新机器由五个部分组成,包括:运算器、逻辑控制装置、存储器、输入和输出设备,并描述了这五部分的职能和相互关系。 EDVAC 机还有两个非常重大的改进,即:– 采用了二进制,不但数据采用二进制,指令也采用二进制;

– 建立了存储程序,指令和数据便可一起放在存储器里,并作同样处理。这些改进简化了计算机的结构,大大提高了计算机的速度。

1946年 7, 8 月间,冯 ·诺依曼和戈尔德斯廷、勃克斯在EDVAC 方案的基础上,为普林斯顿大学高级研究所研制IAS 计算机时,又提出了一个更加完善的设计报告《电子计算机逻辑设计初探》。以上两份既有理论又有具体设计的文件,首次在全世界掀起了一股“计算机热”,它们的综合设计思想,便是著名的“冯 ·诺依曼机”,其中心思想就是存储程序原则:指令和数据一起存储。这个概念被誉为”计算机发展史上的一个里程碑 " 。它标志着电子计算机时代的真正开始,指导着以后的计算机设计。

Page 26: 计算机程序设计理论

§1. 2 计算机系统的组成和工作原理

计算机系统由 硬件系统和软件系统组成.壹 计算机的硬件系统及工作原理

1、硬件系统的基本组成 : 1) 硬件:计算机系统中由电子、机械和光电元件等组成

的各种计算机部件和计算机设备。 裸机:未配置任何软件的计算机。 2) 硬件基本组成 : (1) 运算器 (ALU) (2) 控制器 ( 指挥中心) (3) 存储器(主存和辅存) (4) 输入设备 : 键盘 , 鼠标 , 数字化仪 , 扫描仪等 . ( 5) 输出设备 : 打印机 , 绘图仪 , 显示器等 .说明:衡量存储器容量的单位是字节( B),千字节( KB) 、兆

字节( MB) 、吉字节( GB)、 TB

CPU主机

外设

Page 27: 计算机程序设计理论

运算器 功能:算术运算和逻辑运算 控制器 功能:使计算机能自动地执行程序,并使各部分协调工作

存储器 功能:用于保存程序和数据 主存储器 ( 内部存储器 ) 存放当前所执行程序的指令和数据

辅助存储器 (外部存储器 ) 存放暂不参加运算的程序的指令和数据

输入设备 用于程序和数据输入(标准设备:键盘) 输出设备 用于程序和数据输出(标准设备:显示

器)

Page 28: 计算机程序设计理论

2、其他有关概念:1)中央处理器( CPU ):包括运算器和控制器两大部

分, CPU 是计算机硬件的核心。2)主机:在硬件系统中,内存、 CPU 和连接输入输出

设备的接口统称为主机。3)外部设备:也称为外设,输入设备和输出设备都是

计算机的外部设备。3、基本工作原理 冯•诺依曼的“埃得伐克”理论:二进制、存储程序工

作原理、五大构成部件。 (1) 二进制 : 以二元逻辑为基础 ,用 0和 1 二进制码组

成各种信息进行运算。 (2) “ 存储程序”工作原理 : 在计算机中设置存储器 ,

将二进制编码表示的计算步骤与数据存放在存储器中 , 机器一启动就能按照程序指定的逻辑顺序依次取出存储内容进行译码和处理 , 自动完成由程序所描述的处理工作。它被誉为计算机史上的里程碑。

Page 29: 计算机程序设计理论

计算机工作原理示意图

运算结果

输入设备 主存储器

辅助存储器

输出设备

运算器

控制器

输入 输出

程序原始数据

指令数据线控制信号线

Page 30: 计算机程序设计理论

常用术语

在计算机五大部分中,运算器和控制器是最核心的部分,通常做在一个器件上,称作 CPU 。

【术语】 CPU= 控制器 + 运算器( + 寄存器组) 只有主存(内存)可直接与 CPU交换信息,它与

CPU 组合可实现计算机的基本功能。 【术语】主机 =CPU+ 主存储器 输入 /输出 (Input/Output) 设备和外存合称“外围

设备”。 【术语】外设 =I/O+ 辅助存储器

运算器

输入设备 主存储器

辅助存储器

输出设备

控制器

输入 输出程序

原始数据运算结果

Page 31: 计算机程序设计理论

冯·诺依曼型计算机 上述计算机的基本结构是由美藉匈牙利科学家冯 · 诺依曼于 1946 年提出的。迄今为止所有进入实用的电子计算机都是按冯 · 诺依曼的提出的结构体系和工作原理设计制造的,故又统称为“冯·诺依曼型计算机”。

新一代计算机将努力突破冯氏的结构体系和工作原理,将是“非冯·诺依曼型计算机”。

冯·诺依曼型计算机的两大特征 程序存储(计算机自动连续工作的基础) 采用二进制(机内一切信息均需为二进制编码形式

存在) 冯·诺依曼型计算机的工作原理 存储程序(将欲执行的任务事先编成程序存入主存中)

程序控制(执行时由 CPU调用主存中的程序进行运算)

Page 32: 计算机程序设计理论

指令和指令系统 一台计算机所能执行的各种不同类型指令的总

和。即一台计算机所能执行的全部操作。不同计算机的指令系统包含的指令种类和数目也不同。

指令系统的组成:操作码和操作数 一般均包含算术运算型、逻辑运算型、数据传送型、判定和控制型、输入和输出型等指令。

指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。

Page 33: 计算机程序设计理论

完备性:指用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。

有效性:是指利用该指令系统所编写的程序能够高效率地运行。高效率主要表现在程序占据存储空间小、执行速度快。

规整性:包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。

兼容性:至少要能做到“向上兼容”,即低档机上运行的软件可以在高档机上运行。

Page 34: 计算机程序设计理论

说明 :(1) 操作系统:大致包括五大管理功能:处理器管理、存储管理、设备管理、文件管理和作业管理。分类: P2、 DOS、WINDOWS 、 UNIX(2)计算机语言: 1)机器语言:计算机能直接识别和执行的语言;面向机器 2)汇编语言:是符号化的机器语言;面向机器;汇编 3)高级语言:面向过程,面向对象(解释、编译)(3 )应用软件:为某一应用目的而用系统软件编制的软件。包括应用程序、函数库、子程序库。常见的有字处理软件、电子表格软件、多媒体制作软件

二、软件系统的分类及组成计算机软件:计算机运行时所需的程序、数据和有关文档。

系统软件

应用软件

操作系统语言处理程序

诊断程序维护程序

数据库管理系统软件系统

Page 35: 计算机程序设计理论

两类软件软件通常可以分为两类: System Software (系统软件 ) Application Software (应用软件 )

应用软件:我用的

系统软件:它用的

你可以认为应用软件是 你用的,而系统软件是 计算机用的。

Page 36: 计算机程序设计理论

System Software: The Computer’s Boss

功能 用于使计算机能够管理其本身的内部资源,控制硬件的运行,执行各种基本操作,如使 CPU 与键盘、显示器、打印机和磁盘驱动器通信等。系统软件不用于解决各种业务性或专业性的具体问题。

最重要的一种系统软件是“操作系统”。目前个人计算机最常用的系统软件即美国Microsoft( 微软 ) 公司的 Windows (视窗)系列操作系统。

Page 37: 计算机程序设计理论

Application Software: Your Servant

功能 用于提高计算机用户的工作效率和创造力。

目前个人计算机最常用的应用软件是美国Microsoft( 微软 )公司的 Office 系列办公软件和 Internet Explorer Browser ( IE浏览器 )。前者用于编写文档、处理电子表格、制作网页和多媒体演示软件等,后者用于在因特网上“上网冲浪”——访问远程网站、下载软件、收发电子邮件、网上交友…

Page 38: 计算机程序设计理论

机器语言(指令系统) 其指令为二进制代码 (0 、 1) ,如用 00110011…… 表示相加。 用机器语言编写的程序计算机可直接识别,执行速度最快,但

可读性、可移植性差 汇编语言 用“助记符”代替二进制代码,如用 ADD A,B 表示两数相加。 其程序必须通过翻译程序(汇编程序)翻译成二进制代码后才

能执行。 机器语言和汇编语言都是“面向机器”的低级语言。

程序设计语言程序设计语言

Page 39: 计算机程序设计理论

高级语言(面向过程) 用英文单词和代数表达式编写程序,最接近人类

的自然语言(英语)。 如用 LET C=A+B 表示两数相加。 用高级语言编写的程序称为“源程序”。 源程序必须经过翻译程序翻译后计算机才能处理。 高级语言的翻译程序有两种: 解释程序:翻译一句,计算机执行一句。

(相当于“口译”) 编译程序:将源程序整个翻译成目标程序,

再通过“链接程序”生成 “可执行程序”,

然后交计算机执行。 (相当于“笔译”)

Page 40: 计算机程序设计理论

程序设计语言小结:①低级语言(面向机器语言) 机器语言——其程序无需翻译即可被识别,执行速度最快

汇编语言——其程序需通过翻译程序(汇编程序)处理

常见高级语言种类:常见高级语言种类: BASIC 语言——简单易学 C 语言——编程通用 Fortran 语言——科学计算 Pascal 语言——程序设计教学

【术语 】 指令 = 操作码 + 操作数(地址码) ( 操作码不可缺少 )

②高级语言(面向过程语言) 其程序需通过翻译程序(解释程序 / 编译程序)处理

Page 41: 计算机程序设计理论

名词: 【源程序】用汇编语言或高级语言编写的程序(需经“翻

译”处理)

【翻译程序】将源程序译成目标程序或可执行指令的程序 【目标程序】经翻译程序翻译生成的程序 【可执行程序】经连接程序处理过的程序 互相关系

MOV A , 3

ADD A , 6

A=5, B=4

C=B+A*2/B

0110010

0011011

目标程序

高级语言源程序

汇编语言源程序

汇编程序

编译程序

解释程序

可执行程序

连接程序

翻译一句执行一句

注意——生成目标程序的条件 !

Page 42: 计算机程序设计理论

支持数据库的编程语言 VB :全称 Visual Basic ,它是以 Basic 语言作为其基本语言的一种可视化编程工具

PB :全称 PowerBuilder ,是开发 MIS 系统和各类数据库跨平台的首选,使用简单,容易学习,容易掌握,在代码执行效率上也有相当出色的表现

C++Builder/Delphi :它们都是基于 VCL库的可视化开发工具,它们在组件技术的支持、数据库支持、系统底层开发支持、网络开发支持、面向对象特性等各方面都有相当不错的表现,并且学习使用较为容易,充分提现了所见即所得的可视化开发方法,开发效率高

Visual C++ :是基于 MFC库的可视化的开发工具,从总体上说它是一个功能强大但是不便使用的一种工具。

Java :面向对象特性高,支持的组件技术也非常多,跨平台的特性也使得它在现在和未来的网络开发中占据越来越重要的地位。

Page 43: 计算机程序设计理论
Page 44: 计算机程序设计理论

三、计算机系统的层次结构 

内核:硬件系统桥梁:系统软件

 最外层:应用软件

硬件系统系统软件

用户应用软件

Page 45: 计算机程序设计理论

计算机系统的分类:根据其体积大小和处理能力,通常可分为– Supercomputers (超级计算机)– Mainframe computers (大型计算机)– Workstations (工作站)– Microcomputers (微型计算机)– Microcontrollers (微控制器)

1.3 微型计算机的系统结构

Page 46: 计算机程序设计理论

世界超级计算机全球 TOP500 排行榜 世界超级计算机 TOP500排名,是由国际专业评价超级计算机性能的组织——“ TOP500”倡导发起的。该组织于 1993 年成立,每年 6 月和 11 月各发布一次全世界已安装并在使用的运算速度最快的前 500 台超级计算机的排名,截至到 2003年 6月 27日为止,已经进行了 21届。

到 2003年 6 月排名第一的是 NEC公司的 Earth-Simulator/ 5120超级计算机 ,运算速度达到 35.86 万亿次。

日本的 K 超级计算机的运算能力为每秒 8.16 千万亿次,超过中国的天号 -1A 成为全球运算能力最强的超级计算机系统。 K 配置 68544个 SPARC64 VIIIfx CPU( 中央处理器 ) ,每个 CPU 集成有 8 个内核,内核总数为548352 个,几乎相当于排行榜上其他系统的 2 倍。

Page 47: 计算机程序设计理论

飞速发展的计算机技术 摩尔定律: Intel 的创始人之一 Gordon

Moore在 1965 年提出了这个著名的定律,预言单位平方英寸芯片的晶体管数目每过18到 24 个月就将增加一倍。过去四十年的芯片产业一直遵循摩尔定律每 18 个月速度增长一倍的规律运行。

事实上, Intel的 CPU芯片上的晶体管数目已经由 1971年的 2300增长到今天Pentium 4 处理器的 5500 万,即增长了两万四千倍。

索尼公司展示新型掌上电脑

Page 48: 计算机程序设计理论
Page 49: 计算机程序设计理论

CPU CPU 的英文全称是 Central Processing Unit ,即中央处理器。 CPU从雏形出现到发展壮大的今天,由于制造技术的越来越先进,其集成度越来越高,内部的晶体管数达到几百万个。虽然从最初的CPU 发展到现在其晶体管数增加了几十倍,但是 CPU 的内部结构仍然可分为控制单元,逻辑单元和存储单元三大部分。 CPU 的性能大致上反映出了它所配置的那部微机的性能,因此 CPU 的性能指标十分重要。

主频,也就是 CPU 的时钟频率,简单地说也就是 CPU 的工作频率。

内存总线速度或者叫系统总路线速度,一般等同于 CPU 的外频。 工作电压,工作电压指的也就是 CPU正常工作所需的电压。 制造工艺,制造工艺的微米是指 IC 内电路与电路之间的距离。

制造工艺的趋势是向密集度愈高的方向发展。密度愈高的 IC 电路设计,意味着在同样大小面积的 IC中,可以拥有密度更高、功能更复杂的电路设计。。

Page 50: 计算机程序设计理论

CPU 发展史 1971 年。世界上第一块微处理器 4004在 Intel公司诞生了。它出现的意义是划时代的,比起现在的 CPU, 4004显得很可怜,它只有 2300 个晶体管,功能相当有限,而且速度还很慢。

1978 年, Intel公司首次生产出 16 位的微处理器命名为 i8086 ,由于这些指令集应用于 i8086和 i8087 ,所以人们也这些指令集统一称之为 X86指令集。这就是 X86 指令集的来历。

1979 年, Intel公司推出了 8088芯片,它是第一块成功用于个人电脑的CPU 。它仍旧是属于 16 位微处理器,内含 29000 个晶体管,时钟频率为4.77MHz ,地址总线为 20 位,寻址范围仅仅是 1MB 内存。 8088 内部数据总线都是 16 位,外部数据总线是 8 位,而它的兄弟 8086是 16 位,这样做只是为了方便计算机制造商设计主板。

1981年 8088芯片首次用于 IBM PC 机中,开创了全新的微机时代。 1982 年, Intel推出 80286芯片,它比 8086和 8088都有了飞跃的发展 1985年 Intel推出了 80386芯片,它 X86 系列中的第一种 32 位微处理器,

而且制造工艺也有了很大的进步 1989 年, Intel推出 80486芯片,它的特殊意义在于这块芯片首次突破了

100 万个晶体管的界限,集成了 120 万个晶体管。

Page 51: 计算机程序设计理论

现今的 CPU Pentium : 就是大名鼎鼎的“奔腾”处理器,它是 Intel在 1993

年推出的全新一代的高性能处理器 Pentium Pro: Intel在 1996 年推出的第六代 X86 CPU 。 Pentium MMX :与 1996 年底又推出了 Pentium 系列的改进版本 Pntium Ⅱ: 1997年 5 月, Intel又推出了和 Pentium Pro同一个级

别的产品。 Celeron :赛扬是 Intel 针对 PentiumII提出的廉价版本,其核心技术与 PentiumII 相同,企图攻占低价位个人电脑市场,可以说是Intel 为抢占低端市场而专门推出的

Xeon :至强处理器,主要是用于高端的 NT服务器的。 Intel PentiumIII :其受瞩目的原因是其在多媒体方面性能的增强,

能加速需要密集处理运行的程序。 2000年 3月 6日 : AMD 发布 Athlon 1GHz Intel 的 Pentium IV 和 AMD Athlon64 。虽然按照发布时间来说,

Athlon64 要比 Pentium IV 迟一个时代( Pentium IV 发布时间是2000年 11 月,而 Athlon64 则是 2003年 9 月),但 Pentium IV 经过了几年的的换芯,性能也获得了显著提升。

2006年 Intel宣布了酷睿双核处理器。这是第一款面向便携式电脑设计的双核处理器,拥有极佳的性能,至少比 P4快多了。这也是第一款真双核 X86 处理器,共享缓存设计 。

今天的中流砥柱 :酷睿、 i3、 i5、 i7

Page 52: 计算机程序设计理论

计算机主板 主板是电脑系统中最大的一块电路板,它的英文名字叫做“ Mainboard”或“ Motherboard” ,简称M/B 。主板上布满了各种电子元件、插槽、接口等。它为CPU 、内存和各种功能(声、图、通信、网络、 TV、SCSI 等)卡提供安装插座(槽);为各种磁、光存储设备、打印和扫描等 I/O 设备以及数码相机、摄像头、“猫”( Modem )等多媒体和通讯设备提供接口,实际上电脑通过主板将 CPU 等各种器件和外部设备有机地结合起来形成一套完整的系统。电脑在正常运行时对系统内存、存储设备和其它 I/O 设备的操控都必须通过主板来完成,因此电脑的整体运行速度和稳定性在相当程度上取决于主板的性能。

Page 53: 计算机程序设计理论

计算机主板

Page 54: 计算机程序设计理论
Page 55: 计算机程序设计理论

认识内存 在了解内存的发展之前,我们应该先解释一下几个常用词汇,这将有助于我们加强对内存的理解。 RAM就是 Random Access Memory (随机存贮器)的缩写。它又分成两种 Static RAM (静态随机存贮器)和 Dynamic RAM (动态随机存贮器)。

DRAM ,顾名思义即动态 RAM。 DRAM 的结构比起 SRAM 来说要简单的多,基本结构是一只MOS 管和一个电容构成。具有结构简单、集成度高、功耗低、生产成本低等优点,适合制造大容量存储器,所以现在我们用的内存大多是由 DRAM 构成的。

FP DRAM :又叫快页内存,在 386 时代很流行。 EDO DRAM: EDO RAM――Extended Date Out RAM——外扩充数据模式存储器 ,流行在 486以及早期的奔腾电脑上。

SDRAM 是一种改善了结构的增强型 DRAM 。 计算机的制造工艺发展到已经可以把微处理器( CPU )的时钟频率提高的一千兆的边缘。相应的内存也必须跟得上处理器的速度才行。现在有两个新的标准, DDR SDRAM 内存和 Rambus 内存。

Page 56: 计算机程序设计理论

显示器 从早期的黑白世界到现在的色彩世界,显示器走过了漫长而艰辛的历程,随着显示器技术的不断发展,显示器的分类也越来越明细。– CRT显示器

• 按大小分类• 调控方式不同• 显像管种类的不同

– LCD液晶显示器

Page 57: 计算机程序设计理论

声卡和音箱

Page 58: 计算机程序设计理论

Microcontrollers :微控制器 亦称为“嵌入式”、

“专用型”或“隐藏式”计算机。微控制器实际上是安装在各种智能设备(如电脑控制的微波炉、袖珍计算器等)中的微型计算机芯片(通常称为“单片机”)。

价格一般在几~几十美元。

Page 59: 计算机程序设计理论

单片机芯片: SST89C58 单片机

正面

背面

Page 60: 计算机程序设计理论

§1.4 信息的表示与存储一、数制

1. 进位记数制

概念:用进位的方法进行记数的数制称为进位记数制。

三要素:

111=1*102+1*101+1*100

123.456=1*102+2*101+3*100+4*10-1+5*10-2+6*10-3

例如 10 进制: 0~9 、基数 10 ,每一位上数字的权重10n

在计算机中,用的是二进制,其他还常用八进制、十六进制,其三要素如下表:

(按权展开式)

数据元素、基数、权重。

Page 61: 计算机程序设计理论

记数制 数据元素 基数 权重 举例十进制 0~9 10 10n (123)10 456.321D

二进制 0、 1 2 2n (1010)2 1001.101B

八进制 0~7 8 8n (567)8 745.217O

十六进制 0~9、 A~F

16 16n (2A2B)16 123.321H

练习101.1B=

(17)8=

(1A.8)16=

1*22+0*21+1*20+1*2-1=5.5D

1*81+7*80=15D

1*161+10*160+8*16-1=26.5D

Page 62: 计算机程序设计理论

2 、二进制、八进制、十进制、十六进制转换 二进制、八进制、十六进制 转换为十进制 方法:按权展开式 十进制转换为二进制、八进制、十六进制 方法:整数除基取余,直至商 0 ,余数倒序排(短除) 小数乘基取整,直至足精,整数正序排(短乘)例 1 将 43D转换成二进制、八进制、十六进制

43221 1210 12

5 02

2 121 020 1

43D=101011B4385 38

0 5

43D=(53)8

43162 1116

0 2

43D=(2b)16

Page 63: 计算机程序设计理论

例 2. 将 0.875D转换 成二进制、八进制、十六进制 0.875

X 2

1.75 10.75

X 2

1.50 10.50

X 2 1.0 1 0

0.875D=0.111B

0.875X 8

7.0 7 0

0.875D=(0.7)8

0.875X 16

14.0 E 0

0.875D=(0.E)16

实数是整数、小数分别转化后合在一起:

(43.875)10=(101011.111)2=(53.7)8=(2B.E)16

Page 64: 计算机程序设计理论

二进制、八进制、十六进制的相互转换

•二进制到八进制:

整数从右向左,三位一段,分别转化

小数从左向右,三位一段,分别转化

例 ( 1010101.11011) 2( 001,010,101.110,110) 2

1 2 5 . 6 6•二进制到十六进制:

整数从右向左,四位一段,分别转化

小数从左向右,四位一段,分别转化

例 101,0101.1101,1

5 5 . D 8

0 000

Page 65: 计算机程序设计理论

•八进制到二进制、十六进制到二进制

将八进制的每一个位变成三位二进制数;十六进制的每一个数位变成四位二进制数。例: ( 5 4 3 . 2 1 )8

=(101 100 011 . 010 001)2

例: ( 5 A 3 . 2 1 )16

=(0101 1010 0011 . 0010 0001)2

•八进制和十六进制之间转换必须以二进制作为中间桥梁

(5A3.21)16=(10,110,100,011.001,000,01)2

=(2643.102)8

Page 66: 计算机程序设计理论

十进制(D) 二进制(B) 八进制(O) 十六进制(H) 0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15

0 1

10 11

100 101 110 111

1000 1001 1010 1011 1100 1101 1110 1111

0 1 2 3 4 5 6 7

10 11 12 13 14 15 16 17

0 1 2 3 4 5 6 7 8 9 a b c d e f

3. 二进制、八进制、十六进制、十进制对应关系:

Page 67: 计算机程序设计理论

二 . 计算机中数据的表示 : 1.符号位的表示 : 通常规定一个数的最高位作为符号位,例:“ 0” 表示正,“ 1” 表示负。

2. 原码、反码、补码: (1) 数的原码指最高位为数符位 , “0” 表示正,“ 1” 表

示负。数值部分是原码的绝对值 . (2) 数的反码表示法规定 : 正数的反码和原码相同 ,负

数的反码是对其原码除符号位外各位求反 (0变 1,1变0).

(3) 补码表表示法规定 :正数的补码和原码相同 ,负数的补码是在其反码的最后一位上加 1.

(4) 补码运算具有 3 个优点:减法变加法;符号位参与运算;补码之和等于和的补码。

3. 定点数与浮点数:在计算机中表示小数时 ,根据其小数点位置是否固定 , 分为定点表示法和浮点表示法 .

Page 68: 计算机程序设计理论

– 字节和位• 内存以字节为单元组成• 每个字节有一个地址• 一个字节一般由 8 个二进制位组成• 每个二进位的值是 0或 1

01234567

0123456789

10

……

...

Page 69: 计算机程序设计理论

– 数值的表示方法——原码、反码和补码• 原码:最高位为符号位,其余各位为数值本身的绝

对值• 反码:

– 正数:反码与原码相同– 负数:符号位为 1 ,其余位对原码取反

• 补码:– 正数:原码、反码、补码相同– 负数:最高位为 1 ,其余位为原码取反,再对整个数加 1

3

12

6

9

1

2

4

57

8

10

119-5=4

9+7=16=(14)12

Page 70: 计算机程序设计理论

原码 反码 补码+7 00000111 00000111 00000111

-7 10000111 11111000 11111001

+0 00000000 00000000 00000000

-0 10000000 11111111 00000000

数的范围01111111~11111111(-127~+127)

01111111~10000000(-127~+127)

01111111~10000000(-128~+127)

(用一字节表示数)

负数补码转换成十进制数:最高位不动,其余位取反加 1

例 补码: 11111001 取反: 10000110 加 1 : 10000111=-7

Page 71: 计算机程序设计理论

4. 计算机中的数据单位 : (1) 比特 (bit): 位,即一个二进制位。 (2) 字节 (byte,B) 1B=8 bit 一个英文字符占用 1 个字节,一个汉字占两个 字节。 ( 3 )字( Word) : 是计算机进行数据处理时一次存取、加工和传递的一组二进制代码的位数位,其长度叫字长,是衡量计算机性能的一个重要指标。 ( 4 )其它容量单位: 1K=210B=1024B≈1000B 1M=210KB=220B 1GB=210MB=230B 1TB=210GB=240B

Page 72: 计算机程序设计理论

三、计算机中字符的编码

信息指令信息:程序指令代码

数据信息数值信息:定点数浮点数

非数值信息:字母、运算符、汉字、多媒体信息等

1.英文字符编码: 字符数据包括:运算符号、货币符号、控制符号、字母和数字等。计算机中使用最广泛的字符编码是美国信息交换标准码 (ASCII) .采用 7 位二进制编码,可表示128 个字符。其中 95 个可打印字符, 33 个不可打印和显示字符。

Page 73: 计算机程序设计理论

扩充的 ASCII 表: 8 位码,共 256 个编码,增加了 128个图形符号。

2.汉字编码: 输入码 ( 外码 ) :输入汉字所使用的由字母和数字构成的编码。有流水码、音码、形码、音形码。 汉字交换码(国标码):用于不同汉字信息处理系统之间或者汉字处理系统与通信系统之间进行信息交换的汉字码,要求必须采用统一的形式。

(1)1981年国家颁布 GB2312—80 《通讯用汉字字符集(基本集)及其交换标准码》统称标准码、交换码。收录了 7445 个汉字及符号,其中 6762 个汉字,分为两级:一级 3755 个,二级 3008 个。(区位码)

(2)1995.12 ,发布汉字扩展内码规范—— GBK 编码方案。

(3)2000.3 ,发布 GB18030-2000 ,收录 27000多汉字。

Page 74: 计算机程序设计理论

汉字内码(机内码):是计算机内部对汉字进行采集、传输、存储、加工运算的各个处理过程中使用的汉字编码。汉字字形码(字模码) :汉字字形点阵信息的数字代码 ,存放在汉字字库中。点阵汉字字形中的每一个点阵都由一个二进制位来表示。 (1). 目前点阵的字模标准 : 16*16、 24*24、 32*32、 48*48 其中 24*24 的字形点阵每个字节需 72 个字节。 (2).点阵数越多,字形质量越好,但字库文件占用存储 空间越大,操作速度越慢。 (3). 目前还常用矢量字库(字形用直线描绘,可以任意缩放)和轮廓字库(由直线和曲线命令生成字形,边界可以按比例缩放和旋转)。

Page 75: 计算机程序设计理论

汉字四种编码的关系:

输入码

键盘

交换码

字形码

显示

打印

输入法完成转换

换汉字操作系统完成转

字库驱动程序或字模生成器

Page 76: 计算机程序设计理论
Page 77: 计算机程序设计理论

通用编码字符集 UCS与Unicode 国际标准 ISO 10646 定义了 通用字符集

(Universal Character Set, UCS). UCS 是所有其他字符集标准的一个超集 . 它保证与其他字符集是双向兼容的 . 就是说 , 如果你将任何文本字符串翻译到 UCS格式 , 然后再翻译回原编码 , 你不会丢失任何信息 .

Page 78: 计算机程序设计理论

历史上 , 有两个独立的 , 创立单一字符集的尝试 . 一个是国际标准化组织(ISO)

的 ISO 10646 项目 , 另一个是由 ( 一开始大多是美国的 ) 多语言软件制造商组成的协会组织的 Unicode 项目.

Page 79: 计算机程序设计理论

Unicode 将取代所有这些编码 , 主要通过 UTF-8

的形式 . UTF-8 将应用在 文本文件 (源代码 , HTML 文件 , email 消息 ,

等等 ) 文件名 标准输入与标准输出 , 管道 环境变量 剪切与粘贴选择缓冲区 telnet, modem 和到终端模拟器的串口连接 以及其他地方以前用 ASCII 来表示的字节串

Page 80: 计算机程序设计理论

§ 1.5 计算机程序与算法 一个程序应包括对数据的描述和对数据处理的描述。

1 、对数据的描述,即数据结构。数据结构是计算机学科的核心课程之一,有许多专门著作论述,本课程就不再赘述。 2 、在 C 语言中,系统提供的数据结构,是以数据类型的形式出现的。 3 、对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃思( Nikiklaus Wirth )提出一个公式: 数据结构 + 算法 = 程序 实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,并采用结构化方法来表示。

Page 81: 计算机程序设计理论

1.5.1 算法的概念 算法( Algorithm ) : 是指解决一个具体问

题的意义明确的步骤的集合,是有限的。 算法代表着用系统的方法描述解决问题的策略

机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。

不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

Page 82: 计算机程序设计理论

例:欧几里德算法 欧几里德算法又称辗转相除法,用于计算

两个正整数 a, b 的最大公约数。其计算原理依赖于下面的定理:

定理: gcd(a,b) = gcd(b,a mod b) (a>b 且 a mod b 不为 0)

Page 83: 计算机程序设计理论

有穷性:一个算法应当包含有限的步骤,而不能是无限的步骤;同时一个算法应当在执行一定数量的步骤后,算法结束,不能死循环。– 事实上“有穷性”往往指“在合理的范围之

内”的有限步骤。如果让计算机执行一个历时 1000 年才结束的算法,算法尽管有穷,但超过了合理的限度,人们也不认为此算法是有用的。

确定性:算法中的每一个步骤都应当是确定的,而不是含糊的、摸棱两可的。也就是说不应当产生歧义。特别是算法用自然语言描述时应当注意这点。– 例如:“将成绩优秀的同学名单打印输出”就是有歧义的。“成绩优秀”是要求每门课程都 90 分以上,还是平均成绩在 90 分以上?不明确,有歧义,不适合描述算法步骤。

算法的特性

Page 84: 计算机程序设计理论

有 0 个或多个输入(即:可以没有输入,也可以有输入)– 所谓输入是指算法执行时从外界获取必要信息。

(外界是相对算法本身的,输入可以是人工键盘输入的数据,也可以是程序其它部分传递给算法的数据)

– 例如:不需要输入任何信息,就可以计算出5!;( 0 个输入)

– 例如:如果要计算两个整数的最大公约数,则需要输入 2 个整数 m, n 。( 2 个输入)

有 1 个或多个输出(即算法必须得到结果)– 算法的输出:算法得到的结果。算法必须有结果,没有结果的算法没有意义。(结果可以是显示在屏幕上的,也可以是将结果数据传递给程序的其它部分)

有效性– 算法的每个步骤都应当能有效执行,并能得到确定的结果。例如: b=0 ,则执行 a/b 是不能有效执行的。

Page 85: 计算机程序设计理论

1.5.2 怎样表示一个算法 为了表示一个算法,可以用不同的方法。常用

的算法表示方法:自然语言,传统流程图,结构化流程图( N-S 流程图),伪代码、计算机语言等。(重点:传统流程图, N-S 流程图)

Page 86: 计算机程序设计理论

2 、用自然语言表示算法 自然语言就是人们常用的语言,可以

是汉语、英语或其他语言。 用自然语言表示通俗易懂;但文字冗长,容易出现“歧义”性;而且,用自然语言描述包含分支和循环的算法,不很方便。

一般不使用自然语言描述算法。

Page 87: 计算机程序设计理论

例如:描述计算并输出 z=y/x 的流程,可以用自然语言描述如下:

( 1 )输入 x, y 。

( 2 )判断 x 是否为 0 :

若 X=0,则输出错误信息;

否则计算 y/x z ,且输出 z 。

自然语言描述举例

Page 88: 计算机程序设计理论

例:判断 2000年 ---2500年中的每一年是否闰年,将结果输出。

解:闰年的条件是:

(1) 能被 4 整除,但不能被 100整除的年份是闰年;如 1996, 2004 年。

(2) 能被 100整除,又能被 400整除的年份是闰年。如 1600, 2000 年。不符合这两个条件的年份不是闰年。

Page 89: 计算机程序设计理论

算法如下:设 y 为被检测的年份,可采取以下步骤:S1: 2000 y;

S2: 若 y 不能被 4整除,则输出 y “ 不是闰年”。然后转到 s6.

S3: 若 y 能被 4整除,不能被 100整除,输出 y “ 是闰年”,然后转到 s6 。

S4: 若 y 能被 100整除,又能被 400整除,输出 y “ 是闰年”,然后转到 s6 。

S5: 输出 y “ 不是闰年”。S6: y+1 y;

S7: 当 y2500 时,转 s2 继续执行,如 y>2500, 算法停止。

Page 90: 计算机程序设计理论

( 1 )使 S=0( S 作为累加变量);

( 2 )使 N=1( N 代表分母);

( 3) S+1/N S (执行迭代, S 为迭代变量);

( 4) N+1 N;

( 5 )若 N≤100,转去执行( 3 )以及其后的各步骤;否则执行( 6 );

( 6 )打印 S 的值(即所求之总和)。

例:求下列级数的值

可以写出下面的算法

Page 91: 计算机程序设计理论

◆算法描述语言:是为了说明程序的流程而专门规定的某种语言。它一般介于自然语言与程序设计语言之间,它具有自然语言灵活的特点,同时又接近于程序设计语言的描述。

◆注意:算法描述语言所描述的流程,一般不能直接作为程序来使用,最后还需转换成用某种程序设计语言所描述的程序。

◆与程序设计语言的区别: 前者比较自由,不象后者那样受语法的约束,只要描述得人们

能理解就行,而不必考虑计算机处理时所要遵循的规定或其它一些细节。

算法描述语言

Page 92: 计算机程序设计理论

流程的描述:在程序设计过程中,一般不可能在一开始就用某种程序设计语言编制计算机程序,而是先用某种简单、直观、灵活的描述工具来描述处理问题的流程。当方案确定以后,再将这样的流程转换成计算机程序,这种转换往往是机械的,已经不涉及功能的重新设计或控制流程的变化,而只需考虑程序设计语言所规定的语法要求以及一细节问题。

2 、用流程图表示算法

Page 93: 计算机程序设计理论

流程图:用一些约定的几何图形来描述算法。用某种图框表示某种操作,用箭头表示算法流程。

流程图(的符号及意义)美国标准化协会 ANSI规定了一些常用的流程图符号,已为世界各国程序工作者普遍采用:

起止框

输入输出框

判断选择框

处理框

流程线

…… 注释框

Page 94: 计算机程序设计理论

起止框:表示算法的开始和结束。一般内部只写“开始”或“结束”。

处理框:表示算法的某个处理步骤,一般内部常常填写赋值操作。

输入输出框:表示算法请求输入输入需要的数据或算法将某些结果输出。一般内部常常填写“输入…” ,“打印 /显示…”

菱形框(判断框):作用主要是对一个给定条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。它有一个入口,两个出口。

注释框:注释框不是流程图中必须的部分,不反映流程和操作,它只是对流程图中某些框的操作做必要的补充说明,以帮助阅读流程图的人更好地理解流程图的作用。

Page 95: 计算机程序设计理论

例: 求 5 !

t=1

i=2

t=t*i

i=i+1

i>5

结束

N

Y

开始

Page 96: 计算机程序设计理论

传统流程图采用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程转来转去,使流程图变得毫无规律。

人们对这种流程图进行改进,规定几种基本的结构,然后由这些基本结构按一定规律组成算法结构,整个算法结构是由上而下地将各个基本结构顺序排列起来。这样可以在一定程度上,提高算法的质量。

传统流程图

Page 97: 计算机程序设计理论

★三种基本结构是:( 1 )顺序结构: 按指令的顺序依次执行( 2 )判断选择结构: 根据判别条件有选择地改变 执行流程( 3 )循环结构: 有条件的重复地执行某个程序块

三种基本结构和改进的流程图

Page 98: 计算机程序设计理论

(1) 顺序结构程序设计

依次顺序执行程序语句

执行 a 块执行 a 块执行 b 块执行 b 块

a 块a 块

b 块b 块

A

B

例如,令 a、 b 的值分别为 5、 10; a = 5; b = 10;

Page 99: 计算机程序设计理论

(2)选择结构程序设计 首先判别条件,若条件满足,程序执行 a块,否则,执行 b块;

举例,求 a、 b 两个 数中的最大值; 满足条件否满足 不满足

执行 a 块 执行 b 块

条件成立?条件成立?

执行 a 块执行 a 块 执行 b 块

成立 不成立b >max?b >max?

Max = a;

max = b;

Y N

Page 100: 计算机程序设计理论

(3)循环结构程序设计 循环又分“当型循环”和“直到型循环”

举例,求 1~100 的累加和。 int i, sum=0; while( i< =100) { sum=sum+i; i=i+1; }

直到条件满足为止

执行循环中的指令当条件满足时执行循环中指令

i<=100?i<=100?

sum=sum+i;

i=i+1;

sum=sum+i;

i=i+1;

Y

sum=0;

N

Page 101: 计算机程序设计理论

三种基本结构,有以下共同点: 只有一个入口:不得从结构外随意转入结构中某点。 只有一个出口:不得从结构内某个位置随意转出(跳出)。  结构中的每一部分都有机会被执行到。(没有“死语句”)  结构内不存在“死循环”(无终止的循环) 已经证明:由三种基本结构顺序组成的算法结构,可以解决任何复杂问题。由基本结构组成的算法属于“结构化”算法。

Page 102: 计算机程序设计理论

用 N-S流程图表示算法 基本结构的顺序组合可以表示任何复杂的算法结

构,那么,基本结构之间的流程线就属于多余的了,于是美国学者 I.Nasii和 B.shneiderman 于1973 年提出了一种新的流程图形式。

全部算法写在一个矩形框内,完全去掉了带箭头的流程线。这种流程图称为 N-S 结构化流程图(盒图 ) 。

N-S流程图适于结构化程序设计

Page 103: 计算机程序设计理论

( 1 )顺序结构程序设计

执行 a 块执行 a 块执行 b 块执行 b 块

•依次顺序执行程序语句

先执行 a 操作,再执行 b 操作

Page 104: 计算机程序设计理论

满足条件否满足 不满足

执行 a 块 执行 b 块

•当条件成立,执行 a 操作,当条件不成立,执行b 操作。•a, b 操作允许空操作,即什么都不做。注意选择结构是一个整体,代表一个基本结构。

( 2 )选择结构程序设计

Page 105: 计算机程序设计理论

•循环又分“当型循环”和“直到型循环”

当条件 p满足时执行循环中指令 直到条件 p满足为止

执行循环中的指令

•例:求 5! 的算法用 N-S 图表示

•1 t

•2 i

T*I t

i+1 i

直到 i>5

打印 t

( 3 )循环结构程序设计

Page 106: 计算机程序设计理论

当型循环:当条件 p 成立时,反复执行循环体中指令,直到 p 条件不成立为止。当型循环先判断,再决定是否执行循环体,所以在条件p 一次都不满足时,循环体可能一次都不执行。

当条件 p满足时执行循环中指令

Page 107: 计算机程序设计理论

直到型循环:当条件 p不成立时,反复执行循环体中的指令,直到 p 条件成立为止。直到型循环先执行循环体,然后再判断条件p ,所以循环体至少执行一次。

直到条件 p满足为止

执行循环中的指令

Page 108: 计算机程序设计理论

用伪代码表示算法 用伪代码表示算法(常常用于算法设计) 用传统流程图、 N-S 图表示算法,直观易懂,但绘制比较麻烦,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的,因此,流程图适合表示算法,但在设计算法过程中使用不是很理想。为了设计算法方便,常使用伪代码工具。

伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡。

Page 109: 计算机程序设计理论

用计算机语言表示算法

用某种程序设计语言编写的程序本质上也是问题处理方案的描述,并且是最终的描述。

在一般的程序设计过程中,不提倡一开始就编写程序,特别是对于大型的程序。

程序是程序设计的最终产品,需要经过每一步的细致加工才能得到,如果企图一开始就编写出程序,往往会适得其反,达不到预想的结果。

Page 110: 计算机程序设计理论

例题• 求 5!,用 C 语言表示

Main ( )

{int i,t;

t=1;

i=2;

while(i<=5)

{ t=t*i;

i=i+1;

}

printf(“%d”,t);

}

Page 111: 计算机程序设计理论

•例 求级数的值Main( )

{int sign=1;

float deno=3.0,sum=1.0,term;

while (deno<=100)

{

sign=-sign;

term=sign/deno;

sum=sum+term;

deno=deno+1;

}

printf(“%f”,sum);

}

Page 112: 计算机程序设计理论

算法的基本分类

直接法 枚举法 递推法 递归法