第一章软件设计概论

上传人:新** 文档编号:567640101 上传时间:2024-07-21 格式:PPT 页数:51 大小:592.50KB
返回 下载 相关 举报
第一章软件设计概论_第1页
第1页 / 共51页
第一章软件设计概论_第2页
第2页 / 共51页
第一章软件设计概论_第3页
第3页 / 共51页
第一章软件设计概论_第4页
第4页 / 共51页
第一章软件设计概论_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第一章软件设计概论》由会员分享,可在线阅读,更多相关《第一章软件设计概论(51页珍藏版)》请在金锄头文库上搜索。

1、穗优愚乐族奴同雷等膀摘掖衡攘擞痔羽差铃蛮国娘想书附释胚自赃床钵沂第一章软件设计概论第一章软件设计概论第一章第一章 软件设计概论软件设计概论第五章第五章 类与对象类与对象第四章第四章 函数函数第三章第三章 结构化程序设计结构化程序设计第二章第二章 C+基础知识基础知识第十章第十章 异常处理异常处理第九章第九章 输入输入/输出流类库输出流类库第八章第八章 继承与多态继承与多态第七章第七章 动态内存分配动态内存分配第六章第六章 指针与数组指针与数组第十一章第十一章 标准模板类库标准模板类库(STL) 附附 录录 目目 录录些铬藏灯吱三牵劳鳖蹬椅远蚁躁群颖厂扳情哇逗奶薄尊罐抖瘴强洱闭寺厢第一章软件设计

2、概论第一章软件设计概论第一章第一章 软件设计概软件设计概述述软件设计软件设计是一个将是一个将人类思维人类思维物化为物化为计算机思维计算机思维的的过程,通过这个过程计算机获得一定程度的独立过程,通过这个过程计算机获得一定程度的独立加工甚至思维的能力,从而将人类思维推向更高加工甚至思维的能力,从而将人类思维推向更高层次。关于软件设计的概念和方法的研究是随着层次。关于软件设计的概念和方法的研究是随着计算机应用的深入和所处理问题的复杂化而不断计算机应用的深入和所处理问题的复杂化而不断加深的。本章将就软件设计的相关加深的。本章将就软件设计的相关概念概念和程序设和程序设计方法的计方法的演化发展演化发展作一

3、简要介绍。作一简要介绍。戴傍劫遍铣来筑理都好贷制厘郸但捧棠肋捏樱夹汹日毡绽礁审疆仲炮曼舌第一章软件设计概论第一章软件设计概论1.1 软件软件与软件危机与软件危机1.2 软软 件件 工工 程程1.3 程序设计方法程序设计方法 1.6 一个简单的一个简单的C+程序程序1.5 C语言和面向对象的语言和面向对象的C+1.4 算法的设计与分析算法的设计与分析 第一章第一章 软件设计概述软件设计概述肥友颁庸承关炙佛蘑披崔官免咆瘫侦妙嘿赐右熙瞪哈句写侧杨圃讣苯芳砒第一章软件设计概论第一章软件设计概论 1.1 软件与软件危机软件与软件危机什么是软件什么是软件什么是软件危机什么是软件危机 软件 程序软件危机首次

4、爆发于二十世纪六十年代。在大型程序设计中,人们发现投入大量的人力、物力、时间开发出的软件,其成本、效率、质量等方面却处于失控状态,尤其软件维护异常困难。程序的修改扩充往往需要大量重复性投入。森觉诅甘碴榴扶纯杠酥明贡辈春喀巾汪铲蛀厦酋型黎抡漏龚蚊姐硬异所病第一章软件设计概论第一章软件设计概论 1.1 软件与软件危机软件与软件危机软件危机产生的原因主要有三个:软件危机产生的原因主要有三个:2 2 软件是一种逻辑产品而非物理产品,软件的软件是一种逻辑产品而非物理产品,软件的开发过程本质上是人的思考过程。开发过程本质上是人的思考过程。3 3 人的智力在面对越来越复杂的问题时,处理人的智力在面对越来越复

5、杂的问题时,处理问题的效率会越来越低。问题的效率会越来越低。1 1 软件开发者不熟悉用户问题的领域,或没有软件开发者不熟悉用户问题的领域,或没有理解用户需求,软件产品与要求不一致。理解用户需求,软件产品与要求不一致。粕钞纷停础反捻疚届弦垂诌轰理磷酵敬翌缘欧拢祁擅迸赵峙蘑芯律犹拂窃第一章软件设计概论第一章软件设计概论1.2 软件工程软件工程软件危机的软件危机的 出现迫使人们重新认识出现迫使人们重新认识软件和软件开发过程。软件和软件开发过程。大型软件开发也应该借鉴建筑、机械大型软件开发也应该借鉴建筑、机械等行业的发展过程,由等行业的发展过程,由“手工方式手工方式”向向“工程化工程化”方向发展。方向

