第5章 程序设计知识 5.1 程序设计语言 5.2 C语言程序设计 5.3 数据结构 5.4 编译原理.

Slides:



Advertisements
Similar presentations
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Tool Command Language --11级ACM班 金天行.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
小学生游戏.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
面向对象程序设计 C#.Net 01 C#概述和简单编程 郑捷
Oracle数据库 Oracle 子程序.
C语言实验 第一课 标题:学号+姓名.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
编译原理与技术 2018/11/30 《编译原理与技术》讲义.
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第二章 Java语言基础.
动态规划(Dynamic Programming)
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
无向树和根树.
第一章 函数与极限.
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
顺序表的删除.
VisComposer 2019/4/17.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
College of Computer Science & Technology
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
第一章 绪论 1.1 引言 1.2 逻辑结构和存储结构 1.3 算法.
第七、八次实验要求.
C语言程序设计基础 刘新国.
第二章 Java基本语法 讲师:复凡.
分数再认识三 真假带分数的练习课.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
第二节 C语言的特点.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
插入排序的正确性证明 以及各种改进方法.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
§4.5 最大公因式的矩阵求法( Ⅱ ).
编译原理实践 6.程序设计语言PL/0.
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

第5章 程序设计知识 5.1 程序设计语言 5.2 C语言程序设计 5.3 数据结构 5.4 编译原理

5.1 程序设计语言 学习语言是设计程序的基础 机器语言 汇编语言 高级语言 结构化程序设计语言 面向对象程序设计语言 可视化程序设计语言 人工智能程序设计语言 学习语言是设计程序的基础

