Download presentation
Presentation is loading. Please wait.
1
教学进度 计算机科学与工程系 大学计算机基础 ( 省精品课程 ) 计算机软件技术基础 (第五章) 华南农业大学 信息学院
2
教学进度 计算机科学与工程系 第五章 计算机软件技术基础 软件是计算机的 “ 灵魂 ” 。没有软件的计算机 仅仅是一台没有任何功能的机器,也称为裸机。 计算机问题求解包括分析问题、设计算法、实 现算法等步骤,是最典型计算思维方法。 引言
3
教学进度 计算机科学与工程系 学习计算机软件的相关知识,如什么是软件,程序设计语 言的分类及构成等。 知识 点 机器、汇编、高级语言 软件及分类 算法描述 程序设计语言构成 教学目的 理解如何利用计算思维的基础 —— 算法来进行问题的求 解。 第五章 计算机软件技术基础
4
教学进度 计算机科学与工程系 第五章 计算机软件技术基础 硬件是计算机的 “ 躯体 ” ,软件是计算机的 “ 灵 魂 ” 。没有软件的计算机是无法工作的。 计算机问题求解是以计算机为工具、利用计算思 维解决问题的实践活动,一般包括分析问题、设计算 法、实现算法等步骤,是最典型计算思维方法。本章 将学习计算机软件的相关知识,包括软件、程序设计 语言、算法等等。 需要编写应用软件 如何让计算机按我们的意志行事?
5
教学进度 计算机科学与工程系 5.1 计算机软件系统 5.1.1 软件的概念与特点 软件是由程序、数据及其相关文档三部分组成。 ① 程序:按照事先设计的功能和性能要求执行的计算机 指令序列。 ② 数据:使程序能够正常操纵信息的数据结构。 ③ 文档:与程序开发、维护和使用有关的资料。 从软件的基本概念可以看出,软件开发不仅仅是编写一 个程序,而是包括程序设计、数据结构设计、文档编写等多 项工作。
6
教学进度 计算机科学与工程系 5.1 计算机软件系统 5.1.2 软件的分类 软件分类方式有多种,其中按软件功能可划分为: ② 支撑软件:又称为软件开发环境。是介于系统软件 和应用软件之间的中间层软件,是支撑各种软件开发与维 护的软件。 ③ 应用软件:针对特定领域开发,为特定目的服务的 软件。 ① 系统软件:能与计算机硬件紧密配合,使计算机系 统的各个部件、相关的软件和数据协调、高效工作。
7
教学进度 计算机科学与工程系 5.1 计算机软件系统 计算机软件系统中所包括的各种软件之间的关系不是 并列的,而是有一定的层次关系。 5.1.3 计算机软件的层次结构 系统 软件 支撑 软件 应用 软件
8
教学进度 计算机科学与工程系 5.2 程序设计语言 简单讲,程序设计就是用计算机语言编写程序。 程序 = 算法 + 数据结构 编写计算机程序时使用的语言称为程序设计语言,程序 设计语言分为机器语言、汇编语言和高级语言三种。 对数据操作的步骤 如何表示、组织和存储数据 计算机的本质是 “ 程序的机器 ” ,程序和指令的思想是计算机系统中 最基本的概念。只有懂得程序设计,才能懂得计算机,真正了解计算机是 怎样工作的。 什么是程序设计? 什么是程序设计语言?
9
教学进度 计算机科学与工程系 5.2 程序设计语言 5.2.1 机器语言 机器语言是唯一能被计算机直接理解和执行的程序设计 语言,属低级语言。机器语言的一条语句就是一条指令,机 器指令的格式如下: 操作码操作数 例如:计算 5+8 结果的机器代码如下: 10110000 00000101 ;把 5 放入累加器 AX 00000100 00001000 ;把 8 与 AX 中值相加,结果存入 AX 机器语言可被计算机直接识别,执行效率高,但编程困 难,可读性差,不同机器间无法移植。
10
教学进度 计算机科学与工程系 5.2 程序设计语言 5.2.2 汇编语言 为了解决机器语言难记忆、可读性差的缺点,人们把机 器指令中的操作码和操作数用英文助记符来表示,这种助记 符语言称为汇编语言,也属于低级语言。 MOV AX , 5 ;把 5 放入累加器 AX ADD AX , 8 ;把 8 与 AX 中值相加,结果存入 AX 汇编语言编写的程序属于符号程序,可读性优于机器语 言,但汇编语言编写复杂,依赖硬件,可移植性差,计算机 不能直接识别和执行,必须翻译成计算机能识别的机器指令 后才能在计算机上执行,其翻译过程如下:
11
教学进度 计算机科学与工程系 5.2 程序设计语言 5.2.3 高级语言 高级语言是一类程序设计语言的统称,它采用接近人类 自然语言的表示方法,并遵循一定的语法规则来编写程序。 实现求整数的绝对值的 C 程序段: int intVar, result; scanf(“%d”, &intVar); if(intVar >= 0) result = intVar; else result = -1*intVar; printf(“%d 的绝对值是: %d”, intVar, result);
12
教学进度 计算机科学与工程系 5.2 程序设计语言 高级语言面向用户,方便易学,通用性好。用高级语言 编写的程序也属于符号程序,不能直接在计算机上执行,必 须通过程序的翻译才能执行,其翻译成指令代码的方法主要 有编译和解释两种。
13
教学进度 计算机科学与工程系 5.2 程序设计语言
14
教学进度 计算机科学与工程系 5.2 程序设计语言 5.2.4 主流高级语言 什么人需要学程序设计? 比尔.盖茨说 ∶ 最 终 用 户 –Office 等 程序开发人员 --Visual Basic 等 系统开发人员 --Visual C++ 等 你听过用过哪些编程语言? Basic 、 VB 、 VB.NET C 、 C++ 、 C# Java …… 目前,高级语言种类已达数百种。下面介绍几种常用高 级语言。同时也推荐几个方案供大家参考。
15
教学进度 计算机科学与工程系 方案一 Basic 语言 Basic 简单易学,很容易上手; Visual Basic 提供了很强 大的可视化编程能力,可以让你轻松地做出漂亮的程序。 目前, Basic 语言的最新发展是 Visual Basic.NET ,适合网 络环境下的编程。 VB 适合初涉编程者,几乎每个人都可以在一个比较短 的时间里学会 VB 编程,并用 VB 做出自己的作品。 5.2 程序设计语言
16
教学进度 计算机科学与工程系 方案二 C 语言与 C++ C 语言灵活性好,效率高,可以接触到软件开发比较底 层的东西; C++ 语言是 C 语言的超集,也就是说学会了 C++ , 你其实已经把 C 语言学会了。 VC++ 其实是一个 C++ 语言的编 译器环境,是微软制作的产品。至于 C# ,也是微软公司自 己开发出来的一套语言,与 C/C++ 具有极大的相似性, C# 是 在 Java 流行起来后所诞生的一种类似的语言,目前主要是应 用在网络编程上。 上述这类语言对使用者的要求比较高,如果你可以在编 程上投入很大的精力和时间,那么学会它可以随心所欲地进 行编程。 5.2 程序设计语言
17
教学进度 计算机科学与工程系 方案三 Java 语言 Java 的编程类似 C++, 但要比 C++ 简单,学习过 C++ 的人 能很快掌握 Java 的精髓。 Java 去掉了 C++ 语言的许多功能, 使其变得很精炼。 Java 的跨平台操作兼容任何系统,是目前 使用最为广泛的网络编程语言之一。该语言主要应用于 Web 浏览器及运行于 Web 浏览器中的一个程序,如金融系统、电 子商务系统、网站开发、手机软件等各种网络平台, Java 的 市场占有率第一。 该语言对使用者的要求介于 VB 和 C++ 之间,所以说它 也适合非专业人员学习。学会它可以编写各种网络程序。 5.2 程序设计语言
18
教学进度 计算机科学与工程系 5.2 程序设计语言 5.2.5 计算机软件开发工具和开发环境 软件开发工具主要有三类:即用来编辑源程序的编辑软 件、把高级语言编译成机器语言的编译软件,以及调试程序 的调试软件。 (1) 单独的工具 早期应用软件开发平台中的软件工具都是独立的,它们 之间并没有必然的联系。程序员需要自己决定使用哪个工具 来完成某个阶段的工作,某个阶段候选的工具也不只有一个。 实际上,有很多编辑软件都可以被程序员选用来编辑程序, 甚至类似于 Windows 中的记事本软件也可以用来编辑程序。 单独的工具是早期使用的软件开发工具。
19
教学进度 计算机科学与工程系 5.2 程序设计语言 (2) 集成的开发环境 为了克服单独工具的缺点,不再让程序员自己寻找和组 合开发工具,人们把软件开发过程中必需的工具整合在一起, 形成了集成的开发环境。这样,程序员只要启动一个集成环 境软件就可以在其中完成全部的程序开发步骤了。 集成开发环境基本功能是一致的。它们都支持编辑、编 译、调试、运行等基本功能。程序员可以在上面完成所有开 发应用软件所需的动作。
20
教学进度 计算机科学与工程系 5.2 程序设计语言 现在大多数程序员都工作在各种集成开发环境平台上。 以微软的集成开发环境为例,起初,微软针对于不同的语言 分别推出了相应的开发平台,如 Visual C++ 等。不过现在的 Visual Studio 已经把 Visual C++ 、 C# 、 Visual Basic 等语言的 开发环境都集成在一起。用户可以选择使用其中任何一种语 言来开发应用软件。 各种汽车的样子和功能会有一些不同,但是,基本的组成都是要 有车体、车轮,主要功能都是能在路上行驶。车的驾驶方式也不相同, 不过,总的来说,都是通过控制方向盘、离合、刹车等装置来驾驶。 集成开发环境与此非常类似。因此,熟悉一种开发平台,可以很容易 地快速掌握另外一种。集成开发环境给程序员带来了极大的便利。这 是一个复杂而且功能强大的 “ 生产机床 ” 。 Visual Studio 集成开发环境
21
教学进度 计算机科学与工程系 5.2 程序设计语言 5.2.6 程序设计语言的构成 程序设计语言的构成主要包括以下几个方面: (1) 数据类型 基本数据类型:是由程序设计语言内置的,其特点是不 能再分解为其它的类型。在主流的程序设计语言中一般包括: 整数类型、实数类型、字符类型、布尔类型等。 构造数据类型:是由基本数据类型按照某种方式组合构 成的。常见的构造数据类型有:数组类型、记录类型(结构 体) 等等。
22
教学进度 计算机科学与工程系 5.2 程序设计语言 (2) 运算符和表达式 在程序设计中使用表达式可完成各种各样的运算。表达 式通常包括:常量、变量、运算符和函数调用等。 例如:给定圆的半径 r ,求其面积的 C 语言表达式是: s = 3.14 * r * r 其中, s 、 r 是变量, 3.14 是常量, * 是算术运算符, “=” 是赋值运算符。它的作用是把 “=” 右边的表达式的值计算出 来然后赋值给 “=” 左边的变量 s 。 (3) 语句 程序是对计算机要执行的操作的描述,高级语言源程序的 基本组成单位就是语句。语句按功能可以分为两类: ① 用于描述操作运算的语句,如赋值语句; ② 用于控制操作运算流程的语句,如分支控制语句。
23
教学进度 计算机科学与工程系 5.2 程序设计语言 (4) 控制结构 ① 顺序结构,按照语句出现的先后顺序依次执行。顺序 结构是最简单的一种基本结构。 例如,下面的 C 程序段中首先给表示圆半径的变量 r 赋值, 然后计算圆的面积。 r = 10.5; s = 3.14 * r * r;
24
教学进度 计算机科学与工程系 5.2 程序设计语言 ② 分支结构,根据给定条件判断,决定程序执行的顺序。 【例 5.2 】求一元二次方程的根的 C 语言程序段: if( b * b – 4 * a * c < 0) printf("%s\n ",“ 方程无实根 ”) else{ x1 = (-b + sqrt(b * b – 4 * a * c))/(2*a); x2 = (-b - sqrt(b * b – 4 * a * c))/(2*a); printf("%f,%f\n ",x1,x2); }
25
教学进度 计算机科学与工程系 5.2 程序设计语言 ③ 循环结构,循环(重复)是计算机解题的一个重要特征。 如果某些语句或程序段需要在一个固定的位置上重复执行, 使用循环语句是最好的选择。 【例 5.3 】求 1+2+3+……+100 = ? ,用循环语句实现的程序段 为:
26
教学进度 计算机科学与工程系 5.2 程序设计语言 (5) 输入 / 输出 高级程序设计语言中通常以函数或语句的形式提供输入 输出操作。现代高级程序设计语言通常都提供通过窗口、文 本框、按钮、组合框、图表等图形组件进行输入输出。 (6) 子程序 子程序就是将需要重复使用的程序段或分解的子问题 编写成一个独立的子程序,当程序中需要使用子程序时, 再对其进行调用。
27
教学进度 计算机科学与工程系 5.3 问题求解过程 人类求解问题时,善于分析、归纳、总结与推理,对 大量数据的处理与计算则非常 “ 头疼 ” 和低效。相反,借 助于计算机求解问题则能非常高效地处理大批量的数据 (只要告诉计算机 “ 怎么算 ” ,它的计算速度人类已经望 尘莫及了),但对于分析、归纳、总结与推理则比人类 “ 笨拙 ” 得多。 人类求解问题时,擅长于形象思维,灵感(顿悟)与 直觉有时候很管用,对数据很不敏感,长时间重复做一件 事情时很容易疲劳而出错。而借助于计算机求解问题时, 擅长于抽象的逻辑思维,刻板又机械,长时间重复做一件 事情不会疲劳出错(除非硬件出故障)。 人类解决问题与基于计算机求解问题的差异
28
教学进度 计算机科学与工程系 5.3 问题求解过程 尽管计算机只是一个工具或者说一个高级的工具,但借 助于计算机进行问题求解,其思维方法和求解过程却有自己 独特的概念和方法。 当我们面对需要求解的问题时,首先要做的事情就是进 行可行性分析,并对待求解的问题进行抽象,获取其数学模 型。接下来要做的事情就是组织、提取原始数据,以确定原 始数据进入计算机后的存储结构(即数据结构),并在数据结 构的基础上研究数据的处理方法和步骤(即算法)。
29
教学进度 计算机科学与工程系 5.4 算法与数据结构 用计算机解决实际问题时,首先要进行程序设计,而程序 设计主要包括算法的设计和数据结构两个方面的内容。计算机 算法与数据的结构密切相关,算法依附于具体的数据结构,数 据结构直接关系到算法的选择和效率。算法与数据结构是计算 机程序设计的重要理论技术基础。 5.4.1 数据结构简介 为了编写出一个 “ 好 ” 的程序,必须分析待处理的对象的 特征及各对象之间存在的关系,即如何表示、组织、存储和操 作数据,这就是数据结构所要研究的问题。
30
教学进度 计算机科学与工程系 5.4 算法与数据结构 数据结构涉及到的问题很多,包括数据的逻辑结构、数 据的物理结构、数据结构的运算等,这里就不再一一介绍了。 例:公司员工数据的存储(一个员工信息可以构造一个一 维数组的数据结构),编写程序通过算法就可实现对员工相关 信息(如插入、删除、查找、排序等)的处理了。 姓名性别出生日期职位工资 张军男 1975.5.6 总经理 2080.00 李芳女 1980.12.12 项目经理 1800.00 王明男 1979.4.19 程序员 1500.00 刘杰男 1974.6.23 系统分析员 1750.00
31
教学进度 计算机科学与工程系 5.4 算法与数据结构 5.4.2 算法 计算机解决问题必须按照一定的章法 “ 循序渐进 ” ,算 法就是解决问题或处理事情的方法和步骤。算法代表了对问 题的解,而程序则是算法在计算机上特定的实现。人们利用 计算机求解的问题是千差万别的,所设计的求解算法也各不 相同,对于求解同一问题,往往可以设计出多种不同的算法, 它们的运行效率、占用内存量可能有较大的差异。 算法是一种求解问题的思维方式。计算机与算法有着不可分割的关系。 可以说,没有算法,就没有计算机。从这个层面上说,算法就是计算机的 灵魂!算法是程序的灵魂!不掌握算法就无法编写出程序。算法在计算思 维中有着重要的地位。
32
教学进度 计算机科学与工程系 5.4 算法与数据结构 (1) 用自然语言描述算法 (2) 用流程图描述算法 (3) 使用伪代码描述算法 (4) 用程序设计语言描述算法 算法的描述方法有以下四种: 下面通过两个简单的问题说明设计算法的思维方法。 【例 1 】有黑和蓝两个墨水瓶,但却错把黑墨水装在了蓝墨水瓶子 里,而蓝墨水错装在了黑墨水瓶子里,要求将其互换。 算法分析:这是一个非数值运算问题。因为两个瓶子的墨水不能 直接交换,所以,解决这一问题的关键是需要引入第三个墨水瓶。设 第三个墨水瓶为白色,其交换步骤如下: 步骤 1: 将黑瓶中的蓝墨水装入白瓶中; 步骤 2: 将蓝瓶中的黑墨水装入黑瓶中; 步骤 3: 将白瓶中的蓝墨水装入蓝瓶中; 步骤 4: 交换结束。
33
教学进度 计算机科学与工程系 5.4 算法与数据结构 我们完全可以将上述方法应用到两个变量值的交换。假定有两个 变量 x 和 y ,它们的值分别是 5 和 6 ,现在要将 x 的值变为 6 , y 的值变为 5 , 借鉴上面的算法,编写下列程序段: temp=x; x=y; y=temp; 我们再用另一种方法编写程序: x=x-y ; y=x+y ; x=y-x ; 其实,该程序段的功能与上面程序段完全等价。哪一段程序更简 单明了,相信大家一目了然。 使用计算机进行问题求解,需要经过分析问题、设计算法、编程实现 算法等步骤。以程序设计语言为工具,将算法实现为计算机的程序,再通 过运行程序而得到问题的解。利用程序设计语言进行程序设计,是计算机 问题求解的必要环节。
34
教学进度 计算机科学与工程系 5.4 算法与数据结构 【例 2 】使用上面四种描述算法的方法求两个正 整数 m 和 n 的最大公约数。 ① 自然语言描述 步骤 1: 用 m 除以 n ,所得余数为 r 。 步骤 2: 令 m 等于 n , n 等于 r 。 步骤 3: 若 r 为 0 ,则得到问题的解是 m ,否则转到 步骤 1 继续。 ② 传统流程图描述,如图所示。 ③ 伪代码描述 BEGIN ( 算法开始 ) 输入整数 m , n REPEAT r = m mod n; m = n; n = r; UNTIL r=0 输出 m; END ( 算法结束 ) ④ 程序语言描述 (Java 语言 ) void gys(int m , int n){ int r; do{ r = m % n; m = n; n = r; }while(r!=0); printf("%d\n ",m) }
35
教学进度 计算机科学与工程系 5.5 本章计算思维的典型案例 案例 1 : 某同学刚学了几天 C 语言程序设计,想试试自己的能力,找一道 求方程 3x 2 +5x-15=0 的根的题目。用 C 语言写出下述的程序段: float x; /* 定义变量 */ 3*x*x+5*x-15=0; /* 给出方程,让计算机求解 */ printf(“%f”,x); /* 输出结果 */ 结果上机一试,才发现错误一大堆,根本不可能得到想要的解。 该同学实在想不明白的是:计算机不是很神吗?怎么这么简单一 个方程都不能求解 ? 事实上,计算机确实不能求解上述方程,确切地说,计算机只会 帮我们 “ 计算 ” ,至于如何计算那就是我们的事情了。
36
教学进度 计算机科学与工程系 5.6 本章计算思维的典型案例 就本例而言,如果我们自己都不知道如何求解此方程,那也就别指望 计算机帮我们求解它。换句话说,我们得告诉计算机如何一步一步地去求 解此方程,然后计算机按照我们的计算要求帮我们一步一步地去计算。只 有很好地理解了这样的 “ 计算思维 ” ,我们才能写出下面的程序段: float x1, x2, d; /* 定义变量 */ d=5 * 5-4 * 3 * (-15); x1 = (-5 + sqrt(d))/(2 * 3); /* 求根公式 */ x2 = (-5 - sqrt(d))/(2 * 3); /* 求根公式 */ printf(“%f”, %f”, x1, x2); /* 输出结果 */ 通过这个例子,大家应该明白计算机并不是你想象的那么 “ 智能 ” 。 和人脑相比,它只是会算,而且算的速度非常快,除此以外计算机几乎没 有什么更多的优越性了。记住,计算机永远都是在人脑的指挥下工作的! 程序的力量:可表达人的思想、办法、事物的规律,通过算法和编程实 现。
37
教学进度 计算机科学与工程系 5.6 本章计算思维的典型案例 案例 2 : 在计算机科学中,将大规模的复杂问题分解成若干个较小规模的、 更简单的问题加以解决,是一种常用的计算思维。 在本章中,结构化程序设计采取了计算思维中的典型方法 —— 分解。 按照 “ 分而治之 ” 的策略,将顶层问题的求解目标逐层分解成子目标, 每个子目标用相应的程序模块进行实现,这样构成求解整个问题的程序。 一个复杂的问题可以看成由若干稍简单的问题构成。对于可以用计 算机求解的问题,问题规模越小,解题所需的计算时间也越少,也越容 易求解。因此,可以将一个难以直接解决的大问题,分割成一些规模较 小的模块,以便各个击破、分而治之。 日常工作中的层次化管理也是一种对分解方法的运用。以企业运行 为例,一个大型企业也是一个非常复杂的系统,采取 “ 金字塔 ” 型的管 理层次是一种常用的策略,将企业逐层分解,越上层的机构越少,越向 下功能分解越细、机构数目越多。各级机构管理好自己的下属机构,完 成上级机构制定的目标,最终整个企业实现自己的整体目标。
38
教学进度 计算机科学与工程系 学习完本章后,请思考并讨论以下提出的几个问题: 1. 结合你所学的专业谈谈你适合学习哪种程序设计语言。 2. 谈谈你是如何理解算法是程序的灵魂,是计算机的灵 魂,是计算思维的灵魂。
Similar presentations