1、第五章第五章 程序设计程序设计本章内容本章内容5.1 算法的定义与表示算法的定义与表示5.2 简单的排序算法简单的排序算法5.3 程序设计语言简介程序设计语言简介5.4 汇编语言汇编语言5.1算法的定义和表示算法的定义和表示软件开发步入软件开发步入工程化阶段工程化阶段大型软件开发一般要经历大型软件开发一般要经历“规划规划”、“需求分析需求分析”、“设计设计”、“编码编码”、“测试测试”和和“运行维护运行维护”等阶等阶段段5.1.1 算法的定义算法的定义正确的正确的“需求分需求分析析”对程序设计对程序设计是至关重要的是至关重要的“编码编码”是对需求是对需求的实现。在的实现。在“编码编码”过程中,
2、算法很过程中,算法很重要,良好的算法重要,良好的算法决定了程序的质量决定了程序的质量和性能和性能 软件的开发不仅需要处理大量软件的开发不仅需要处理大量的关系复杂的数据,这些数据通常的关系复杂的数据,这些数据通常都具有一定的结构性。因此,软件都具有一定的结构性。因此,软件设计的实质就是设计合适的数据结设计的实质就是设计合适的数据结构和基于这个数据结构的算法。于构和基于这个数据结构的算法。于是是N.N.沃恩提出了著名公式:沃恩提出了著名公式:程序程序 =数据结构数据结构 +算法算法程序设计程序程序设计方法学程序设计程序程序设计方法学模块化模块化 将复杂的算法将复杂的算法(或程序或程序)分解分解成若
3、干个相对独立、功能单一的成若干个相对独立、功能单一的模块,利用这些模块组合成全局模块,利用这些模块组合成全局算法算法(或或)程序。程序。自顶向下结构设计方法自顶向下结构设计方法从总体出发,居高临下,逐层分从总体出发,居高临下,逐层分解和逐步细化。解和逐步细化。结构化程序设计方法:结构化程序设计方法:逐步求精结构设计方法逐步求精结构设计方法 实质上也是一种自顶向下实质上也是一种自顶向下的设计方法。的设计方法。首先抛开细节设计出抽象首先抛开细节设计出抽象算法,然后把抽象数据和操作算法,然后把抽象数据和操作逐步具体化,直到可以由计算逐步具体化,直到可以由计算机具体实现为止。机具体实现为止。算法的定义
4、:算法的定义:是指解题方案的准确是指解题方案的准确而完整的描述,也可以说它是解决而完整的描述,也可以说它是解决某一特定问题的一组有穷规则的集某一特定问题的一组有穷规则的集合。合。(计算科学)(计算科学)(计算科学)(计算科学)可以用计算机来解决一类问题的可以用计算机来解决一类问题的可以用计算机来解决一类问题的可以用计算机来解决一类问题的程序和步骤程序和步骤程序和步骤程序和步骤算法特征:算法特征:有穷性:有穷性:合理算法应在执行有限步后结束合理算法应在执行有限步后结束如:如:N!=1*2*3*N!=1*2*3*(N-1)*N*(N-1)*N而式子:而式子:sum=1+2+3+sum=1+2+3+
5、N N+不能称为算法,因为它执行有限步后仍不能结束不能称为算法,因为它执行有限步后仍不能结束 确定性:确定性:算法的每一步执行,其顺序和内容算法的每一步执行,其顺序和内容都必须有确切的规定,不能模棱两可都必须有确切的规定,不能模棱两可 可执行性:可执行性:即即算法的所有操作都是能通过计算法的所有操作都是能通过计算机程序代码实现,即可操作性算机程序代码实现,即可操作性 0 0个或多个输入;个或多个输入;1 1个或多个输出个或多个输出【例例1】求求 解一元二次方程的算法解一元二次方程的算法 方程方程a*x*x+b*x+c=0,其中其中a、b和和c是不是不等于等于0的实数。具体参考步骤如下:的实数。
6、具体参考步骤如下:p=b*bp=b*b4*a*c4*a*cp0?p0?计算实根计算实根计算复根计算复根输出输出YN结构化算法的属性:结构化算法的属性:1.1.仅有一个入口仅有一个入口2.2.仅有一个出口仅有一个出口3.3.无死块无死块4.4.无死循环块无死循环块5.1.2 算法的类型与结构算法的类型与结构算法算法类型类型数值算法数值算法非数值算法非数值算法基本基本结构结构顺序结构顺序结构分支结构分支结构循环结构循环结构结构化算法只结构化算法只能由三种控制能由三种控制结构所构成结构所构成流 程 图算法的描述算法自然语言顺序结构选择结构循环结构顺序结构选择结构循环结构输 语句伪 代 码循环语句赋值
7、语句条件语句入出 算法的描述算法的描述算法的描述算法的描述还有计算机还有计算机语言语言改进N-S 四种图框类型四种图框类型输入、输出框输入、输出框处理框处理框判断框判断框起止框起止框 N-S结结构构化化流流程程图图(1973年年由由美美国国学学者者INassi和和BShneiderman提提出出,N和和S是是这这两两位位学学者者英英文文姓姓名名的的第一个字母)第一个字母)程序基本控制结构程序基本控制结构AB顺序顺序分支分支?ABTFT?AF当循环当循环循环循环FT?A直到型直到型例例2 给出求给出求1+2+3+4+5的一个算法的一个算法算法算法1 按照逐一相加的程序进行按照逐一相加的程序进行第
8、一步第一步 计算1+2,得到3;第二步第二步 将第一步中的运算结果3与3相加,得到6;第三步第三步 将第二步中的运算结果6与4相加,得到10;第四步第四步 将第三步中的运算结果10与5相加,得到15 自然语言示例自然语言示例算法算法2 可以运用公式可以运用公式1+2+n=n(n+1)/2 直接计算。直接计算。第一步第一步 取取n=5;第二步第二步 计算计算n(n+1)/2;第三步第三步 输出运算结果。输出运算结果。循环结构循环结构例例3 3 求求1 123452345。算法算法2 S1 T1;S2 I2;S3 TT I;S4 II+1 S5 如果如果I不大于不大于5,重新执行,重新执行 S3、
9、S4、S5;否则算法结束;否则算法结束I 5NYT1输出TI2TTIII+1开始结束例例4 4 求两个整数a和b的最大公约数欧几里得辗转相除法。问题背景与分析分析分析 求出列数:a,b,r1,r2,rn 1,rn,0 这列数从第三项开始,每项都是前两项相除所得的余数,余数为0的前一项rn即是a和b的最大公约数这种方法称为“欧几里得辗转相除法”求求68和和32的最大公约数的最大公约数欧几里得辗转相欧几里得辗转相除法。除法。68232432840求求66和和23的最大公约数的最大公约数欧几里得辗转相欧几里得辗转相除法。除法。66232202320132036232112120输出输出babYN输入
10、输入a,brMod(a,b)brMod(a,b)0 流程图流程图例例5 5 用二分法求方程x3-x-1=0在区间 1,1.5 内的一个近似解(误差不超过0.001)。问题背景与分析第一步第一步 确定有解区间a,b第二步第二步 取a,b的中点第三步第三步 计算函数在中点处的函数值第四步第四步 判断中点处函数值是否为0第五步第五步 判断新的有解区间的长度是否小于 给定的误差N输出输出x0 x0(a+b)f(x0)=0输入输入a,b,cbx0f(a)f(x0)0|a b|cax0f(a)a3-a-1f(x0)x03 x0 1 YNYYN 流程图流程图5.2 简单的排序算法简单的排序算法冒泡排序法冒泡
11、排序法:选择排序算法选择排序算法:插入排序算法插入排序算法:5.3 程序设计语言简介程序设计语言简介计算机程序设计语言的发展,经历了从机器语言、计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。汇编语言到高级语言的历程。5.3.1机器语言机器语言电子计算机所使用的是由电子计算机所使用的是由“0”和和“1”组成的二组成的二进制数,二进制是计算机的语言的基础。也就是进制数,二进制是计算机的语言的基础。也就是说,写出一串串由说,写出一串串由“0”和和“1”组成的指令序列组成的指令序列交由计算机执行,这种语言,就是交由计算机执行,这种语言,就是机器语言机器语言 。优点:优点:由于使
12、用的是针对特定型号计算机的语言,由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的;故而运算效率是所有语言中最高的;缺点:缺点:在一台计算机上执行的程序,要想在另一在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工台计算机上执行,必须另编程序,造成了重复工作作。5.3.2 汇编语言汇编语言 用一些简洁的英文字母、符号串来替代一个特定用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用的指令的二进制串,比如,用“A D D”代表加法,代表加法,“M O V”代表数据传递等等代表数据传递等等。缺点:缺点:汇编语言同样十分依赖于机器硬件,
13、移植汇编语言同样十分依赖于机器硬件,移植性不好性不好;优点:优点:效率仍十分高,针对计算机特定硬件而编效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。种常用而强有力的软件开发工具。5.3.3 高级语言高级语言 这种语言接近于数学语言或人的自然语言,同时这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机又不依赖于计算机硬件,编出的程序能在所有机器上通用器上通用。影响较大、使用较普
14、遍的有影响较大、使用较普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L/1、P a s c a l、C、P R O L O G、A d a、C+、V C、V B、D e l p h i、J AVA 等。等。高级语言的发展也经历了从早期语言到结构化程高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式作坊式的
15、封闭式生产,发展为产业化、流水线式的工业化生产。的工业化生产。FORTRAN语言 FORTRAN是英文是英文FORMULA TRANSLATION的的缩写,其含义是缩写,其含义是公式翻译公式翻译。它是一种分块并列。它是一种分块并列结构的结构的面向过程的高级语言面向过程的高级语言。FORTRAN语言开始是语言开始是为解决数学问题和科为解决数学问题和科学计算而提出的学计算而提出的,多年来的应用表明:由于,多年来的应用表明:由于FORTRAN本身具有标准化程度高,便于程序互本身具有标准化程度高,便于程序互换,较易优化,计算速度快;因此这种高级语言换,较易优化,计算速度快;因此这种高级语言目前己广泛流
16、行。国外几乎所有的计算机厂商都目前己广泛流行。国外几乎所有的计算机厂商都能向用户提供能向用户提供FORTRAN的编译程序和应用程序的编译程序和应用程序的版本。的版本。从使用的角度来看,目前从使用的角度来看,目前FOBTBAN也不再是专用于科学计算也不再是专用于科学计算(数值计算数值计算)中进行程序编制的语言了。中进行程序编制的语言了。越来越多的商业系统、企业单位也采越来越多的商业系统、企业单位也采用用FORTRAN语言来编制商业和企业语言来编制商业和企业的的管理程序管理程序。ALGOLALGOL:国际代数语言国际代数语言ALGOL是是计算机计算机发展史上首批产生的发展史上首批产生的高级语高级语言言,当时还是,当时还是晶体管晶体管计算机流行的时代,由于计算机流行的时代,由于ALGOL语句和普通语言语句和普通语言表达式表达式接近,更适于接近,更适于数值数值计算计算,所以,所以ALGOL多用于科学计算机多用于科学计算机。ALGOL这个名称是这个名称是算法语言算法语言的简称,这种语的简称,这种语言不是计算机制造公司为某种特定机器设计的,言不是计算机制造公司为某种特定机器设计的,而是而是纯粹面向
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1