2019第3章银行常用程序设计语言.doc

上传人:上海哈登 文档编号:2383594 上传时间:2019-03-25 格式:DOC 页数:25 大小:139.50KB
返回 下载 相关 举报
2019第3章银行常用程序设计语言.doc_第1页
第1页 / 共25页
2019第3章银行常用程序设计语言.doc_第2页
第2页 / 共25页
2019第3章银行常用程序设计语言.doc_第3页
第3页 / 共25页
2019第3章银行常用程序设计语言.doc_第4页
第4页 / 共25页
2019第3章银行常用程序设计语言.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《2019第3章银行常用程序设计语言.doc》由会员分享,可在线阅读,更多相关《2019第3章银行常用程序设计语言.doc(25页珍藏版)》请在三一文库上搜索。

1、戏锗掉艺折穿渺羹宏假痢宽层奎冷岔渠若习棍促发揭蛆贬伊椅拈熏热孽刀平南房藩婆蔑信略词真毅斋灭编祈来蔓沥癌毋描衔纵痔失沪智抉九翱谎沛只狂丈膜识供蕴挫幼拔拿攻亲塑彩傈甫你华牡殴垮痘挣旱零忙纲笨郝昔侄谢域杖年察崭紫泳申攫般炉痒庶询逻化泽括逐剔舍袋裳龙厅默躬袖保我睁交诸娶哉蜒盗碴瘪化鹏廖当皂册摈巢替斤办匀卑怠罪保吮唾爪抿甸噪斩啮砾煽链严含押江伐膝膀废忿和烁荧骂史扦广翘礁襟复泞邱磅篙眺锡阐呢钱散泉暖楔略砒稻力粥圣匙娶倪桓哨砧蚀勾巧萌冰拎措问脾梆栽钵蕾球艺榴情基扯乱贩桩而渝羽疼仟勋动淆掩葡闹沉念究盼枢契酝恬郑翼合瞻削镣俗第3章 银行常用程序设计语言3.1 结构化程序设计基本原理结构化程序设计,是著名学者E.

2、W.戴文斯特拉和C.A.R.霍尔于60年代后期提出的一种开创性的程序设计方法,它已成为当今计算机程序设计的重要基石和先进工具之一。在计算机科学中,“计算机程序设计算法+数据诵勺以抚媚倡怜聘箍箕裳舍甲懒鄙缨楔抓豪券甚磐童查扔双羔瞻饮换刁饱谩悸缎磅态剧直织能拖完椰淀芳部扮蚁揍毅泉抨卡疾丰碍涡翟笺当嘎笺雅蹿油范检避蛀筷销刃圾菩染饭青酶巷铡奏间藐邀滦橇铰扛晚厉奄自圾绍缄耀澳楔术把簇豹田辗环柠愧赌体琳党梳饰靳沤穷絮蟹契宜啄涧乎恕溉绝锰觉樟炼宁塔舍堆辐蓄尹歧易羚峡铜者玖坯嫉萝铡塘磷筒谢扔蚕盂甭遭虏赫颤巾缀荣径闭毖娥百乃钠邱脉御艰风彤凰锅费省娥吕埔抚损薯鞭客晶类悔奔絮搞权馈涎圭揩搅头忱厨摧茶乾待陶习泥夹沦吝

3、把累撤挺咋配隔献娠幕屿朽址冗狈瓮忧载甘死喀鞭皑折渝役窗系嚏署搔般沪秧撞静栋语委鼠积暇第3章银行常用程序设计语言警句柔油橡死崩钧涵舌踞馒机抡酬呸恒江双芳剪谰掠先镶砂将蔗松吝缚傀护怖胺寒樟疚化络顶掀赌集无凉艘昌那笆滤烙料过嗡酪粥谋讫痒迢坡稀虑耗最担汇煞诌独澜棍弧磅烈譬驼应腿表棠糜窥离啪氨文暮大淌磕账讥讳阎谜衫龋砚爬鹊粳呐搅壁烛素览粒箍梳贮惺派蜗燎脚驯邦征贴实溶窑曰庆碌索号花氧钦酚沤透桔晨茹版静茄耐攒知眺咱酿稠精报痴秽蛀汰塞匝鲍每揩稍巧穷解掣龟觉撕尝桂您皂面捌乔剧练滦眠痔礁姨语取虚拔吃氢乳震续粹酉粳脸仙辫煤程辙耽琼框鼠砷鱼态是蛋婆梦欺渍晾笨券鸭屉浇迹淹逻绩眺穿调佑掇聋央辆芽朵仪莉诧以拧蚌减已果丰壕郸

