1.12k likes | 1.32k Views
计算机程序设计理论. 吴文涛 :13855170994 wwt@ustc.edu.cn 方昕 :15955168601 klg@mail.ustc.edu.cn 董齐兴 :13053069926 dqx@mail.ustc.edu.cn 沈传魁 :13637094327 sck@mail.ustc.edu.cn . 课程章节. 一、计算机及程序设计基础 二、 C 程序结构和设计方法 三、数据类型、运算符和表达式 四、程序的控制结构与基本算法 五、数组 六、函数
E N D
吴文涛 :13855170994 wwt@ustc.edu.cn • 方昕:15955168601 klg@mail.ustc.edu.cn • 董齐兴:13053069926 dqx@mail.ustc.edu.cn • 沈传魁:13637094327 sck@mail.ustc.edu.cn
课程章节 一、计算机及程序设计基础 二、C程序结构和设计方法 三、数据类型、运算符和表达式 四、程序的控制结构与基本算法 五、数组 六、函数 七、预处理 八、指针 九、结构体与共用体 十、位运算 十一、流与文件操作 十二、面向对象程序设计语言C++简介
教材与参考书 《C语言程序设计 》 《计算机程序设计学习指导与练习 》 《The C Programming Language》 (C程序设计语言)(K&R)
第一章 计算机及程序设计 基础知识
本章主要内容Key Questions • 1.1 计算机的发展史 • 1.2 计算机系统的组成及工作原理 • 1.3 微型计算机的系统结构 • 1.4 信息的表示及存储形式 • 1.5 计算机程序及算法
§1. 1计算机发展史 • 在电子计算机之前,人类用于计算的辅助工具有:算盘,手摇计算机(机械式,主要由机械齿轮组成),大型微分分析仪等。最早研制电子计算机,是为了解决科技进步特别是军事应用方面运算量越来越大的问题。
世界上第一台电子计算机 • 诞生于1946年2月的世界上第一台电子计算机,是为美国陆军计算枪炮火力表而研制。每张火力表需要计算数百条弹道,一条飞行时间为60秒的弹道,手摇计算机20小时,大型微分分析仪15分钟。军方要求每天计算机6张火力表。
ENIAC (埃尼亚克) 这台名为 ENIAC (电子数字积分计算机的缩写)的机器,使用18800个电子管,1500多个继电器,耗电150千瓦,占地170平方米,重达30吨,可谓“庞然大物”也。
电子计算机时代的到来 • ENIAC由美国宾夕法尼亚州立大学莫尔学院设计研制,价值40多万美元,运算速度5000次/秒。今天看来,其运算速度低得可怜,而在当时,计算一条弹道时间缩短为30秒。它运算两小时,相当于一个物理学家100年的手工计算,不能不说是一个划时代的事件——表明了电子计算机时代的到来。
计算机史 • 从1946年到今天,计算机技术已经经历了四次革命性的变化(四代),一代比一代体积缩小,功能增强,价格下降。
第一代(1946-1958) • 电子技术,核心元件电子管,几千次/秒,用于军事与科学研究。
第二代(1959-1963) • 半导体技术,核心元件晶体管,几十万次/秒,用于科学计算、数据和事务处理 。 • 1954年,美国贝尔实验室研制成功第一台使用晶体管线路的计算机,取名“催迪克”(TRADIC),装有800个晶体管。
第三代(1964-1970) • 固体物理技术,核心元件中小规模集成电路,在几平方毫米单晶硅片上集成十几个至上百个电子元件;几十万至几百万次/秒;用于各个科学领域 。 体积变小,功耗更低 价格降低 运算速度提高 应用领域进一步扩大
第四代(1971至今) • 核心元件大规模和超大规模集成电路(如“奔腾4处理器”包含4200万个晶体管);上千万次至上亿次/秒;进入现代社会各个领域。 • 超大规模集成电路应用的直接结果是微型计算机的诞生。
今天之计算机 • 迄今为止的四代计算机都是按美籍匈牙利数学家冯·诺依曼提出的工作原理设计制造的,所以也称为“冯·诺依曼型计算机”。 • 随着技术的发展,今天的计算机已不再是一种单纯的计算工具。今天的计算机,除了高速运算(数十亿次/秒),还有逻辑处理功能,是一种具有强大信息处理能力的“智能化机器”。换言之,计算机应用已从单纯的数值计算转入信息处理领域。正因为如此,才使计算机走出科研院所的“象牙之塔”,进入现代社会的各个领域。今天的电子计算机,不仅会高速进行各种各样的科学计算,而且象人脑一样,会“判断”,会“思考”,会迅速果断地处理各种问题。所以,越来越多的人开始把计算机叫做“电脑”。
计算机发展史上的重要人物 • 查尔斯·巴比奇(Charles Babbage)。这一位十九世纪的英国数学家,发明了世界上第一台机械计算机器——差分机。在19世纪20、30年代,巴比奇就设计了差分机和分析机,他把机器设计成三个部分,一是用来储存数据信息的“仓库(The Store)”,二是进行数据运算处理的“工场(The mill)”。 • 而巴比奇一生的后四十年都致力于发展一部“会分析的机器”,这位高速数字电脑之父希望这部机器只要输入资料后就可不须人类直接指示,进行各种数学运算。那台怎么也算不上美观的机械,却和现代电脑一样,拥有记忆体、运算部门、控制中心和输出输入中心这四部分,可谓历史性的创造。
计算机发展史上的重要人物 • 英国数学家图灵(Turing):创建了自动机理论,发展了可计算机性理论,奠定了人工智能的基础。 • 美籍匈牙利数学家冯.诺依曼(Von Neumann):确立了现代计算机的基本结构,即冯.诺依曼体系结构。其要点是 • 计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成 • 数据和指令(程序)以二进制代码形式不加区别地在执行前存放在存储器中 • 存储程序和数据的概念
计算机科学之父:阿伦·图灵 • Alan Mathison Turing,1912~1954,英国数学家 右图:图灵纪念馆
阿兰·麦席森·图灵,1912年生于英国伦敦,1954年死于英国的曼彻斯特,他是计算机逻辑的奠基者,许多人工智能的重要方法也源自于这位伟大的科学家。阿兰·麦席森·图灵,1912年生于英国伦敦,1954年死于英国的曼彻斯特,他是计算机逻辑的奠基者,许多人工智能的重要方法也源自于这位伟大的科学家。 • 他对计算机的重要贡献在于他提出的有限状态自动机也就是图灵机的概念,对于人工智能,它提出了重要的衡量标准“图灵测试”,如果有机器能够通过图灵测试,那他就是一个完全意义上的智能机,和人没有区别了。
图灵奖:计算机界的诺贝尔奖 • ACM是美国计算机学会的缩写。最初这是美国的一个学术性组织,现在是美国乃至全世界最重要、影响最大的一个计算机学术团体。1966年,ACM创建图灵奖,有"计算机界的诺贝尔奖"之称。这个奖以英国数学家图灵命名,图灵在计算机出现之前就提出了计算机的模型,设想了它由哪些部件组成,以何种方式和顺序工作,被称为图灵机,奠定了计算机科学理论的基础。但图灵的结局是个悲剧,他在42岁正当年富力强,创造力最旺盛的时候用自杀结束了自己的生命,令世人惋惜,用他的名字命名这个奖项就是为了纪念这位伟人。
计算机之父—冯·诺依曼 • 著名美籍匈牙利数学家。1903年12月3日生于匈牙利布达佩斯的一个犹太人家庭。冯·诺伊曼自童年起在吸收知识和解题方面就具有惊人的速度。六岁时他能心算做八位数乘除法,八岁时掌握微积分,十二岁就读懂领会了波莱尔的大作《函数论》要义。一生掌握了七种语言 。
冯·诺依曼对人类的最大贡献是对计算机科学、计算机技术和数值分析的开拓性工作。冯·诺依曼对人类的最大贡献是对计算机科学、计算机技术和数值分析的开拓性工作。 • ENIAC机证明电子真空技术可以大大地提高计算技术,不过,ENIAC机本身存在两大缺点:(1)没有存储器;(2)它用布线接板进行控制,甚至要搭接见天,计算速度也就被这一工作抵消了。 • 冯·诺依曼由ENIAC机研制组的戈尔德斯廷中尉介绍参加ENIAC机研制小组后,便带领这批富有创新精神的年轻科技人员,向着更高的目标进军。1945年, 他们在共同讨论的基础上, 发表了一个全新的“存储程序通用电子计算机方案”(EDVAC)。
EDVAC方案明确奠定了新机器由五个部分组成,包括:运算器、逻辑控制装置、存储器、输入和输出设备,并描述了这五部分的职能和相互关系。EDVAC机还有两个非常重大的改进,即:EDVAC方案明确奠定了新机器由五个部分组成,包括:运算器、逻辑控制装置、存储器、输入和输出设备,并描述了这五部分的职能和相互关系。EDVAC机还有两个非常重大的改进,即: • 采用了二进制,不但数据采用二进制,指令也采用二进制; • 建立了存储程序,指令和数据便可一起放在存储器里,并作同样处理。这些改进简化了计算机的结构,大大提高了计算机的速度。 • 1946年7,8月间,冯·诺依曼和戈尔德斯廷、勃克斯在EDVAC方案的基础上,为普林斯顿大学高级研究所研制IAS计算机时,又提出了一个更加完善的设计报告《电子计算机逻辑设计初探》。以上两份既有理论又有具体设计的文件,首次在全世界掀起了一股“计算机热”,它们的综合设计思想,便是著名的“冯·诺依曼机”,其中心思想就是存储程序原则:指令和数据一起存储。这个概念被誉为”计算机发展史上的一个里程碑"。它标志着电子计算机时代的真正开始,指导着以后的计算机设计。
CPU 主机 外设 §1. 2计算机系统的组成和工作原理 计算机系统由 硬件系统和软件系统组成 • 计算机的硬件系统及工作原理 1、硬件系统的基本组成: 1)硬件:计算机系统中由电子、机械和光电元件等组成的各种计算机部件和计算机设备。 裸机:未配置任何软件的计算机。 2)硬件基本组成: (1)运算器(ALU) (2)控制器(指挥中心) (3)存储器(主存和辅存) (4)输入设备:键盘,鼠标,数字化仪,扫描仪等. ( 5)输出设备:打印机,绘图仪,显示器等. 说明:衡量存储器容量的单位是字节(B),千字节(KB)、兆字节(MB)、吉字节(GB)、TB
运算器 功能:算术运算和逻辑运算 • 控制器 功能:使计算机能自动地执行程序,并使各部分协调工作 • 存储器 功能:用于保存程序和数据 主存储器(内部存储器)存放当前所执行程序的指令和数据 辅助存储器(外部存储器)存放暂不参加运算的程序的指令和数据 • 输入设备 用于程序和数据输入(标准设备:键盘) • 输出设备 用于程序和数据输出(标准设备:显示器)
2、其他有关概念: 1)中央处理器(CPU):包括运算器和控制器两大部分,CPU是计算机硬件的核心。 2)主机:在硬件系统中,内存、CPU和连接输入输出设备的接口统称为主机。 3)外部设备:也称为外设,输入设备和输出设备都是计算机的外部设备。 3、基本工作原理 冯•诺依曼的“埃得伐克”理论:二进制、存储程序工作原理、五大构成部件。 (1) 二进制: 以二元逻辑为基础,用0和1 二进制码组成各种信息进行运算。 (2) “存储程序”工作原理: 在计算机中设置存储器,将二进制编码表示的计算步骤与数据存放在存储器中,机器一启动就能按照程序指定的逻辑顺序依次取出存储内容进行译码和处理,自动完成由程序所描述的处理工作。它被誉为计算机史上的里程碑。
辅助存储器 输出 输入 输入设备 主存储器 输出设备 程序 原始数据 运算器 控制器 指令数据线 控制信号线 计算机工作原理示意图 运算结果
辅助存储器 输出 输入 输入设备 主存储器 输出设备 程序 原始数据 运算结果 运算器 控制器 常用术语 • 在计算机五大部分中,运算器和控制器是最核心的部分,通常做在一个器件上,称作CPU。 【术语】 CPU=控制器+运算器(+寄存器组) • 只有主存(内存)可直接与CPU交换信息,它与CPU组合可实现计算机的基本功能。 【术语】主机=CPU+主存储器 • 输入/输出(Input/Output)设备和外存合称“外围设备”。 【术语】外设=I/O+辅助存储器
冯·诺依曼型计算机 • 上述计算机的基本结构是由美藉匈牙利科学家冯·诺依曼于1946年提出的。迄今为止所有进入实用的电子计算机都是按冯· 诺依曼的提出的结构体系和工作原理设计制造的,故又统称为“冯·诺依曼型计算机”。 • 新一代计算机将努力突破冯氏的结构体系和工作原理,将是“非冯·诺依曼型计算机”。 • 冯·诺依曼型计算机的两大特征 程序存储(计算机自动连续工作的基础) 采用二进制(机内一切信息均需为二进制编码形式存在) • 冯·诺依曼型计算机的工作原理 存储程序(将欲执行的任务事先编成程序存入主存中) 程序控制(执行时由CPU调用主存中的程序进行运算)
指令和指令系统 • 一台计算机所能执行的各种不同类型指令的总和。即一台计算机所能执行的全部操作。不同计算机的指令系统包含的指令种类和数目也不同。 • 指令系统的组成:操作码和操作数 • 一般均包含算术运算型、逻辑运算型、数据传送型、判定和控制型、输入和输出型等指令。 • 指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。
完备性:指用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。完备性:指用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。 • 有效性:是指利用该指令系统所编写的程序能够高效率地运行。高效率主要表现在程序占据存储空间小、执行速度快。 • 规整性:包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。 • 兼容性:至少要能做到“向上兼容”,即低档机上运行的软件可以在高档机上运行。
操作系统 语言处理程序 系统软件 数据库管理系统 软件系统 诊断程序 维护程序 应用软件 二、软件系统的分类及组成 计算机软件:计算机运行时所需的程序、数据和有关文档。 说明:(1)操作系统:大致包括五大管理功能:处理器管理、存储管理、设备管理、文件管理和作业管理。 分类:P2、DOS、WINDOWS 、UNIX (2)计算机语言: 1)机器语言:计算机能直接识别和执行的语言;面向机器 2)汇编语言:是符号化的机器语言;面向机器;汇编 3)高级语言:面向过程,面向对象(解释、编译) (3)应用软件:为某一应用目的而用系统软件编制的软件。包括应用程序、函数库、子程序库。常见的有字处理软件、电子表格软件、多媒体制作软件
两类软件 软件通常可以分为两类: • System Software (系统软件) • Application Software (应用软件) 应用软件:我用的 你可以认为应用软件是 你用的,而系统软件是 计算机用的。 系统软件:它用的
System Software:The Computer’s Boss • 功能 用于使计算机能够管理其本身的内部资源,控制硬件的运行,执行各种基本操作,如使CPU与键盘、显示器、打印机和磁盘驱动器通信等。系统软件不用于解决各种业务性或专业性的具体问题。 • 最重要的一种系统软件是“操作系统”。目前个人计算机最常用的系统软件即美国Microsoft(微软)公司的Windows(视窗)系列操作系统。
Application Software:Your Servant • 功能 用于提高计算机用户的工作效率和创造力。 • 目前个人计算机最常用的应用软件是美国Microsoft(微软)公司的Office系列办公软件和Internet Explorer Browser ( IE浏览器)。前者用于编写文档、处理电子表格、制作网页和多媒体演示软件等,后者用于在因特网上“上网冲浪”——访问远程网站、下载软件、收发电子邮件、网上交友…
程序设计语言 • 机器语言(指令系统) 其指令为二进制代码(0、1),如用00110011……表示相加。 用机器语言编写的程序计算机可直接识别,执行速度最快,但可读性、可移植性差 • 汇编语言 用“助记符”代替二进制代码,如用ADD A,B表示两数相加。 其程序必须通过翻译程序(汇编程序)翻译成二进制代码后才能执行。 机器语言和汇编语言都是“面向机器”的低级语言。
高级语言(面向过程) 用英文单词和代数表达式编写程序,最接近人类的自然语言(英语)。 如用 LET C=A+B 表示两数相加。 用高级语言编写的程序称为“源程序”。 源程序必须经过翻译程序翻译后计算机才能处理。 高级语言的翻译程序有两种: 解释程序:翻译一句,计算机执行一句。 (相当于“口译”) 编译程序:将源程序整个翻译成目标程序,再通过“链接程序”生成 “可执行程序”,然后交计算机执行。 (相当于“笔译”)
程序设计语言小结: ①低级语言(面向机器语言) 机器语言——其程序无需翻译即可被识别,执行速度最快 汇编语言——其程序需通过翻译程序(汇编程序)处理 【术语】 指令=操作码+操作数(地址码) (操作码不可缺少) ②高级语言(面向过程语言) 其程序需通过翻译程序(解释程序/编译程序)处理 常见高级语言种类: BASIC语言——简单易学 C语言——编程通用 Fortran语言——科学计算 Pascal语言——程序设计教学
名词: 【源程序】用汇编语言或高级语言编写的程序(需经“翻译”处理) 【翻译程序】将源程序译成目标程序或可执行指令的程序 【目标程序】经翻译程序翻译生成的程序 【可执行程序】经连接程序处理过的程序 • 互相关系 注意——生成目标程序的条件! 汇编程序 目标程序 MOV A , 3 ADD A , 6 连接程序 0110010 0011011 可执行程序 汇编语言源程序 编译程序 A=5, B=4 C=B+A*2/B 翻译一句 执行一句 高级语言源程序 解释程序
支持数据库的编程语言 • VB:全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具 • PB:全称PowerBuilder,是开发MIS系统和各类数据库跨平台的首选,使用简单,容易学习,容易掌握,在代码执行效率上也有相当出色的表现 • C++Builder/Delphi :它们都是基于VCL库的可视化开发工具,它们在组件技术的支持、数据库支持、系统底层开发支持、网络开发支持、面向对象特性等各方面都有相当不错的表现,并且学习使用较为容易,充分提现了所见即所得的可视化开发方法,开发效率高 • Visual C++ :是基于MFC库的可视化的开发工具,从总体上说它是一个功能强大但是不便使用的一种工具。 • Java:面向对象特性高,支持的组件技术也非常多,跨平台的特性也使得它在现在和未来的网络开发中占据越来越重要的地位。
三、计算机系统的层次结构 用户 内核:硬件系统 桥梁:系统软件 最外层:应用软件 应用软件 系统软件 硬件系统
1.3 微型计算机的系统结构 • 计算机系统的分类:根据其体积大小和处理能力,通常可分为 • Supercomputers (超级计算机) • Mainframe computers(大型计算机) • Workstations (工作站) • Microcomputers(微型计算机) • Microcontrollers(微控制器)
世界超级计算机全球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倍。
飞速发展的计算机技术 • 摩尔定律: Intel的创始人之一 Gordon Moore在1965年提出了这个著名的定律,预言单位平方英寸芯片的晶体管数目每过18到24个月就将增加一倍。过去四十年的芯片产业一直遵循摩尔定律每18个月速度增长一倍的规律运行。 事实上,Intel的CPU芯片上的晶体管数目已经由1971年的2300增长到今天Pentium 4处理器的5500万,即增长了两万四千倍。 索尼公司展示 新型掌上电脑
CPU • CPU的英文全称是Central Processing Unit,即中央处理器。CPU从雏形出现到发展壮大的今天,由于制造技术的越来越先进,其集成度越来越高,内部的晶体管数达到几百万个。虽然从最初的CPU发展到现在其晶体管数增加了几十倍,但是CPU的内部结构仍然可分为控制单元,逻辑单元和存储单元三大部分。CPU的性能大致上反映出了它所配置的那部微机的性能,因此CPU的性能指标十分重要。 • 主频,也就是CPU的时钟频率,简单地说也就是CPU的工作频率。 • 内存总线速度或者叫系统总路线速度,一般等同于CPU的外频。 • 工作电压,工作电压指的也就是CPU正常工作所需的电压。 • 制造工艺, Pentium CPU的制造工艺是0.35微米, PII和赛扬可以达到0.25微米,最新的CPU制造工艺可以达到0.18微米,并且将采用铜配线技术,可以极大地提高CPU的集成度和工作频率。
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万个晶体管。