《大学计算机基础》第5章-程序设计基础.ppt
《《大学计算机基础》第5章-程序设计基础.ppt》由会员分享,可在线阅读,更多相关《《大学计算机基础》第5章-程序设计基础.ppt(103页珍藏版)》请在三一办公上搜索。
1、1,大学计算机基础,北京航空航天大学,教学课件,2,第5章 程序设计基础,5.3 程序设计步骤与程序设计方法,5.1 程序和程序设计语言,5.2 算法,5.4 常用程序设计语言,5.5 程序设计范型,3,本章重点,程序的概念程序设计语言的结构算法的概念与描述方法程序设计步骤程序设计方法,4,5.1 程序和程序设计语言,5.1.1 程序的一般概念 5.1.2 程序设计语言的概述 5.1.3 程序设计语言的结构,5,程序的一般概念,生活中程序的概念,何事?,策划,导演,例1:年终总结会的程序:会议主持宣布会议开始领导讲话个人或团队代表发言领导总结会议主持宣布会议结束,6,程序的一般概念(续1),生
2、活中程序的概念,步行骑车开车时间红绿灯铁道,依据实际案例并精心计算,解决该计算问题的方法、步骤就包含了程序的概念。,例2:某人从甲地到丙地去。,7,程序的一般概念(续2),计算机程序的概念:,为实现某一算法而编写的指令序列。宏观地描述该指令序列,可用计算机的机器语言汇编语言高级语言用经典的公式可表示为:程序=算法+数据结构,8,程序设计语言的概述,程序设计编写程序的全过程。有学者认为:程序设计=算法+数据结构+程序设计语言,程序设计语言人和计算机之间对话和交流的一种工具,用于描述计算机所执行的操作。,计算机程序设计语言有几百种,但是最常用的不过10多种,了解一些程序设计语言的不同特性,有助于为
3、特定任务而选择适当的程序设计语言。,9,1.机器语言(Machine Language),指令指挥计算机完成某个基本操作的命令。,指令系统所有的指令集合。(第一代程序设计语言)机器语言用二进制代码表示指令系统的语言。机器语言程序由二进制代码按一定规则组成的、能被机器理解和运行的指令序列。(也称可执行程序)例如:计算累加器A=8+10的机器语言程序如下:,10,2.汇编语言(Assembly Language),汇编语言实质就是以容易记忆的代码或英文单词来代替约定的机器指令。(第二代程序设计语言),例如:用ADD表示加、SUB表示减、JMP表示跳转、MOV表示数据的传送指令等。汇编源程序使用汇编
4、语言编写的程序。例如:上述计算累加器A=8+10的汇编语言程序如下:,11,3.高级语言(High Level Language),高级语言类似数学语言或人的自然语言,同时又不依赖于某种计算机硬件,使得设计编制的程序能够在所有机器上通用。(第三代程序设计语言),程序设计语言在不同的系统平台使用比较普遍的有:FORTRAN、ALGOL、COBOL、LISP、PL/I、BASIC、SIMULA 67、Pascal、C、Smalltalk 80、Ada、C+、VC、VB、Delphi、Java、JavaScript、C#、Visual BASIC.NET。可视化语言构成了命令式语言中的另一个子类。最
5、流行的可视化语言Visual BASIC(1999年),已被Visual BASIC.NET(2002年)取代。提供拖拉式生成代码段的功能。一度被认作第四代语言,此说法已不再使用了。,12,程序设计语言的特点,机器语言的特点:编程难效率高 需要指令系统难读难维护,高级语言的特点:编程容易效率低 需要编译系统易读易维护,汇编语言的特点:编程不容易效率较高 需要汇编程序不易读不易维护,13,程序设计语言的结构,程序结构的多样性:结构化程序 模块化程序 面向对象的程序结构,一个良好结构的程序具有以下等特点:结构清晰容易阅读容易理解容易验证容易维护1996年,计算机科学家Boehm和Jacopini提
6、出并从数学上证明 任何一个算法,都能以三种基本控制结构表示,即顺序结构、选择结构和循环结构。,14,结构化程序设计中顺序结构,按照程序语句行的自然顺序,一条语句一条语句地执行程序。,15,结构化程序设计中选择结构,根据条件的判断确定应该执行哪一条分支的语句序列。(又称为分支结构),单分支、多分支结构?,16,结构化程序设计中循环结构,主要用于重复执行相同的语句序列(被称为循环体),直到判定条件为假(或为真)时才可终止执行循环体。,17,结构化程序设计的特点,每种结构,只有一个入口和一个出口,这是结构化设计的一个原则。,遵循结构化程序设计的原则,按照结构化程序设计方法设计出的程序具有明显的优点:
7、其一,程序易读、理解和维护。程序员用结构化编程方法,将复杂程序分解成若干子结构,便于控制、降低程序的复杂性,因此容易编写程序,同时便于验证程序。其二,提高编程工作效率,降低软件开发成本。由于结构化编程方法能够把错误控制到最低限度,因此能够减少调试和查错的时间。,18,5.2 算法,5.2.1 算法的概念与特征 5.2.2 算法的描述方法 5.2.3 程序设计典型算法,19,算法的概念与特征,1976年Niklaus Wirth(也是Pascal语言发明者,1984年获得图灵奖)的专著:,Algorithms Data Structures Programs(算法 十 数据结构=程序)在计算机软
8、件开发行业中产生了极为深远的影响,从而推动了软件开发技术和方法步入正轨,使人们开始深入研究数据结构和算法设计与分析的技术和方法。,20,1.算法的概念,算法解决某个具体问题而采取的方法与步骤的完整和准确的描述。是指令的有限序列,其中每一条指令表示一个或多个操作。是问题的程序化解决方案,这些解决方案本身并不是答案,而是获得答案的精确指令。,算法的分类顺序算法:是由冯诺依曼型计算机体系结构所决定的,其主要思想是指令逐条运行,每次执行一步操作。并行算法:要求在一些更新式的计算机中可以在同一时间执行多条指令。,21,2.算法的特征,一个算法必须具备五项基本特征:有穷性、确定性、数据输入、数据输出和可行
9、性。,(1)有穷性算法是有序指令的集合,并在执行有穷步骤后能够终止。(2)确定性每条指令必须有确切的含义,且无二义性。在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入数据只能得到相同的输出数据。(3)输入数据可有零个或多个输入数据。这些输入数据取自于某个特定对象的集合。(4)输出数据必须有一个或多个输出数据。(5)可行性描述的操作都可以通过已经实现的基本运算执行有限次来实现,也可以证明整个算法实施后可以得到预期的解。,22,例5.1 一个非算法的计数过程,令n为0;置n为n+1;返回。,结论:不能称为算法。原因:违背了算法特征中(1)、(4)、(5)。,23,例5.2 计数器算法,用
10、自然语言编写一个不超过1万次的计数器算法:令n为0;置n为n+1 若n小于10000,则返回;否则,输出n之值,且算法到此结束。,结论:是算法。原因:符合算法特征。,在算法设计过程中,其实还有有关正确性、可读性、健壮性、效率与低存储量需求,以及算法效率的度量等问题。,24,算法的描述方法,流程图(FlowChart)PAD图(Problem Analysis Diafram,问题分析图)N-S图自然语言伪代码 UML图(Unified Modeling Language,统一建模语言),25,1.流程图,流程图(框图)用不同形状的几何图形表示不同性质的操作,用流程线指明算法的执行方向。ANSI
11、(美国国家标准化协会)、ISO(国际标准化组织)和我国国家标准中均有类似的规定。常见的流程图符号如下:,向下或向右的流程线可以不画出箭头。当流程线有交叉时,则画一半圆通过交叉点。,26,用流程图描述的计数器算法,27,2.PAD图,由日立公司推出的PAD图是一种二维图。即从上向下顺序执行,从左到右表示层次关系。表示三种基本结构的PAD图如下:,28,3.N-S图,1973年美国两位学者提出无流程线的N-S图(盒图)。,结构化程序设计由三种基本结构而组成,则算法也应采用结构化描述方法,N-S图的基本单元是矩形框,框内可以有三种基本结构,形如堆积木,也只有一个入口和一个出口。三种基本结构的N-S图
12、如下:,29,用N-S图描述的计数器算法,30,4.自然语言,自然语言是人们日常生活、工作和学习中使用的通用语言,使用自然语言的文字描述算法通俗易懂,但也有它的缺陷:,(1)容易产生歧义性,因为自然语言经常要根据上下文才能判别其含义,不太严格。(2)自然语言很难清楚地表达算法的逻辑流程,对于算法中的条件判断、循环,尤其是在这些处理中还有多层嵌套,就很难用清晰而直观的语言来表达算法的流程。因此仅适于描述简单问题。,31,5.伪代码,伪代码是介于自然语言和计算机语言之间的文字和符号,它不能被计算机所理解,但使用伪代码描述的算法很容易转变成某种编程语言。,/用伪代码描述的计数器算法如下:n 0 do
13、 n n+1 while n 10000 输出n,且算法到此结束。,常用的伪代码是用自然语言与类Pascal或类C语言相结合的方法来描述算法。,32,流程图形的绘制工具,当使用图形描述算法时,流程图形的绘制工具有很多。,一般比较简单的图形可用Word或PowerPoint中的绘图工具栏来制作完成,若安装了功能强大的Microsoft Office Visio 2003,则可以更快地绘制具有专业水平的高质量图形。在Visio 2003中:含有丰富的基本流程图形状。能够快速、简便地建立流程图、组织图、日历时间表和其它多种图表。支持缩放矢量图形(SVG),这是一种新的图形格式标准。集合Interne
14、t的运用,可使用不同的语言创建绘图、创建包含多种语言的绘图以及跨多种语言共享绘图和展开协作。通过支持新的汉字编码标准GB18030,可从这个新的字符编码集中创建包含汉字的绘图。,33,程序设计典型算法,算法数值算法或非数值算法:,数值算法主要用于数值求解或分析,如:求和、求平方根、解方程、用组合梯形法则求定积分等。非数值算法主要用于各领域管理类的信息处理,如:各种排序、查找等。本节介绍一些简单的常用算法,并假设各数据均能满足值域要求。,34,1.求3个整数的最大值算法,为了编写求3个整数最大值的通用实现过程,采用主函数调用子函数的形式描述算法。,(1)主函数算法描述如下:输入三个整数a,b,c
15、;max=max3(a,b,c);输出max。,(2)max3 子函数算法描述如下:从a与b中取大数送m中;从m与c中取大数送m中;返回m给主函数。,35,求3个整数的最大值的C程序,/*使C预编译包含I/O头文件,则可用scanf、printf函数*/#include void main(void)int a,b,c,max;/*定义 4 个整型变量*/int max3(int a,int b,int c);/*max3 函数原形声明*/printf(“Input 3 integer numbers:”);/*输出双引号中的提示信息*/scanf(“%d%d%d”,/*输出 max 中的最大
16、值*/*End of main function*/,/*求 3 个整数的最大值的子函数 max3*/int max3(int a,int b,int c)/*max3 函数将返回整型值*/int m;/*定义 m 整型变量*/if(a b)m=a;/*从 a 与 b 中取大数送 m 中*/else m=b;if(m c);/*从 m 与 c 中取大数送 m 中,“;”即m=m*/else m=c;return(m);/*返回 m 给主函数*/*End of max3 function*/,36,2.欧几里得算法,求解两个不全为0的非负整数m和n的最大公约数,可以采用以下欧几里得算法。,(1)
17、欧几里得算法主函数描述如下:输入两个不全为0的非负整数m,n;Ecd=Euclid(m,n);输出Ecd,且算法到此结束。,(2)Euclid(m,n)子函数算法描述如下:while n 0 do r m mod n m n n r return m,37,3.两个变量值的交换算法,计算机实现的两个变量值的交换算法如下:,令 a=5,b=10 c a,a b,b c 输出 a 和 b 的值。,/*两个变量值交换算法的 C 源程序*/void main(void)int a=5,b=10,c;/*定义 a、b、c 3个整型变量*/printf(“交换前:a=%d,b=%dn”,a,b);/*交换
18、前输出a和b的值*/c=a;/*将 a 中的值赋值给 c*/a=b;/*将 b 中的值赋值给 a*/b=c;/*将 c 中的值赋值给 b*/printf(“交换后:a=%d,b=%dn”,a,b);/*交换后输出a和b的值*/*End of main function*/,三角对换法,38,4.排序算法,给定一个有n个元素可排序的序列,例如数字数据或字符串数据等,要求按照升序或降序方式重新排列。,排序算法:如冒泡排序法、选择排序法、插入排序法、合并排序法、快速排序法等等排序算法。,39,蛮力法中的选择排序法,按照降序方式排序的选择排序算法:,SelectionSort(Array 0.n-1)
19、/*本算法用选择排序法对给定数组按照降序方式排序*/*Array0.n-1 是有n个元素的可排序数组*/*本算法的结果在Array数组中*/for i 0 to n-2 do max i for j i+1 to n-1 do if Array j Array max max j swap Array i and Array max,40,选择排序法的 C 程序,/*SelectionSort(Array 0.n-1)选择排序算法的 C 源程序*/void SelectionSort(int n,int Array)int i,j,max,t;/*定义4个整型变量*/for(i=0;i Arr
20、aymax)max=j;/*记录大数元素的下标位置*/*利用 t 变量做三角对换*/t=Arrayi,Arrayi=Arraymax,Arraymax=t;/*End of SelectionSort function*/,41,选择排序法降序方式排序操作过程,例如:对序列89,29,68,90,17,34,45操作。,|89 29 68 90 17 34 45 90|29 68 89 17 34 45 90 89|68 29 17 34 45 90 89 68|29 17 34 45 90 89 68 45|17 34 29 90 89 68 45 34|17 29 90 89 68 45
21、34 29|17,每行表示该算法的一次迭代,即从尾部到竖线的一遍扫描;找到的最大元素用黑体字表示,竖线左边元素已经位于它们的最终位置,所以在当前和以后的循环中,都不必再操作了。排序操作过程如下:,42,5.查找算法,查找是指从给定的集合(或者是多重集,它允许几个元素具有相同的值)中查找一个给定的值(称为查找键 K)。,常用的查找算法有顺序查找和折半查找,还有那些将原来的集合表示为另一种形式以方便查找的算法等等。顺序查找直接从头到尾搜索集合的查找键。折半查找必须首先将集合按照降序或升序排序,然后利用折半技术搜索集合的查找键,所以,当集合是有序的时候,使用折半查找效率高、速度快。,43,判定哪一种
22、算法是最佳方案,针对排序和查找方面的算法更多,例如,采用分治法、减治法、变治法等等方法中的各种排序和查找算法。,运用经典的算法设计技术时空权衡、动态规划、贪婪技术等;算法能力的极限中的决策树技术、在多项式的时间内求解、数值分析,超越算法能力的极限中的回溯发、分支界限法和近似算法设计技术。,技术和思维方式都是不可或缺的,鞭策学习和掌握程序设计中的算法设计与分析技术,托马斯爱迪生(1847-1931)的名言:“不断关注那些已被他人成功应用的新思路。你的原创思想只应该应用在那些你正在研究的问题上”。,44,5.3 程序设计步骤与程序设计方法,5.3.1 程序设计步骤 5.3.2 程序设计方法,45,
23、程序设计步骤,一般程序设计应该包含以下4个步骤:,(1)针对具体问题进行分析了解问题性质,明确问题解决所达目标,提供的输入是什么?最终实现的输出是什么?执行中要做什么?怎么做?并建立相应的数学模型。(2)确定数据结构并设计相应的算法对具体问题进行概念抽象,构造出解决问题的轮廓,设计程序的数据结构和算法。(3)编写实现算法的程序根据算法确定解决问题的详细步骤,通常是通过绘制程序流程图,来描述问题处理的过程;然后按照流程图的描述选用某种程序设计语言编写程序。(4)测试与调试程序在程序设计过程中,经常不是那么一帆风顺的,尤其是初学者会遇到各种这样或那样的问题,还有一些问题可能是不可预测的,往往不得不
24、返到上一步骤中更改或调整相应的内容,并将相应文档也一并修改,通过举一反三的方法来解决给定问题。,46,测试程序与调试程序,测试程序,为了发现程序中的设计错误而运行程序。所使用的测试用例尤其重要,因为不仅需要合法值域用例,而且非法值域用例也是必须的。程序测试的成功与否直接可以体现程序健壮性。当软件项目是由团队开发时,测试程序可分为:单元测试、组装测试和确认测试。调试程序 错误定位和纠错的过程,这一过程的快慢与程序设计人员的编程经历和经验是密切相关的。,47,高级语言编写和运行过程,48,程序设计方法,早期的程序设计方法结构化程序设计方法 面向对象程序设计方法,49,1.早期的程序设计方法,早期的
25、程序设计方法追求程序的高效率,编程过份依赖技巧,忽视程序清晰,而不注重所编写程序的结构,很少考虑程序的规范化问题,也就是没有固定程序设计方法的时期。,程序的可读性、可重用性都很差。其中典型问题是:频繁使用goto语句,特意算计如何节省内存空间。虽然这些方法存在很多问题,但当时受限于计算机运行速度慢、内存容量小、硬件价格昂贵,程序的规模也比较小,对于单人完成较为简单的任务,事实上这些方法还是经常被采用的。,50,2.结构化程序设计方法,结构化程序设计方法出现在70年代中期。,随着计算机硬件成本急剧下降,软件需要处理的复杂问题也就越来越多。为了摆脱6070年代初的软件危机,因为当时编程无章可循,程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学计算机基础 大学计算机 基础 程序设计
链接地址:https://www.31ppt.com/p-5897804.html