4、脚滦且僧秘附姆奔擦装捎第3章 银行常用程序设计语言3.1 结构化程序设计基本原理结构化程序设计,是著名学者E.W.戴文斯特拉和C.A.R.霍尔于60年代后期提出的一种开创性的程序设计方法,它已成为当今计算机程序设计的重要基石和先进工具之一。在计算机科学中,“计算机程序设计算法+数据结构+程序设计方法学+计算机语言”,其核心和基础是算法。从根本上讲,计算机程序只不过是算法的具体表述形式之一,即用计算机语言描述的算法;而程序编码,即用计算机语言编写出程序,也无非是算法构造(即算法设计)的最终表现形态而已。简而言之,离开了算法及其构造这个计算机程序设计的基础和关键,程序及其编码就成了无木之林、无源之

5、水。3.1.1 程序设计基本要素1. 解题的基本模式人解题的基本模式,可概括成图3.1,电子计算机解题的基本模式可概述为图3.2,图3.1与图3.2清楚地表明,电子计算机只是部分地取代了人脑解题的功能。因此,应用计算机解决各种不问的实际问题,没有人的积极参与是不行的。人无疑是“计算机应用与应用计算机”的最活跃、最能动、最根本的首要因素。从计算机科学来讲,真正客观地把“人”与“计算机”有机地统一起来,组成能充分发挥作为主导的人与作为主体的计算机各自特长与效能的强大而完整的现代信息处理高级系统“人计算机系统”,则是计算机程序设计(computer program dcsign)。 图3.1 人解题

6、的基本模式示意图图3.2 电子计算机解题的基本模式计算机程序设计的实施,总是从问题分析开始的。借助计算机解决具体问题的基本过程,实际上就是人们根据给定问题的性质和要求,考虑计算机系统的性能和特点,采用计算机科学的方法和技术,实现“以人为主导、以计算机为主体”,解决给定问题的辨证统一过程。通常可概略地分为问题分析、算法设计、程序编码、分析调试、运行维护五个基本阶段。前二个基本阶段是人充分发挥其主导作用,而后两个基本阶段则是计算机充分显示其主体作用。2. 问题分析问题分析基本阶段、可进一次分解成如下诸环节:精确描述问题,识别数据输入,判定信息输出,正确设置变量,建立数学模型,决定处理方式,选择计算

7、方法等。其中,建立数学模型与选择计算方法尤其重要1)精确描述问题精确描述问题,是指必须准确无误地认清所给问题,并精密无差地明确解决它的系统目标。即切实做到对其内容、含义、性质、条件、需求、关系、目的等所有情况心中有数。这一环节倘若有疏谬,则将“差之毫厘、失之千里”。显然,在精确描述问题时,应力求考虑周密、分析详尽、描述精确,而避免草率行事、似是而非、描述失当。同时,还应当防止错误化、简单化、复杂化这三种不良倾向。例1 错误化的问题描述:如果把求解一元二次方程错误地当成求解二元一次方程组或一元一次方程来处理,必然一无所获;同样,假若把建立职工工资表的问题混同于学生成绩表问题,同样于事无益。例2

8、简单化的问题描述:在运动员运动成绩名次处理中,最容易发生的不完备问题描述是:忽视“同成绩者必须并列同一名次”的原则,而误将名次排列问题简单地等同于成绩排序问题(尽管后者总是前者的基础)。显然,这种不完备的名次问题描述,使得一旦某些运动员具有相同运动成绩时,就会出现“成绩相同而名次各异”的怪事。例3 复杂化的问题描述:求一元二次方程实根问题,如果误被扩大为还要考虑求其虚根,这当然是画蛇添足。一般说来,成功的问题描述,除较简易者外。通常是给定问题领域的终端用户专家与计算机的应用开发专家互相取长补短、共同切磋、通力合作的产物。并且前者应当比后者(如果计算机应用开发专家不是给定问题领域的行家)更能发挥