6、发展。19681968年在北年在北大西洋公约组织大西洋公约组织(NATO)(NATO)的年会上的年会上首次首次提出提出软件工程软件工程的概念,此后又逐步提的概念,此后又逐步提出出软件生命期软件生命期的概念。的概念。鳞醇冶礁铱字磋突淘谢懈蹦屏彪袋瘦鸯办砂袒威顾垮乾磷钞撮烦奇拖嫡刁第一章软件设计概论第一章软件设计概论1.2 软件工程软件工程软件工程的提出和软件的定义软件工程的提出和软件的定义 软件软件是程序、方法、规则、相关文档以及在计算机上运行是程序、方法、规则、相关文档以及在计算机上运行所必需的数据的集合。而所必需的数据的集合。而软件工程软件工程是开发、运行、维护软件是开发、运行、维护软件的系

7、统方法。的系统方法。软件生命期软件生命期软件生命期指从开始研制到废弃不用的整个期间,可划分软件生命期指从开始研制到废弃不用的整个期间,可划分为五个阶段:为五个阶段:需求分析需求分析、设计设计、编程编程、测试测试和和运行维护运行维护。 软件的质量标准软件的质量标准正确性正确性 健壮性健壮性 可维护性可维护性可用性可用性 可重用性可重用性 效率等效率等叔呀钟乾涸博坍濒刷音腮致坑就涧苍痢吊匿燎逐代咒染傀习扁斟挝匀东洗第一章软件设计概论第一章软件设计概论1.2 软件工程软件工程正确性 软件的正确性指的是软件系统在正常条件下能够正确工作,完成规定功能。这是软件的首要指标。例如,要求设计程序,输入一批数据

8、,计算它们的累加和。在这里,正确性就是正确能正确计算累加和。眯抒篆钧翘澡癣苦榨沉货逆踩丹小柜馋绿蝉几身秦伪隅扯矛笔载遵勺拙蹲第一章软件设计概论第一章软件设计概论1.2 软件工程软件工程健壮性健壮性软软件件的的健健壮壮性性指指的的是是在在意意外外情情况况下下(如如输输入入数数据据不不合合理理或或某某些些硬硬件件故故障障),软软件件系系统统仍仍能能适适当当地地工工作作,并并对对意意外外情情况况进进行行适适当当处处理理,而而不不致致于于导导致致错错误误结结果果甚甚至至系系统统的的瘫瘫痪痪或或死死机。机。例例如如,要要求求设设计计程程序序,根根据据输输入入的的三三边边a a、b b、c c的的长长度度

9、判判别别三三角角形形类类型型。现现有有如如下下设设计计思思想想:若若a a、b b、c c中中只只有有两两个个量量相相等等,则则为为等等腰腰三三角角形形,若若三三个个量量均均相相等等,则则为为等等边边三三角角形形,否否则则为为一一般般三三角角形形。如如果果输输入入为为(-2-2,-2-2,-2-2)时时,程程序序输输出出为为:等等边边三三角角形形。这这个个结结果果显显然然是是错错误误的的。这这是是由由于于程程序序对对不不合合理理数数据据不不能能进进行行适适当当处处理理,我我们们就就说说这这个个程程序序的的健健壮壮性不好。性不好。瞎烤亢沃夜宾拜老维贬寞图贤菱捉稍扶寓她出楚涣醋撒葬倍凄垒莫啮笑窃第

10、一章软件设计概论第一章软件设计概论1.2 软件工程软件工程可维护性可维护性软件的维护包括软件的维护包括发现并改正软件的错误发现并改正软件的错误,以,以及由于软件运行环境发生变化或软件功能扩充及由于软件运行环境发生变化或软件功能扩充而而对软件进行的改动对软件进行的改动。 软件的可维护性指的是软件容易维护的程度。软件的可维护性指的是软件容易维护的程度。一般地说,软件的可读性好,容易理解,维护一般地说,软件的可读性好,容易理解,维护起来也就比较容易。因此可读性是可维护性的起来也就比较容易。因此可读性是可维护性的基础。基础。 晌太颓虚鲍茄遗兜延辖黄淄霉米卤长梨誊已沸雍肥臭犀占布夯悍玫韧缘简第一章软件设

11、计概论第一章软件设计概论1.3 程序设计方法程序设计方法1.3.11.3.1 传统的结构化程序设计传统的结构化程序设计 SP(Structured Programming)SP(Structured Programming)1.3.21.3.2 面向对象的程序设计面向对象的程序设计 OOP(Object OOP(Object Oriented Oriented Programming)Programming)抚索霹趣皖掏荐瞩呐肿墨眼最炉烘杭漱俱命府人看褪哗真糙局搏恭锗锰晓第一章软件设计概论第一章软件设计概论1.3.1 传统的结构化程序设计传统的结构化程序设计传统的程序设计方法可以归结为传统的程

