版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)導(dǎo)論第6章程序設(shè)計(jì)知識(shí)目錄CONTENTS03算法與程序設(shè)計(jì)01程序設(shè)計(jì)語(yǔ)言02Python語(yǔ)言程序設(shè)計(jì)0405數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)編譯原理與程序設(shè)計(jì)程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言;匯編語(yǔ)言;早期高級(jí)語(yǔ)言;結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言;面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言/01程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言的定義簡(jiǎn)單說(shuō)法:程序設(shè)計(jì)語(yǔ)言是用來(lái)編寫(xiě)計(jì)算機(jī)程序的語(yǔ)言。規(guī)范描述:程序設(shè)計(jì)語(yǔ)言是一種讓人與計(jì)算機(jī)之間進(jìn)行交流,讓計(jì)算機(jī)理解人的意圖并按照人的意圖完成工作的符號(hào)系統(tǒng)。目前常用的高級(jí)程序設(shè)計(jì)語(yǔ)言主要有Python、C++、Java等。程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言機(jī)器語(yǔ)言(machinelanguage)是由二進(jìn)制編碼的機(jī)器語(yǔ)言指令構(gòu)成的語(yǔ)言,是一種依附于機(jī)器硬件的語(yǔ)言。每種處理器(CPU)都有自己專用的機(jī)器語(yǔ)言指令集合,這些指令能夠被計(jì)算機(jī)直接執(zhí)行。每條機(jī)器語(yǔ)言指令完成一個(gè)簡(jiǎn)單任務(wù)。一條機(jī)器語(yǔ)言指令由兩個(gè)部分組成:操作碼和操作數(shù),操作碼用于說(shuō)明指令的功能,操作數(shù)用于說(shuō)明參與操作的數(shù)據(jù)或數(shù)據(jù)所在的寄存器編號(hào)或數(shù)據(jù)所在內(nèi)存單元的地址。操作碼和操作數(shù)都是以二進(jìn)制的形式表示。程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言程序示例把兩個(gè)內(nèi)存單元中的數(shù)據(jù)相加,并將結(jié)果存入另外一個(gè)單元。用機(jī)器語(yǔ)言編寫(xiě)程序,編程人員必須要記住每條指令對(duì)應(yīng)的二進(jìn)制編碼是什么,編寫(xiě)出來(lái)的程序就是由0和1組成的數(shù)字串。這樣就存在幾個(gè)方面的困難:指令難以準(zhǔn)確記憶、程序代碼容易寫(xiě)錯(cuò)、程序難以理解和修改。程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言匯編語(yǔ)言(assemblylanguage)是由助記符指令構(gòu)成的語(yǔ)言,也是一種依附于機(jī)器硬件的語(yǔ)言。在匯編語(yǔ)言中,使用助記符(類英文單詞)來(lái)表示指令的操作碼,使用存儲(chǔ)單元或寄存器的名字表示操作數(shù)。這樣,相對(duì)于機(jī)器語(yǔ)言,記憶匯編語(yǔ)言的指令就容易多了,編寫(xiě)出的程序也比較容易理解。程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言匯編語(yǔ)言程序示例(把兩個(gè)內(nèi)存單元中的數(shù)據(jù)相加,并將結(jié)果存入另外一個(gè)單元)實(shí)際上,計(jì)算機(jī)只能直接執(zhí)行由機(jī)器語(yǔ)言編寫(xiě)的程序。用匯編語(yǔ)言編寫(xiě)的程序稱為匯編語(yǔ)言源程序,需要首先翻譯成機(jī)器語(yǔ)言程序(目標(biāo)程序),才能被計(jì)算機(jī)執(zhí)行,完成這種翻譯工作的程序稱為匯編程序或匯編器。程序設(shè)計(jì)語(yǔ)言早期高級(jí)語(yǔ)言機(jī)器語(yǔ)言中的指令用二進(jìn)制編碼表示,匯編語(yǔ)言中的指令用英文助記符表示。高級(jí)語(yǔ)言(highlevellanguage)中的語(yǔ)句用英文和數(shù)學(xué)公式表示,更容易被編程人員理解和掌握。使用高級(jí)語(yǔ)言編寫(xiě)出的程序稱為高級(jí)語(yǔ)言源程序,也需要先翻譯成目標(biāo)程序,才能為計(jì)算機(jī)理解和執(zhí)行。翻譯模式由2種:編譯模式和解釋模式。程序設(shè)計(jì)語(yǔ)言代表性早期高級(jí)語(yǔ)言FORTRAN語(yǔ)言:FORTRAN是公式翻譯器(FORmula
TRANslator)的縮寫(xiě),是第一個(gè)高級(jí)語(yǔ)言。FORTRAN語(yǔ)言用于數(shù)學(xué)公式的表達(dá)和科學(xué)計(jì)算,1957年FORTRAN的第一個(gè)版本研發(fā)成功,其編譯程序由25000行機(jī)器語(yǔ)言代碼組成。以后又陸續(xù)推出多個(gè)版本,包括結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言版本和面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言版本。ALGOL語(yǔ)言:ALGOL是算法語(yǔ)言(ALGOrithmLanguage)的縮寫(xiě)。AIGOL語(yǔ)言也是用于科學(xué)計(jì)算,其最早版本是1958年出現(xiàn)的ALGOL58,后續(xù)版本有ALGOL60和ALGOL68,這兩個(gè)版本曾經(jīng)在我國(guó)得到廣泛的學(xué)習(xí)和使用,其后繼語(yǔ)言Pascal出現(xiàn)后,ALGOL逐漸被淘汰。程序設(shè)計(jì)語(yǔ)言代表性早期高級(jí)語(yǔ)言COBOL語(yǔ)言:COBOL是面向商業(yè)的通用語(yǔ)言(COmmon
BusinessOrientedLanguage)的縮寫(xiě)。COBOL語(yǔ)言用于企業(yè)管理和事務(wù)處理,1960年4月正式公布第一個(gè)COBOL文本,后續(xù)推出多個(gè)版本。BASIC語(yǔ)言:BASIC是初學(xué)者通用符號(hào)指令碼(Beginner′sAllpurposeSymbolicInstructionCode)的英文縮寫(xiě),1964年BASIC第1版發(fā)布。BASIC確實(shí)簡(jiǎn)單、易學(xué),一經(jīng)推出,很快流行起來(lái)。BASIC語(yǔ)言在我國(guó)也曾經(jīng)廣泛流行。程序設(shè)計(jì)語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)思想沿用編寫(xiě)小程序的方法編寫(xiě)中大規(guī)模的程序是不行的,往往導(dǎo)致編寫(xiě)出的程序可靠性差、錯(cuò)誤多且難以發(fā)現(xiàn)和修改。1969年,埃德斯加·狄克斯特拉提出了結(jié)構(gòu)化程序設(shè)計(jì)的概念,強(qiáng)調(diào)從程序結(jié)構(gòu)和風(fēng)格上來(lái)研究程序設(shè)計(jì),注重程序結(jié)構(gòu)的清晰性,注重程序的可理解性和可修改性。經(jīng)過(guò)幾年的探索和實(shí)踐,結(jié)構(gòu)化程序設(shè)計(jì)方法的應(yīng)用確實(shí)取得了成效,遵循結(jié)構(gòu)化程序設(shè)計(jì)方法編寫(xiě)出來(lái)的程序,不僅結(jié)構(gòu)良好、容易理解和閱讀,而且容易發(fā)現(xiàn)和改正其中的錯(cuò)誤。程序設(shè)計(jì)方法要有相應(yīng)的程序設(shè)計(jì)語(yǔ)言支持。程序設(shè)計(jì)語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言Pascal語(yǔ)言:Pascal是一種通用的高級(jí)語(yǔ)言,是在ALGOL語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的,以法國(guó)著名物理學(xué)家、數(shù)學(xué)家帕斯卡(BlaisePascal)的名字命名。帕斯卡不僅發(fā)現(xiàn)了帕斯卡定律,還在1642年曾經(jīng)發(fā)明了齒輪式、能進(jìn)行加減運(yùn)算的機(jī)械式計(jì)算機(jī),這是第一臺(tái)能進(jìn)行加減運(yùn)算的機(jī)械計(jì)算機(jī)。Pascal的第一個(gè)版本出現(xiàn)在1971年,20世紀(jì)70~90年代,Pascal語(yǔ)言有很大的影響,在我國(guó)也曾廣泛流行。程序設(shè)計(jì)語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言C語(yǔ)言:1963年,英國(guó)劍橋大學(xué)在ALGOL60的基礎(chǔ)上添加了硬件處理功能,推出了CPL語(yǔ)言,1967年推出了簡(jiǎn)化版的CPL(BCPL)。1970年美國(guó)貝爾實(shí)驗(yàn)室以BCPL為基礎(chǔ),設(shè)計(jì)出更簡(jiǎn)單且更接近硬件的B語(yǔ)言。但B語(yǔ)言過(guò)于簡(jiǎn)單,功能有限。1972~1973年,貝爾實(shí)驗(yàn)室在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言。C語(yǔ)言既保持了BCPL和B語(yǔ)言精練、接近硬件的優(yōu)點(diǎn),又彌補(bǔ)了它們過(guò)于簡(jiǎn)單、無(wú)數(shù)據(jù)類型的不足。1973年,貝爾實(shí)驗(yàn)室將用匯編語(yǔ)言編寫(xiě)的UNIX操作系統(tǒng)用C語(yǔ)言改寫(xiě)成UNIX第5版,C語(yǔ)言代碼占90%以上。1975年,用C語(yǔ)言編寫(xiě)的UNIX第6版公布后,C語(yǔ)言的優(yōu)點(diǎn)引起人們的關(guān)注,隨著UNIX的日益廣泛使用,C語(yǔ)言也迅速得以推廣和廣泛應(yīng)用。程序設(shè)計(jì)語(yǔ)言面向?qū)ο蟪绦蛟O(shè)計(jì)思想結(jié)構(gòu)化程序設(shè)計(jì)方法在一定程度上保證了編寫(xiě)較大規(guī)模程序的質(zhì)量,但隨著時(shí)間的推移,也逐漸暴露了其在編寫(xiě)大規(guī)模程序時(shí)的不足。面向?qū)ο蠓椒ú辉賹?wèn)題分解為過(guò)程,而是將問(wèn)題分解為對(duì)象,對(duì)象將自己的屬性和方法封裝成一個(gè)整體,供編程人員使用,對(duì)象之間的相互作用則通過(guò)消息傳遞來(lái)實(shí)現(xiàn)。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,可以使人們對(duì)復(fù)雜系統(tǒng)的認(rèn)識(shí)過(guò)程與程序設(shè)計(jì)過(guò)程盡可能一致,能夠更好地保證大程序的質(zhì)量。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法也要有面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言支持。程序設(shè)計(jì)語(yǔ)言面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言Simula67和Smalltalk:Simula67發(fā)布于1967年,被公認(rèn)為是面向?qū)ο笳Z(yǔ)言的鼻祖。20世紀(jì)80年代美國(guó)施樂(lè)帕羅奧多研究中心推出了Smalltalk,它完整地體現(xiàn)并進(jìn)一步豐富了面向?qū)ο蟮母拍?。但由于?dāng)時(shí)人們已經(jīng)接受并廣泛應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)方法,一時(shí)還難以完全接受面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,這類純面向?qū)ο笳Z(yǔ)言沒(méi)有能夠廣泛流行起來(lái)。C++語(yǔ)言:C++語(yǔ)言由貝爾實(shí)驗(yàn)室的本賈尼·斯特勞斯特盧普在20世紀(jì)80年代初設(shè)計(jì)并實(shí)現(xiàn)的,它是以C語(yǔ)言為基礎(chǔ)、支持?jǐn)?shù)據(jù)抽象和面向?qū)ο笏枷氲耐ㄓ贸绦蛟O(shè)計(jì)語(yǔ)言。C++是C語(yǔ)言的擴(kuò)充,借助于C語(yǔ)言的普及基礎(chǔ),C++得到廣泛應(yīng)用。
UNIXCC++程序設(shè)計(jì)語(yǔ)言面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言Java語(yǔ)言是由SunMicrosystems公司于1995年5月推出的一個(gè)支持網(wǎng)絡(luò)計(jì)算的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。Java語(yǔ)言吸收了Smalltalk語(yǔ)言和C++語(yǔ)言的優(yōu)點(diǎn),并增加了并發(fā)程序設(shè)計(jì)、網(wǎng)絡(luò)通信和多媒體數(shù)據(jù)控制等特性,也是目前得到廣泛應(yīng)用的一種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。C#語(yǔ)言:C#語(yǔ)言是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NETFramework之上的高級(jí)程序設(shè)計(jì)語(yǔ)言。C#在語(yǔ)法規(guī)則與系統(tǒng)結(jié)構(gòu)上與Java有著很多的相似之處,比如它包括了單繼承機(jī)制、界面以及與Java幾乎相同的語(yǔ)法,是微軟公司基于.NET網(wǎng)絡(luò)框架進(jìn)行系統(tǒng)開(kāi)發(fā)的主角。程序設(shè)計(jì)語(yǔ)言面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言Python語(yǔ)言:Python是一種完全面向?qū)ο蟮?、解釋型的程序設(shè)計(jì)語(yǔ)言,1991年發(fā)布了第一個(gè)公開(kāi)版本。由于Python語(yǔ)言易學(xué)易用以及有大量的內(nèi)置庫(kù)和第三方庫(kù)可用,使得它成為一種得到廣泛應(yīng)用的程序設(shè)計(jì)語(yǔ)言。本書(shū)以Python為例簡(jiǎn)要介紹編程知識(shí),詳細(xì)介紹可查閱袁方、肖勝剛、齊鴻志編寫(xiě)的《Python語(yǔ)言程序設(shè)計(jì)(第2版)》一書(shū)。Python語(yǔ)言程序設(shè)計(jì)Python語(yǔ)言的特點(diǎn);Python程序的執(zhí)行:Python的基礎(chǔ)語(yǔ)法;Python的基本數(shù)據(jù)類型Python的類型轉(zhuǎn)換;順序結(jié)構(gòu)程序設(shè)計(jì);分支結(jié)構(gòu)程序設(shè)計(jì);Python程序?qū)嵗?02Python語(yǔ)言的特點(diǎn)易學(xué)易用Python語(yǔ)言的語(yǔ)法很多來(lái)自于C語(yǔ)言,但比C語(yǔ)言更為簡(jiǎn)潔。相對(duì)于其他常用的程序設(shè)計(jì)語(yǔ)言,Python可以用更少的代碼實(shí)現(xiàn)相同的功能,更容易學(xué)習(xí)和使用,使編程人員更多地關(guān)注數(shù)據(jù)處理邏輯,而不是語(yǔ)法細(xì)節(jié)。庫(kù)函數(shù)豐富Python解釋器提供了幾百個(gè)內(nèi)置庫(kù),還有十幾萬(wàn)個(gè)第三方庫(kù)可用,幾乎覆蓋了計(jì)算機(jī)應(yīng)用的各個(gè)領(lǐng)域。在一定程度上說(shuō),使用Python編寫(xiě)程序,是基于大量的現(xiàn)有內(nèi)置庫(kù)和第三方庫(kù)中的函數(shù)(代碼)來(lái)組裝程序,大大簡(jiǎn)化了編程工作,提高了編程效率和代碼質(zhì)量。近幾年,人工智能(AI)得到快速發(fā)展和廣泛應(yīng)用。由于有大量的AI庫(kù)可用和具備強(qiáng)大的數(shù)據(jù)處理能力,Python已成為人工智能領(lǐng)域的首選編程語(yǔ)言。Python程序的執(zhí)行命令行方式命令行方式是一種人機(jī)交互方式,用戶輸入一條Python語(yǔ)句或一個(gè)Python表達(dá)式,計(jì)算機(jī)就執(zhí)行語(yǔ)句或計(jì)算表達(dá)式的結(jié)果。IDLE實(shí)際上是一個(gè)Python的外殼,它提供了交互式的命令執(zhí)行方式,可以在提示符“>>>”后面輸入想要執(zhí)行的語(yǔ)句或表達(dá)式,回車后可以立即顯示執(zhí)行結(jié)果。命令行方式示例>>>print(“HelloWorld.”) >>>311**(1/3)Python程序的執(zhí)行程序文件方式在IDLE界面中,選擇菜單File→NewFile(新建文件),打開(kāi)程序編輯窗口,可以輸入若干條語(yǔ)句,組成一個(gè)Python源程序。選擇菜單File→Save可以把程序代碼存盤(pán),選擇菜單File→SaveAs…可以另存為…,選擇菜單File→Open可以打開(kāi)已有文件,選擇Run→RunModule可以執(zhí)行程序文件,等等。Python的基礎(chǔ)語(yǔ)法Python標(biāo)識(shí)符Python語(yǔ)言規(guī)定:標(biāo)識(shí)符是由字母、數(shù)字和下畫(huà)線三種字符構(gòu)成的,且第一個(gè)字符必須是字母或下畫(huà)線的字符序列。Python語(yǔ)言的變量、函數(shù)、文件等各種實(shí)體的名字都需要用標(biāo)識(shí)符來(lái)表示。定義標(biāo)識(shí)符時(shí)要注意如下幾點(diǎn):必須以字母或下畫(huà)線作為開(kāi)始符號(hào),數(shù)字不能作為開(kāi)始符號(hào),但以下畫(huà)線開(kāi)始的標(biāo)識(shí)符一般都有特定含義,所以盡量不用以下畫(huà)線開(kāi)始的自定義標(biāo)識(shí)符。標(biāo)識(shí)符中只能出現(xiàn)字母、數(shù)字和下畫(huà)線,不能出現(xiàn)其他符號(hào)。同一字母的大寫(xiě)和小寫(xiě)被認(rèn)為是兩個(gè)不同的字符。關(guān)鍵字有特定的含義,不能用作用戶自定義標(biāo)識(shí)符使用。盡可能做到見(jiàn)名知義,增加程序的可理解性。Python的基礎(chǔ)語(yǔ)法常量與變量常量:是指在整個(gè)程序的執(zhí)行過(guò)程中其值不能被改變的量,也就是所說(shuō)的常數(shù)。在用Python語(yǔ)言編寫(xiě)程序時(shí),常量可以直接使用,常量的類型是由常量值本身決定的。例如,12是整型常量、34.56是浮點(diǎn)型常量、′a′和"Python"是字符串常量等。變量:是指在程序的執(zhí)行過(guò)程中其值可以被改變的量。變量要先定義(賦值),后使用。變量定義就是給變量賦值,格式如下:
變量名1,變量名2,…,變量名n=表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:為各變量在內(nèi)存中分配相應(yīng)的內(nèi)存單元并賦以相應(yīng)的值。分別計(jì)算出賦值號(hào)右邊各表達(dá)式的值,并依次賦給左邊的變量。Python的基礎(chǔ)語(yǔ)法常量與變量變量定義示例Python的基本數(shù)據(jù)類型整型整型就是整數(shù)類型。Python語(yǔ)言中整數(shù)的取值范圍很大,理論上沒(méi)有限制,實(shí)際取值受限于所用計(jì)算機(jī)的內(nèi)存容量,對(duì)于一般應(yīng)用場(chǎng)景足夠了。浮點(diǎn)型浮點(diǎn)型就是實(shí)數(shù)類型,表示帶有小數(shù)的數(shù)值。Python要求所有浮點(diǎn)數(shù)都必須帶有小數(shù),便于和整數(shù)的區(qū)別,如6是整數(shù),6.0是浮點(diǎn)數(shù)。雖然6和6.0值相同,但兩者在計(jì)算機(jī)內(nèi)部的存儲(chǔ)方式和計(jì)算處理方式是不一樣的。Python的基本數(shù)據(jù)類型浮點(diǎn)型示例Python的基本數(shù)據(jù)類型布爾型布爾型也稱為邏輯型,用于表示邏輯數(shù)據(jù)。Python語(yǔ)言中,邏輯數(shù)據(jù)只有兩個(gè)值:False(假)和True(真)。需要注意的是,兩個(gè)邏輯值的首字母大寫(xiě),其他字母小寫(xiě)。FALSE、false、TRUE、true等書(shū)寫(xiě)方式都不是正確的Python邏輯值。布爾型示例Python的基本數(shù)據(jù)類型字符串型字符串型數(shù)據(jù)用于表示字符序列,字符串常量是由一對(duì)引號(hào)括起來(lái)的字符序列。Python語(yǔ)言有三種形式的字符串:一對(duì)單引號(hào)括起來(lái)的字符序列,如,′Python′、′程序設(shè)計(jì)′;一對(duì)雙引號(hào)括起來(lái)的字符序列,如"Python"、"程序設(shè)計(jì)";一對(duì)三引號(hào)括起來(lái)的字符序列,如′′′Python′′′、′′′程序設(shè)計(jì)′′′。關(guān)于字符串的幾點(diǎn)解釋單引號(hào)括起來(lái)的字符串中可以出現(xiàn)雙引號(hào),雙引號(hào)括起來(lái)的字符串中可以出現(xiàn)單引號(hào),三引號(hào)括起來(lái)的字符串中可以出現(xiàn)單引號(hào)和雙引號(hào)。單引號(hào)或雙引號(hào)括起來(lái)的字符串只能書(shū)寫(xiě)在一行內(nèi),三引號(hào)括起來(lái)的字符串可以書(shū)寫(xiě)多行。Python的基本數(shù)據(jù)類型字符串型關(guān)于字符串的幾點(diǎn)解釋字符串有兩個(gè)特例,一個(gè)是單字符字符串,可稱為字符;另一個(gè)是不包含任何字符的字符串,稱為空字符串。由三引號(hào)括起來(lái)的字符序列,如果出現(xiàn)在賦值語(yǔ)句中或print()函數(shù)內(nèi),當(dāng)作字符串處理;如果直接出現(xiàn)在程序中,當(dāng)作程序注釋。字符串示例Python的基本數(shù)據(jù)類型字符串型轉(zhuǎn)義字符:Python語(yǔ)言中,以Unicode編碼存儲(chǔ)字符串,單個(gè)英文字符和單個(gè)漢字都被看作一個(gè)字符。如果用到控制符,只能寫(xiě)成編碼值的形式。如09、0A(十六進(jìn)制數(shù))分別表示水平制表符、換行等。直接書(shū)寫(xiě)編碼值的方式需要記憶編碼值,也容易寫(xiě)錯(cuò)。為此,Python語(yǔ)言給出了一種轉(zhuǎn)義符的表示形式,以反斜杠(\)開(kāi)始的符號(hào)不再是原來(lái)的意義,而是轉(zhuǎn)換為新的含義。如\n代表?yè)Q行符,\t代表水平制表符等。Python的基本數(shù)據(jù)類型字符串型字符串的訪問(wèn):對(duì)于字符串,除了可以整體使用外,還有兩種常用的訪問(wèn)方式:索引方式和切片方式。索引訪問(wèn)方式也稱為單字符訪問(wèn)方式,語(yǔ)法格式如下:
字符串變量名[索引值]功能:從字符串中取出與索引值對(duì)應(yīng)的一個(gè)字符。Python的基本數(shù)據(jù)類型字符串型切片訪問(wèn):該方式也稱為子串訪問(wèn)方式,語(yǔ)法格式如下:
字符串變量名[i:j:k]功能:從字符串中取出多個(gè)字符。其中,i為開(kāi)始位置,j為結(jié)束位置(但不包括j位置上的字符),k為步長(zhǎng)。參數(shù)i、j、k都可以省略。在步長(zhǎng)k的值為正數(shù)時(shí),省略i,其默認(rèn)值為0;省略j,其默認(rèn)值為正向最后一個(gè)字符的索引值加1。Python的基本數(shù)據(jù)類型字符串型字符串運(yùn)算符Python的類型轉(zhuǎn)換int(x)函數(shù)int(x)函數(shù)的功能是把x的值轉(zhuǎn)換為整型數(shù)據(jù),x為浮點(diǎn)數(shù)或由數(shù)字組成的字符串,可以帶正負(fù)號(hào)。float(x)函數(shù)float(x)函數(shù)的功能是把x的值轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù),x為整數(shù)或由數(shù)字與最多一個(gè)小數(shù)點(diǎn)組成的字符串,可以帶正負(fù)號(hào)。Python的類型轉(zhuǎn)換eval(x)函數(shù)eval(x)函數(shù)把由純數(shù)字組成的字符串(可由正負(fù)號(hào)開(kāi)始)轉(zhuǎn)換為整型,把由數(shù)字和1位小數(shù)點(diǎn)組合成的字符串(可由正負(fù)號(hào)開(kāi)始)轉(zhuǎn)化為浮點(diǎn)型數(shù)據(jù)。eval()函數(shù)的語(yǔ)法格式如下:
eval(字符串)功能:將字符串的內(nèi)容,即去掉界定符(引號(hào))之后的表達(dá)式看作一個(gè)Python表達(dá)式,并計(jì)算出表達(dá)式的值作為函數(shù)的結(jié)果。順序結(jié)構(gòu)程序設(shè)計(jì)賦值語(yǔ)句賦值語(yǔ)句的語(yǔ)法格式:
變量名1,變量名2,…,變量名n=表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:先計(jì)算出各表達(dá)式的值,然后依次賦給賦值運(yùn)算符左邊的變量。一個(gè)賦值語(yǔ)句可以只給一個(gè)變量賦值,也可以同時(shí)給多個(gè)變量賦值。對(duì)于一些先進(jìn)行運(yùn)算再賦值的操作,Python語(yǔ)言還提供了7個(gè)常用的復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=、//=、**=。
順序結(jié)構(gòu)程序設(shè)計(jì)用input()函數(shù)輸入數(shù)據(jù)使用input()函數(shù)輸入數(shù)據(jù)的語(yǔ)法格式如下:
變量=input("提示信息")功能:從鍵盤(pán)輸入數(shù)據(jù)并賦給變量,Python解釋器把用戶的輸入看作字符串。
順序結(jié)構(gòu)程序設(shè)計(jì)用print()函數(shù)輸出數(shù)據(jù)使用print()函數(shù)輸出數(shù)據(jù)的語(yǔ)法格式如下:print(表達(dá)式1,表達(dá)式2,…,表達(dá)式n)功能:依次輸出n個(gè)表達(dá)式的值,表達(dá)式的值可以是整數(shù)、實(shí)數(shù)和字符串,也可以是一個(gè)動(dòng)作控制符,如“\n”表示換行等。其中的表達(dá)式可以有一個(gè),也可以有多個(gè),多個(gè)表達(dá)式之間用逗號(hào)(,)分開(kāi),如果沒(méi)有任何表達(dá)式,print()函數(shù)的功能是實(shí)現(xiàn)一個(gè)換行動(dòng)作。
順序結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)思想結(jié)構(gòu)化程序設(shè)計(jì)方法強(qiáng)調(diào)程序結(jié)構(gòu)的清晰性,結(jié)構(gòu)化程序由3種基本結(jié)構(gòu)組成:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)是最簡(jiǎn)單的一種程序結(jié)構(gòu)。在順序結(jié)構(gòu)程序中,程序的執(zhí)行是按照語(yǔ)句塊出現(xiàn)的先后次序順序執(zhí)行的,并且每個(gè)語(yǔ)句塊都會(huì)被執(zhí)行到。順序結(jié)構(gòu)程序設(shè)計(jì)示例通過(guò)鍵盤(pán)輸入直角三角形的兩個(gè)直角邊邊長(zhǎng),計(jì)算斜邊邊長(zhǎng)并輸出。分支結(jié)構(gòu)程序設(shè)計(jì)if語(yǔ)句if語(yǔ)句用來(lái)實(shí)現(xiàn)單分支選擇,語(yǔ)法格式為:
if表達(dá)式:
語(yǔ)句塊if語(yǔ)句的執(zhí)行過(guò)程是:先計(jì)算表達(dá)式的值,若值為T(mén)rue(真),則執(zhí)行if子句(表達(dá)式后面的語(yǔ)句塊),然后執(zhí)行if結(jié)構(gòu)后面的語(yǔ)句;否則,跳過(guò)if子句,直接執(zhí)行if結(jié)構(gòu)后面的語(yǔ)句。分支結(jié)構(gòu)程序設(shè)計(jì)if-else語(yǔ)句if-else語(yǔ)句用來(lái)實(shí)現(xiàn)雙分支選擇,其語(yǔ)法格式為:
if表達(dá)式:語(yǔ)句塊1else:語(yǔ)句塊2iif-else語(yǔ)句的執(zhí)行過(guò)程是:先計(jì)算表達(dá)式的值,若結(jié)果為T(mén)rue,則執(zhí)行if子句(語(yǔ)句塊1),否則執(zhí)行else子句(語(yǔ)句塊2)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句for循環(huán)語(yǔ)句的語(yǔ)法格式為:
for循環(huán)變量in遍歷結(jié)構(gòu):語(yǔ)句塊for循環(huán)語(yǔ)句的執(zhí)行過(guò)程是:循環(huán)變量從遍歷結(jié)構(gòu)中取值,如果能取到值,就執(zhí)行循環(huán)體語(yǔ)句塊,然后再返回遍歷結(jié)構(gòu)取值,如果能取到值,再次執(zhí)行循環(huán)體語(yǔ)句塊,直至遍歷結(jié)構(gòu)中的數(shù)據(jù)取完為止。遍歷結(jié)構(gòu)是指包含多個(gè)數(shù)據(jù)元素的復(fù)合數(shù)據(jù)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for循環(huán)程序示例從鍵盤(pán)輸入若干個(gè)以正整數(shù)表示的考試成績(jī),計(jì)算總成績(jī)和平均成績(jī)并輸出。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句中的range()函數(shù)range()函數(shù)的一般格式如下:range(start,end,step)功能:生成若干個(gè)整數(shù)值,初始數(shù)值為start,結(jié)束數(shù)值為end-1或end+1(注意,不包括end),步長(zhǎng)為step。當(dāng)步長(zhǎng)step為正數(shù)時(shí),結(jié)束數(shù)值為end-1;當(dāng)步長(zhǎng)step為負(fù)數(shù)時(shí),結(jié)束數(shù)值為end+1。其中,start和step都可以省略,省略時(shí)默認(rèn)值分別為0和1。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while循環(huán)語(yǔ)句while循環(huán)語(yǔ)句的語(yǔ)法格式為:
while表達(dá)式:語(yǔ)句塊
while語(yǔ)句的執(zhí)行過(guò)程是:先計(jì)算表達(dá)式的值,若表達(dá)式的值為T(mén)rue,則執(zhí)行循環(huán)體語(yǔ)句塊;然后再次計(jì)算表達(dá)式的值,若結(jié)果仍為T(mén)rue,再次執(zhí)行循環(huán)體語(yǔ)句塊;如此繼續(xù)下去,直至表達(dá)式的值變?yōu)镕alse,則結(jié)束while循環(huán)語(yǔ)句的執(zhí)行。
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while循環(huán)程序示例從鍵盤(pán)上輸入若干個(gè)以正整數(shù)表示的考試成績(jī),計(jì)算總成績(jī)和平均成績(jī)并輸出。與前面示例不同的是,不知道成績(jī)的個(gè)數(shù),用輸入-1作為結(jié)束。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)帶else的循環(huán)語(yǔ)句帶else的for循環(huán)語(yǔ)句和while循環(huán)語(yǔ)句格式如下:
for循環(huán)變量in遍歷結(jié)構(gòu):while表達(dá)式:語(yǔ)句塊1語(yǔ)句塊1else:else:語(yǔ)句塊2語(yǔ)句塊2執(zhí)行過(guò)程:當(dāng)循環(huán)語(yǔ)句正常結(jié)束時(shí),執(zhí)行else對(duì)應(yīng)的語(yǔ)句塊;當(dāng)循環(huán)語(yǔ)句提前結(jié)束時(shí),不執(zhí)行else對(duì)應(yīng)的語(yǔ)句塊。帶else的循環(huán)語(yǔ)句一般要和break語(yǔ)句配合使用。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)break語(yǔ)句break語(yǔ)句的語(yǔ)法格式如下:breakbreak語(yǔ)句用于循環(huán)結(jié)構(gòu)中,其功能是提前結(jié)束整個(gè)循環(huán),轉(zhuǎn)去執(zhí)行循環(huán)結(jié)構(gòu)后面的語(yǔ)句。continue語(yǔ)句continue語(yǔ)句的語(yǔ)法格式如下:continuecontinue語(yǔ)句也是用于循環(huán)結(jié)構(gòu)中,其功能是提前結(jié)束本次循環(huán),轉(zhuǎn)回到循環(huán)的開(kāi)始判斷是否執(zhí)行下一次循環(huán)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)帶break語(yǔ)句的循環(huán)程序示例從鍵盤(pán)上輸入一個(gè)大于1的正整數(shù),判斷其是否為素?cái)?shù)。帶else的for語(yǔ)句和break配合使用,使程序更為簡(jiǎn)潔、邏輯清晰。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Python程序?qū)嵗龔逆I盤(pán)輸入一個(gè)字符串,把字符串中的數(shù)字字符分離出來(lái)并組成一個(gè)整數(shù),再乘以數(shù)字字符的個(gè)數(shù)后輸出,如果輸入“a23TY78hy”,則輸出數(shù)值9512(2378乘以4)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Python程序?qū)嵗页?00~999中的所有水仙花數(shù),所謂水仙花數(shù)是指該數(shù)的各位數(shù)字的立方和等于該數(shù)本身,如153=13+53+33。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Python程序?qū)嵗旅娴某绦虍?huà)出圓形螺旋線。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Python程序?qū)嵗旅娴某绦虍?huà)出正方形螺旋線。需要說(shuō)明的是,正方形圖不是若干個(gè)正方形套在一起,而是一條線畫(huà)出來(lái)的。算法與程序設(shè)計(jì)算法的作用;算法的特性;算法的評(píng)價(jià)標(biāo)準(zhǔn)/03算法的作用用計(jì)算機(jī)解決問(wèn)題的幾個(gè)主要階段分析問(wèn)題、設(shè)計(jì)算法:認(rèn)真分析要解決的問(wèn)題及要實(shí)現(xiàn)的功能,給出解決問(wèn)題的明確步驟,即設(shè)計(jì)出針對(duì)要解決問(wèn)題的算法。選定語(yǔ)言、編寫(xiě)程序:根據(jù)問(wèn)題的性質(zhì),選定一種合適的程序設(shè)計(jì)語(yǔ)言(及相應(yīng)的開(kāi)發(fā)環(huán)境),依據(jù)算法編寫(xiě)源程序。執(zhí)行程序:對(duì)編寫(xiě)出的源程序進(jìn)行編譯執(zhí)行或解釋執(zhí)行,程序中如果沒(méi)有語(yǔ)法錯(cuò)誤,則會(huì)完成編譯或解釋并執(zhí)行程序,如果程序中存在語(yǔ)法錯(cuò)誤,則編譯器或解釋器會(huì)給出提示信息,包括錯(cuò)誤的位置及錯(cuò)誤的性質(zhì)等,可根據(jù)提示信息找到錯(cuò)誤并且改正。算法的作用用計(jì)算機(jī)解決問(wèn)題的幾個(gè)主要階段程序調(diào)試測(cè)試:沒(méi)有語(yǔ)法錯(cuò)誤,并不能說(shuō)明程序完全無(wú)錯(cuò),可能還存在語(yǔ)義(邏輯)錯(cuò)誤。程序通過(guò)編譯或解釋后,要選用一些有代表性的數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試,經(jīng)過(guò)一定的測(cè)試,如果沒(méi)有發(fā)現(xiàn)錯(cuò)誤,程序就可以交付使用了。如果在測(cè)試中發(fā)現(xiàn)錯(cuò)誤,就要分析錯(cuò)誤的性質(zhì),根據(jù)錯(cuò)誤的性質(zhì)修改算法或修改程序(程序排錯(cuò)),對(duì)于較大規(guī)模的程序,程序排錯(cuò)是一項(xiàng)困難的工作,既需要經(jīng)驗(yàn),也需要一定的方法和工具支持。初學(xué)編程者感覺(jué)難點(diǎn)在于語(yǔ)言基本要素和語(yǔ)法規(guī)則的掌握,而實(shí)際上編寫(xiě)高質(zhì)量、高性能程序的難點(diǎn)是良好的算法設(shè)計(jì),相對(duì)于算法設(shè)計(jì),編寫(xiě)程序是比較簡(jiǎn)單的。算法的作用算法與程序設(shè)計(jì)示例(從鍵盤(pán)輸入40個(gè)數(shù),找出其中的最大值并輸出)。思路1:通過(guò)鍵盤(pán)輸入40個(gè)數(shù)并分別存入40個(gè)變量a1、a2、a3、……、a40中,之后首先找出變量a1、a2中的較大者存入maxi,然后把變量maxi的值依次與變量a3、a4、a40中的值比較,如果maxi中的值小,則替換maxi的值,最后保留在maxi中的值就是40個(gè)數(shù)中的最大值。按思路1把程序代碼完整寫(xiě)出來(lái),一共會(huì)有121行代碼。這才有40個(gè)數(shù)據(jù),如果是400個(gè)數(shù)據(jù)、4000個(gè)數(shù)據(jù),更多的數(shù)據(jù)呢?很顯然,用這種思路編寫(xiě)程序不是一個(gè)好方法,即這種找最大值的算法不好。算法的作用算法與程序設(shè)計(jì)示例(從鍵盤(pán)輸入40個(gè)數(shù),找出其中的最大值并輸出)?;谒悸?的程序代碼算法的作用算法與程序設(shè)計(jì)示例(從鍵盤(pán)輸入40個(gè)數(shù),找出其中的最大值并輸出)。思路2:假定第1個(gè)數(shù)就是最大值,存入maxi變量;然后第2個(gè)數(shù)和maxi中的值進(jìn)行比較,如果第2個(gè)數(shù)大,則用其替換掉maxi中的值,否則保持maxi中的值不變;這樣第3個(gè)數(shù),第4個(gè)數(shù),……,第40個(gè)數(shù),一直比較下去,maxi中總是保存比較過(guò)的數(shù)的最大值。按思路2編寫(xiě)的程序只有6行代碼,而且,即使有400個(gè)數(shù)據(jù)、4000個(gè)數(shù)據(jù),或更多的數(shù)據(jù),用這6行代碼同樣能夠把其中的最大值找出來(lái)。算法的作用算法設(shè)計(jì)與程序設(shè)計(jì)示例(從鍵盤(pán)輸入40個(gè)數(shù),找出其中的最大值并輸出)。按思路2編寫(xiě)的程序代碼。好的算法對(duì)于高效率編寫(xiě)高質(zhì)量程序是多么的重要。實(shí)際上,包括人臉識(shí)別、機(jī)器翻譯、智能問(wèn)答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計(jì)算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、巧妙的算法設(shè)計(jì)。
算法的特性算法的定義算法(algorithm)就是為解決一個(gè)問(wèn)題而采取的方法和步驟。程序(program)是指為讓計(jì)算機(jī)完成特定的任務(wù)而設(shè)計(jì)的指令序列或語(yǔ)句序列,一般認(rèn)為機(jī)器語(yǔ)言程序或匯編語(yǔ)言源程序由指令序列構(gòu)成,而高級(jí)語(yǔ)言源程序由語(yǔ)句序列構(gòu)成。程序設(shè)計(jì)(programming)是用來(lái)溝通算法與計(jì)算機(jī)的橋梁;程序是程序設(shè)計(jì)人員編寫(xiě)的、計(jì)算機(jī)能夠理解并執(zhí)行的指令序列或語(yǔ)句序列,程序是解決問(wèn)題的算法在計(jì)算機(jī)中的具體實(shí)現(xiàn)。算法的特性算法的特性有窮性:一個(gè)算法必須總是在執(zhí)行有限個(gè)操作步驟和可以接受的時(shí)間內(nèi)完成其執(zhí)行過(guò)程。即對(duì)于一個(gè)算法,要求其在時(shí)間和空間上均是有窮的。確定性:算法中的每一步都必須有明確的含義,不允許存在二義性??尚行裕核惴ㄖ忻枋龅拿恳徊讲僮鞫紤?yīng)該能有效地執(zhí)行,并最終得到確定的結(jié)果。輸入及輸出:一個(gè)算法應(yīng)該有零個(gè)或多個(gè)輸入數(shù)據(jù),有一個(gè)或多個(gè)輸出數(shù)據(jù)。執(zhí)行算法的目的是為了求解,而“解”就是輸出,因此沒(méi)有輸出的算法是沒(méi)有意義的。從這個(gè)簡(jiǎn)單的例子可以看出,好的算法對(duì)于高效率編寫(xiě)高質(zhì)量程序是多么的重要。實(shí)際上,包括人臉識(shí)別、機(jī)器翻譯、智能問(wèn)答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計(jì)算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、精巧的算法設(shè)計(jì) 算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的正確性算法的正確性是指算法能夠正確地求解所要解決的問(wèn)題,就目前的研究來(lái)看,要想通過(guò)理論方式證明一個(gè)算法的正確性是非常復(fù)雜和困難的,一般采用測(cè)試的方法,基于算法編寫(xiě)程序,然后對(duì)程序進(jìn)行測(cè)試。針對(duì)所要解決的問(wèn)題,選定一些有代表性的輸入數(shù)據(jù),經(jīng)程序執(zhí)行后,查看輸出結(jié)果是否和預(yù)期結(jié)果一致,如果不一致,則說(shuō)明程序中存在錯(cuò)誤,應(yīng)予以查找并改正。經(jīng)過(guò)一定范圍的測(cè)試和程序修改,不再發(fā)現(xiàn)新的錯(cuò)誤,程序可以交付使用,在使用過(guò)程中仍有可能發(fā)現(xiàn)錯(cuò)誤,再繼續(xù)修改,這時(shí)的修改稱為程序維護(hù)。從這個(gè)簡(jiǎn)單的例子可以看出,好的算法對(duì)于高效率編寫(xiě)高質(zhì)量程序是多么的重要。實(shí)際上,包括人臉識(shí)別、機(jī)器翻譯、智能問(wèn)答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計(jì)算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、精巧的算法設(shè)計(jì) 算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的正確性程序測(cè)試示例:從鍵盤(pán)輸入兩個(gè)自然數(shù)并分別賦值給n1和n2(n1<n2),輸出n1~n2之間的所有偶數(shù)。測(cè)試此程序時(shí),如果給n1、n2分別輸入1和9,則會(huì)輸出4個(gè)偶數(shù):2、4、6、8,結(jié)果是正確的,如果據(jù)此就認(rèn)定程序正確,是不行的。實(shí)際上,如果給n1、n2分別輸入1和10,輸出結(jié)果仍然是4個(gè)偶數(shù):2、4、6、8,這個(gè)結(jié)果是不正確的,原因在于range(n1,n2)中的n2應(yīng)為n2+1,因?yàn)閞ange(n1,n2+1)的取值范圍才是n1~n2,而range(n1,n2)的取值范圍是n1~n2-1,顯然不符合題目要求。算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的時(shí)間復(fù)雜度算法的時(shí)間復(fù)雜度是指依據(jù)算法編寫(xiě)出程序后,在計(jì)算機(jī)上運(yùn)行時(shí)所耗費(fèi)的時(shí)間度量。一個(gè)程序在計(jì)算機(jī)上運(yùn)行的時(shí)間取決于程序運(yùn)行時(shí)輸入的數(shù)據(jù)量、對(duì)源程序編譯所需要的時(shí)間、執(zhí)行每條語(yǔ)句所需要的時(shí)間以及語(yǔ)句重復(fù)執(zhí)行的次數(shù)。其中,最重要的是語(yǔ)句重復(fù)執(zhí)行的次數(shù)。通常,把整個(gè)程序中語(yǔ)句的重復(fù)執(zhí)行次數(shù)之和作為該程序的時(shí)間復(fù)雜度,記為T(mén)(n),其中n為問(wèn)題的規(guī)模。算法的時(shí)間復(fù)雜度T(n)實(shí)際上是表示當(dāng)問(wèn)題的規(guī)模n充分大時(shí),該程序運(yùn)行時(shí)間的一個(gè)數(shù)量級(jí)度量,用O表示。算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的時(shí)間復(fù)雜度示例百錢(qián)買(mǎi)百雞問(wèn)題:百錢(qián)買(mǎi)百雞問(wèn)題出自于我國(guó)古代數(shù)學(xué)史上的杰作《張丘建算經(jīng)》,張丘建是我國(guó)南北朝時(shí)期北魏數(shù)學(xué)家,書(shū)中對(duì)百錢(qián)買(mǎi)百雞問(wèn)題的描述是:“今有雞翁一,值錢(qián)五;雞母一,值錢(qián)三;雞雛三,值錢(qián)一。凡百錢(qián)買(mǎi)雞百只,問(wèn)雞翁、母、雛各幾何?”算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的時(shí)間復(fù)雜度示例這個(gè)程序總的循環(huán)次數(shù)是100萬(wàn)次(即100×100×100次),即需要驗(yàn)證100萬(wàn)種可能的組合,時(shí)間復(fù)雜度為O(n3)。改寫(xiě)后程序的循環(huán)次數(shù)為660次,時(shí)間復(fù)雜度降低為O(n2)。算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的空間復(fù)雜度算法的空間復(fù)雜度是指依據(jù)算法編寫(xiě)出程序后,在計(jì)算機(jī)上運(yùn)行時(shí)所需內(nèi)存空間大小的度量,也是和問(wèn)題規(guī)模n有關(guān)的度量。算法的可理解性算法主要是為了人們的閱讀與交流,可理解性好的算法有利于人們的正確理解,有利于程序員據(jù)此編寫(xiě)出正確的、易于理解的程序。為增強(qiáng)程序的可理解性,要注重培養(yǎng)良好的編程風(fēng)格。數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)概念和術(shù)語(yǔ);線性結(jié)構(gòu);樹(shù)形結(jié)構(gòu);圖狀結(jié)構(gòu)/04數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的作用程序要處理的數(shù)據(jù)需要存儲(chǔ)在內(nèi)存單元中,整個(gè)內(nèi)存空間是由連續(xù)編址的一個(gè)個(gè)內(nèi)存單元組成的,多么復(fù)雜的數(shù)據(jù)也只能存放在這樣的一個(gè)一維空間內(nèi),這是數(shù)據(jù)存儲(chǔ)的物理結(jié)構(gòu)。對(duì)于矩陣、家族關(guān)系表、交通運(yùn)輸網(wǎng)這樣的數(shù)據(jù),如果編程人員直接使用數(shù)據(jù)存儲(chǔ)的物理結(jié)構(gòu),會(huì)大大增加編程的難度和工作量。能否找到一種機(jī)制,使得數(shù)據(jù)的內(nèi)部存儲(chǔ)結(jié)構(gòu)(物理結(jié)構(gòu))是線性連續(xù)的,而其邏輯結(jié)構(gòu)更符合人們習(xí)慣的方式,編寫(xiě)程序時(shí)面對(duì)的是邏輯結(jié)構(gòu),程序執(zhí)行時(shí),由支持相應(yīng)結(jié)構(gòu)的編譯程序自動(dòng)把邏輯結(jié)構(gòu)映射成物理結(jié)構(gòu),從而簡(jiǎn)化程序的編寫(xiě),減輕編程人員的工作量。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的概念和術(shù)語(yǔ)數(shù)據(jù)是信息的載體,它能夠被計(jì)算機(jī)識(shí)別、存儲(chǔ)和加工處理。計(jì)算機(jī)科學(xué)中,所謂數(shù)據(jù)就是計(jì)算機(jī)加工處理的對(duì)象,它可以是數(shù)值數(shù)據(jù),也可以是非數(shù)值數(shù)據(jù),如圖像、聲音、文本等。數(shù)據(jù)項(xiàng)是數(shù)據(jù)不可分割的最小單位。數(shù)據(jù)項(xiàng)有名和值之分,數(shù)據(jù)項(xiàng)名是數(shù)據(jù)項(xiàng)的標(biāo)識(shí),用變量定義,而數(shù)據(jù)項(xiàng)值是它的一個(gè)可能取值。年齡就是一個(gè)數(shù)據(jù)項(xiàng),在Python中可以定義為變量age,其取值可以是19、20等。數(shù)據(jù)元素是數(shù)據(jù)的基本單位,具有完整、確定的實(shí)際意義。數(shù)據(jù)元素一般由若干數(shù)據(jù)項(xiàng)組成。學(xué)生的基本情況就是一個(gè)數(shù)據(jù)元素,由學(xué)號(hào)、姓名、性別、年齡等數(shù)據(jù)項(xiàng)組成。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的概念和術(shù)語(yǔ)數(shù)據(jù)對(duì)象或稱數(shù)據(jù)元素類,是具有相同性質(zhì)的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。在某個(gè)具體問(wèn)題中,數(shù)據(jù)元素都具有相同的性質(zhì),屬于同一數(shù)據(jù)對(duì)象,數(shù)據(jù)元素是數(shù)據(jù)元素類的一個(gè)實(shí)例。對(duì)于一個(gè)學(xué)生管理系統(tǒng)來(lái)說(shuō),某大學(xué)所有學(xué)生的基本情況就是數(shù)據(jù),所有本科生的基本情況、所有碩士研究生的基本情況可以看作是不同的數(shù)據(jù)對(duì)象。數(shù)據(jù)結(jié)構(gòu)(datastructure)指互相之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合。在任何問(wèn)題中,數(shù)據(jù)元素都不是孤立的,它們之間存在著這樣或那樣的關(guān)系(聯(lián)系),這種數(shù)據(jù)元素之間的關(guān)系稱為結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)概述三種基本數(shù)據(jù)結(jié)構(gòu)線性結(jié)構(gòu):數(shù)據(jù)元素之間存在著一對(duì)一的關(guān)系,如線性表、棧、隊(duì)列和數(shù)組等。按學(xué)號(hào)排列的學(xué)生數(shù)據(jù)可以看作是一個(gè)線性表,每個(gè)學(xué)生有且只有一個(gè)前驅(qū)(第一個(gè)學(xué)生除外)、有且只有一個(gè)后繼(最后一個(gè)學(xué)生除外)。樹(shù)形結(jié)構(gòu):數(shù)據(jù)元素之間存在著一對(duì)多的關(guān)系,如樹(shù)、二叉樹(shù)等。一個(gè)單位的工作人員之間的關(guān)系就可以表示成一棵樹(shù),每個(gè)人有一個(gè)直接領(lǐng)導(dǎo)(單位的最高領(lǐng)導(dǎo)除外)和多個(gè)直接下屬(最基層的工作人員除外)。數(shù)據(jù)結(jié)構(gòu)概述三種基本數(shù)據(jù)結(jié)構(gòu)圖狀結(jié)構(gòu):數(shù)據(jù)元素之間存在著多對(duì)多的關(guān)系,圖狀結(jié)構(gòu)也稱網(wǎng)狀結(jié)構(gòu),如無(wú)向圖和有向圖等。鐵路交通圖是一種典型的圖狀結(jié)構(gòu),任意兩個(gè)城市之間可能存在多條路徑連通。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)的物理結(jié)構(gòu)與邏輯結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)描述的是數(shù)據(jù)元素之間的邏輯關(guān)系(如矩陣、樹(shù)、圖等)。數(shù)據(jù)在計(jì)算機(jī)中的表示稱為數(shù)據(jù)的物理結(jié)構(gòu)或存儲(chǔ)結(jié)構(gòu),它研究數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的實(shí)現(xiàn)方法,包括數(shù)據(jù)元素的表示及元素間關(guān)系的表示。數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)可采用順序存儲(chǔ)或鏈?zhǔn)酱鎯?chǔ)的方法。順序存儲(chǔ)是把邏輯上相鄰的元素存儲(chǔ)在物理位置也相鄰的存儲(chǔ)單元中,由此得到順序存儲(chǔ)結(jié)構(gòu),常借助于編程語(yǔ)言中的數(shù)組或列表等來(lái)實(shí)現(xiàn)。鏈?zhǔn)酱鎯?chǔ)對(duì)邏輯上相鄰的元素不要求其物理位置相鄰,元素間的邏輯關(guān)系通過(guò)附設(shè)的指針字段來(lái)表示,由此得到鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)通常借助于編程語(yǔ)言中的指針來(lái)實(shí)現(xiàn)。線性結(jié)構(gòu)
線性結(jié)構(gòu)是最常用、最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),包括線性表、隊(duì)列、棧等,C語(yǔ)言中的數(shù)組、Python語(yǔ)言中的列表和元組都是線性結(jié)構(gòu)。線性表、隊(duì)列、??梢杂脭?shù)組或列表來(lái)實(shí)現(xiàn),本節(jié)以Python語(yǔ)言中的列表為例介紹線性結(jié)構(gòu)的使用。列表(list)是包含0個(gè)或多個(gè)數(shù)據(jù)的有序序列,其中的每個(gè)數(shù)據(jù)稱為元素,列表的元素個(gè)數(shù)(列表長(zhǎng)度)和元素內(nèi)容都是可以改變的。使用列表,能夠靈活方便地對(duì)批量數(shù)據(jù)進(jìn)行組織和處理。線性結(jié)構(gòu)創(chuàng)建列表創(chuàng)建列表的語(yǔ)法格式如下:列表名=[值1,值2,值3,…,值n]功能:把一組值放在一對(duì)方括號(hào)內(nèi)組織成列表值并賦值給一個(gè)列表變量。列表值可以有0個(gè)、1個(gè)或多個(gè),如果有多個(gè)列表值,值與值之間用逗號(hào)分隔。線性結(jié)構(gòu)訪問(wèn)列表訪問(wèn)列表中元素的語(yǔ)法格式如下:
列表名[索引值]列表是序列類型,其中的元素按所在的位置順序都有一個(gè)唯一的索引值(序號(hào)),通過(guò)這個(gè)索引值可以訪問(wèn)到指定的元素。Python為列表元素設(shè)置了兩套索引:從0開(kāi)始遞增索的正向引和從-1開(kāi)始遞減的逆向索引。線性結(jié)構(gòu)增加列表元素增加列表元素的語(yǔ)法格式如下:列表名.append(新增元素值)或
列表名.insert(索引值,新增元素值)其中,append()函數(shù)用于在列表的末尾追加元素,insert()函數(shù)用于在列表的指定位置插入元素。線性結(jié)構(gòu)刪除列表元素刪除列表元素的語(yǔ)法格式如下:列表名.remove(元素值)或
del列表名[索引值]其中,remove()函數(shù)用于從列表中刪除指定的值,若有多個(gè)值和指定值相同,只刪除第一個(gè)。del格式用于刪除和指定索引值對(duì)應(yīng)的列表元素值。線性結(jié)構(gòu)修改列表元素值修改列表元素值的語(yǔ)法格式如下:列表名[索引值]=新元素值通過(guò)賦值語(yǔ)句的形式,用新元素值替換指定位置的現(xiàn)有元素值。對(duì)于已創(chuàng)建列表,既可以修改某個(gè)指定索引值對(duì)應(yīng)的元素值,也可以修改指定索引值范圍內(nèi)的若干元素值。線性結(jié)構(gòu)修改列表元素值如果給定的新值個(gè)數(shù)多于指定范圍內(nèi)的元素值個(gè)數(shù)(如lst2[-1:]=["金融學(xué)","二班"]),則相當(dāng)于增加元素值。如果給定的新值個(gè)數(shù)少于指定范圍內(nèi)的元素值個(gè)數(shù)(如lst2[1:3]=[“張明”]),則相當(dāng)于刪除元素值。線性結(jié)構(gòu)常用列表操作線性結(jié)構(gòu)常用列表操作線性結(jié)構(gòu)列表應(yīng)用示例統(tǒng)計(jì)一批數(shù)據(jù)中奇數(shù)的個(gè)數(shù)。線性結(jié)構(gòu)列表的元素還是列表(二維列表)如果一個(gè)列表中的元素也是列表,其實(shí)表示的是二維表或二維數(shù)組。在Python語(yǔ)言中,可以用元素為列表的列表表示其他高級(jí)語(yǔ)言中的二維數(shù)組。對(duì)于下圖所示的二維表數(shù)據(jù),可以定義為如下列表:data_lst=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]線性結(jié)構(gòu)二維列表應(yīng)用示例輸出楊輝三角前n行的數(shù)據(jù),n的值由用戶輸入。問(wèn)題分析6行的楊輝三角數(shù)據(jù)如上圖(a)所示,為了便于描述,給出上圖(b)的形式。從圖(b)可以看出,各行數(shù)據(jù)的共同特點(diǎn)是:第1列和最后一列的值全為1,從第3行開(kāi)始,其他位置的值等于其左上方位置值和正上方位置值之和??梢园颜麄€(gè)楊輝三角的數(shù)據(jù)存入一個(gè)列表(yanghui_lst),其中的每個(gè)元素(代表三角形中每行的數(shù)據(jù))也是一個(gè)列表(row_lst)。第1、2行的數(shù)據(jù)可以直接賦值,從第3行開(kāi)始,逐個(gè)生成數(shù)據(jù)存入行列表row_lst,再將行列表作為元素值存入三角形列表yanghui_lst中。線性結(jié)構(gòu)二維列表應(yīng)用示例輸出楊輝三角前n行的數(shù)據(jù),n的值由用戶輸入。樹(shù)形結(jié)構(gòu)樹(shù)的定義樹(shù)(tree)是n(n≥0)個(gè)結(jié)點(diǎn)的有限集合。
當(dāng)n=0時(shí),稱為空樹(shù)。在一棵非空樹(shù)T中:有且僅有一個(gè)特定的結(jié)點(diǎn)稱為樹(shù)的根結(jié)點(diǎn);當(dāng)n>1時(shí),除根結(jié)點(diǎn)之外的其余結(jié)點(diǎn)被分成m(m≥1)個(gè)互不相交的集合T1,T2,…,Tm,其中每一個(gè)集合Ti(1≤i≤m)本身又是一棵樹(shù),并且稱為根結(jié)點(diǎn)的子樹(shù)。樹(shù)中的一個(gè)結(jié)點(diǎn)可以看作是一個(gè)數(shù)據(jù)元素。樹(shù)形結(jié)構(gòu)可以定義為Python中的字典。樹(shù)形結(jié)構(gòu)創(chuàng)建字典創(chuàng)建字典的語(yǔ)法格式如下:
字典名={鍵1:值1,鍵2:值2,鍵3:值3,…,鍵n:值n}功能:字典也是由若干個(gè)元素組成,由一對(duì)大括號(hào)括起來(lái),每個(gè)元素是一個(gè)“鍵:值”對(duì)的形式,“鍵:值”對(duì)之間用逗號(hào)分開(kāi)。如果有多個(gè)“鍵”相同的“鍵:值”對(duì),只保留最后一個(gè)。樹(shù)形結(jié)構(gòu)訪問(wèn)字典訪問(wèn)字典的語(yǔ)法格式如下:字典名[鍵]功能:字典中的元素沒(méi)有對(duì)應(yīng)的索引值,元素的存儲(chǔ)順序可能與創(chuàng)建字典時(shí)的書(shū)寫(xiě)順序不一致。對(duì)字典的訪問(wèn)是根據(jù)“鍵”來(lái)找對(duì)應(yīng)的“值”。樹(shù)形結(jié)構(gòu)對(duì)字典的操作樹(shù)形結(jié)構(gòu)更新字典更新字典的語(yǔ)法格式如下:字典名[鍵]=值使用賦值語(yǔ)句可以增加元素或修改現(xiàn)有元素的值。如果在字典中沒(méi)有找到指定的“鍵”,則在字典中增加一個(gè)“鍵:值”對(duì),如果找到,則用指定的“值”替換現(xiàn)有值。該語(yǔ)句既能增加元素,又能修改元素值。使用此功能要仔細(xì),否則,本來(lái)要進(jìn)行修改操作,由于“鍵”沒(méi)寫(xiě)對(duì),實(shí)際是完成了增加元素的功能。樹(shù)形結(jié)構(gòu)字典合并字典合并的語(yǔ)法格式如下:字典名1.update(字典名2)如果兩個(gè)字典的“鍵”沒(méi)有相同的,則把字典2的“鍵:值”對(duì)添加到字典1中(實(shí)現(xiàn)兩個(gè)字典的合并),如果有相同的,用字典2中的值修改字典1中相同“鍵”的對(duì)應(yīng)“值”。樹(shù)形結(jié)構(gòu)刪除字典元素或字典語(yǔ)法格式如下:
del字典名[鍵]如果在字典中找到指定的“鍵”,則刪除“鍵”和對(duì)應(yīng)的“值”,如果沒(méi)有找到指定的“鍵”,則會(huì)報(bào)錯(cuò)。如果只有字典名,則刪除整個(gè)字典。還可以使用pop()函數(shù)刪除字典元素,語(yǔ)法格式如下:
字典名.pop(鍵,值)如果字典中存在指定的“鍵”,則返回對(duì)應(yīng)的“值”,同時(shí)刪除該“鍵:值”對(duì),如果指定的“鍵”不存在,返回函數(shù)中給出的“值”。樹(shù)形結(jié)構(gòu)字典應(yīng)用示例基于字典實(shí)現(xiàn)學(xué)生信息管理:可以把學(xué)生信息組織成一個(gè)字典,以學(xué)號(hào)為“鍵”,其他信息為“值”,但這個(gè)“值”又是一個(gè)字典,可以實(shí)現(xiàn)查找、統(tǒng)計(jì)、修改等功能,如下程序?qū)崿F(xiàn)了根據(jù)輸入查找某個(gè)專業(yè)的學(xué)生信息的功能。樹(shù)形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫(xiě)程序?qū)崿F(xiàn)某部門(mén)上下級(jí)部門(mén)的查找。樹(shù)形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫(xiě)程序?qū)崿F(xiàn)某部門(mén)上下級(jí)部門(mén)的查找。把樹(shù)形結(jié)構(gòu)的內(nèi)部機(jī)構(gòu)設(shè)置定義為字典樹(shù)形結(jié)構(gòu)字典應(yīng)用示例定義函數(shù),用于在字典dic中查找結(jié)點(diǎn)node的上、下層結(jié)點(diǎn)。樹(shù)形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫(xiě)程序?qū)崿F(xiàn)某部門(mén)上下級(jí)部門(mén)的查找。在主程序中調(diào)用函數(shù),實(shí)現(xiàn)查找功能。執(zhí)行程序的輸出結(jié)果如下:圖狀結(jié)構(gòu)圖的定義和術(shù)語(yǔ)圖是由非空的頂點(diǎn)集合和邊的集合組成的。對(duì)于左下圖,其頂點(diǎn)集合V={v1,v2,v3,v4,v5},邊的集合E={(v1,v2),(v1,v4),(v2,v3),(v2,v5),(v3,v4),(v3,v5),(v4,v5)}在一個(gè)圖中,如果頂點(diǎn)之間的連線(邊)是無(wú)向的,稱該圖為無(wú)向圖(左下圖);如果頂點(diǎn)之間的連線是有向的,稱該圖為有向圖(右下圖)。圖狀結(jié)構(gòu)圖的存儲(chǔ)結(jié)構(gòu)對(duì)于下面的無(wú)向圖,可以存儲(chǔ)為鄰接矩陣,由于(v1,v2)有連線,對(duì)應(yīng)元素值為1,由于(v1,v3)沒(méi)有連線,對(duì)應(yīng)元素為0。由于是無(wú)向圖,其鄰接矩陣是對(duì)稱的。鄰接矩陣可定義成Python中的如下列表:
g_lst1=[[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,1],[1,0,1,0,1],[0,1,1,1,0]]圖狀結(jié)構(gòu)圖的存儲(chǔ)結(jié)構(gòu)對(duì)于下面的無(wú)向圖,也可以存儲(chǔ)為鄰接表。由于頂點(diǎn)v1和頂點(diǎn)v2(序號(hào)為1)、v4(序號(hào)為3)有連線,所以有鄰接表中的,其余類似。鄰接表可定義成Python中的如下列表:
g_lst2=[['V1','V2','V4'],['V2','V3','V5'],['V3','V4','V5'],['V4','V5']]
編譯原理與程序設(shè)計(jì)編譯程序概述;詞法分析;語(yǔ)法分析;中間代碼生成;中間代碼優(yōu)化;編譯程序的開(kāi)發(fā)/05編譯程序概述執(zhí)行高級(jí)語(yǔ)言源程序的步驟通過(guò)編譯程序(compiler)把源程序翻譯成機(jī)器語(yǔ)言程序(目標(biāo)程序)。執(zhí)行目標(biāo)程序。編譯程序的組成一個(gè)編譯程序一般包括詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、中間代碼優(yōu)化和目標(biāo)代碼生成等工作。編譯程序的構(gòu)成詞法分析詞法分析的任務(wù)是從左至右逐個(gè)字符地對(duì)源程序進(jìn)行掃描,進(jìn)行詞法檢查并識(shí)別出一個(gè)個(gè)單詞,并以機(jī)內(nèi)符的形式表示單詞序列,用機(jī)內(nèi)符的形式表示單詞是為了便于后續(xù)工作的完成。詞法分析還要完成其他一些相關(guān)任務(wù),如過(guò)濾掉源程序中的注釋和空白,發(fā)現(xiàn)詞法錯(cuò)誤,指出錯(cuò)誤的位置和錯(cuò)誤性質(zhì)等。編譯程序的構(gòu)成語(yǔ)法分析其任務(wù)是確認(rèn)作為詞法分析結(jié)果的單詞序列是否為給定語(yǔ)言的一個(gè)正確程序。在語(yǔ)法分析中,給定語(yǔ)言用文法表示,如果給定的程序(此時(shí)看作單詞串或機(jī)內(nèi)符串)能夠與該文法相匹配,則認(rèn)為程序是正確的,否則程序是錯(cuò)誤的。單詞序列與給定文法匹配的方式有兩種:自頂向下分析法和自底向上分析法。自頂向下分析法是從文法的開(kāi)始符出發(fā)試圖推導(dǎo)出給定的單詞串,如果能夠推導(dǎo)出,則說(shuō)明單詞串是語(yǔ)法正確的程序,否則是錯(cuò)誤的程序。自底向上分析方法是從給定的單詞串開(kāi)始,試圖歸約(推導(dǎo)的逆操作)為文法的開(kāi)始符,如果能歸約到文法開(kāi)始符,則確認(rèn)單詞串是正確的程序,否則是錯(cuò)誤的程序。編譯程序的構(gòu)成語(yǔ)義分析語(yǔ)義的任務(wù)是審查每個(gè)語(yǔ)法結(jié)構(gòu)的靜態(tài)語(yǔ)義,即驗(yàn)證語(yǔ)法結(jié)構(gòu)合法的程序是否真正有意義,有時(shí)把這個(gè)工作稱為靜態(tài)語(yǔ)義分析或靜態(tài)審查。編譯程序的構(gòu)成中間代碼生成中間代碼是復(fù)雜性介于源程序語(yǔ)言和機(jī)器語(yǔ)言之間的一種表示形式。為了使編譯程序結(jié)構(gòu)在邏輯上更為簡(jiǎn)單明確,常采用中間代碼,這樣可以將與機(jī)器相關(guān)的某些實(shí)現(xiàn)細(xì)節(jié)置于代碼生成階段仔細(xì)處理,并且可以在中間代碼一級(jí)進(jìn)行計(jì)算和優(yōu)化工作,使得計(jì)算和代碼優(yōu)化比較容易實(shí)現(xiàn)。
表達(dá)式a+b*c的中間代碼(逆波蘭式)為abc*+采用逆波蘭式形式表示表達(dá)式,可以簡(jiǎn)化表達(dá)式的計(jì)算,在從左至右的掃描中,遇到運(yùn)算符就可以計(jì)算,運(yùn)算對(duì)象在該運(yùn)算符的左邊。而在一般表達(dá)式中,遇到運(yùn)算符,需要先比較和其他運(yùn)算符的優(yōu)先級(jí)別,然后才能決定是否進(jìn)行計(jì)算,對(duì)計(jì)算機(jī)來(lái)講處理難度比較大,效率比較低。
編譯程序的構(gòu)成中間代碼優(yōu)化中間代碼優(yōu)化的任務(wù)是對(duì)中間代碼進(jìn)行等價(jià)變換,使得變換后的代碼運(yùn)行結(jié)果與變換前代碼運(yùn)行結(jié)果相同,而運(yùn)行速度提高或存儲(chǔ)空間減少。常用的優(yōu)化技術(shù)有刪除多余運(yùn)算、代碼外提、強(qiáng)度削弱、變換循環(huán)控制條件、合并已知量與復(fù)寫(xiě)傳播和刪除無(wú)用賦值等。
編譯程序的構(gòu)成目標(biāo)代碼生成目標(biāo)代碼生成是把經(jīng)過(guò)優(yōu)化后的中間代碼作為輸入,將其轉(zhuǎn)換成特定機(jī)器的機(jī)器語(yǔ)言程序或匯編語(yǔ)言程序作為輸出,這樣的轉(zhuǎn)換程序稱為代碼生成器。代碼生成器的構(gòu)造與輸入的中間代碼形式和輸出的目標(biāo)代碼的機(jī)器結(jié)構(gòu)密切相關(guān)。特別是高級(jí)語(yǔ)言的多樣性和計(jì)算機(jī)結(jié)構(gòu)的多樣性為代碼生成的理論研究和實(shí)現(xiàn)技術(shù)帶來(lái)很大的復(fù)雜性。編譯程序的開(kāi)發(fā)編譯程序是一種相當(dāng)復(fù)雜的系統(tǒng)軟件,通常包含數(shù)萬(wàn)行代碼,甚至數(shù)百萬(wàn)行、千萬(wàn)行代碼。隨著編譯技術(shù)的發(fā)展,編譯程序的生成周期也在逐漸縮短,但仍然需要很多人年的工作量,而且工作很艱巨,正確性也不易保證。計(jì)算機(jī)科學(xué)家們?yōu)榱藢?shí)現(xiàn)編譯程序的自動(dòng)生成做了大量的工作,已有詞法分析程序的自動(dòng)生成系統(tǒng)和語(yǔ)法分析程序的自動(dòng)生成系統(tǒng)。編譯程序自動(dòng)生成的關(guān)鍵是語(yǔ)義處理問(wèn)題,近年來(lái)形式語(yǔ)義學(xué)的研究取得了很大的進(jìn)展,大大推動(dòng)了編譯程序的自動(dòng)生成研究工作,已出現(xiàn)了一些編譯程序(或某個(gè)階段工作)的自動(dòng)生成系統(tǒng)。目前的主要問(wèn)題是時(shí)間效率、空間節(jié)省問(wèn)題。由自動(dòng)生成系統(tǒng)產(chǎn)生的編譯程序,比人工開(kāi)發(fā)的編譯程序占用更多的存儲(chǔ)空間,運(yùn)行效率也比較低。本章結(jié)束計(jì)算機(jī)導(dǎo)論袁方編著清華大學(xué)出版社出版《計(jì)算機(jī)導(dǎo)論(第5版)》配套課件計(jì)算機(jī)導(dǎo)論第7章軟件開(kāi)發(fā)知識(shí)目錄CONTENTS03數(shù)據(jù)庫(kù)的發(fā)展01計(jì)算機(jī)軟件概述02數(shù)據(jù)庫(kù)原理及應(yīng)用0405軟件工程軟件開(kāi)發(fā)過(guò)程計(jì)算機(jī)軟件概述系統(tǒng)軟件;應(yīng)用軟件/01計(jì)算機(jī)軟件的作用只有硬件的計(jì)算機(jī)是不能完成任何工作的,在硬件的基礎(chǔ)上,配置合適的軟件,才能充分發(fā)揮計(jì)算機(jī)的整體功能。
硬件是計(jì)算機(jī)的軀體,軟件是計(jì)算機(jī)的靈魂。
計(jì)算機(jī)專業(yè)人員的一項(xiàng)重要工作是開(kāi)發(fā)軟件,開(kāi)發(fā)軟件(特別是中大規(guī)模軟件)以程序設(shè)計(jì)能力為基礎(chǔ),以軟件工程知識(shí)作指導(dǎo),以數(shù)據(jù)庫(kù)知識(shí)為支撐。程序是完成一定功能的指令或語(yǔ)句的序列。軟件=程序+文檔。系統(tǒng)軟件系統(tǒng)軟件靠近硬件層,其功能主要是管理計(jì)算機(jī)軟硬件資源,與具體應(yīng)用領(lǐng)域無(wú)關(guān),為應(yīng)用軟件提供一些基本的、共同的功能支持。系統(tǒng)軟件并不能解決具體應(yīng)用問(wèn)題,但解決具體問(wèn)題的應(yīng)用軟件要在系統(tǒng)軟件的支持下才能開(kāi)發(fā)和運(yùn)行。系統(tǒng)軟件主要包括操作系統(tǒng)、語(yǔ)言翻譯程序和數(shù)據(jù)庫(kù)管理系統(tǒng)等。系統(tǒng)軟件操作系統(tǒng)能否充分發(fā)揮計(jì)算機(jī)硬件的性能,操作系統(tǒng)起著非常重要的作用;使用者能否方便地操作使用計(jì)算機(jī),操作系統(tǒng)同樣發(fā)揮著重要作用。從微型機(jī)到超級(jí)計(jì)算機(jī)都必須在其硬件平臺(tái)上加載相應(yīng)的操作系統(tǒng)之后,才能構(gòu)成一個(gè)完整的、功能強(qiáng)大的計(jì)算機(jī)系統(tǒng)。也只有在操作系統(tǒng)的支持下,其他系統(tǒng)軟件和各種應(yīng)用軟件才能開(kāi)發(fā)和運(yùn)行。操作系統(tǒng)(OS)可定義為:有效地組織和管理計(jì)算機(jī)系統(tǒng)中的硬件和軟件資源,合理地組織計(jì)算機(jī)工作流程,控制程序的執(zhí)行,并向用戶提供多種服務(wù)功能及友好界面,方便用戶使用計(jì)算機(jī)的系統(tǒng)軟件。目前,常用的操作系統(tǒng)是Windows、macOS、UNIX和Linux等。系統(tǒng)軟件語(yǔ)言翻譯程序程序設(shè)計(jì)語(yǔ)言大體經(jīng)歷了機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言三個(gè)階段。機(jī)器語(yǔ)言的優(yōu)點(diǎn):機(jī)器語(yǔ)言程序能夠直接在計(jì)算機(jī)上執(zhí)行。匯編語(yǔ)言和高級(jí)語(yǔ)言的出現(xiàn),給程序設(shè)計(jì)帶來(lái)了很大的方便。但是,用匯編語(yǔ)言或高級(jí)語(yǔ)言編寫(xiě)出的源程序,計(jì)算機(jī)并不能直接執(zhí)行,需要翻譯機(jī)器語(yǔ)言程序才能執(zhí)行。人們開(kāi)發(fā)了相應(yīng)的翻譯程序,用于匯編語(yǔ)言源程序的翻譯程序叫匯編程序,用于高級(jí)語(yǔ)言源程序的翻譯程序叫解釋程序或編譯程序。各種匯編程序和編譯程序/解釋程序都屬于系統(tǒng)軟件。目前常用的高級(jí)語(yǔ)言有Python、C、C++、C#和Java等。系統(tǒng)軟件數(shù)據(jù)庫(kù)管理系統(tǒng)計(jì)算機(jī)應(yīng)用面最廣的一個(gè)領(lǐng)域是信息管理,信息管理的關(guān)鍵技術(shù)是數(shù)據(jù)庫(kù)技術(shù),把信息存入數(shù)據(jù)庫(kù)中并編寫(xiě)相應(yīng)的數(shù)據(jù)庫(kù)應(yīng)用程序是開(kāi)發(fā)信息管理系統(tǒng)的主要工作。如果沒(méi)有數(shù)據(jù)庫(kù)管理系統(tǒng)提供支持環(huán)境,數(shù)據(jù)庫(kù)的建立及數(shù)據(jù)庫(kù)應(yīng)用程序的開(kāi)發(fā)是很困難的,甚至無(wú)法實(shí)現(xiàn)。數(shù)據(jù)庫(kù)管理系統(tǒng)是一個(gè)幫助人們建立數(shù)據(jù)庫(kù)和開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的系統(tǒng)軟件,有了這個(gè)系統(tǒng)軟件的支持,建立數(shù)據(jù)庫(kù)和開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序就容易了。目前常用的數(shù)據(jù)庫(kù)管理系統(tǒng)有Oracle公司的Oracle、MySQL,微軟公司的SQLServer、Access,IBM公司的DB2等。應(yīng)用軟件應(yīng)用軟件用于解決實(shí)際問(wèn)題,包括通用應(yīng)用軟件和專用應(yīng)用軟件通用應(yīng)用軟件:可以為多個(gè)行業(yè)和領(lǐng)域的人們使用,完成各自的任務(wù),如辦公軟件中的Excel就是一個(gè)通用的應(yīng)用軟件。專用應(yīng)用軟件:只供某個(gè)行業(yè)或某些人使用,如火車票售票軟件只能用于火車站、售票點(diǎn)或線上售賣(mài)火車票。應(yīng)用軟件包括軟件開(kāi)發(fā)環(huán)境、辦公軟件、輔助設(shè)計(jì)軟件、多媒體制作軟件、網(wǎng)頁(yè)制作軟件、網(wǎng)絡(luò)通信軟件、工具軟件和實(shí)際應(yīng)用軟件等。數(shù)據(jù)庫(kù)原理及應(yīng)用關(guān)系數(shù)據(jù)庫(kù);關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言;常用關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng);數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)工具;數(shù)據(jù)庫(kù)設(shè)計(jì)/02關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)相關(guān)概念數(shù)據(jù)庫(kù)(DB)是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲(chǔ),具有較低的數(shù)據(jù)冗余度、較高的數(shù)據(jù)獨(dú)立性,并且可以為多個(gè)用戶共享。數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是位于用戶和操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,主要完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)庫(kù)的運(yùn)行管理和數(shù)據(jù)庫(kù)的維護(hù)等功能。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)是以數(shù)據(jù)庫(kù)為核心的,在數(shù)據(jù)庫(kù)管理系統(tǒng)的支持下完成一定的數(shù)據(jù)存儲(chǔ)和管理功能的應(yīng)用軟件系統(tǒng),數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)也稱為數(shù)據(jù)庫(kù)系統(tǒng)(DBS)。關(guān)系數(shù)據(jù)庫(kù)應(yīng)用示例:針對(duì)大學(xué)生選課信息的存儲(chǔ)和管理,設(shè)計(jì)數(shù)據(jù)庫(kù)中的表。按傳統(tǒng)方式,我們可以把學(xué)生的選課信息放入下表所示的表格中。關(guān)系數(shù)據(jù)庫(kù)應(yīng)用示例:針對(duì)大學(xué)生選課信息的存儲(chǔ)和管理,設(shè)計(jì)數(shù)據(jù)庫(kù)中的表。傳統(tǒng)方式的不足如果按此表格結(jié)構(gòu)直接對(duì)應(yīng)成數(shù)據(jù)庫(kù)中的表,數(shù)據(jù)的冗余(數(shù)據(jù)重復(fù))比較大。每個(gè)學(xué)生的姓名、年齡、專業(yè),每門(mén)課程的課程名、學(xué)分都會(huì)在表中多次重復(fù)存放。數(shù)據(jù)冗余不僅浪費(fèi)存儲(chǔ)空間,更大的問(wèn)題是容易造成數(shù)據(jù)的不一致。例如,某個(gè)同學(xué)如果轉(zhuǎn)專業(yè)了,那么對(duì)應(yīng)的表中數(shù)據(jù)應(yīng)該修改,如果多次存儲(chǔ),就可能只修改部分值,導(dǎo)致該同學(xué)在表中的專業(yè)有兩個(gè)不同的值,這會(huì)給以后信息查詢等留下隱患。關(guān)系數(shù)據(jù)庫(kù)應(yīng)用示例:針對(duì)大學(xué)生選課信息的存儲(chǔ)和管理,設(shè)計(jì)數(shù)據(jù)庫(kù)中的表。遵循數(shù)據(jù)庫(kù)理論,可以把上面的一個(gè)表設(shè)計(jì)成表7.2~7.4的形式。關(guān)系數(shù)據(jù)庫(kù)應(yīng)用示例:針對(duì)大學(xué)生選課信息的存儲(chǔ)和管理,設(shè)計(jì)數(shù)據(jù)庫(kù)中的表。遵循數(shù)據(jù)庫(kù)理論,可以把上面的一個(gè)表設(shè)計(jì)成表7.2~7.4的形式。關(guān)系數(shù)據(jù)庫(kù)應(yīng)用示例:針對(duì)大學(xué)生選課信息的存儲(chǔ)和管理,設(shè)計(jì)數(shù)據(jù)庫(kù)中的表。這3個(gè)表格可以對(duì)應(yīng)成數(shù)據(jù)庫(kù)中的如下3個(gè)關(guān)系表,帶下畫(huà)線的屬性為主碼,主碼能唯一確定某個(gè)實(shí)體,如學(xué)號(hào)能唯一確定某個(gè)學(xué)生。
學(xué)生(學(xué)號(hào),姓名,年齡,系別)課程(課程號(hào),課程名,學(xué)分)選課(學(xué)號(hào),課程號(hào),成績(jī))這樣存儲(chǔ)學(xué)生、課程和學(xué)生選課信息,基本去除了數(shù)據(jù)冗余。如果某個(gè)學(xué)生轉(zhuǎn)專業(yè)了,只在學(xué)生表中修改一個(gè)記錄即可。關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言(SQL)SQL語(yǔ)言的特點(diǎn)非過(guò)程化的語(yǔ)言:只要提出“做什么”,而不必說(shuō)明“如何做”,既減輕了用戶的負(fù)擔(dān),又提高了數(shù)據(jù)的獨(dú)立性與安全性。功能一體化的語(yǔ)言:基于同樣的語(yǔ)言風(fēng)格/語(yǔ)法格式可以完成數(shù)據(jù)定義、數(shù)據(jù)操作等功能。一種語(yǔ)法兩種使用方式:既可以被用戶以一種人機(jī)交互的方式,在終端鍵盤(pán)上直接輸入SQL命令來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;又可以作為一種嵌入式語(yǔ)言,被程序設(shè)計(jì)人員在開(kāi)發(fā)應(yīng)用程序時(shí)直接嵌入到某種高級(jí)語(yǔ)言(如Python語(yǔ)言)中使用。關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言(SQL)SQL語(yǔ)言的特點(diǎn)面向集合操作的語(yǔ)言:非關(guān)系數(shù)據(jù)模型采用面向記錄的操作方式,操作對(duì)象是單一的某條記錄,而SQL允許用戶在較高層的數(shù)據(jù)結(jié)構(gòu)上工作,操作對(duì)象可以是若干記錄的集合,簡(jiǎn)稱記錄集。所有SQL語(yǔ)句都接受記錄集作為輸入,返回記錄集作為輸出,其面向集合的特性還允許一條SQL語(yǔ)句的結(jié)果作為另一條SQL語(yǔ)句的輸入。語(yǔ)法簡(jiǎn)潔、易學(xué)易用的標(biāo)準(zhǔn)語(yǔ)言:SQL不僅功能強(qiáng)大,而且語(yǔ)法接近英語(yǔ)口語(yǔ),符合人類的思維習(xí)慣,因此較為容易學(xué)習(xí)和掌握。同時(shí)又由于它是一種通用的標(biāo)準(zhǔn)語(yǔ)言,使用SQL編寫(xiě)的程序也具有良好的移植性。關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言(SQL)SQL語(yǔ)言應(yīng)用示例:基于學(xué)生、課程、選課3個(gè)表,查詢選修了“計(jì)算機(jī)導(dǎo)論”課程的學(xué)生的姓名,可以寫(xiě)出如下查詢語(yǔ)句:SELECT學(xué)生.姓名FROM學(xué)生,選課,課程WHERE學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào)AND選課.課程號(hào)=課程.課程號(hào)AND課程.課程名="計(jì)算機(jī)導(dǎo)論";該語(yǔ)句值說(shuō)明了查找什么,在哪幾個(gè)表中去查,并沒(méi)有說(shuō)明如何去查。常用關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)的類型數(shù)據(jù)庫(kù)領(lǐng)域有4種主要的數(shù)據(jù)模型,即層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P?。?shù)據(jù)模型是組織數(shù)據(jù)的方式。層次數(shù)據(jù)庫(kù)、網(wǎng)狀數(shù)據(jù)庫(kù)已過(guò)時(shí),面向?qū)ο髷?shù)據(jù)庫(kù)沒(méi)有研發(fā)成功,現(xiàn)在用的是關(guān)系數(shù)據(jù)庫(kù)。近年來(lái),計(jì)算機(jī)科學(xué)技術(shù)不斷發(fā)展,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)也不斷發(fā)展進(jìn)化,AB公司(2009年被Oracle公司收購(gòu))的MySQL、Microsoft公司的Access等是小型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的代表,Oracle公司的Oracle、Microsoft公司的SQLServer、IBM公司的DB2等是功能強(qiáng)大的大型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的代表。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)工具早期的數(shù)據(jù)庫(kù)應(yīng)用由于是比較簡(jiǎn)單的單機(jī)系統(tǒng),數(shù)據(jù)庫(kù)管理系統(tǒng)選用dBASE、FoxBASE、FoxPro、VisualFoxPro等,這些系統(tǒng)自身帶有開(kāi)發(fā)環(huán)境,所以這時(shí)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)可以不用選擇開(kāi)發(fā)工具。隨著計(jì)算機(jī)技術(shù)(特別是網(wǎng)絡(luò)技術(shù))和應(yīng)用需求的發(fā)展,數(shù)據(jù)庫(kù)應(yīng)用模式已逐步發(fā)展到C/S模式和B/S模式,數(shù)據(jù)庫(kù)管理系統(tǒng)需要選用功能強(qiáng)大的Oracle、SQLServer、DB2等,這時(shí)選用合適的開(kāi)發(fā)工具成為提高數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)效率和質(zhì)量的一個(gè)重要因素。目前,可以選用Python作為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)工具,在標(biāo)準(zhǔn)庫(kù)或第三方庫(kù)的支持下,使用Python語(yǔ)言開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)簡(jiǎn)單、快捷。數(shù)據(jù)庫(kù)設(shè)計(jì)需求分析總體工作:對(duì)組織的工作現(xiàn)狀和用戶需求進(jìn)行調(diào)查、分析,明確用戶的信息需求和系統(tǒng)功能,提出擬建系統(tǒng)的邏輯方案。這里的重點(diǎn)是對(duì)建立數(shù)據(jù)庫(kù)的必要性及可行性進(jìn)行分析和研究,確定數(shù)據(jù)庫(kù)在整個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中的地位,確定出各個(gè)數(shù)據(jù)庫(kù)之間的關(guān)系。具體工作:選用哪種數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)軟件及相應(yīng)的軟硬件、網(wǎng)絡(luò)環(huán)境配置;確定數(shù)據(jù)庫(kù)系統(tǒng)的功能;確定建立一個(gè)還是幾個(gè)數(shù)據(jù)庫(kù);確定數(shù)據(jù)庫(kù)中表的個(gè)數(shù)及結(jié)構(gòu)。數(shù)據(jù)庫(kù)設(shè)計(jì)概念結(jié)構(gòu)設(shè)計(jì)將需求分析階段得到的用戶需求抽象為反映現(xiàn)實(shí)世界信息需求的數(shù)據(jù)庫(kù)概念結(jié)構(gòu)(概念模式)就是概念結(jié)構(gòu)設(shè)計(jì)。概念結(jié)構(gòu)從現(xiàn)實(shí)世界抽象而來(lái),又是各種數(shù)據(jù)模型的共同基礎(chǔ),實(shí)際上是現(xiàn)實(shí)世界與邏輯結(jié)構(gòu)(機(jī)器世界)之間的一個(gè)過(guò)渡。描述概念模型的有效工具是實(shí)體-聯(lián)系圖(E-R圖)。概念結(jié)構(gòu)設(shè)計(jì)包括三個(gè)步驟:設(shè)計(jì)局部E-R圖、集成局部E-R圖為全局E-R圖、優(yōu)化全局E-R圖。數(shù)據(jù)庫(kù)設(shè)計(jì)邏輯結(jié)構(gòu)設(shè)計(jì)邏輯結(jié)構(gòu)設(shè)計(jì)是把概念結(jié)構(gòu)設(shè)計(jì)階段的E-R圖轉(zhuǎn)換成與具體的DBMS產(chǎn)品所支持的數(shù)據(jù)模型相一致的邏輯結(jié)構(gòu)。邏輯結(jié)構(gòu)設(shè)計(jì)包括兩個(gè)步驟:將E-R圖轉(zhuǎn)換為關(guān)系模型、對(duì)關(guān)系模型進(jìn)行優(yōu)化。優(yōu)化工作要用到函數(shù)依賴、關(guān)系范式等知識(shí);得到優(yōu)化后的關(guān)系數(shù)據(jù)模型,就可以向特定的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)轉(zhuǎn)換,實(shí)際上是將一般的關(guān)系模型轉(zhuǎn)換成符合某一具體的能被計(jì)算機(jī)接受的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)模型,如Oracle、SQLServer、DB2等。數(shù)據(jù)庫(kù)設(shè)計(jì)物理結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)在實(shí)際的物理設(shè)備上的存儲(chǔ)結(jié)構(gòu)和存取方法稱為數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)。為設(shè)計(jì)好的邏輯模型選擇一個(gè)最符合應(yīng)用要求的物理結(jié)構(gòu)就是數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)設(shè)計(jì)。物理結(jié)構(gòu)設(shè)計(jì)的主要內(nèi)容包括三項(xiàng):確定數(shù)據(jù)的存儲(chǔ)安排、存取路徑的選擇與調(diào)整和確定系統(tǒng)配置。RDBMS產(chǎn)品一般都提供有一些系統(tǒng)配置變量、存儲(chǔ)分配參數(shù)(同時(shí)使用數(shù)據(jù)庫(kù)的用戶數(shù)、同時(shí)打開(kāi)的數(shù)據(jù)庫(kù)對(duì)象數(shù)、緩沖區(qū)的長(zhǎng)度等),系統(tǒng)為這些變量賦予了合適的默認(rèn)值,在進(jìn)行數(shù)據(jù)庫(kù)的物理設(shè)計(jì)時(shí)可以直接使用這些值,也可以根據(jù)實(shí)際應(yīng)用環(huán)境重新設(shè)置這些值。數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)實(shí)施數(shù)據(jù)庫(kù)實(shí)施階段的工作就是根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果,在選用的RDBMS上建立起數(shù)據(jù)庫(kù)。具體講有如下3項(xiàng)工作:建立數(shù)據(jù)庫(kù)的結(jié)構(gòu):以邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果為依據(jù),用RDBMS的數(shù)據(jù)定義語(yǔ)言書(shū)寫(xiě)數(shù)據(jù)庫(kù)結(jié)構(gòu)定義源程序并執(zhí)行程序。載入實(shí)驗(yàn)數(shù)據(jù)并測(cè)試應(yīng)用程序:實(shí)驗(yàn)數(shù)據(jù)可以是部分實(shí)際數(shù)據(jù),也可以是模擬數(shù)據(jù),應(yīng)使實(shí)驗(yàn)數(shù)據(jù)盡可能覆蓋各種可能的實(shí)際情況,通過(guò)運(yùn)行應(yīng)用程序,測(cè)試系統(tǒng)的性能指標(biāo)。如不符合,是程序的問(wèn)題修改程序,是數(shù)據(jù)庫(kù)的問(wèn)題,則修改數(shù)據(jù)庫(kù)設(shè)計(jì)。載入全部實(shí)際數(shù)據(jù)并試運(yùn)行應(yīng)用程序,發(fā)現(xiàn)問(wèn)題做類似處理。數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)運(yùn)行與維護(hù)數(shù)據(jù)庫(kù)經(jīng)過(guò)試運(yùn)行后就可以投入實(shí)際運(yùn)行了。但是,由于應(yīng)用環(huán)境在不斷變化,對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)進(jìn)行評(píng)價(jià)、調(diào)整、修改等維護(hù)工作是一個(gè)長(zhǎng)期的任務(wù),也是設(shè)計(jì)工作的繼續(xù)和提高。在數(shù)據(jù)庫(kù)運(yùn)行階段,對(duì)數(shù)據(jù)庫(kù)經(jīng)常性的維護(hù)工作主要由數(shù)據(jù)庫(kù)管理員完成,主要工作包括數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ)和恢復(fù)、數(shù)據(jù)庫(kù)的安全性和完整性控制、數(shù)據(jù)庫(kù)性能的監(jiān)督分析和優(yōu)化、數(shù)據(jù)庫(kù)的重組織與重構(gòu)造等。數(shù)據(jù)庫(kù)設(shè)計(jì)總結(jié)
數(shù)據(jù)庫(kù)設(shè)計(jì)以數(shù)據(jù)庫(kù)為主線說(shuō)明數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程,分析、設(shè)計(jì)、實(shí)施、運(yùn)行維護(hù)分布在了這個(gè)主線上。后面的軟件工程著眼于一般軟件系統(tǒng)的設(shè)計(jì)開(kāi)發(fā),數(shù)據(jù)庫(kù)設(shè)計(jì)是其中的一個(gè)環(huán)節(jié)。
當(dāng)開(kāi)發(fā)實(shí)際項(xiàng)目時(shí),以數(shù)據(jù)庫(kù)為主的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)可以遵循數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程,不以數(shù)據(jù)庫(kù)為主的一般軟件系統(tǒng)的開(kāi)發(fā)可以遵循軟件工程的思想。數(shù)據(jù)庫(kù)的發(fā)展分布式數(shù)據(jù)庫(kù);大數(shù)據(jù);區(qū)塊鏈;數(shù)據(jù)倉(cāng)庫(kù);數(shù)據(jù)挖掘/03分布式數(shù)據(jù)庫(kù)分布式數(shù)據(jù)庫(kù)概念分布式數(shù)據(jù)庫(kù)(DBS)是指分布在一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)上的多個(gè)邏輯相關(guān)的數(shù)據(jù)庫(kù)的集合。即分布式數(shù)據(jù)庫(kù)是一組結(jié)構(gòu)化的數(shù)據(jù)集合,邏輯上屬于同一個(gè)系統(tǒng),物理上分布在計(jì)算機(jī)網(wǎng)絡(luò)中各個(gè)不同的場(chǎng)地上。從物理位置上看,數(shù)據(jù)分別存放在地理位置不同的數(shù)據(jù)庫(kù)中,但從用戶使用的角度看,數(shù)據(jù)如同存放在一個(gè)統(tǒng)一的數(shù)據(jù)庫(kù)中一樣。分布式數(shù)據(jù)庫(kù)系統(tǒng)(D-DBS)由分布式數(shù)據(jù)庫(kù)和分布式數(shù)據(jù)庫(kù)管理系統(tǒng)組成。分布式數(shù)據(jù)庫(kù)管理系統(tǒng)(D-DBMS)是分布式數(shù)據(jù)庫(kù)系統(tǒng)的一組軟件,負(fù)責(zé)對(duì)分布式數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行管理和操作。分布式數(shù)據(jù)庫(kù)分布式數(shù)據(jù)庫(kù)管理系統(tǒng)的組成本地?cái)?shù)據(jù)庫(kù)管理系統(tǒng):每個(gè)結(jié)點(diǎn)上都有一個(gè)局部數(shù)據(jù)庫(kù)管理系統(tǒng)。全局?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng):把物理上分散的局部數(shù)據(jù)庫(kù)整合成邏輯上統(tǒng)一的全局?jǐn)?shù)據(jù)庫(kù)。全局?jǐn)?shù)據(jù)字典:支持全局?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng)對(duì)各局部數(shù)據(jù)庫(kù)的操作。通信管理:在分布式數(shù)據(jù)庫(kù)各結(jié)點(diǎn)之間傳送消息和數(shù)據(jù),完成通信功能。大數(shù)據(jù)大數(shù)據(jù)的定義大數(shù)據(jù)(bigdata)是指規(guī)模大到目前的軟件工具難以有效收集、存儲(chǔ)、管理和分析的數(shù)據(jù)。也指來(lái)自于多維多源的數(shù)據(jù)。大數(shù)據(jù)的特點(diǎn)數(shù)據(jù)量巨大:一般都在太字節(jié)(TB)以上;類型多樣:包括數(shù)值、文本、圖像、視頻、音頻等各種類型的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù);處理速度快:對(duì)大數(shù)據(jù)的分析處理速度要快,分析結(jié)果要能及時(shí)用于支持決策,也有人解釋為數(shù)據(jù)的增長(zhǎng)速度快;價(jià)值大:原始數(shù)據(jù)價(jià)值密度低,但經(jīng)分析處理后價(jià)值巨大。大數(shù)據(jù)大數(shù)據(jù)應(yīng)用示例一美國(guó)華盛頓大學(xué)計(jì)算機(jī)專家?jiàn)W倫·埃齊奧尼開(kāi)發(fā)了一個(gè)機(jī)票價(jià)格預(yù)測(cè)系統(tǒng)Farecast,幫助人們?cè)诤线m的時(shí)間以最低的價(jià)格購(gòu)買(mǎi)機(jī)票到2012年為止,F(xiàn)arecast系統(tǒng)用了將近10萬(wàn)億條價(jià)格記錄來(lái)幫助預(yù)測(cè)美國(guó)國(guó)內(nèi)航班的票價(jià)。Farecast票價(jià)預(yù)測(cè)的準(zhǔn)確度高達(dá)75%,使用Farecast
票價(jià)預(yù)測(cè)工具
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海岸工程課程設(shè)計(jì)指導(dǎo)書(shū)
- 2024年度:法律咨詢居間服務(wù)合同范本6篇
- 2024年度知識(shí)產(chǎn)權(quán)與人才培養(yǎng)合作委托協(xié)議3篇
- 2024年度園林綠化土方運(yùn)輸合同協(xié)議書(shū)3篇
- 2024?;愤M(jìn)出口貿(mào)易與風(fēng)險(xiǎn)管控協(xié)議模板3篇
- 2024年度升降機(jī)技術(shù)研究與應(yīng)用開(kāi)發(fā)合同3篇
- 2024年版?zhèn)€人借款抵押珠寶首飾合同
- 甲基呋喃的課程設(shè)計(jì)
- 生物藥品的輔料選擇與質(zhì)量控制考核試卷
- 水產(chǎn)加工自動(dòng)化設(shè)備研發(fā)考核試卷
- 園林綠地冬季防火措施(參考范本)
- 客戶忠誠(chéng)度競(jìng)爭(zhēng)力分析
- 上海垃圾分類課件
- 山西省醫(yī)療服務(wù)項(xiàng)目收費(fèi)
- 氣體分離膜課件
- 30道醫(yī)院眼科醫(yī)生崗位高頻面試問(wèn)題附考察點(diǎn)及參考回答
- 慢性咳嗽的病因與分類
- 癌癥防治重點(diǎn)學(xué)科提升計(jì)劃
- 行政事業(yè)單位法律風(fēng)險(xiǎn)
- 支氣管鏡檢查并發(fā)癥預(yù)防及處理
- DB33-T 914-2022 茭白綠色生產(chǎn)技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論