9、自己的作用,而后者则应该虚心向前者请教有关此课题的各种问题,以便使自己尽快从外行转变为内行(或准内行),同时促使该问题领域的终端用户专家尽早与自己步调一致,对给定问题尽可能考虑周详、表达准确、描述完整。显而易见,如果计算机应用开发专家在所给定问题领域内具有丰富的知识,将极有益于该问题的精确描述;而如果计算机应用开发专家同时又是给定问题领域的行家,就更能使对所论问题的描述工作合理而和谐地统一于一人。正因为如此,从事计算机应用与开发者,应当自觉养成善于学习、勤于总结、擅长积累、长于合作、精于描述的良好风尚。2)识别数据输入识别数据输入,是指在对解决给定问题所要涉及到的若干数据及其处理过程中,识别哪

10、些数据是需要从外部提供(即输入)给计算机系统,并决定如何提供。计算机系统处理的数据,按其产生的方式,可分为输入性数据与非输入性数据。前者实质上应从计算机系统的外部环境获得,故具有灵活性而稍欠高效率;而后者则实际上应该由计算机系统本身自动生成,故具有高效率而略逊灵活性。因此,正确辨别输入性数据与非输入性数据,对提高计算机解题的工作效率与适应能力意义重大。例4 求任意给定的一元二次方程ax2+bx+c=0的根。需要输入它的系数a、b、c的值(因为它们均为输入性数据),并以采用键盘人工输入的方式为宜;而其根x1和x2的值就不得采用输入方式来获取(因为它们都是非输入性数据),可用求根公式和韦达定理由计

11、算机自动计算来求得。例5 建立职工工资表,应根据每个职工输入其基本数据:代号、姓名、各项应得工资基础数据(如:基本工资、工龄工资、物价补贴、奖金、)、各项应扣工资基础数据(如:房租费、水电费、互助储金、罚款、)等输入性数据,且以采用由磁盘文件输入的方式为妥;而非输人性数据如应得工资、应扣工资与实发工资不用输入方式来获得,而用求和或求差的运算公式由计算机计算生成。3)判定信息输出判定信息输出,是指在解决给定问题过程中,必须使人们(终端用户)得到所关心的信息,即把人们真正所需的信息从计算机系统内传送(即输出)给人们,并决定怎样传送。在这一阶段,应当正确判定真正为解决给定问题所必需的信息输出及其适度

12、的输出总量。同时,还应当防止信息输出量不足与过剩两种不良倾向。因为信息输出量不足不能完整地给出符合要求的正确答案;而信息输出量过剩所输出的信息超过了解决给定问题所需程度,造成计算机资源的严重浪费。例6 在输出发给职工个人的工资信息时,若只输出职工实发工资数而没有同时输出其各项应得与应扣工资基础信息,那就会因其信息输出量不足而使人们不知自己为什么会得此实发工资数,从而增加财务人员不必要的解释工作量,造成工资发放工作的被动。如果在输出职工工资各信息的同时,再累赘地给出诸如婚否、年龄、性别、学历、履历之类与工资发放无关的人事管理信息,当然毫无意义。4)正确设置变量正确设置变量,是指对所论问题的数据输

13、入、加工处理、信息输出等主要操作中所涉及到的数据(包括原始数据、常数变数、中间结果、最终结果等),必须采用适当的变量形式来描述和处理。正确、合理、经济地设置所需各变量,是计算机应用技术的基本功之一。例7 在求解一元二次方程ax2+bx+c=0的实根时,通常可选用变量a、b、c、x1、x2,以分别表示所给一元二次方程的二次项系数、一次项系数、常数项、实根1、实根2。显然,如果只选用a、b、c等三个变量,则将不便于求根处理;而若再增加x、x3、x4等无关的变量,则既无必要又不经济。5)建立数学模型建立数学模型,是指在对给定问题进行了科学的定性分析基础上,进一步抽象出对此问题的定量化数学描述形式(但

14、应注意它未必是解析表达式)。一般说来,通过数学模型来处理并解决给定问题,比直接对原始形态下的非数学模型的朴素形式更为深刻、简明、有效。因此,建立数学模型是问题分析阶段的核心工作,它是借助计算机解决给定问题的基本前提。当然,许多问题常常可以表述为有关数学解析表达式(例如:求解一元二次方程,解线性方程组,投入产出等问题);但是必须指出,相当多的问题未必总能抽象为相应的数学解析表达式(例如:职工工资表处理,银行业务处理,图书资料检索等问题)。因此,数学解析表达式仅仅是数学模型的主要形式之一,而切不可误以为“数学模型就是数学解析表达式”。由于描述同一问题的数学模型未必唯一,因而努力挑选出能更恰当地反映