5.1.1 机器语言 机器语言的特点 由二进制编码指令构成的语言。 是一种依附于机器硬件的语言。 机器语言程序可以直接执行。 机器语言程序片段 0001 0101 01101100 //把地址为01101100的内存单元中的数装入0101号寄存器 0001 0110 01101101 //把地址为01101101的内存单元中的数装入0110号寄存器 0101 0000 01010110 //把01101100和01101101中的数相加,结果存入0000号寄存器 0011 0000 01101110 //把0000号寄存器中的数存入地址为01101110的内存单元中 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.2 汇编语言 汇编语言的特点 汇编语言程序片段 MOV R5, X //把内存单元X中的数装入R5寄存器 由助记符指令构成的语言。 也是一种依附于机器硬件的语言。 汇编语言源程序需要汇编后才能执行。 汇编语言程序片段 MOV R5, X //把内存单元X中的数装入R5寄存器 ADD R5, Y //把R5中的数与Y单元中的数相加,结果存入R5 MOV Z, R5 //把R5中的数存入Z单元中 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.3 高级语言 高级语言的特点 高级语言程序片段 Z=X + Y //把内存单元X中的数与Y中的数相加,结果存入Z单元 由自然语言和数学公式表示的语言。 是一种独立于机器硬件的语言。 高级语言程序需要编译后才能执行。 高级语言程序片段 Z=X + Y //把内存单元X中的数与Y中的数相加,结果存入Z单元 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.3 高级语言 常用高级语言 FORTRAN语言 ALGOL语言 FORTRAN是FORmula TRANslator(公式翻译器)的缩写。 主要用于复杂的科学计算领域。 ALGOL语言 ALGOL是ALGOrithm Language(算法语言)的缩写。 主要用于数学与科学计算。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.3 高级语言 常用高级语言 COBOL语言 BASIC语言 COBOL是COmmon Business-Oriented Language(面向商业的通用语言)的缩写。 主要用于企业管理和事务处理。 BASIC语言 BASIC是Beginner’s All-purpose Symbolic Instruction Code(初学者通用符号指令码)的缩写。 主要用于初学者和较小规模的程序开发。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.4 结构化程序设计语言 早期程序设计方法的不足 结构化程序设计语言的特点 注重功能的实现/注重内存的节省/注重执行效率的提高。 不注重程序结构的清晰性。 不注重程序的可理解性和可修改性。 结构化程序设计语言的特点 注重程序结构的清晰性。 注重程序的可理解性和可修改性。 采用模块化程序设计方法。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.4 结构化程序设计语言 常用结构化程序设计语言 PASCAL语言 C语言 是在ALGOL语言的基础上发展起来的。 以法国著名科学家帕斯卡的名字命名。 严格的语法格式与结构化形式。 C语言 是在ALGOL60语言的基础上发展起来的。 兼具低级语言和高级语言的特点。 是最为流行的程序设计语言之一。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.5 面向对象程序设计语言 结构化程序设计方法的不足 面向过程的设计方法与人们习惯的思维方式仍然存在一定的距离,所以很难自然、准确地反映真实世界,因而用编写出来的程序,特别是规模比较大的程序,其质量是难以保证的。 强调了要实现功能的操作方法(模块),而被操作的数据(变量)处于实现功能的从属地位,即程序模块和数据结构是松散地耦合在一起,当程序复杂度较高时,容易出错,而且错误难以查找和修改。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.5 面向对象程序设计语言 面向对象程序设计语言的特点 将问题分解为对象。 对象将自己的属性和方法封装成一个整体,供程序设计者使用。 对象之间的相互作用则通过消息传递来实现。 使人们对复杂系统的认识过程与程序设计过程尽可能一致。 能够更好地保证程序的质量和开发效率。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.5 面向对象程序设计语言 常用面向对象程序设计语言 Simula 67 C++ Java 发布于1967年,是面向对象语言的鼻祖。 目前常用的版本有Visual C++, C#, Visual C++ .Net等。 Java 发布于1995年,适合于网络程序设计。 也是目前得到广泛应用的一种面向对象程序设计语言。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.6 可视化程序设计语言 可视化程序设计语言的特点 常用可视化程序设计语言 以图形化的编程方式将面向对象技术的特性体现出来。 使开发软件这一原本枯燥、难以理解的工作变得相对轻松快捷。 常用可视化程序设计语言 Visual C++ 功能强大,比较适合专业人员使用。 Visual Basic 易于学习和掌握,比较适合非专业人员和初学者使用。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.1.7 人工智能程序设计语言 人工智能程序设计语言的特点 常用人工智能程序设计语言 适合于知识表示和逻辑推理。 LISP PROLOG LISP是LISt Processing(表处理)的缩写。 可以解决人工智能中的符号处理问题。 PROLOG 是PROgramming in LOGic(逻辑程序设计)的缩写。 自动实现模式匹配、自动回溯这两种人工智能中常用的基本操作。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2 C语言程序设计 C语言的主要特点 简洁、紧凑、灵活。语法限制不太严格,使用方便灵活;数据结构描述能力及表达式能力强;程序书写形式自由。 模块化、结构化。用C语言编写程序层次清晰,便于按模块组织程序,易于实现程序的结构化。 功能强大。C语言除了能实现一般的高级语言的功能外,还能实现汇编语言的大部分功能,兼具高级语言和低级语言的特点。 可移植性好。C语言程序可以容易地移植到不同型号计算机、不同操作系统环境下执行。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2 C语言程序设计 C语言的基本要素 C语言的数据类型 C语言的运算符及表达式 C语言语句 C语言程序的三种基本结构及实现 程序设计风格 算法设计与分析 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.1 C语言的基本要素 C语言的基本词法 字符集 标识符 英文字母/数字/ 特殊字符/ 转义字符。 标识符是由字母、数字和下划线三种字符构成的且第一个字符必须是字母或下划线的字符序列。 标识符分为三类 关键字/ 预定义标识符/ 用户标识符。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.1 C语言的基本要素 常量 变量 在程序的执行过程中其值不能被改变的量。 数值型常量 字符型常量 整型常量/ 浮点型常量(实型常量)。 字符型常量 字符常量/字符串常量。 变量 在程序运行过程中,其值可以被改变的量。 一般要先定义,再使用,变量定义的一般形式为: 数据类型名 变量名; Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.2 C语言的数据类型 基本数据类型 构造数据类型 指针类型 整型 实型 字符型 数组/结构体/共用体/枚举类型/用户自定义类型。 整型变量的定义形式为:int 变量名; 实型 实型变量的定义形式为:float 变量名; 字符型 字符型变量的定义格式为:char 变量名; 构造数据类型 数组/结构体/共用体/枚举类型/用户自定义类型。 指针类型 在动态数据结构及其应用中有着不可替代的作用。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.3 C语言的运算符及表达式 算术运算符 赋值运算符 自增、自减运算符 关系运算符 在C语言中,=称为赋值运算符,其使用形式为: +, -, *, /, %(求余数)。 赋值运算符 在C语言中,=称为赋值运算符,其使用形式为: 变量名 = 表达式 自增、自减运算符 ++是自增运算符,其功能是使变量的值增1。 --是自减运算符,其功能是使变量的值减1。 关系运算符 大小判断 >(大于)/>=(大于等于)/<(小于)/<=(小于等于)。 相等判断 ==(等于)/!=(不等于)。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.4 C语言语句 控制语句 复合语句 用于实现一定的控制功能。 条件语句:用于实现程序执行过程中的条件转移。 循环语句:用于实现程序中重复进行某些操作。 复合语句 由一对花括号{ }括起来的一组语句。 如果要在只执行一条语句的地方执行多条语句,那么这多条语句要写成一条复合语句。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.5 C语言程序的三种基本结构 顺序结构 程序的执行按照语句出现的先后次序顺序进行。 程序中的每个语句都会被执行到。 程序示例:通过键盘输入一个三角形的底和高,计算其面积并输出。 main( ) { float width,height,area; /*定义变量*/ printf("\nEnter width and height:"); /*输出提示信息*/ scanf("%f,%f",&width,&height); /*通过键盘输入底和高*/ area=(width*height)/2.0; /*计算面积*/ printf("\nThe arae is :%f ",area); /*输出面积的值*/ } Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.5 C语言程序的三种基本结构 分支结构 根据逻辑条件的成立与否,分别选择执行不同的处理。 if语句:if(表达式) 语句 if-else语句:if (表达式)语句1 else 语句2 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.5 C语言程序的三种基本结构 分支结构 程序示例:根据输入的学生成绩对其进行判断处理,如果成绩及格,则输出Passed,否则输出Failed。 main( ) { float score; /*定义变量*/ printf("\nEnter a score :"); /*显示提示信息*/ scanf("%f",&score); /*通过键盘输入一个成绩*/ if (score>=60.0) printf("\nPassed "); /*大于等于60输出Passed*/ else printf("\nFailed "); /*小于60输出Failed*/ } Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.5 C语言程序的三种基本结构 循环结构 根据循环条件的变化,决定是否继续重复执行某些语句。 for循环语句的格式为: 循环体语句 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.5 C语言程序的三种基本结构 循环结构 程序示例:从键盘上输入10个整数,求其累加和并输出。 main( ) { int i, num, sum; /*定义变量*/ sum=0; /*累加变量清零*/ for (i=1; i<=10;i++) /*循环次数为10*/ { printf("Enter a data:\n "); /*显示提示信息*/ scanf("%d ",&num); /*通过键盘输入一个整数*/ sum=sum+num; /*累加求和*/ } printf(“\nsum=%d,sum); /*输出累加结果*/ Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.6 程序设计风格 主要体现在5个方面 标识符的命名要风格统一、见名知义。 一般一行写一条语句,一条长语句可以写在多行上,但尽量不要把多条语句写在一行上。 采用缩进格式,即同一层次的语句要对齐,低层次的语句要缩进若干个字符,增加程序的可读性。 适当书写注释信息,有助于阅读者对程序的理解。 尽量少用goto语句,否则容易导致程序结构混乱。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.7 算法设计与分析 用计算机解决问题的步骤 分析问题、设计算法。 选定语言、编写源程序。 对源程序进行编译生成目标文件。 对目标文件进行连接操作,生成可执行的程序。 调试执行可执行程序。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.2.7 算法设计与分析 程序与算法 算法是指为解决某一问题而采取的方法和步骤。 程序是程序设计人员编写的、计算机能够理解并执行的命令集合,是算法在计算机中的实现。 算法的特点 有穷性/确定性/有效性/输入及输出。 算法的表示 自然语言/流程图/伪码。 算法的评价标准 正确性/时间复杂度/空间复杂度/可理解性。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3 数据结构 概念和术语 线性结构 树形结构 图状结构 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.1 概念和术语 数据 数据项 数据元素 数据对象 数据结构 信息的载体,能够被计算机识别、存储和加工处理。 数据不可分割的最小单位。 数据的基本单位,具有完整、确定的实际意义。一般由若干数据项组成。 数据对象 具有相同性质的数据元素的集合,是数据的一个子集。 数据结构 互相之间存在着一种或多种关系的数据元素的集合。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.1 概念和术语 数据的逻辑结构 数据的物理结构 描述的是数据元素之间的逻辑关系。 数据在计算机中的表示,包括数据元素的表示及数据元素间关系的表示。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.1 概念和术语 顺序存储 链式存储 逻辑上相邻的元素存储在物理位置也相邻的存储单元中。 逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.2 线性结构 线性结构的特点 应用示例 数据元素之间存在着一对一的关系。 每个元素有且只有一个前驱(第一个元素除外)。 每个元素有且只有一个后继(最后一个元素除外)。 应用示例 一维数组 二维数组 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.2 线性结构 一维数组应用示例 main() { int i, g, sum, ave; /*定义变量,每一变量代表一内存单元*/ int a[50]; /*定义数组,代表50个内存单元*/ for (i=1; i<=50; i++) /*循环执行下面大括号中的语句50次*/ { printf(“\nEnter a grade:”); /*在屏幕上显示提示信息*/ scanf(“%d”,&g); /*通过键盘输入一个学生的成绩给变量g*/ a[i-1]=g; /*把g单元中的成绩存入数组的相应位置*/ } sum=0; /*作为累加器的单元初值清零*/ for (i=1; i<=50; i++) /*循环执行下面的累加语句40次*/ sum=sum+a[i-1]; /*把第i个学生的成绩加到累加器*/ ave=sum/50; /*求平均成绩*/ printf(“\nave=%d”, ave); /*输出平均成绩*/ Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.3 树形结构 树形结构的特点 树的定义 数据元素之间存在着一对多的关系。 树是n(≥0)个结点的有限集合。 当n=0时,称为空树。在一棵非空树T中: 有一个特定的结点称为树的根结点; 当n>1时,除根结点之外的其余结点被分成m(m≥1)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树,树T1,T2,…,Tm称为这个根结点的子树。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.3 树形结构 二叉树的定义 二叉树是有限个结点的集合,该集合或者为空、或者由一个称为根的结点及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。 满二叉树:在二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称作满二叉树。 完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.3 树形结构 二叉树示例 完全二叉树 非完全二叉树 满二叉树 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs 满二叉树 非完全二叉树

