




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 程序设计和软件开发4.1 高级语言产生4.1.1 从机器语言到高级语言程序是计算机完成某个任务的一系列操作步骤。为了让计算机解决一个实际问题,必须事先用计算机语言编制好程序。编制程序可以使用机器语言、汇编语言和高级语言。1 机器语言因为机器指令是二进制代码,用机器语言编写程序就是要编出由一条条二进制代码组成的程序。2 汇编语言为了克服机器语言的缺点,人们发明了汇编语言。汇编语言是在机器语言的基础上符号化而成的,即采用英文单词或缩写表示的“助记符”来代表机器指令。由于计算机只能识别机器语言,因此需要将汇编语言程序翻译成机器语言程序(目标程序)才能执行。如图4-1所示。图4-1 汇编语言源程序的执行过程【例4.1】已知三角形的三条边长分别是3、4、5地址单元中,计算三角形的周长。求这个三角形周长机器语言程序和相应的汇编语言程序如图4-2所示。图4-2 机器语言程序和汇编语言程序3 高级语言汇编语言程序仍然需要熟悉计算机指令,编写程序仍然非常繁琐。为了克服汇编语言的缺陷,提高编写和维护程序的效率,一种接近于普通的数学语言和自然语言(主要指英语)的程序设计语言应允而生了,这就是高级语言。用高级语言编写的程序称为“源程序”。目前比较流行的高级语言有C、C+、Java、C#、Visual Basicl等。【例5.2】用C语言实现计算三角形的周长。设三角形的3条边的长度为整数。计算三角形的周长的C语言程序如下:#include void main( )unsigned int length,a,b,c;/声明存放三角形3条边和周长变量 printf(a,b,c=);/显示输入提示信息“a,b,c=”scanf(%d,%d,%d,&a,&b,&c);/输入三角形的3条边长到a,b,c变量中length=a+b+c;/计算周长 printf(the girth is:%dn,length);/在屏幕上显示周长计算结果由于计算机只能执行机器语言程序,因此用高级语言编写的“源程序”也必须翻译成机器语言程序,计算机才能执行。负责完成翻译任务的称为“编译程序”。高级语言源程序的编译连接执行过程如图4-3所示。图4-3 编译执行过程4.1.2 高级语言开发环境用户通过文本编辑器(例如:Windows附件中的记事本)录入高级语言程序形成“源程序”文件。例如,上面的“计算三角形的周长的C语言程序”可以保存为ex4-2.c文件。“源程序”文件通过编译器把高级语言程序翻译成机器语言程序,然后进行连接后形成可执行的文件,运行可执行的文件即可实现程序的功能。通过高级语言集成开发环境(IDE)软件,可以编写程序、编译、连接和运行均在其中完成。例如:Turboc 2.0、Visual C+6.0都是C语言的集成开发环境。下面以Visual C+6.0集成开发环境(如图4-4所示)介绍C语言开发过程。运行编写程序连接编译图4-4 C语言的开发环境Visual C+6.01. 编写程序单击“新建文本文件”按钮,输入“编写程序”程序,保存为“ex52.c”文件。2. 编译、连接单击“Compile”,编译“ex52.c”源程序文件为机器语言文件;单击“Build”,将编译形成文件进行“连接”形成可执行的文件。3. 运行在编译连接后,单击“BuildExecute”,运行可执行文件。系统显示:a,b,c=用户输入:3,4,5系统显示:the girth is:12运行结果如图4-5所示。图4-5运行的结果4.2 高级语言程序设计基础程序是对解决问题的步骤的描述。编写程序的前提是已经知道如何解决这个问题,例如:求一元二次方程ax2 +bx +c =0的实数根。如果没有中学数学的知识,当然就不知道如何解决这个问题,编写解决这个问题的程序就无从谈起。4.2.1 算法算法就是解决问题的方法。算法需要描述出来,别人才能知道,自己编写程序也才比较容易。描述算法有多种方法,例如:文字写出来,用流程图表达等。1. 算法文字描述例如:求一元二次方程ax2 +bx +c =0(设a0)的实数根。对应算法描述如下: 第1步:输入系数a、b、c。 第2步:计算d= b2 -4ac。 第3步:若d0计算xl= ,x2=;输出两个实数根为xl和x2,转第6步;否则,转第4步。 第4步:若d=0)/计算x1, x2; 输出x1, x2else printf(“no root!”);因为条件成立时需要执行多条语句,所以在C语言中需要用起来。【例5.3】用C语言实现计算一个“一元二次方程ax2 +bx +c =0的实数根”。设a、b、c系数为整数。根据计算“一元二次方程ax2 +bx +c =0的实数根”流程图,程序如下:#include #include void main()int a,b,c;intd;floatx1, x2;printf(a,b,c=);scanf(%d,%d,%d, &a, &b, &c);d=b*b-4*a*c;if (d=0)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(x1=%f, x2=%fn, x1, x2); else printf(no root!n);运行结果如图4-10所示。图4-10 运行结果6. 循环循环结构是由某个条件(称循环控制条件)来控制某个操作(称循环体)是否重复执行的一种控制结构。循环结构也有多种形式,如图4-11所示是首先判断条件,条件成立,执行指定操作。如图4-12所示是首先执行指定操作,然后判断条件,条件成立继续。图4-11 当型循环结构的流程图 图4-12 直到型循环结构的流程图例如,需要计算多个“一元二次方程ax2 +bx +c =0的实数根”:int a,b,c;char yes; doscanf(“%d,%d,%d”, a,b,c);/输入a, b, c/计算一个“一元二次方程ax2 +bx +c =0的实数根”程序prinf(“continue(T/F)?”; scanf(“%c”, yes);/输入T或者其他字符字符, 确定是否继续计算。 while(yes=T)/输入T字符, 继续。上面是高级语言程序设计需要包含的基本内容,有了这些,算法描述的内容都可以表达出来。但是,为了方便程序设计,提高效率,高级语言程序设计还包含了很多其他的语句。4.3 高级语言程序设计方法用高级语言进行程序设计,如果问题很简单,不需要描述算法,直接编程序就可以。例如:已知三角形的3条边,计算三角形的周长。如果问题比较复杂,首先需要设计算法,如果必要可以把算法描述出来,然后根据算法进行程序设计。高级语言程序设计方法包括结构化程序设计和面向对象程序设计。4.3.1结构化程序设计结构化程序设计又称面向过程程序设计,它的基本思想是采用自顶向下、逐步求精的设计方法和单入口单出口的控制结构。它把一个复杂问题分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。单入口单出口的控制结构可以减少错误的产生,便于程序调试。例如,“学生成绩管理系统”可以把它分解成学生管理、课程管理、成绩管理,成绩管理又包括成绩录入、成绩排序、成绩图形分析等。这些功能可以分别编写成模块,调用的模块称为主模块,被调用的模块称为子模块。如图4-13所示。图4-13 学生成绩管理系统功能模块例如,为了描述成绩排序的算法,可以分别画出它们的流程图。4.3.2面向对象程序设计1. 面向对象程序设计基本概念在结构化程序设计中,数据和对数据的操作是相分离的。下面介绍面向对象程序设计的基本概念。l 类和对象类描述具有相同特性和行为的对象的抽象,对象是类的一个实例。例如,“汽车”就是一个类,它包含了汽车的共同特征(例如:型号、发动机排量、外观尺寸、颜色等),而对于“奥迪A6”则是汽车这个类的一个具体实例。日常生活中会涉及到各种类,例如学生、学校、房子、蔬菜,等等。子类是在已有类的基础上修改而形成的类,子类所依托的类称为父类。例如:卡车属于汽车,但卡车又有其特有的特征(如载重量),我们可以定义一个卡车子类,它继承汽车类,同时它增加如载重量特性。这时,汽车是卡车的父类。父类修改后,子类将继承任何对父类所作的修改。l 属性和方法为了实现常用功能,系统提供了一些类称为基类,用户可根据需要自定义类。在Java中,类的特征用属性描述,类的行为用方法描述。方法实际上就是一个函数,函数中的语句组成的程序实现类的行为的功能。例如,可以定义一个三角形类,它的属性包括3条边、周长、面积等。它的方法包括计算周长、计算面积等。l 事件一个程序运行时会有许多个对象,这些对象之间总是要发生联系的。对象之间可以通过事件进行通信。2. 可视化面向对象程序设计可视化面向对象程序设计是在面向对象的基础上加上了可视化元素,为应用程序的界面设计提供了更迅速便捷的途径:程序员不需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象拖放到屏幕上即可。例如,Visual BASIC语言(简称VB)就是典型的可视化面向对象程序设计语言。【例5.4】输入三角形的三边长a、b、c,计算三角形的周长和面积。在VB.NET 2005中实现。程序运行界面如图4-14所示。图4-14程序运行界面程序代码如下:Imports System.MathPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 单击“计算”按钮事件执行的程序 Dim a, b, c As Double Dim p, s As Double a = Val(TextBox1.Text) 得到界面上输入三角形3条边 b = Val(TextBox2.Text) c = Val(TextBox3.Text) 判断a,b,c数据的合法性 If a + b c And a + c b And b + c a Then p = (a + b + c) / 2 s = Sqrt(p * (p - a) * (p - b) * (p - c) TLen.Text = CStr(a + b + c) 计算三角形周长,放到TLen文本框中 TArea.Text = CStr(s) 计算三角形面积,放到TArea文本框中 Else MsgBox(数据错误!) 否则在界面上显示错误信息 End If End SubEnd Class从程序设计语言的发展趋势看,面向对象的高级程序设计语言当前程序设计语言的主流。4.4 数据结构数据是程序加工的“原料”。例如,上面计算三角形边长是数据,计算周长和面积的程序需要这个数据作为基础。数据按什么结构进行组织和存储,可以提高数据处理的效率,是数据结构研究的主要问题。下面介绍几种常用的数据结构:4.4.1线性表 在“QQ游戏”中有很多网络玩的游戏,例如,“斗地主”就是扑克牌的游戏。如图4-15所示就是其中的一个画面。图4-15 扑克牌游戏图在计算机上编写扑克牌游戏,首先就是每个人手上的扑克牌如何表示,然后就是对扑克牌进行的操作,例如摸牌和出牌等。如果表示扑克牌不分花色,扑克牌可以用字符表示,例如可以表示为3,表示为Q,表示为4,表示为6,表示为0。这样,可以表示为:(7,7,7, 7 , 0,0,J ,Q, 2, 2)。把手上的扑克牌变成了数据。一般地,线性表是由n(n0)个相同性质的数据元素组成的有限序列,表示为:(a1,a2,. an)这里,表示某人手上的扑克牌,a1就是当前的第1张扑克牌的数据,a2就是第2张扑克牌的数据表示,以此类推。对线性表的操作包括:插入、查找、删除等。4.4.2 栈在讨论栈之前,先分析一下老鼠钻迷宫的过程。把老鼠放在迷宫的入口,把食物放在迷宫的出口,如果老鼠想吃到食物就必须找到一条从入口到出口的路径,如图4-16所示。图4-16 老鼠钻迷宫老鼠怎样才能找到从入口到出口的路径呢?通过观察我们知道,老鼠从入口出发,顺着某一方向向前探索,如果能走通,则继续往前走;否则沿原路退回,从另一个方向再继续探索,直到找到一条通路为止。如果用计算机来模仿老鼠钻迷宫,必须要解决迷宫的表达和老鼠钻迷宫的过程。关于迷宫可以采用矩阵来表示,而模仿和记录老鼠钻迷宫的过程需要用到这里介绍的“栈”。栈又是一种运算受限的线性表,插入和删除都限制在表的同一端进行。允许插入、删除的这一端称为栈顶,另一端称为栈底。如图4-17所示。图4-17 栈的工作方式栈的特点是先进后出。【例5.5】说明栈在火车调度中的应用。我们可以把火车库的一条铁轨作为一个栈,火车车箱入库就是入栈,栈中的数据为每一列车箱编号和特性,火车车厢出库就是出栈。最后进栈的,最先出栈。通过栈数据结构,可以编排车箱出库后排列顺序。例如:以车箱编号表示进库数据,以负数表示车箱出库数量,输出车箱出库编号。输入:1022,1203,2234,1010,2301,2202,-3,1104,2206,1212,-6输出:2202,2301,1010,1212,2206,1104,2234,1203,10224.4.3 队列队列是先进先出的线性表。如图4-18所示,对队列的插入操作限制在表的一端(队尾)进行,删除操作限制在表另一端(队头)进行。不含数据元素的空表称为空队列。图4-18 队列的工作方式【例5.6】说明打印机按序打印多个文档。如果需要同时打印4个文档,并不需要等待第1个文档打印结束后再发打印第2个、第3个、第4个文档的命令,而是在发出打印第1个文档后立即发出打印其他几个文档的命令。如图4-19所示。图4-19 打印机打印文档实现上述功能使用了“队列”。打印机打印文档时,根据请求打印文档的先后顺序依次排成打印队列。先请求打印的文档先打印,打印完成后,到打印队列中去找下一个需要打印的文档,就这样按照打印队列的顺序依次打印后面的文档,直到打印完成。4.4.4 树树结构在客观世界中广泛存在,一切具有层次关系的问题都可用树来描述。例如,一台计算机的硬盘可以分成C盘、D盘、E盘等逻辑盘,其中每一个逻辑盘的文件夹和文件的组织就是一棵树。如图4-20所示就是某人D盘的目录文件结构。图4-20 D盘目录文件结构例如,图4-21 D盘目录文件结构表示成树如下。为了简单,用下列代号表示文件夹和文件。其中:AD盘B“Student”文件夹C“资料”文件夹D“My.DOC”文件E“学生.dat”文件F“AppProg”文件夹G“物联网.DOC”文件H“main.cpp”文件I“edit.cpp”文件J“list.cpp”文件D盘文件结构用树表示如图6.4所示。图4-21盘文件树结构示意图人类社会的族谱也是树结构。一个家族看作一棵树,树中的结点为家族成员的姓名及相关信息,树中的关系为父子关系,即父亲是儿子的前驱,儿子是父亲的后继。图4-22所示就是一个家族树。图4-22 家族树对树进行的操作包括:找子孙、找兄弟,遍历所有的树等。4.4.5 图在介绍图以及图的操作之前,先来看一个江苏省高速公路的例子。如图4-23所示。图4-23 江苏省高速公路图 某人从南京出发沿高速公路去连云港,怎么走距离最短? 要让计算机解决从两地之间距离最短问题,就需要解决江苏省高速公路图的表示、存储和对图的操作等。这就是数据结构中的图的问题。要描述图,只需要表示图的顶点、顶点与顶点之间连接的边。为了用计算机描述江苏省高速公路图方便,我们把图中顶点的名称用代号表示:v1 南京v2 镇江v3 常州v4 无锡v5 苏州 v6 六合东v7 扬州 v8 正谊v9 广陵v10 南通v11 黄花塘v12 淮安 v13 盐城 v14 宿迁v15 徐州 v16 新沂v17 连云港这样,江苏省高速公路图如下图4-24所示。(a) 不带距离的图 (b) 带距离的图图4-24 江苏高速公路图描述为图求最短路径仅仅是对图进行的一个操作,对图可以进行的操作还有很多。实际上,最短路径不仅指一般地理意义上的距离最短,还可以延伸到其他的度量,如时间、费用、线路容量等。4.5 软件工程软件工程就是采用工程设计的概念、原理、技术和方法来开发、运行、维护和修复软件的系统方法。正如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。一般称其为计算机软件的生存期。软件生存期的6个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。前2步为定义阶段,中间3步为开发阶段,最后一步维护阶段。 1. 制定计划确定要开发软件系统的总目标,给出它的功能、性能、可靠性以及接口等方面的要求。 2. 需求分析对待开发软件提出的需求进行分析并给出详细的定义。软件人员和用户共同讨论决定:哪些需求是可以满足的,并对其加以确切地描述。然后编写出软件需求说明书或系统功能说明书,及初步的系统用户手册,提交管理机构评审。 3. 软件设计设计是软件工程的技术核心。软件设计分成概要设计和详细设计。l 概要设计:在设计阶段中,设计人员把已确定了的各项需求转换成一个相应的体系结构。结构中的每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。l 详细设计:对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。上面介绍的算法及其描述算法的工具(例如,流程图)主要用于详细设计。 4. 程序编写 把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询公司战略方案
- 甲乙签订一份试用买卖合同6篇
- 2025版地磅购置与安全认证合同范本
- 华彩战略咨询方案
- 高校党章考试题及答案
- 感官课程考试题及答案
- 施工方案pdf怎么修改
- 法考试题及答案
- 湖北顶板加固施工方案
- 2025民办幼儿园教师聘用合同书范本
- 医院感控试题及答案
- NCCN卵巢癌指南2025第1版解读课件
- 报关员考试商品编码习题
- 残疾人服务课件
- 2025-2030中国防脱发洗发水行业市场发展趋势与前景展望战略研究报告
- 2025年全国中学生汉字听写大会比赛题库及解析(共四套)
- 殡仪馆面试题及答案
- DB37-T 5312-2025 《建筑施工安全防护设施技术标准》
- 二手车寄售协议书范本
- 2025年度拍卖会竞拍者资格审查合同4篇
- 门诊挂号与预约管理制度
评论
0/150
提交评论