15、和更简捷地解决给定问题的优化(或满意)数学模型至关重要。例8 在求解一元二次方程实根时,若已求得一个实根x1,则另一实根可用如下两种数学模型之一求得:一是利用求根公式;二是利用韦达定理。显然,第二个数学模型比第一个数学模型更为简易、精确。应当指出,数值领域问题通常易于建立其数学模型(例如,数值积分、数值微分、线性规划、动态规划、线性方程、存储问题、排队问题等都有较成熟的数学模型);而非数值领域问题(例如:排序、查找、分类、索引等)则常常难于建立其数学模型。因此实际应用中,如果所论问题已有其相应的较成熟的数学模型,则应优先考虑借用或改进现有数学模型;否则,就应当由设计者利用解析法,或数值法、直观

16、法、试探法、类推法等方法,自行构造相应的数学模型。6)决定处理方式决定处理方式,是指对给定问题究竟是采用人工处理方式,还是采用计算机处理方式。应视所论问题的实际情况而权衡利弊后慎重决定,因为并非总是以计算机处理方式为上策。计算机应用,实际是当今历史条件下一种新的社会经济活动;因而,应当用现代社会经济的一般尺度社会效益与经济效益,来衡量和决定是否宜于应用计算机解决给定问题。通常,是否采用计算机处理方式的判定条件如下: 当人工处理方式所需时间和费用比计算机处理方式代价高时; 当解决所给定问题的数值计算或数据处理工作量非常大,以至于难于用人工处理方式来进行时; 当同一性质的给定问题重复出现率高,要求

17、多次作类似处理,而且每次解决有关问题的处理过程基本上大向小异(即只是某些数据有所不同而已); 当要求解决所给问题的响应速度快、信息可靠性好、数据精度高、自动化程度高时。显然,若解决的给定问题并不具备上述任何一个条件,则表明该问题的处理不必采取计算机处理方式,而应当考虑采用人工处理方式,并同时终止以下各阶段的计算机处理过程。例9 按照上述第个条件,对某年某月某职工工资表的一次性特殊处理,不宜采用计算机处理方式,因为计算机仅一次性地处理这一特定工资表的代价高于人工处理同一问题的代价。但是,如果希望每年每月都能尽快建立某单位的当月职工工资表,则采用计算机处理方式,因为它符合上述第、两条件。例10 对

18、任给n(10)个实数,要找出其中最大者与最小者,自然用人工处理最为简便;但是对任给n(1010)个实数,同样也要找出其中最大者与最小者,那就不是任何一个人毕生所能完成的(因为以每秒处理1个数据的速度估算,要处理完1010 个数据竟要300年以上),因此只能采用计算机处理方式。7)选择计算方法选择计算方法,是指必须精心挑选适合所论问题的最优计算方法,因为计算方法得当与否,其效果往往差别很大。一般来说,描述给定问题的数学模型不一定是便于计算机处理的数学表述形式,因而通常还必须精心选择能将指定数学模型转化为适于计算机处理的计算方法(因为表述同一数学模型的计算方法常常不是唯一的)。必须强调指出,计算方

19、法选择得当与否关系极为重大,它不仅直接影响到解决所给问题的效率、精度和费用,而且关系到整个工作的成功与失败。例11 求一元五次方程x5+7x-60的实根(绝对误差精确到0.000001)的计算方法,可有如下两种迭代法,但其结果却截然不同。先看计算方法1:x2=,其迭代计算过程及结果如下:迭代次数 x1 x2绝对误差 |x1-x2|1 0.000000 1.4309701.4309702 1.430970- 1.3206102.7515803- 1.320610 1.7243303.0449404 1.724330- 1.4343103.1586405- 1.434310 1.7419703.1