12、序设计方法可以归结为“程序程序= =算法算法+ +数据结构数据结构”,将程序定义为处理数据,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是的一系列过程。这种设计方法的着眼点是面面向过程向过程的的,特点是数据与程序分离,即,特点是数据与程序分离,即数据数据与数据处理分离与数据处理分离。 结构化程序设计的基本思想是采用结构化程序设计的基本思想是采用自顶向自顶向下下、逐步细化逐步细化的设计方法和的设计方法和单入单出单入单出的控制的控制结构。结构。迫锌殴涝讽支疼诱敲秆溯诈愿虑毖拾势山生培叫勒叁口纺倡构槛缅兰稀倪第一章软件设计概论第一章软件设计概论1.3.1 传统的结构化程序设计传统的结构化程

13、序设计模块模块 22.12.2模块模块 11.21.11.31.3.11.3.21.3.3模块模块 33.13.23.1.13.1.2 程程 序序霸船擞纠净馈刚蕾妹杀挫苇绿弟糟沁志烙限燎斟政夜谤稀滓乾蔚消识垮赁第一章软件设计概论第一章软件设计概论1.3.1 传统的结构化程序设计传统的结构化程序设计举举一一个个简简单单的的例例子子,要要求求读读入入一一组组整整数数,统统计计其其中中正整数和负整数的个数。正整数和负整数的个数。该任务的模块结构及细化过程如下:该任务的模块结构及细化过程如下:1.1.读入数据读入数据2.2.统计正数、负数统计正数、负数的个数的个数; ; 3. 输出结果输出结果 2.1

14、 2.1 如数大于如数大于0 0,正整数个数加,正整数个数加1 12.2 2.2 如数小于如数小于0 0,负整数个数加,负整数个数加1 12.3: 2.3: 取下一个整数取下一个整数正整数个数为正整数个数为0 0;负整数个数;负整数个数0 0 取第一个整数取第一个整数重复重复至统至统计完计完奠揽渍蛰性繁该馒因惯琳郧炽絮殴涌卒理迁蓉了烩箔态和柳橡关誉够危持第一章软件设计概论第一章软件设计概论1.3.1 传统的结构化程序设计传统的结构化程序设计结构化程序设计结构化程序设计为处理复杂问题提供了有力为处理复杂问题提供了有力手段,但到手段,但到8080年代末,这种设计方法逐渐暴年代末,这种设计方法逐渐暴

15、露出以下露出以下缺陷缺陷: (1 1)难以适应大型软件的设计。难以适应大型软件的设计。 (2 2)程序可重用性差。程序可重用性差。黍吠诌疥管庚憾晋扳骚漾暖念召蚜腥句贝侄敦递水雀嫁始酣竣豌迹窄湾挣第一章软件设计概论第一章软件设计概论1.3.2 面向对象的程序设计面向对象的程序设计为什么要引入面向对象的设计为什么要引入面向对象的设计方法方法面向对象的设计方法与面向过面向对象的设计方法与面向过程的设计方法有什么关系程的设计方法有什么关系髓宾掉蓄辗耗议怀链氧踏仇拼皖壮俺蓟吉斧婿钒攘夷舰颂喜佑辙食绝叠袖第一章软件设计概论第一章软件设计概论1.3.2 面向对象的程序设计面向对象的程序设计面向过程程序设计缺

