亚洲国产区中文,国产精品91高清,亚洲精品中文字幕久久久久,亚洲欧美另类久久久精品能播放

                  族譜網(wǎng) 頭條 人物百科

                  結(jié)構(gòu)化編程

                  2020-10-16
                  出處:族譜網(wǎng)
                  作者:阿族小譜
                  瀏覽:669
                  轉(zhuǎn)發(fā):0
                  評(píng)論:0
                  底層的結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化的程序是以一些簡(jiǎn)單、有層次的程序流程架構(gòu)所組成,可分為循序(sequence)、選擇(selection)及重復(fù)(repetition)。循序是指程序正常的運(yùn)行方式,運(yùn)行完一個(gè)指令后,運(yùn)行后面的指令。選擇是依程序的狀態(tài),選擇數(shù)段程序中的一個(gè)來(lái)運(yùn)行,一般會(huì)使用if..then..else..endif或switch、case等關(guān)系字來(lái)識(shí)別。重復(fù)是指一直運(yùn)行某一段程序,直到滿足特定條件,或是一集合體中的所有元素均已處理過(guò),一般會(huì)使用while、repeat、for或do..until等關(guān)鍵字識(shí)別。一般會(huì)建議每個(gè)循環(huán)只能有一個(gè)進(jìn)入點(diǎn)(戴克斯特拉的結(jié)構(gòu)化程序設(shè)計(jì)要求每個(gè)循環(huán)只能有一個(gè)進(jìn)入點(diǎn)及一個(gè)結(jié)束點(diǎn),有些編程語(yǔ)言仍有此規(guī)定)。若一個(gè)編程語(yǔ)言的語(yǔ)法允許用成對(duì)的關(guān)鍵字包圍一段程序,形成一個(gè)結(jié)構(gòu),這種編程語(yǔ)言稱為有“區(qū)塊結(jié)構(gòu)”(block-structured),這類的結(jié)構(gòu)包...

                  底層的結(jié)構(gòu)化程序設(shè)計(jì)

                  結(jié)構(gòu)化的程序是以一些簡(jiǎn)單、有層次的程序流程架構(gòu)所組成,可分為循序(sequence)、選擇(selection)及重復(fù)(repetition)。

                  循序是指程序正常的運(yùn)行方式,運(yùn)行完一個(gè)指令后,運(yùn)行后面的指令。

                  選擇是依程序的狀態(tài),選擇數(shù)段程序中的一個(gè)來(lái)運(yùn)行,一般會(huì)使用if..then..else..endif或switch、case等關(guān)系字來(lái)識(shí)別。

                  重復(fù)是指一直運(yùn)行某一段程序,直到滿足特定條件,或是一集合體中的所有元素均已處理過(guò),一般會(huì)使用while、repeat、for或do..until等關(guān)鍵字識(shí)別。一般會(huì)建議每個(gè)循環(huán)只能有一個(gè)進(jìn)入點(diǎn)(戴克斯特拉的結(jié)構(gòu)化程序設(shè)計(jì)要求每個(gè)循環(huán)只能有一個(gè)進(jìn)入點(diǎn)及一個(gè)結(jié)束點(diǎn),有些編程語(yǔ)言仍有此規(guī)定)。

                  若一個(gè)編程語(yǔ)言的語(yǔ)法允許用成對(duì)的關(guān)鍵字包圍一段程序,形成一個(gè)結(jié)構(gòu),這種編程語(yǔ)言稱為有“區(qū)塊結(jié)構(gòu)”(block-structured),這類的結(jié)構(gòu)包括用ALGOL 68的if..fi包圍的程序,或是在PL/I中用BEGIN..END包圍的一段程序,或是在C語(yǔ)言中用大括號(hào){...}包圍的一段程序。

                  結(jié)構(gòu)化編程語(yǔ)言

                  用任何語(yǔ)言都可以進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì),不過(guò)一般較常使用過(guò)程式的編程語(yǔ)言。早期的結(jié)構(gòu)化編程語(yǔ)言包括ALGOL、Pascal、PL/I及Ada,不過(guò)后來(lái)大部分的過(guò)程式編程語(yǔ)言都鼓勵(lì)使用結(jié)構(gòu)化程序設(shè)計(jì),有時(shí)也會(huì)特意的省去一些特性(例如不支持goto指令)使得非結(jié)構(gòu)化的程序設(shè)計(jì)更加困難。

                  歷史

                  理論基礎(chǔ)

                  結(jié)構(gòu)化程序理論可做為結(jié)構(gòu)化編程的理論基礎(chǔ),結(jié)構(gòu)化程序理論中提到利用循序、選擇及重復(fù)這三種組合程序的方式,可以表示所有可計(jì)算函數(shù)。上述的三種結(jié)構(gòu)已足以表示CPU中的指令周期,也可以表示圖靈機(jī)的運(yùn)作,以此觀點(diǎn)來(lái)看,處理器所運(yùn)行的指令可視為是某種“結(jié)構(gòu)化程序”,雖然整個(gè)程序可能不是一個(gè)結(jié)構(gòu)化程序。一般都認(rèn)為結(jié)構(gòu)化程序理論是歸功于伯姆和賈可皮尼于1966年發(fā)表的論文,其中一個(gè)原因可能是戴克斯特拉引用過(guò)此論文。結(jié)構(gòu)化程序理論未提及如何撰寫(xiě)結(jié)構(gòu)化程序,也沒(méi)有提到結(jié)構(gòu)化程序的分析,后來(lái)1960至1970年代時(shí),戴克斯特拉、羅伯特·弗洛伊德、東尼·霍爾等計(jì)算機(jī)科學(xué)家在此領(lǐng)域有許多的貢獻(xiàn)。

                  爭(zhēng)議

                  結(jié)構(gòu)化編程中一項(xiàng)重要的原則是減少甚至禁止goto指令的使用,不過(guò)不是所有計(jì)算機(jī)科學(xué)家都贊成禁止使用goto指令。高德納贊成程序設(shè)計(jì)時(shí)需考慮可讀性,但他不贊成禁用goto指令。在其1974年發(fā)表的論文《使用goto指令的結(jié)構(gòu)化編程》(Structured Programming with Goto Statements)中,他提出了一些程序,使用goto指令可以使得程序更清楚而有效率,也不會(huì)犧牲程序的可讀性。高德納提出了一個(gè)較松的結(jié)構(gòu)限制要求:將程序以流程圖表示,前進(jìn)的分支在流程圖的左側(cè),倒退的分支在流程圖的右側(cè),所有分支均不得交叉。

                  結(jié)構(gòu)化編程在1970年有很大的進(jìn)展,IBM的研究員哈倫·米爾斯(英語(yǔ):Harlan Mills)將結(jié)構(gòu)化編程應(yīng)用在研究文件索引系統(tǒng)的開(kāi)發(fā),此計(jì)劃相當(dāng)成功,因此許多公司開(kāi)始使用結(jié)構(gòu)化編程,不過(guò)戴克斯特拉評(píng)論米爾斯使用的方式和一些已發(fā)表論文中的方式不同。

                  到1987年時(shí)在計(jì)算機(jī)科學(xué)領(lǐng)域仍有針對(duì)結(jié)構(gòu)化編程的爭(zhēng)論,弗蘭克·魯賓發(fā)表了一篇論文《“goto有害論”是有害的》(GOTO considered harmful" considered harmful),引發(fā)許多的反對(duì),戴克斯特拉本人也批評(píng)魯賓及其追隨者的論點(diǎn)。

                  影響

                  在二十世紀(jì)末時(shí)絕大多數(shù)的計(jì)算機(jī)科學(xué)學(xué)者均已同意使用結(jié)構(gòu)化程序設(shè)計(jì)的好處,原來(lái)缺乏程序結(jié)構(gòu)的高級(jí)編程語(yǔ)言(如FORTRAN、COBOL及BASIC)也都已加入此特性。

                  例外情形

                  異常處理

                  子程序很少會(huì)有一個(gè)以上的進(jìn)入點(diǎn),相對(duì)的,有時(shí)子程序會(huì)有一個(gè)以上的結(jié)束點(diǎn),表示剩下的程序不需運(yùn)行,或因?yàn)橐恍┰颍斐蔁o(wú)法運(yùn)行后續(xù)的程序。

                  以下是是一個(gè)由文件中讀取數(shù)據(jù)并處理的程序示例:

                  open file; while (reading not finished) { read some data; if (error) { stop the subprogram and inform rest of the program about the error; } } process read data; finish the subprogram;

                  其中“stop and inform”的步驟可以利用多種方式達(dá)成,包括產(chǎn)生一個(gè)異常(exception)、利用return指令回到上一層的程序、使用配合標(biāo)記的break指令,或是使用goto。當(dāng)子程序有二個(gè)結(jié)束點(diǎn)時(shí),就違背了戴克斯特拉的結(jié)構(gòu)化編程原則。但此情形下若強(qiáng)制要撰寫(xiě)只有一個(gè)結(jié)束點(diǎn)的子程序又相當(dāng)麻煩,而且若有幾個(gè)不同的錯(cuò)誤處理,錯(cuò)誤產(chǎn)生后有不同的清除方式,單一結(jié)束點(diǎn)的程序會(huì)相當(dāng)難以閱讀及理解,甚至比未結(jié)構(gòu)化使用goto的程序相當(dāng)。

                  許多編程語(yǔ)言就提供了在結(jié)構(gòu)化編程中產(chǎn)生多個(gè)結(jié)束點(diǎn)的方式。C語(yǔ)言允許使用continue、break及return指令來(lái)產(chǎn)生結(jié)構(gòu)的多個(gè)結(jié)束點(diǎn),C++還可以用throw產(chǎn)生異常,在結(jié)構(gòu)外再用catch進(jìn)行異常的處理,有些語(yǔ)言則有配合標(biāo)記的break指令(類似一般的break指令,但可以跳出不只一層的結(jié)構(gòu))。

                  狀態(tài)機(jī)

                  有些程序(例如語(yǔ)法分析器或是處理通信協(xié)議的程序)有許多的狀態(tài)(英語(yǔ):state (computer science)),因此程序進(jìn)行的過(guò)程會(huì)在各狀態(tài)中切換,此架構(gòu)不容易簡(jiǎn)化成基本的控制結(jié)構(gòu)??梢詫⒋思軜?gòu)各狀態(tài)下的程序分別獨(dú)立為子程序,再用一個(gè)變量表示目前的狀態(tài),(可參考trampoline(英語(yǔ):trampoline (computers))),另一種作法是用goto的方式切換到新?tīng)顟B(tài)對(duì)應(yīng)的程序。

                  相關(guān)條目

                  控制流程

                  短路求值

                  面向?qū)ο蟪绦蛟O(shè)計(jì)

                  Nassi-Shneiderman圖

                  編程范型

                  異常處理

                  結(jié)構(gòu)圖(英語(yǔ):Structure chart)

                  switch指令(英語(yǔ):Switch statement),可視為許多goto的組合

                  非結(jié)構(gòu)化程序設(shè)計(jì)


                  免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫(xiě)的作者,感謝每一位的分享。

                  ——— 沒(méi)有了 ———
                  編輯:阿族小譜

                  更多文章

                  更多精彩文章
                  評(píng)論 {{commentTotal}} 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守《新聞評(píng)論服務(wù)協(xié)議》
                  游客
                  發(fā)表評(píng)論
                  • {{item.userName}} 舉報(bào)

                    {{item.content}}

                    {{item.time}} {{item.replyListShow ? '收起' : '展開(kāi)'}}評(píng)論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}

                    回復(fù)評(píng)論
                  加載更多評(píng)論
                  打賞作者
                  “感謝您的打賞,我會(huì)更努力的創(chuàng)作”
                  — 請(qǐng)選擇您要打賞的金額 —
                  {{item.label}}
                  {{item.label}}
                  打賞成功!
                  “感謝您的打賞,我會(huì)更努力的創(chuàng)作”
                  返回
                  打賞
                  私信

                  推薦閱讀

                  · 極限編程
                  歷史極限編程的創(chuàng)始者是肯特·貝克、沃德·坎寧安和羅恩·杰弗里斯(英語(yǔ):RonJeffries),他們?cè)跒榭巳R斯勒綜合報(bào)酬系統(tǒng)(英語(yǔ):ChryslerComprehensiveCompensationSystem)的薪水冊(cè)項(xiàng)目工作時(shí)提出了極限編程方法??咸亍へ惪嗽?996年3月成為克萊斯勒系統(tǒng)的項(xiàng)目負(fù)責(zé)人,開(kāi)始對(duì)項(xiàng)目的開(kāi)發(fā)方法學(xué)進(jìn)行改善。他寫(xiě)了一本關(guān)于這個(gè)改善后的方法學(xué)的書(shū),并且于1999年10月將之發(fā)行,這就是《極限編程解析》(2005第二版出版)??巳R斯勒在2000年2月取消了實(shí)質(zhì)上并未成功的克萊斯勒系統(tǒng),但是這個(gè)方法學(xué)卻一直流行在軟件工程領(lǐng)域中。至今2006年,很多軟件開(kāi)發(fā)項(xiàng)目都一直以極限編程做為他們的指導(dǎo)方法學(xué)。該書(shū)闡述了如下的極限編程的哲學(xué)思想:一種社會(huì)性的變化機(jī)制一種開(kāi)發(fā)模式一種改進(jìn)的方法一種協(xié)調(diào)生產(chǎn)率和人性的嘗試一種軟件開(kāi)發(fā)方法把極限編程一般化并用于其它類型的專案稱為極限專案管...
                  · 結(jié)構(gòu)化分析
                  目的結(jié)構(gòu)化分析在1980年代起開(kāi)始廣為使用。結(jié)構(gòu)化分析包括將系統(tǒng)概念轉(zhuǎn)換為用數(shù)據(jù)及控制的來(lái)表示,也就是轉(zhuǎn)換為數(shù)據(jù)流程圖。數(shù)據(jù)流程圖中的程序以泡泡來(lái)表示,因此也稱為“泡泡圖”。不過(guò)完整的數(shù)據(jù)流程圖中可能有許多的“泡泡”,使得很難去追蹤數(shù)據(jù)流動(dòng)的情形。此時(shí)可以先定義外界需要系統(tǒng)回應(yīng)的事件,每一個(gè)事件指定一個(gè)泡泡,當(dāng)系統(tǒng)定義完成后,再將事件的泡泡和回應(yīng)的程序的泡泡相連接。也可以將程序?qū)?yīng)泡泡加以分組,組合成較高級(jí)的程序。數(shù)據(jù)字典用來(lái)描述數(shù)據(jù)和指令的流動(dòng),而用程序規(guī)格來(lái)描述交易或數(shù)據(jù)轉(zhuǎn)換的相關(guān)信息。許多著名的分析方式都和結(jié)構(gòu)化分析(SA)及結(jié)構(gòu)化設(shè)計(jì)(SD)有關(guān),包括結(jié)構(gòu)圖、數(shù)據(jù)流程圖及數(shù)據(jù)模型圖等。許多程序設(shè)計(jì)方法學(xué)也結(jié)合了結(jié)構(gòu)化分析及結(jié)構(gòu)化設(shè)計(jì),包括結(jié)構(gòu)化系統(tǒng)分析及設(shè)計(jì)方法(SSADM)及結(jié)構(gòu)化分析及設(shè)計(jì)技術(shù)(英語(yǔ):StructuredAnalysisandDesignTechnique)(S...
                  · 編程范型
                  例子結(jié)構(gòu)化編程對(duì)比非結(jié)構(gòu)化編程命令式編程對(duì)比宣告式編程消息傳遞編程對(duì)比命令式編程程序編程對(duì)比函數(shù)式編程Value-levelprogramming對(duì)比Function-levelprogramming流程驅(qū)動(dòng)編程對(duì)比事件驅(qū)動(dòng)編程純量編程對(duì)比陣列編程基于類編程對(duì)比基于原型編程(在面向?qū)ο缶幊痰纳舷挛闹校㏑ule-basedprogramming對(duì)比Constraintprogramming(在邏輯編程的上下文中)基于組件編程(如OLE)面向方面編程(如AspectJ)符號(hào)式編程(如Mathematica)面向表格編程(如MicrosoftFoxPro)管道編程(如Unix命令中的管道)Post-objectprogramming面向主題編程自省編程或稱反射編程參見(jiàn)ArsbasedprogrammingMemetics
                  · 編程語(yǔ)言
                  概論編程語(yǔ)言原本是被設(shè)計(jì)成專門使用在計(jì)算機(jī)上的,但它們也可以用來(lái)定義算法或者數(shù)據(jù)結(jié)構(gòu)。正是因?yàn)槿绱?,程序員才會(huì)試圖使程序代碼更容易閱讀。編程語(yǔ)言往往使程序員能夠比使用機(jī)器語(yǔ)言更準(zhǔn)確地表達(dá)他們所想表達(dá)的目的。對(duì)那些從事計(jì)算機(jī)科學(xué)的人來(lái)說(shuō),懂得程序設(shè)計(jì)語(yǔ)言是十分重要的,因?yàn)樵诋?dāng)今所有的計(jì)算都需要程序設(shè)計(jì)語(yǔ)言才能完成。目前發(fā)明了許多的編程語(yǔ)言,編程語(yǔ)言本身可能修改以匹配新需求,或是和其他的編程語(yǔ)言結(jié)合使用,盡管人們多次試圖創(chuàng)造可以匹配所有需求的通用編程語(yǔ)言,但以“匹配所有需求”的標(biāo)準(zhǔn)來(lái)看,這些嘗試都失敗了。之所以有那么多種不同的編程語(yǔ)言存在的原因是,編寫(xiě)程序的初衷其實(shí)也各不相同;新手與老手之間技術(shù)的差距非常大,而且有許多語(yǔ)言對(duì)新手來(lái)說(shuō)太難學(xué);還有,不同程序之間的運(yùn)行成本(runtimecost)各不相同。有許多用于特殊用途的語(yǔ)言,只在特殊情況下使用。例如,PHP專門用來(lái)顯示網(wǎng)頁(yè);Perl更適合文...
                  · 邏輯編程
                  歷史早在二十世紀(jì)七十年代,羅伯特·科瓦爾斯基(英語(yǔ):RobertKowalski)等人提出了邏輯可以作為程序設(shè)計(jì)語(yǔ)言的基本思想,把邏輯和程序這兩個(gè)截然不同的概念協(xié)調(diào)統(tǒng)一為一個(gè)概念,于是誕生了邏輯程序設(shè)計(jì)。這也是早期自動(dòng)定理證明和人工智能發(fā)展的自然結(jié)果。隨后,邏輯程序設(shè)計(jì)得到了迅速發(fā)展,特別是基于一階謂詞的邏輯程序設(shè)計(jì)語(yǔ)言,將邏輯推理對(duì)應(yīng)于計(jì)算,具有豐富的表達(dá)能力、非確定性等特點(diǎn),在定理機(jī)器證明、關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)、程序驗(yàn)證、模塊化程序設(shè)計(jì)和非單調(diào)推理等都有了廣泛的應(yīng)用。

                  關(guān)于我們

                  關(guān)注族譜網(wǎng) 微信公眾號(hào),每日及時(shí)查看相關(guān)推薦,訂閱互動(dòng)等。

                  APP下載

                  下載族譜APP 微信公眾號(hào),每日及時(shí)查看
                  掃一掃添加客服微信