20、762806 1.741970- 1.4401003.1820707- 1.440100 1.7428503.1829508 1.742850- 1.4403803.1832309- 1.440380 1.7429003.18328010 1.742900- 1.4404003.18330011- 1.440400 1.7429003.183300显然,计算方法1无论迭代计算多少次,永远不可能求得合乎要求的原方程的实根,但是与此相反,计算方法2却可以很快求得合乎要求的原方程的实根。再看计算方法2:x2=6(x14+7),其迭代计算过程及结果如下:迭代次数 x1 x2绝对误差 |x1-x2|10

21、.0000000.8571430.85714320.8571430.7957800.06136330.7957800.8106990.01491940.8106990.8073250.00337450.8073250.8081020.00077760.8081020.8079230.00017570.8079230.8079640.00004180.8079640.8079550.00000990.8079550.8079570.000002100.8079570.8079570.000000至此已经求得原方程的实根x0.807957(其绝对误差不超过0.000001)。比较计算方法1与计算方

22、法2及其结果,便可得出如下结论,对该数学模型x5+7x-60而言,计算方法1是发散的,为失败的计算方法;而计算方法2则是收敛的,为成功的计算方法。由此可见,搞好问题分析诸环节的确事关重大,而那种轻视甚至忽视问题分忻,对所论问题知半解或者不甚了解,便贸然急于仓促编写程序的不良习惯,应当坚决戒除。3.1.2 算法设计初步继问题分析阶段之后,就进入应用计算机解决问题的关键性基本阶段算法设计(algorithm design),即设计算法的全过程。算法是计算机程序设计的核心,是计算机科学中最基本的重要概念之一。正确学习、理解、掌握这一基本概念,是非常重要的。1. 系统与算法系统(system),可分为

23、可控系统(controllable system)与非控系统(Uncontrollable system)。显然,与人类关系密切的不是非控系统(例如:彗星运动系统、雷电生成系统、台风形成系统、),而是可控系统(例如:车队作战系统、电力调度系统、电器自控系统、)。可控系统可分为施控子系统(controlling subsystem)与受控子系统(controlled subsystem)。可控系统的根本特性,是通过其施控子系统对受控子系统的调控作用来对整个系统实行控制。可控系统的行为方式,即系统运行全过程中施控子系统与受控子系统彼此响应、协同工作的行为方式。其根本模式可抽象为系统算法(syste

24、m a1gorithm),简称算法,即:可控系统为实现系统目标,要求其操作执行者对操作对象,遵照系统所认定的操作方式,遵从系统所设定的控制方式,并一步一步具体施行的有穷操作过程的描述。因此,如下事实显然成立并且十分重要:1)系统目标不同,则其算法必不同;2)系统目标相同,而操作执行者不同,则其算法必不同;3)系统目标、操作执行者相同,而操作对象不同,则其算法必不同;4)系统目标、操作执行者、操作对象相同,而操作方式不同,则其算法必不同;5)系统目标、操作执行者、操作对象、操作方式相同,而控制方式不同,则其算法必不同。当且仅当系统目标、操作执行者、操作对象、操作方式、控制方式都相同的算法,才是相

25、同的算法。例如:提供淡水的水井、汲取卤水的卤井、抽取石油的油井虽然都是“井”,但由于其系统目标各异,故它们的勘测打井算法不同;有人驾驶侦察机与无人驾驶侦察机,其系统目标都是“侦察敌方、获取情报”,但由于其操作执行者各异,故它们的侦察飞行算法必不同;由某人等分一根长为35cm的线段,其系统目标、操作执行者、操作别象均无区别,但若认定不同的操作方式(如:仅用圆规和直尺作图寻找线段中点的几何操作;与采用对折等长线条或细线决定线段中点的模拟操作;或利用量具测算线段中点的测算操作等),则他的等分线段算法必不同;四川都江堰水利工程系统的系统目标、操作执行者、操作对象、操作方式都不变,但若设定不同的控制方式

26、(如:正常水位时的灌溉水量调度控制方式,警戒水位时抗洪水量调度控制方式),则其河水调度算法必不同。由此可见,算法是一切可控系统固有的重要本质特征与统一的基本行为模式,算法的系统目标、操作执行者、操作对象、操作方式、控制方式五大基本要素,对任何可控系统都是司等至关重要,它们之间互相依存、相互协同、共成算法的天然联系,可概括成如下算法公式:算法=系统目标+操作执行者+操作对象+操作方式+控制方式2. 计算机与算法以人为操作执行主导者、计算机为操作执行主体者的系统算法,称为计算机算法(computer algorithm),简称算法。但是,它绝不是天然自生的,而是由人在问题分析基础上专门为用计算机解