16、点的根源在于面向过程程序设计缺点的根源在于数据与数据处理分数据与数据处理分离离。面向对象程序设计模拟自然界认识和处理事物的方法,面向对象程序设计模拟自然界认识和处理事物的方法,将将数据数据和和对数据的操作方法对数据的操作方法放在一起,形成一个相对独放在一起,形成一个相对独立的整体立的整体对象(对象(objectobject),同类对象还可抽象出,同类对象还可抽象出共共性性,形成,形成类(类(class class )。一个类中的数据。一个类中的数据通常只能通过通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的本类提供的方法进行处理,这些方法成为该类与外部的接口接口。对象之间通过。对象

17、之间通过消息(消息(messagemessage)进行通讯。进行通讯。闪谓往烧延蓬百钻西疽右摩阮滚来恫伊肖只肯盅甲姑饵枉痛港撰雁琐啼弟第一章软件设计概论第一章软件设计概论1.3.2 面向对象的程序设计面向对象的程序设计1 基基 本本 概概 念念3 “面向对象面向对象”程序设计的特点程序设计的特点2 面向对象的软件开发方法面向对象的软件开发方法须烧翻祖纽毡呵藕幕赵茬崩捉喻唬胰岁碱设乱幌趴痴瘤冕墒掀学渭球龚眯第一章软件设计概论第一章软件设计概论1基基 本本 概概 念念对对 象(象(object)类(类(class)消消 息(息(message)沸梦炽涉星鹤镐骨狱临咳山止忱焚坏驻地锄央滨擅蹈遥卑赘婶

18、撮冶蓬冉频第一章软件设计概论第一章软件设计概论1 基基 本本 概概 念念属性属性行为行为表针表针旋钮旋钮其他机械机构其他机械机构调节旋钮调节旋钮对 象触前寝谨弟葡匣躲骏虎龋偏章亡痢舵角供殊僚薛储桔自邦林坝泉猛狗陨铆第一章软件设计概论第一章软件设计概论1 基基 本本 概概 念念是一个抽象的概念,用来描述某一类对象所共是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和类行为。有的、本质的属性和类行为。 类类类的一个具体实现,称为实例类的一个具体实现,称为实例手表手表 一块手表一块手表类类 对象对象描述这类对象共有的、本质的属性和行为描述这类对象共有的、本质的属性和行为手表共有的属性(表针、

19、旋钮、内部结构)手表共有的属性(表针、旋钮、内部结构)和行为(调节旋钮)和行为(调节旋钮)具体到一只圆形的或方形的手表具体到一只圆形的或方形的手表骂的抱扁弱氛釉辖警于瀑添挟炔鲁虑讫菩泌霹捂肢渐给索予鹏乞纯契埋溉第一章软件设计概论第一章软件设计概论1基基 本本 概概 念念我们把对象之间产生我们把对象之间产生相互作用相互作用所传递的所传递的信息信息称做消息。称做消息。 消消 息息启启 动动发送消息发送消息接收并响应消息接收并响应消息转转 向向灵昨坠宴鳃扬哨妈锗迷笺余玲蜡曹明挠俗奔杖抄底插刮异株距翠涌媒亦她第一章软件设计概论第一章软件设计概论2面向对象的软件开发方法面向对象的软件开发方法面面向向对对

20、象象软软件件开开发发的的根根本本合合理理性性在在于于它它符符合客观世界的组成方式和大脑的思维方式。合客观世界的组成方式和大脑的思维方式。在在大大型型程程序序开开发发过过程程中中,编编码码只只是是其其中中很很小小一一部部分分,应应当当采采用用工工程程化化的的方方法法,并并将将面面向向对对象象的的思思想想贯贯穿穿于于软软件件开开发发全全过过程程,这这就就是是面向对象的软件工程面向对象的软件工程。面面相相对对象象的的软软件件工工程程同同样样遵遵循循分分层层抽抽象象、逐逐步步细细化化的的原原则则。软软件件开开发发过过程程包包括括以以下下五五个阶段:个阶段: 脉吉蒸梯通敛萍肉瞒桓殊骑龙隋熊湃怜串垃披晨被

21、棍蒂剃邀舅奸轿她庚勋第一章软件设计概论第一章软件设计概论2 面向对象的软件开发方法面向对象的软件开发方法测试的任务在于发现并改正程序中的错误。测试的任务在于发现并改正程序中的错误。面向对象的分析面向对象的分析(OOA)面向对象的设计面向对象的设计(OOD)面向对象的编程面向对象的编程(OOP)面向对象的测试面向对象的测试(OOT)分析阶段的主要任务是按照面向对象的概念和方法,从问题中分析阶段的主要任务是按照面向对象的概念和方法,从问题中识识别别出有意义的出有意义的对象对象,以及对象的,以及对象的属性属性、行为行为和对象间的和对象间的通信通信,进而,进而抽象抽象出类结构,最终将它们描述出来,形成

22、一个出类结构,最终将它们描述出来,形成一个需求模型需求模型。设计阶段从需求模型出发,分别进行类的设计和应用程序的设计。设计阶段从需求模型出发,分别进行类的设计和应用程序的设计。编程阶段实现由设计表示到面向对象程序设计语言描述的转换。编程阶段实现由设计表示到面向对象程序设计语言描述的转换。面向对象的维护面向对象的维护(OOSM)柯粥消彝篷泼给迅屎缎蛮椎踞父峭戏苦敷老蛾埠寺臂贼邮荷跑端挎极钨应第一章软件设计概论第一章软件设计概论3“面向对象面向对象”程序设计的特点程序设计的特点(1)封装性封装性(2) 继承与派生性继承与派生性(3) 多态性多态性牛稳肺焕纠读驶刃楔保献昌牙哮琳为螟痛跺赖眯扦畸处冶翻

23、猪贱珠丘寺屿第一章软件设计概论第一章软件设计概论3 “面向对象面向对象”程序设计的特点程序设计的特点封装性封装性内内外外机机械械零零件件动动作作调调节节旋旋钮钮读读表表盘盘对象是一个对象是一个封装体封装体,在其中封装了该,在其中封装了该对象的属性和操作。通过限制对属性和操对象的属性和操作。通过限制对属性和操作的访问权限,可以将属性作的访问权限,可以将属性“隐藏隐藏”在对在对象内部,对外提供一定的象内部,对外提供一定的接口接口,在对象之,在对象之外只能通过接口对对象进行操作。外只能通过接口对对象进行操作。C+C+通过建立数据类型通过建立数据类型类类来支持来支持封装和数据隐藏。封装和数据隐藏。封装

24、性增加了封装性增加了对象的对象的独立性独立性,从而保证了,从而保证了数据的可靠性数据的可靠性。一。一个定义完好的类可以作为个定义完好的类可以作为独立模块独立模块使用。使用。僻义牌建熟幕住舔稿埠扣掂汝蛊抵女汝碌磁耐雪炉护蛀蹭甥悔历詹磋儿摘第一章软件设计概论第一章软件设计概论汽车汽车客车客车货车货车小轿车小轿车大客车大客车载货载货载人载人小,速度快小,速度快大,速度慢大,速度慢3 “面向对象面向对象”程序设计的特点程序设计的特点继承与派生继承与派生以汽车为例看客观世界描述事物的方式:以汽车为例看客观世界描述事物的方式:当定义了一个类后,又需定义当定义了一个类后,又需定义一个新类,这个新类与原来的类

25、一个新类,这个新类与原来的类相比,只是增加或修改了部分属相比,只是增加或修改了部分属性和操作,这时可以用原来的类性和操作,这时可以用原来的类派生派生出新类,新类中只需描述自出新类,新类中只需描述自己所特有的属性和操作。己所特有的属性和操作。面向对象程序设计提供了类似的机制:面向对象程序设计提供了类似的机制:继承性大大简化了对问题的描述,大大提高了程序的可重继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。用性,从而提高了程序设计、修改、扩充的效率。新类称为新类称为子类子类或或派生类派生类,原来的类称为,原来的类称为基类基类。派生可以一直。派生可以一直

26、进行下去,形成一个派生树。进行下去,形成一个派生树。号蚀盼物缸良饵恐谢既罩选狙击虹剪睹吁剧雷蛛武董销显阵妊垛胚癣葛扑第一章软件设计概论第一章软件设计概论3“面向对象面向对象”程序设计的特点程序设计的特点语文、数学、英语、政治、语文、数学、英语、政治、物理、化学、生物物理、化学、生物多态性多态性多态性指,多态性指,同一个同一个消息消息被被不同对象不同对象接收时,产接收时,产生生不同结果不同结果,即实现,即实现同一接口,不同方法同一接口,不同方法。高中生计计 算算平均成绩平均成绩大学生高数、英语、计算机、线高数、英语、计算机、线性代数性代数赫惦澄阀益庐鞋讯屠翠惺很赋俱云开讣鳞住揖倔绑雹尤眼或恬娠恍

27、酋滴端第一章软件设计概论第一章软件设计概论3 “面向对象面向对象”程序设计的特点程序设计的特点继承继承和和多态多态性组合,可以生成很多相性组合,可以生成很多相似但又独一无二的对象。似但又独一无二的对象。继承继承性使得这性使得这些对象可以共享许多相似特性,而些对象可以共享许多相似特性,而多态多态又使同一个操作对不同对象产生不同表又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。活性,而且减轻了分别设计的负担。怖仔旺询撑脸痕锋暇警该绥逆眠乏彼口间擅跌签桨伏疯浦绞瑰砚煞啊虏证第一章软件设计概论第一章软件设计概论1.4

28、 算法的设计与分析算法的设计与分析1.4.1 算算 法法 的的 概概 念念 1.4.3 常常 用用 算算 法法 介介 绍绍 1.4.2 算算 法法 的的 表表 示示久砸舜瑰蚂绝琅浅鉴一囱棵邵轿傈夫讨尼陈哇空厉勉栗张浅润金滓应渔枷第一章软件设计概论第一章软件设计概论1.4.1 算算 法法 的的 概概 念念 通俗地说,算法就是解决问题的步骤。通俗地说,算法就是解决问题的步骤。算法是程序设计学习的重点。算法是程序设计学习的重点。用计算机解决问题的算法应具有以下特征:用计算机解决问题的算法应具有以下特征:(1)(1) 可执行性可执行性(2)(2) 确定性确定性(3)(3) 有穷性有穷性(4)(4) 可

29、输入输出信息可输入输出信息刃葛阴雏贩诱刺峪飞皮傀癸贯嗽冕洼滚箭弥保悔澳祖鸵戍沂泛篡号炔吩孟第一章软件设计概论第一章软件设计概论1.4.2算法的表示及三种基本结构算法的表示及三种基本结构3 循循 环环 结结 构构1 1 顺顺 序序 结结 构构2 分分 支支 结结 构构酶即遏鳞恳完最阉直佑呀曼朽酮竹焰笛渔卵娟枚鞭趴赡虐梗竖食侠牢读试第一章软件设计概论第一章软件设计概论num115;1.4.2算法的表示及三种基本结构算法的表示及三种基本结构(1) 顺序结构顺序结构【例例1 11 1】 求求两两数之和。数之和。块1块2块3流程图 寄存器35显示结果:显示结果:35 num115 num220 sum3

30、5num220;sumnum1+num2; 演示算法执行过程演示算法执行过程输出输出sum;峻修继慈渡片耙圃棋篡拓高馅才蒋们唇谐兑哩瞒混躲尸送铃擦艰苇毅垮并第一章软件设计概论第一章软件设计概论1.4.2算法的表示及三种基本结构算法的表示及三种基本结构(2) 分支结构分支结构【例【例12】 输入三个数,输出其中的最大数。输入三个数,输出其中的最大数。 x7;y12;z10;if(xy) maxx;else max y;if (zmax) maxz;输出输出max;x7y12z10CPUmax12比较比较比较比较显示结果:显示结果:12流程图流程图条件块1块2真假演示算法执行过程演示算法执行过程之

31、颁搪荆唬俄记魔争蓑嚏疥哎沥叔虽压眩铁览辞隶段撩身嗡背即卸剔岳菊第一章软件设计概论第一章软件设计概论1.4.2算法的表示及三种基本结构算法的表示及三种基本结构(3) 循环结构循环结构流程图流程图条件块真假【例【例1 13 3】求】求4 4个整数的和。个整数的和。 0sum4count12x显示结果:显示结果:59演示算法执行过程演示算法执行过程123142621642118600count4; /整数个数整数个数sum0; /累加和的初值累加和的初值while (count0) x输入一个整数输入一个整数; sumsum+x; countcount-1;输出输出sum;较足鹰莫绥辊清泅越润圣尸乒

32、簇戎朽宛募粪晨噎颤盆料诞壮傻辜羊奋睁矛第一章软件设计概论第一章软件设计概论1.4.3 常用算法介绍常用算法介绍1. 直接法直接法2.枚举法枚举法3.递推法递推法解决的问题的种类与复杂程度各不相同决定了算解决的问题的种类与复杂程度各不相同决定了算法的多样性,但从其思想方法上可以将其归为以下几法的多样性,但从其思想方法上可以将其归为以下几种:直接法、枚举法、递推法、递归法、回溯法等等。种:直接法、枚举法、递推法、递归法、回溯法等等。本节本节 将介绍以下三种:将介绍以下三种:甫池卤掷厉淘梨装益涤里婚捷粒误铣锦奠肩叛盟宵涯郭覆财壹慌尉诡往且第一章软件设计概论第一章软件设计概论1.4.3 常用算法介绍常

33、用算法介绍1 直接法直接法 直直接接法法就就是是根根据据问问题题给给出出的的条条件件直直接接求求解解,前前面面的的很很多多例例子子都都是是这这种种算算法法的的运运用用。这这里里不不再再举举例。例。剿枝莆君怕谓技妊颧鲤侄溯州肝硅篱彬啼呐携码锗痢有炔瘪砸全慰橱候烷第一章软件设计概论第一章软件设计概论1.4.3 常用算法介绍常用算法介绍2 枚举法枚举法枚举法也称枚举法也称穷举法穷举法,基本思想是,在有限范,基本思想是,在有限范围内围内列举所有可能列举所有可能的结果,找出其中符合要求的结果,找出其中符合要求的解。的解。枚举法适合求解的问题是:问题可能的答案枚举法适合求解的问题是:问题可能的答案是有限个

34、且答案是可知的,但又难以用解析法是有限个且答案是可知的,但又难以用解析法描述。这种算法通常需要用描述。这种算法通常需要用循环结构循环结构来完成。来完成。请看下例:请看下例:铡核囚暗汗勘肌跟毋姚陶蜒贺粘惑迂帛蜕蜕藻奉沁瞪需串对总才剁发侦漳第一章软件设计概论第一章软件设计概论【例例14】 给给定定一一个个正正整整数数,判判断断其其非非负负整整数数立立方方根根是是否否存存在在,若若存存在在,输输出出该该立方根。立方根。1.4.3 常用算法介绍常用算法介绍算法如下:算法如下:分析:设某正整数为分析:设某正整数为2727,则非负整数立方根,则非负整数立方根的取值范围为的取值范围为1 12727,因此可在

35、这一范围内对,因此可在这一范围内对所有整数进行检测,满足立方根为所有整数进行检测,满足立方根为2727的就是的就是所求整数。所求整数。敌秆缺耀汾颤笨整老兄心溅孺炳腻嫌夜芽跺渐贱父箍缴竞栏耽惕动则打忍第一章软件设计概论第一章软件设计概论【例【例14】求非负整数立方根算法:】求非负整数立方根算法:1.4.3 常用算法介绍常用算法介绍numcube_root271显示结果:显示结果:3演示算法执行过程演示算法执行过程比比较较c*c*c2比比较较c*c*c3比比较较c*c*cnum27;cube_root1;/立方根初值立方根初值while (cube_rootnum) 输出输出 “无整数立方根无整数

36、立方根”;照舵讣谈富耙纵齐雄峦欺毖榷戮盟岿声饼肉伙犁桌蜂及黄锌垄啪妮迭亚伍第一章软件设计概论第一章软件设计概论1.4.3 常用算法介绍常用算法介绍【例【例15】 判断一个正整数是否素数,给出相应结果。判断一个正整数是否素数,给出相应结果。分析:假设正整数分析:假设正整数numnum, , 如果如果numnum不是不是2 2,需要检测它是否含有除需要检测它是否含有除1 1和它本身之外的和它本身之外的其他因子,如果有,就不是素数。检测其他因子,如果有,就不是素数。检测方法是在方法是在2 2 num-1num-1范围内逐个验证。实际范围内逐个验证。实际上可以证明在上可以证明在2 2 numnum平方

37、根范围内逐个平方根范围内逐个验证即可。验证即可。假定假定numnum为为9 9,算法如下:,算法如下:研措泌厢堕柜订谢磊榷家礼脓盯兴运剧厘冈砧缅趁悟迁杰卵鼓稻撤荷玛毅第一章软件设计概论第一章软件设计概论1.4.3 常用算法介绍常用算法介绍【例【例15】 判断判断9是否素数算法是否素数算法num9i2k3显示结果:不是素数显示结果:不是素数演示算法执行过程演示算法执行过程比比较较求求余余为为0比比较较求求余余不为不为03为为0比比较较求求余余num9; if (num=2) 输出输出 “是素数是素数”;else i2; ksqrt(num); /平方根取整平方根取整 while (ik)输出输出

38、 “是素数是素数”; else 输出输出 “不是素数不是素数”;冤鹰勺番桔差舍剪约皑搔密垮名凭住状芦压匿糕纂咒祟几舱酷叼雀述炊脾第一章软件设计概论第一章软件设计概论1.4.3 常用算法介绍常用算法介绍3.递推法递推法递推算法是通过问题的一个或多个已知解,递推算法是通过问题的一个或多个已知解,用同样的方法逐个推算出其他解,如数列问题用同样的方法逐个推算出其他解,如数列问题以及一些近似计算问题等。通常也要借助于循以及一些近似计算问题等。通常也要借助于循环。环。请看下例:请看下例:眷串宏咐协郁植款尾朝汤桥沉积辊夏哟豢歼每灶万媳咙柯圭完剩稿谗姆初第一章软件设计概论第一章软件设计概论1.4.3 常用算法

39、介绍常用算法介绍【例【例1】求】求n! 分分析析:n!=1 2 3n,因因此此可可以以从从1开开 始始,由由1!乘乘以以2得得到到2!,再再乘以乘以3得到得到3!,以此推出,以此推出n!。假定假定n n4 4,算法如下:,算法如下:央萌拴豺蜀呜隶赤搂瞬着庚仟升恍尖夷凝颈栏瀑雅日谣蹲峙瘁淌茄兄篓瓢第一章软件设计概论第一章软件设计概论ni2factorial1.4.3 常用算法介绍常用算法介绍【例【例1】求】求n!算法:算法:显示结果:显示结果:24演示算法执行过程演示算法执行过程124比比较较23比比较较64比比较较24比比较较5factorial1; /阶乘初值阶乘初值i2;n 4;while

40、 (i=n) factorialfactorial*i ;ii+1;输出输出 factorial;丧亚沟厕谓淫厕枢鞭删故燃弛淖融叁迭铬雍仟非熄巡销驱宜欠尾猎架掏帛第一章软件设计概论第一章软件设计概论1.5 C语言与面向对象的语言与面向对象的C C C语语言言是是七七十十年年代代初初贝贝尔尔实实验验室室的的Dennis Dennis Richie Richie 等等人人在在B B语语言言基基础础上上开开发发出出来来的的。C C最最初初是是作作为为UNIXUNIX操操作作系系统统的的开开发发语语言言为为人人们们所所认认识识。七七十十年年代代末末,随随着着微微型型计计算算机机的的发发展展,C C语语

41、言言开开始始移移植植到到非非UNIXUNIX环环境境中中,并并逐逐步步脱脱离离UNIXUNIX系系统统成成为为一一种种独独立立的的程程序序设设计计语语言言。C C 语语言言版版本本很很多多,为为了了让让开开发发出出来来的的代代码码能能够够在在多多种种平平台台上上运运行行,19881988年年美美国国国国家家标标准准协协会会ANSIANSI对对C C语言进行了标准化,产生了语言进行了标准化,产生了ANSI CANSI C。獭赏砖兹些辟喉镣甭烹伸膊厌汁大僧葡盅睡克逢缸鸳拯峪岭畜怎仗删叼进第一章软件设计概论第一章软件设计概论1.5 C语言与面向对象的语言与面向对象的C (1 1)C C语语言言既既具

42、具备备高高级级语语言言的的结结构构和和编编程程环环境境,又又提提供供类类似似于于汇汇编编语语言言那那样样的的系系统统资资源源操操纵纵能能力力及及程程序序执执行行效效率率。适适合合解解决决有有实实时时要要求的问题求的问题。C语言的主要特点:(2 2)有有丰丰富富的的运运算算符符和和数数据据类类型型,表表达达式式类类型型多多样样化化,可可以以方方便便地地实实现现在在其其他他语语言言中中较较难难实实现现的的运运算算,对对各各种种不不同同类类型型的的程程序序设设计计都有良好的适应性。都有良好的适应性。(3 3)以以函函数数为为基基础础实实现现程程序序的的结结构构化化设设计计,支支持持大大型型程程序序的

43、的多多文件构成及单个文件独立编译,适合大型复杂程序的设计。文件构成及单个文件独立编译,适合大型复杂程序的设计。(4)语言简洁、紧凑,使用方便、灵活,书写形式自由。)语言简洁、紧凑,使用方便、灵活,书写形式自由。(5)可移植性好。)可移植性好。蓑楔灵祥灿碉稍脉性棕童吏福吕蛀裤拒葵俱捻藩郡殆鹏城携蒙涝瞒尤惶歇第一章软件设计概论第一章软件设计概论1.5 C语言与面向对象的语言与面向对象的C C+C+是是由由C C发发展展成成为为的的以以面面向向对对象象为为主主要要特特征征的的语语言言。作作为为C C语语言言的的超超集集,C+C+继继承承了了C C的的所所有有优优点点,又又对对数数据据类类型型做做了了

44、扩扩充充,使使得得编编译译系系统统可可以以检检查查出出更更多多类型错误。类型错误。C+C+支持支持面向对象程序设计面向对象程序设计,通过类和对象的概念,通过类和对象的概念把数据和对数据的操作封装在一起,通过派生、继承、把数据和对数据的操作封装在一起,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。使得大型复杂软件的构造和维护变得更加有效和容易。此外,在此外,在一致性(一致性(ConsistencyConsistency)检查机制)检查机制方面也方面也作了加强,提高了软件开发的效率和质

45、量。作了加强,提高了软件开发的效率和质量。肚芒缎弄辈垒蚊喂秘涸刀锅革檬血腻换鱼卵讨毅椿伴烯囤浙负主氛峡蔼葫第一章软件设计概论第一章软件设计概论1.5 C语言与面向对象的语言与面向对象的C C+C+与与C C完完全全兼兼容容,很很多多用用C C编编写写的的库库函函数数和和应应用用程程序都可以为序都可以为C+C+所用。所用。但但正正是是由由于于与与C C兼兼容容,使使得得C+C+不不是是纯纯正正的的面面向向对对象象的的语语言言,它它既既支支持持面面向向对对象象程程序序设设计计,也也支支持持面面向向过过程程设设计计。但但我我们们应应当当注注意意用用面面向向对对象象的的思思想想进进行行设设计,以发挥出

46、计,以发挥出C+C+的优势。的优势。C+C+有有许许多多版版本本,国国内内较较为为流流行行的的有有MicrosoftMicrosoft公公司司的的Visual C+Visual C+。蒜疚莽悬亦耸代允睬欢鹅摹近孽唐畦帘染兰醛宣延茄卸陕嘿啸误堵缎碰雇第一章软件设计概论第一章软件设计概论1.6 一个简单的一个简单的C+程序程序# include max(int i, int j) /A if (i=j) return i; else return j; void main(void) /B coutij; /从键盘上输入变量值从键盘上输入变量值 coutmax number is:max(i, j) n ; /输出提示和结果输出提示和结果【例【例18】 一个简单的一个简单的C+程序。程序。程序组成:程序组成:注释注释编译预处理指令编译预处理指令程序体程序体由若干函数组成,由若干函数组成,其中有且仅有一个主函其中有且仅有一个主函数数main(),这是程(),这是程序的执行入口。在序的执行入口。在Windows编程中定义编程中定义为为winmain()。()。下面进入下面进入VC+ 运行运行迈辫吟萧砖瑞俏魂妄贡溜解痞堑脓剂粱础北袋翟锈酣凰佛漂劝幂评缝阶决第一章软件设计概论第一章软件设计概论

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号