5.3.3 树形结构 二叉树的存储 顺序存储结构 用一组连续的存储单元(数组)存放二叉树中的结点。一般是按照二叉树结点从上至下、从左到右的顺序存储。 完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置以及结点之间的关系。 图5.7 满二叉树 8 D H I E J K F L G B C A 2 3 4 5 6 7 9 10 11 12 M 13 O P 14 15 图5.8 完全二叉树 1 8 D H I E J K F L G B C A 2 3 4 5 6 7 9 10 11 12 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.3 树形结构 二叉树的存储 链式存储结构 用链表来表示一棵二叉树。链表中每个结点由三个域组成,除了数据域外,还有两个指针域,分别用来给出该结点的左子结点和右子结点所在的链结点的存储地址。 图5.7 满二叉树 8 D H I E J K F L G B C A 2 3 4 5 6 7 9 10 11 12 M 13 O P 14 15 图5.8 完全二叉树 1 8 D H I E J K F L G B C A 2 3 4 5 6 7 9 10 11 12 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs 非完全二叉树的链式存储

5.3.3 树形结构 树的应用 用于分类的决策树 用于各种比赛的博弈树 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.4 图状结构 图状结构的特点 图的定义 数据元素之间存在着多对多的关系。 G=(V,E); 其中V={vi| vi∈dataobject}; E={( vi,vj)| vi, vj ∈V ∧P(vi, vj)}。 G表示一个图,V是图G中顶点的集合,顶点集合构成数据对象(dataobject),顶点就代表数据元素,E是图G中边的集合,集合E中P(vi,vj)表示顶点vi和顶点vj之间有一条直接连线,即偶对(vi,vj)表示图中的一条边。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.4 图状结构 图的示例 图的存储 邻接矩阵 用矩阵表示图中各顶点之间的邻接关系,有边相连对应的矩阵元素值为1,否则为0。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.4 图状结构 图的存储 邻接表 一种顺序存储与链式存储结合的存储方法。对于图G中的每个顶点vi,将所有邻接于vi的顶点vj链成一个单链表,这个单链表就称为顶点vi的邻接表,再将所有顶点的邻接表表头放到数组中,就构成了图的邻接表。 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.3.4 图状结构 图的应用 求最短路径 网络性能分析 社会网络分析 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.4 编译原理 编译程序概述 词法分析 语法分析 中间代码生成 中间代码优化 目标代码生成 编译程序的开发 Desktop publishers mix text and graphics Image editors modify bitmap image files Illustrators modify vector files Image galleries are libraries of electronic images Graphic suites bundle separate programs