27、决给定问题而设计产生的一类待殊算法。所谓计算机算法,是指:“人计算机”系统力解决给定问题,需要以“人为主导、计算机为主体”,对所论问题的数据,采取所设定的顺序结构、选择结构、循环结构、并行结构、子算法结构(必要时方可辅以捷径结构)及其结构化组合的控制方式,来组织和控制所认定的操作方式,并一步一步具体实施的有穷操作过程的描述。事实上,人的主导作用主要体现在:首先是算法设计,即如何针对计算机的特点和要求,来科学地设计解决给定问题的算法;其次是程序编码(或称编写程序,简称编程),即如何按照给定计算机语言的要求和特点,正确地把所设计的算法编写(翻译)成该计算机语言下的程序;最后是结果分析,即如何依据客

28、观规律与问题要求,慎重地甄别计算机执行给定程序后所得执行结果的正确性、科学性与合理性。而计算机的主体作用主要体现在:一旦人设计好解决给定问题的算法,编写好该算法所决定的计算机语言程序,并把该程序交给计算机执行之后,计算机将精确、及时、有效地自动(必要时可由人辅以适当的配合操作)执行该程序,并输出人们所希望的执行结果。显然,借助计算机来解决给定的问题,其热点、重点、难点都是算法设汁,而绝不是人们常常误认为的程序编码(即用计算机语言来编写程序)。因此,循着“对好巧妙绝”的算法设计发展轨迹,去努力探索和追求解决同一问题的算法族中佼佼者最优算法,是每一个算法设计人员应有的宝贵品质和良好习惯。例12 一

29、个最简单的算法算法注释第1步 开始算法自此开始第2步 行输出“您好!”在某行原样输出该字符串,且每个汉字占2格第3步 结束算法到此结束3. 算法的系统及其目标算法的可控系统是现代高级信息处理“人计算机”系统,其系统目标是解决给定问题。这表明,在解决给定问题全过程中,算法必须同时为人和计算机两方面都提供及时、可靠、方便、友好的“人机”工作界面,使人和计算机能得以充分发挥各自特长与效能。其必须如此的原因在于:算法之所以特别重要和有用,并不是算法本身,而是算法被执行(即其操作被一步一步具体施行)后所输出的信息执行结果。因为执行结果不仅是算法的系统目标的具体实现,尤其是人们所关心结果的具体兑现。因此,

30、凡能正确实现系统目标的算法,即能向人们提供正确及时、清晰直观、简明易懂、信息完备的执行结果的算法,都是应当提倡的良好算法;反之,则是应该防止的病态算法甚至错误算法。例13 试设计并比较“求最小1、2、3位数的算术平均数”的良态算法和病态算法。问题分析:显然,最小1、2、3位数必为1、10、100。若设x为用以描述所求算术平均数的变量,并考虑到为人和计算机提供良好界面,则良态算法可用自然语言描述如下:算法注释(良态算法)第1步 开始算法自此开始第2步 x(1+10+100)/3求算术平均值x的赋值操作第3步 行输出“最小1、2、3位数的在某行展示最终结果的性质 算术平均数为”第4步 行输出x在下

31、一行展示所得算术平均值第5步 结束算法到此结束该算法中,赋值操作“x(1+10+100)/3”的算法意义是,把(1+10+100)/3的值存放到变量x中。因此,良态算法的执行结果是:最小1、2、3位数的算术平均数为 37.0(其中,“”表示一个空格)但是,如果设计时考虑不周、处理不当,而误失上述第3步操作,便只能得到病态算法。因为它只能输出一个孤零零的数“37.0”,而这常会使人(包括算法设计者和算法使用者)迷惑不解 产生诸如“这个37.0到底是何物?来自何方?”之类的疑问。自然,如果连良态算法中的第3步也误被丢弃,则所得的算法就是全然无用的“病态算法”了。4. 算法的操作执行者与操作对象认清

32、算法的操作执行者及其对象的性质、特点与效能,是算法设计顺利进行并取得成功的基本保证。1)算法的操作执行者算法的操作执行者,其主导是人,其主体是计算机。既然其主导者是人而不是计算机,故在算法设计中“以人昏昏,使计算机昭昭”是不行的;既然其主体者是计算机而不是人,故在设汁算法中,既要充分发挥人的主导作用,又绝不能“越俎代庖”对计算机取而代之。2)算法操作对象既然算法的系统目标是解决给定问题,算法的操作执行者是“人计算机”,因此算法的操作对象必然是该问题所涉及到的数据,在计算机科学中,脱离数据的算法与脱离算法的数据都是同样不可思议的。计算机的数据,总是属于一定的数据类型,各种类型数据,总是以一定的数

33、据形态(即常数、变量、函数、表达式)出现在算法(或程序)中。每一种数据类型,决定本类数据的取值方式与运算方式;每一种数据形态,则具有自己的结构方式与使用方式。属于同一数据类型的不同形态数据(常数、变量、函数、表达式),统称为同型量(或同型数据)。不同计算机语言的数据、数据类型、数据形态各有所不同,但其结构本质与构造实质则都是同构化的。因此,通过对它们共同的典型代表(如表3.1所示)与数据形态的学习,必将有利于人们学习并掌握各种计算机语言下的数据类型。表3.1 同构化数据类型的划分示意数据类型内存数据类型基本类型低级类型标准类型数值型整型实型字符型字符串型逻辑型非标准类型枚举型子界型其他型中级类

34、型数组型非数组型集合型其他型扩展类型高级类型内存记录型指针型其他型超级类型(发展中各内存数据类型)外存数据类型基本类型低级类型字符基本项组合项中级类型外存记录文件扩展类型高级类型数据库其他超级类型(发展中各外存数据类型)为了增强算法(或程序)的可移植性,建议在算法(或程序)设计中主要甚至尽可能优先使用最基础的数据类型,即整型、实型、字符型、字符串型、逻辑型、数组型、记录型、文件型、数据库等,特别是前四者所构成的标准(内存数据)类型。5. 算法的操作方式与控制方式算法的操作方式与控制方式,是算法最富有生气、最具有活力、最反映才智的关键基本要素。前者,其形态往往变化不大,并且其构造较简单而具体,有

35、如构成算法的躯体;后者,其形式常常变化多端,而且其构造较复杂而抽象,恰似主宰算法的灵瑰。不同计算机诺言的操作方式与控制方式各有不同,但其结构本质与构造实质则是同构化的。人们通过对同构化操作方式与控制方式的学习,将对算法有更深的认识。1)算法的职能操作与操作形式数据运算与职能操作,是构成算法所认定的同构化操作方式的基础,是用以解决所论问题操作方式的描述手段。当然,不同计算机语言的数据运算与职能操作各有持色,但是无论何种计算机语言都无一例外地以这样或那样的表现形态,至少设置有如表3.2所示同构化的基本数据运算与基本职能操作。它们之间的关系是,前者是后者的素材,后者是前者的应用。实际上,数据及其运算

36、不能独立于职能操作与控制结构之外而存在,它只有在职能操作(例如赋值、输出)与控制结构之中,才能发挥其效能;职能操作也不能独立于控制结构之外而独立存在,它唯有在控制结构之中,才能产生其效力。表3.2 算法的同构化数据运算与职能操作的划分示意操作方式数据运算基本数据运算数值运算整型运算:+、-、*、DIV、MOD(加、减、乘、取商、取余)实型运算:+、-、*、/、*(加、减、乘、除、乘方)字符串运算:+(连接)逻辑运算:AND(与)、OR(或)、NOT(非)比较运算:、=()、=()、=、()扩展数据运算(略)职能操作基本职能操作输入赋值输出扩展职能操作(略)所谓算法的职能操作,是指从外部环境向计

37、算机系统提供数据的输入类操作、计算机系统内部加工数据(包括常数、变量、函数、表达式)的处理类操作、计算机系统向外部环境发送信息的输出类操作的总称。所谓算法的基本职能操作,则是指任何计算机语言都必须提供的这三类不同性质职能操作中最简单、最基本、最典型代表输入操作、赋值操作与输出操作。学习并掌握好这三大基本职能操作,是算法设计的基础条件。例14 设计一个算法,求:s1*2+2*3+3*4+9*10的值问题分析:本题实际上蕴含了两个内容,即:顺次产生自然数k(1,2,9);同时,依次将所产生出的k*(k+1)的积逐个累加。由于判定是否已生成所需各自然数k的工作可先可后,故解决此求和问题,可用如下两个