5.4.1 编译程序概述 高级语言的特点 编译程序 学习编译知识的作用 简单易学,易于编写和修改程序。 编写出的源程序不能直接执行。 把用高级语言编写的源程序翻译成等价的机器语言程序的翻译程序。 学习编译知识的作用 深入理解高级语言程序设计。 有助于提高程序设计能力和培养程序设计思维。 These programs allow you to create documents such as brochures, newsletters, newspapers, and textbooks

5.4.2 词法分析 词法分析的主要任务 单词种类 从源程序中识别出单词。 发现词法错误并指出错误位置。 以某种机内符的形式表示单词。 基本字:也称关键字,如C语言中的for、do、while等; 标识符:用来表示各种名字的符号串,如变量名、函数名等; 常数:各种类型的常数,如整数、实数、字符串等; 运算符:各种算术运算、关系运算符,如+、-、<、>、<=、>=等; 界限符:如逗号(,)、分号(;)等。 Known as paint programs Bitmap images use thousands of dots called pixels to represent images

5.4.3 语法分析 语法分析的主要任务 确认作为词法分析结果的单词序列是否为给定语言的一个正确程序。 给定语言用文法表示,如果给定的单词串能够识别成该文法的句子,则认为程序是正确的,否则认为程序是错误的。 自顶向下分析方法/自底向上分析方法。 调用语义子程序进行语义处理。 审查每个语法结构的静态语义,即确认语法结构合法的程序是否真正有意义。 Known as paint programs Bitmap images use thousands of dots called pixels to represent images