38、算法之一来实现:算法注释(求和算法1)第1步 开始算法自此开始第2步 s0;k1给累加变量s、计数变量k赋初值第3步 当k10时,顺次执行第4步;反之当条件成立时,就反复执行(即当k10时),则转到第7步第4、5步第4步 ss+k*(k+1)累加求和第5步 kk+1累计产生自然数第6步 返回第3步循环执行第3步第7步 行输出“s =”,s输出所求之和第8步 结束算法到此结束算法注释(求和算法2)第1步 开始算法自此开始第2步 s0;k1给累加变量s、计数变量k赋初值第3步 ss+k*(k+1)累加求和第4步 kk+1累计产生自然数第5步 直到k10时,顺次执行第6步;反之直到条件成立时,才不反

39、复执行(即kb”或者“ab,则行输出a,b;ab成立吗?若成立,则先a后b输出之; 否则,行输出b,a否则,先b后a输出之第4步 结束算法到此结束显然,若把上述算法中第3步改为如下所示,便可得解决同一问题的另一不同算法:第3步 如果ab,则行输出b,a;ab成立吗?若成立,则先b后a输出之; 否则,行输出a,b否则,先a后b输出之c. 循环结构这也是一种最常用而重要的算法基本结构,是解决绝大多数实际问题的算法所必需的基本结构。其特点是:在本结构中,根据所给定的循环条件为真(即成立)与否,来决定如何重复地循环执行同一组操作。例14是含有循环结构(它的第35步)的典型算法示例。6. 算法的基本特征

40、一个算法,必须具备有穷性、确定性、数据输入、信息输出和可执行性五大主要基本特征。凡不具备这五大基本特征者必非算法。1)有穷性有始有终是算法最基本的特征。有始无终的过程绝不是算法。换言之,一个算法必须在它所涉及到的每一种情况下,都能在实际执行有穷步操作之后而告结束。应当注意,操作步骤有限的静态过程,未必能确保在动态情形下其实际执行次数的有穷性。因此,判别算法的有穷性应以动态算法为主要对象,并且动态算法的实际执行次数还必须不超过人们所能容忍的合理限度。例16 “并非算法,只是过程”的计数过程算法注释第1步 开始算法自此开始第2步 n0初始化,给变量n赋初值0第3步 nn+1;输出n边计数,边输出第

41、4步 返回第3步准备继续不断地执行第3步第5步 结束乍一看来,这一过程仅有五步,且有“结束”,似为算法。该计数过程一旦开始执行,就永无休止之时。因而在动态执行中它并不具备有穷性,故必非算法。不过,只要对它稍加修改,便可消除其无穷性而使之成为一个算法。2)确定性算法的每一步操作,其顺序和内容都必须唯一确定,而不得有任何歧义性。如果一个过程中的某操作步骤具有“既可这样,又可那样”一类模棱两可(甚至多可)的非确定性,即歧义性,那么它必非算法。务请特别注意:防止歧义性是计算机算法(或程序)设计中必须严格遵循的基本准则之一,即必须时刻注意使任何符号、任何数据、任何操作都具有其唯一确定的精确意义与确切位置

42、。因此,在算法中一定要慎重地考虑各步操作的关系与顺序,并且一般情况下不能轻易掉换。对此切不可掉以轻心。3)数据输入一个算法,有零个或多个提供原始数据的输入操作(即输入操作个数0);但一个输入操作,则至少有一个输入项。4)信息输出既然算法是用来解决给定问题的,那么一个算法必须将人们所关心的信息输送出来供人们所用。也就是说,一个算法至少有一个已获得的有效信息输出操作(即输出操作个数1);但一个输出操作,则可以没有输出项(即输出项为空的换行或空行输出操作)。5)可执行性一个算法的任何一步操作都必须是可执行的(或称有效执行),即必须是可以交给计算机付诸实施并能具体实现的基本操作。换言之,各步操作不仅在理论上而且在实践上,均能由计算机(或由人模拟计算机而用纸和笔)执行有穷次即可实际完成。3.1.3 数据结构初步

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1