5.4.4 中间代码生成 中间代码生成的主要任务 引入中间代码的优点 常用的中间代码形式 以某种便于计算机处理的形式表示程序。 使编译程序结构在逻辑上更为简单明确。 可以将与机器相关的某些实现细节置于代码生成阶段仔细处理。 使得计算和代码优化比较容易实现。 常用的中间代码形式 逆波兰式/三元式/四元式。 Image galleries are libraries of electronic images Types of electronic images Stock photograph – photographs on a variety of subject materials Clip art – graphic illustrations representing a wide range of topics Most applications provide a limited selection of free clip art

5.4.4 中间代码生成 逆波兰式计算的优点 a+b*c的逆波兰式形式为abc*+。 对于逆波兰式abc*+,计算机先扫描到运算对象a、b和c,然后扫描到运算符*,先计算b*c(假定结果为t),继续扫描到运算符+,再计算a+t,从而完成a+b*c的计算。无论表达式多复杂,只一遍扫描就能完成表达式的计算。 对于一般表达式a+b*c,计算机先扫描到运算对象a,然后扫描到运算符+和运算对象b,由于不知道后面的运算符是什么,不能决定是否先完成+的运算,继续扫描到运算符*和运算对象c,知道*的优先级高,先计算b*c(假定结果为t),再往回扫描计算a+t。对于比较复杂的表达式,可能需要多次来回扫描表达式,才能完成计算,这会很浪费时间。 Image galleries are libraries of electronic images Types of electronic images Stock photograph – photographs on a variety of subject materials Clip art – graphic illustrations representing a wide range of topics Most applications provide a limited selection of free clip art

5.4.5 中间代码优化 中间代码优化的主要任务 常用的优化技术 对中间代码进行等价变换。 变换后的代码运行结果与变换前运行结果相同。 运行效率提高(速度提高或/和占用存储空间减少)。 常用的优化技术 删除多余运算/代码外提/强度削弱。 变换循环控制条件/合并已知量与复写传播。 删除无用赋值。 Image galleries are libraries of electronic images Types of electronic images Stock photograph – photographs on a variety of subject materials Clip art – graphic illustrations representing a wide range of topics Most applications provide a limited selection of free clip art

5.4.6 目标代码生成 目标代码生成的主要任务 把经过优化后的中间代码转换成特定机器的机器语言程序或汇编语言程序。 由于一个高级语言源程序的目标代码需多次使用,因此代码生成器的设计要着重考虑目标代码的质量。 目标代码的质量主要从占用空间和执行时间两个方面综合考虑。 Image galleries are libraries of electronic images Types of electronic images Stock photograph – photographs on a variety of subject materials Clip art – graphic illustrations representing a wide range of topics Most applications provide a limited selection of free clip art

5.4.7 编译程序的开发 编译程序的特点 编译程序的自动生成 一个相当复杂的系统软件。 主要是语义分析和代码优化问题。 完全自动生成编译程序,目前还不现实。

GNU C/C++编译,汇编、链接器 编译程序 gcc 参数 含义 -o <file> Place the output into <file> -c Compile and assemble, but do not link -ggdb Produce debugging information for use by GDB. -S 编译到汇编语言,不进行汇编和链接 编译、汇编到目标代码,不进行链接 链接程序ld

5.5 本章小结 程序设计能力、程序设计思维是计算机专业学生应具备的基本能力和素质。 计算机专业人员要想发挥专业特长,在工作中有竞争力,较强的程序设计能力和软件开发能力是坚实的基础。 与提高程序设计能力相关的知识有程序设计语言、数据结构、编译原理和算法设计与分析。 熟悉一种程序设计语言和基本的程序设计方法是编写程序的基础。 对于数据量比较大或数据之间关系比较复杂的程序,要选用合适的数据结构合理地组织数据。 计算机专业学生重点还是要培养和提高算法设计能力。 用高级语言编写的源程序需要翻译成机器语言程序,才能被计算机执行。编译原理就是介绍如何把高级语言源程序翻译成机器语言程序的。