計算機(jī)導(dǎo)論(第5版) 課件 袁方 第6、7章 程序設(shè)計知識、軟件開發(fā)知識_第1頁
計算機(jī)導(dǎo)論(第5版) 課件 袁方 第6、7章 程序設(shè)計知識、軟件開發(fā)知識_第2頁
計算機(jī)導(dǎo)論(第5版) 課件 袁方 第6、7章 程序設(shè)計知識、軟件開發(fā)知識_第3頁
計算機(jī)導(dǎo)論(第5版) 課件 袁方 第6、7章 程序設(shè)計知識、軟件開發(fā)知識_第4頁
計算機(jī)導(dǎo)論(第5版) 課件 袁方 第6、7章 程序設(shè)計知識、軟件開發(fā)知識_第5頁
已閱讀5頁,還剩171頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

計算機(jī)導(dǎo)論第6章程序設(shè)計知識目錄CONTENTS03算法與程序設(shè)計01程序設(shè)計語言02Python語言程序設(shè)計0405數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計編譯原理與程序設(shè)計程序設(shè)計語言機(jī)器語言;匯編語言;早期高級語言;結(jié)構(gòu)化程序設(shè)計語言;面向?qū)ο蟪绦蛟O(shè)計語言/01程序設(shè)計語言程序設(shè)計語言的定義簡單說法:程序設(shè)計語言是用來編寫計算機(jī)程序的語言。規(guī)范描述:程序設(shè)計語言是一種讓人與計算機(jī)之間進(jìn)行交流,讓計算機(jī)理解人的意圖并按照人的意圖完成工作的符號系統(tǒng)。目前常用的高級程序設(shè)計語言主要有Python、C++、Java等。程序設(shè)計語言機(jī)器語言機(jī)器語言(machinelanguage)是由二進(jìn)制編碼的機(jī)器語言指令構(gòu)成的語言,是一種依附于機(jī)器硬件的語言。每種處理器(CPU)都有自己專用的機(jī)器語言指令集合,這些指令能夠被計算機(jī)直接執(zhí)行。每條機(jī)器語言指令完成一個簡單任務(wù)。一條機(jī)器語言指令由兩個部分組成:操作碼和操作數(shù),操作碼用于說明指令的功能,操作數(shù)用于說明參與操作的數(shù)據(jù)或數(shù)據(jù)所在的寄存器編號或數(shù)據(jù)所在內(nèi)存單元的地址。操作碼和操作數(shù)都是以二進(jìn)制的形式表示。程序設(shè)計語言機(jī)器語言程序示例把兩個內(nèi)存單元中的數(shù)據(jù)相加,并將結(jié)果存入另外一個單元。用機(jī)器語言編寫程序,編程人員必須要記住每條指令對應(yīng)的二進(jìn)制編碼是什么,編寫出來的程序就是由0和1組成的數(shù)字串。這樣就存在幾個方面的困難:指令難以準(zhǔn)確記憶、程序代碼容易寫錯、程序難以理解和修改。程序設(shè)計語言匯編語言匯編語言(assemblylanguage)是由助記符指令構(gòu)成的語言,也是一種依附于機(jī)器硬件的語言。在匯編語言中,使用助記符(類英文單詞)來表示指令的操作碼,使用存儲單元或寄存器的名字表示操作數(shù)。這樣,相對于機(jī)器語言,記憶匯編語言的指令就容易多了,編寫出的程序也比較容易理解。程序設(shè)計語言匯編語言匯編語言程序示例(把兩個內(nèi)存單元中的數(shù)據(jù)相加,并將結(jié)果存入另外一個單元)實際上,計算機(jī)只能直接執(zhí)行由機(jī)器語言編寫的程序。用匯編語言編寫的程序稱為匯編語言源程序,需要首先翻譯成機(jī)器語言程序(目標(biāo)程序),才能被計算機(jī)執(zhí)行,完成這種翻譯工作的程序稱為匯編程序或匯編器。程序設(shè)計語言早期高級語言機(jī)器語言中的指令用二進(jìn)制編碼表示,匯編語言中的指令用英文助記符表示。高級語言(highlevellanguage)中的語句用英文和數(shù)學(xué)公式表示,更容易被編程人員理解和掌握。使用高級語言編寫出的程序稱為高級語言源程序,也需要先翻譯成目標(biāo)程序,才能為計算機(jī)理解和執(zhí)行。翻譯模式由2種:編譯模式和解釋模式。程序設(shè)計語言代表性早期高級語言FORTRAN語言:FORTRAN是公式翻譯器(FORmula

TRANslator)的縮寫,是第一個高級語言。FORTRAN語言用于數(shù)學(xué)公式的表達(dá)和科學(xué)計算,1957年FORTRAN的第一個版本研發(fā)成功,其編譯程序由25000行機(jī)器語言代碼組成。以后又陸續(xù)推出多個版本,包括結(jié)構(gòu)化程序設(shè)計語言版本和面向?qū)ο蟮某绦蛟O(shè)計語言版本。ALGOL語言:ALGOL是算法語言(ALGOrithmLanguage)的縮寫。AIGOL語言也是用于科學(xué)計算,其最早版本是1958年出現(xiàn)的ALGOL58,后續(xù)版本有ALGOL60和ALGOL68,這兩個版本曾經(jīng)在我國得到廣泛的學(xué)習(xí)和使用,其后繼語言Pascal出現(xiàn)后,ALGOL逐漸被淘汰。程序設(shè)計語言代表性早期高級語言COBOL語言:COBOL是面向商業(yè)的通用語言(COmmon

BusinessOrientedLanguage)的縮寫。COBOL語言用于企業(yè)管理和事務(wù)處理,1960年4月正式公布第一個COBOL文本,后續(xù)推出多個版本。BASIC語言:BASIC是初學(xué)者通用符號指令碼(Beginner′sAllpurposeSymbolicInstructionCode)的英文縮寫,1964年BASIC第1版發(fā)布。BASIC確實簡單、易學(xué),一經(jīng)推出,很快流行起來。BASIC語言在我國也曾經(jīng)廣泛流行。程序設(shè)計語言結(jié)構(gòu)化程序設(shè)計思想沿用編寫小程序的方法編寫中大規(guī)模的程序是不行的,往往導(dǎo)致編寫出的程序可靠性差、錯誤多且難以發(fā)現(xiàn)和修改。1969年,埃德斯加·狄克斯特拉提出了結(jié)構(gòu)化程序設(shè)計的概念,強(qiáng)調(diào)從程序結(jié)構(gòu)和風(fēng)格上來研究程序設(shè)計,注重程序結(jié)構(gòu)的清晰性,注重程序的可理解性和可修改性。經(jīng)過幾年的探索和實踐,結(jié)構(gòu)化程序設(shè)計方法的應(yīng)用確實取得了成效,遵循結(jié)構(gòu)化程序設(shè)計方法編寫出來的程序,不僅結(jié)構(gòu)良好、容易理解和閱讀,而且容易發(fā)現(xiàn)和改正其中的錯誤。程序設(shè)計方法要有相應(yīng)的程序設(shè)計語言支持。程序設(shè)計語言結(jié)構(gòu)化程序設(shè)計語言Pascal語言:Pascal是一種通用的高級語言,是在ALGOL語言的基礎(chǔ)上發(fā)展起來的,以法國著名物理學(xué)家、數(shù)學(xué)家帕斯卡(BlaisePascal)的名字命名。帕斯卡不僅發(fā)現(xiàn)了帕斯卡定律,還在1642年曾經(jīng)發(fā)明了齒輪式、能進(jìn)行加減運(yùn)算的機(jī)械式計算機(jī),這是第一臺能進(jìn)行加減運(yùn)算的機(jī)械計算機(jī)。Pascal的第一個版本出現(xiàn)在1971年,20世紀(jì)70~90年代,Pascal語言有很大的影響,在我國也曾廣泛流行。程序設(shè)計語言結(jié)構(gòu)化程序設(shè)計語言C語言:1963年,英國劍橋大學(xué)在ALGOL60的基礎(chǔ)上添加了硬件處理功能,推出了CPL語言,1967年推出了簡化版的CPL(BCPL)。1970年美國貝爾實驗室以BCPL為基礎(chǔ),設(shè)計出更簡單且更接近硬件的B語言。但B語言過于簡單,功能有限。1972~1973年,貝爾實驗室在B語言的基礎(chǔ)上設(shè)計出了C語言。C語言既保持了BCPL和B語言精練、接近硬件的優(yōu)點,又彌補(bǔ)了它們過于簡單、無數(shù)據(jù)類型的不足。1973年,貝爾實驗室將用匯編語言編寫的UNIX操作系統(tǒng)用C語言改寫成UNIX第5版,C語言代碼占90%以上。1975年,用C語言編寫的UNIX第6版公布后,C語言的優(yōu)點引起人們的關(guān)注,隨著UNIX的日益廣泛使用,C語言也迅速得以推廣和廣泛應(yīng)用。程序設(shè)計語言面向?qū)ο蟪绦蛟O(shè)計思想結(jié)構(gòu)化程序設(shè)計方法在一定程度上保證了編寫較大規(guī)模程序的質(zhì)量,但隨著時間的推移,也逐漸暴露了其在編寫大規(guī)模程序時的不足。面向?qū)ο蠓椒ú辉賹栴}分解為過程,而是將問題分解為對象,對象將自己的屬性和方法封裝成一個整體,供編程人員使用,對象之間的相互作用則通過消息傳遞來實現(xiàn)。使用面向?qū)ο蟮某绦蛟O(shè)計方法,可以使人們對復(fù)雜系統(tǒng)的認(rèn)識過程與程序設(shè)計過程盡可能一致,能夠更好地保證大程序的質(zhì)量。面向?qū)ο蟮某绦蛟O(shè)計方法也要有面向?qū)ο蟪绦蛟O(shè)計語言支持。程序設(shè)計語言面向?qū)ο蟪绦蛟O(shè)計語言Simula67和Smalltalk:Simula67發(fā)布于1967年,被公認(rèn)為是面向?qū)ο笳Z言的鼻祖。20世紀(jì)80年代美國施樂帕羅奧多研究中心推出了Smalltalk,它完整地體現(xiàn)并進(jìn)一步豐富了面向?qū)ο蟮母拍睢5捎诋?dāng)時人們已經(jīng)接受并廣泛應(yīng)用結(jié)構(gòu)化程序設(shè)計方法,一時還難以完全接受面向?qū)ο蟮某绦蛟O(shè)計思想,這類純面向?qū)ο笳Z言沒有能夠廣泛流行起來。C++語言:C++語言由貝爾實驗室的本賈尼·斯特勞斯特盧普在20世紀(jì)80年代初設(shè)計并實現(xiàn)的,它是以C語言為基礎(chǔ)、支持?jǐn)?shù)據(jù)抽象和面向?qū)ο笏枷氲耐ㄓ贸绦蛟O(shè)計語言。C++是C語言的擴(kuò)充,借助于C語言的普及基礎(chǔ),C++得到廣泛應(yīng)用。

UNIXCC++程序設(shè)計語言面向?qū)ο蟪绦蛟O(shè)計語言Java語言是由SunMicrosystems公司于1995年5月推出的一個支持網(wǎng)絡(luò)計算的面向?qū)ο蟪绦蛟O(shè)計語言。Java語言吸收了Smalltalk語言和C++語言的優(yōu)點,并增加了并發(fā)程序設(shè)計、網(wǎng)絡(luò)通信和多媒體數(shù)據(jù)控制等特性,也是目前得到廣泛應(yīng)用的一種面向?qū)ο蟪绦蛟O(shè)計語言。C#語言:C#語言是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NETFramework之上的高級程序設(shè)計語言。C#在語法規(guī)則與系統(tǒng)結(jié)構(gòu)上與Java有著很多的相似之處,比如它包括了單繼承機(jī)制、界面以及與Java幾乎相同的語法,是微軟公司基于.NET網(wǎng)絡(luò)框架進(jìn)行系統(tǒng)開發(fā)的主角。程序設(shè)計語言面向?qū)ο蟪绦蛟O(shè)計語言Python語言:Python是一種完全面向?qū)ο蟮?、解釋型的程序設(shè)計語言,1991年發(fā)布了第一個公開版本。由于Python語言易學(xué)易用以及有大量的內(nèi)置庫和第三方庫可用,使得它成為一種得到廣泛應(yīng)用的程序設(shè)計語言。本書以Python為例簡要介紹編程知識,詳細(xì)介紹可查閱袁方、肖勝剛、齊鴻志編寫的《Python語言程序設(shè)計(第2版)》一書。Python語言程序設(shè)計Python語言的特點;Python程序的執(zhí)行:Python的基礎(chǔ)語法;Python的基本數(shù)據(jù)類型Python的類型轉(zhuǎn)換;順序結(jié)構(gòu)程序設(shè)計;分支結(jié)構(gòu)程序設(shè)計;Python程序?qū)嵗?02Python語言的特點易學(xué)易用Python語言的語法很多來自于C語言,但比C語言更為簡潔。相對于其他常用的程序設(shè)計語言,Python可以用更少的代碼實現(xiàn)相同的功能,更容易學(xué)習(xí)和使用,使編程人員更多地關(guān)注數(shù)據(jù)處理邏輯,而不是語法細(xì)節(jié)。庫函數(shù)豐富Python解釋器提供了幾百個內(nèi)置庫,還有十幾萬個第三方庫可用,幾乎覆蓋了計算機(jī)應(yīng)用的各個領(lǐng)域。在一定程度上說,使用Python編寫程序,是基于大量的現(xiàn)有內(nèi)置庫和第三方庫中的函數(shù)(代碼)來組裝程序,大大簡化了編程工作,提高了編程效率和代碼質(zhì)量。近幾年,人工智能(AI)得到快速發(fā)展和廣泛應(yīng)用。由于有大量的AI庫可用和具備強(qiáng)大的數(shù)據(jù)處理能力,Python已成為人工智能領(lǐng)域的首選編程語言。Python程序的執(zhí)行命令行方式命令行方式是一種人機(jī)交互方式,用戶輸入一條Python語句或一個Python表達(dá)式,計算機(jī)就執(zhí)行語句或計算表達(dá)式的結(jié)果。IDLE實際上是一個Python的外殼,它提供了交互式的命令執(zhí)行方式,可以在提示符“>>>”后面輸入想要執(zhí)行的語句或表達(dá)式,回車后可以立即顯示執(zhí)行結(jié)果。命令行方式示例>>>print(“HelloWorld.”) >>>311**(1/3)Python程序的執(zhí)行程序文件方式在IDLE界面中,選擇菜單File→NewFile(新建文件),打開程序編輯窗口,可以輸入若干條語句,組成一個Python源程序。選擇菜單File→Save可以把程序代碼存盤,選擇菜單File→SaveAs…可以另存為…,選擇菜單File→Open可以打開已有文件,選擇Run→RunModule可以執(zhí)行程序文件,等等。Python的基礎(chǔ)語法Python標(biāo)識符Python語言規(guī)定:標(biāo)識符是由字母、數(shù)字和下畫線三種字符構(gòu)成的,且第一個字符必須是字母或下畫線的字符序列。Python語言的變量、函數(shù)、文件等各種實體的名字都需要用標(biāo)識符來表示。定義標(biāo)識符時要注意如下幾點:必須以字母或下畫線作為開始符號,數(shù)字不能作為開始符號,但以下畫線開始的標(biāo)識符一般都有特定含義,所以盡量不用以下畫線開始的自定義標(biāo)識符。標(biāo)識符中只能出現(xiàn)字母、數(shù)字和下畫線,不能出現(xiàn)其他符號。同一字母的大寫和小寫被認(rèn)為是兩個不同的字符。關(guān)鍵字有特定的含義,不能用作用戶自定義標(biāo)識符使用。盡可能做到見名知義,增加程序的可理解性。Python的基礎(chǔ)語法常量與變量常量:是指在整個程序的執(zhí)行過程中其值不能被改變的量,也就是所說的常數(shù)。在用Python語言編寫程序時,常量可以直接使用,常量的類型是由常量值本身決定的。例如,12是整型常量、34.56是浮點型常量、′a′和"Python"是字符串常量等。變量:是指在程序的執(zhí)行過程中其值可以被改變的量。變量要先定義(賦值),后使用。變量定義就是給變量賦值,格式如下:

變量名1,變量名2,…,變量名n=表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:為各變量在內(nèi)存中分配相應(yīng)的內(nèi)存單元并賦以相應(yīng)的值。分別計算出賦值號右邊各表達(dá)式的值,并依次賦給左邊的變量。Python的基礎(chǔ)語法常量與變量變量定義示例Python的基本數(shù)據(jù)類型整型整型就是整數(shù)類型。Python語言中整數(shù)的取值范圍很大,理論上沒有限制,實際取值受限于所用計算機(jī)的內(nèi)存容量,對于一般應(yīng)用場景足夠了。浮點型浮點型就是實數(shù)類型,表示帶有小數(shù)的數(shù)值。Python要求所有浮點數(shù)都必須帶有小數(shù),便于和整數(shù)的區(qū)別,如6是整數(shù),6.0是浮點數(shù)。雖然6和6.0值相同,但兩者在計算機(jī)內(nèi)部的存儲方式和計算處理方式是不一樣的。Python的基本數(shù)據(jù)類型浮點型示例Python的基本數(shù)據(jù)類型布爾型布爾型也稱為邏輯型,用于表示邏輯數(shù)據(jù)。Python語言中,邏輯數(shù)據(jù)只有兩個值:False(假)和True(真)。需要注意的是,兩個邏輯值的首字母大寫,其他字母小寫。FALSE、false、TRUE、true等書寫方式都不是正確的Python邏輯值。布爾型示例Python的基本數(shù)據(jù)類型字符串型字符串型數(shù)據(jù)用于表示字符序列,字符串常量是由一對引號括起來的字符序列。Python語言有三種形式的字符串:一對單引號括起來的字符序列,如,′Python′、′程序設(shè)計′;一對雙引號括起來的字符序列,如"Python"、"程序設(shè)計";一對三引號括起來的字符序列,如′′′Python′′′、′′′程序設(shè)計′′′。關(guān)于字符串的幾點解釋單引號括起來的字符串中可以出現(xiàn)雙引號,雙引號括起來的字符串中可以出現(xiàn)單引號,三引號括起來的字符串中可以出現(xiàn)單引號和雙引號。單引號或雙引號括起來的字符串只能書寫在一行內(nèi),三引號括起來的字符串可以書寫多行。Python的基本數(shù)據(jù)類型字符串型關(guān)于字符串的幾點解釋字符串有兩個特例,一個是單字符字符串,可稱為字符;另一個是不包含任何字符的字符串,稱為空字符串。由三引號括起來的字符序列,如果出現(xiàn)在賦值語句中或print()函數(shù)內(nèi),當(dāng)作字符串處理;如果直接出現(xiàn)在程序中,當(dāng)作程序注釋。字符串示例Python的基本數(shù)據(jù)類型字符串型轉(zhuǎn)義字符:Python語言中,以Unicode編碼存儲字符串,單個英文字符和單個漢字都被看作一個字符。如果用到控制符,只能寫成編碼值的形式。如09、0A(十六進(jìn)制數(shù))分別表示水平制表符、換行等。直接書寫編碼值的方式需要記憶編碼值,也容易寫錯。為此,Python語言給出了一種轉(zhuǎn)義符的表示形式,以反斜杠(\)開始的符號不再是原來的意義,而是轉(zhuǎn)換為新的含義。如\n代表換行符,\t代表水平制表符等。Python的基本數(shù)據(jù)類型字符串型字符串的訪問:對于字符串,除了可以整體使用外,還有兩種常用的訪問方式:索引方式和切片方式。索引訪問方式也稱為單字符訪問方式,語法格式如下:

字符串變量名[索引值]功能:從字符串中取出與索引值對應(yīng)的一個字符。Python的基本數(shù)據(jù)類型字符串型切片訪問:該方式也稱為子串訪問方式,語法格式如下:

字符串變量名[i:j:k]功能:從字符串中取出多個字符。其中,i為開始位置,j為結(jié)束位置(但不包括j位置上的字符),k為步長。參數(shù)i、j、k都可以省略。在步長k的值為正數(shù)時,省略i,其默認(rèn)值為0;省略j,其默認(rèn)值為正向最后一個字符的索引值加1。Python的基本數(shù)據(jù)類型字符串型字符串運(yùn)算符Python的類型轉(zhuǎn)換int(x)函數(shù)int(x)函數(shù)的功能是把x的值轉(zhuǎn)換為整型數(shù)據(jù),x為浮點數(shù)或由數(shù)字組成的字符串,可以帶正負(fù)號。float(x)函數(shù)float(x)函數(shù)的功能是把x的值轉(zhuǎn)換為浮點型數(shù)據(jù),x為整數(shù)或由數(shù)字與最多一個小數(shù)點組成的字符串,可以帶正負(fù)號。Python的類型轉(zhuǎn)換eval(x)函數(shù)eval(x)函數(shù)把由純數(shù)字組成的字符串(可由正負(fù)號開始)轉(zhuǎn)換為整型,把由數(shù)字和1位小數(shù)點組合成的字符串(可由正負(fù)號開始)轉(zhuǎn)化為浮點型數(shù)據(jù)。eval()函數(shù)的語法格式如下:

eval(字符串)功能:將字符串的內(nèi)容,即去掉界定符(引號)之后的表達(dá)式看作一個Python表達(dá)式,并計算出表達(dá)式的值作為函數(shù)的結(jié)果。順序結(jié)構(gòu)程序設(shè)計賦值語句賦值語句的語法格式:

變量名1,變量名2,…,變量名n=表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:先計算出各表達(dá)式的值,然后依次賦給賦值運(yùn)算符左邊的變量。一個賦值語句可以只給一個變量賦值,也可以同時給多個變量賦值。對于一些先進(jìn)行運(yùn)算再賦值的操作,Python語言還提供了7個常用的復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=、//=、**=。

順序結(jié)構(gòu)程序設(shè)計用input()函數(shù)輸入數(shù)據(jù)使用input()函數(shù)輸入數(shù)據(jù)的語法格式如下:

變量=input("提示信息")功能:從鍵盤輸入數(shù)據(jù)并賦給變量,Python解釋器把用戶的輸入看作字符串。

順序結(jié)構(gòu)程序設(shè)計用print()函數(shù)輸出數(shù)據(jù)使用print()函數(shù)輸出數(shù)據(jù)的語法格式如下:print(表達(dá)式1,表達(dá)式2,…,表達(dá)式n)功能:依次輸出n個表達(dá)式的值,表達(dá)式的值可以是整數(shù)、實數(shù)和字符串,也可以是一個動作控制符,如“\n”表示換行等。其中的表達(dá)式可以有一個,也可以有多個,多個表達(dá)式之間用逗號(,)分開,如果沒有任何表達(dá)式,print()函數(shù)的功能是實現(xiàn)一個換行動作。

順序結(jié)構(gòu)程序設(shè)計結(jié)構(gòu)化程序設(shè)計思想結(jié)構(gòu)化程序設(shè)計方法強(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é)構(gòu)。在順序結(jié)構(gòu)程序中,程序的執(zhí)行是按照語句塊出現(xiàn)的先后次序順序執(zhí)行的,并且每個語句塊都會被執(zhí)行到。順序結(jié)構(gòu)程序設(shè)計示例通過鍵盤輸入直角三角形的兩個直角邊邊長,計算斜邊邊長并輸出。分支結(jié)構(gòu)程序設(shè)計if語句if語句用來實現(xiàn)單分支選擇,語法格式為:

if表達(dá)式:

語句塊if語句的執(zhí)行過程是:先計算表達(dá)式的值,若值為True(真),則執(zhí)行if子句(表達(dá)式后面的語句塊),然后執(zhí)行if結(jié)構(gòu)后面的語句;否則,跳過if子句,直接執(zhí)行if結(jié)構(gòu)后面的語句。分支結(jié)構(gòu)程序設(shè)計if-else語句if-else語句用來實現(xiàn)雙分支選擇,其語法格式為:

if表達(dá)式:語句塊1else:語句塊2iif-else語句的執(zhí)行過程是:先計算表達(dá)式的值,若結(jié)果為True,則執(zhí)行if子句(語句塊1),否則執(zhí)行else子句(語句塊2)。循環(huán)結(jié)構(gòu)程序設(shè)計for語句for循環(huán)語句的語法格式為:

for循環(huán)變量in遍歷結(jié)構(gòu):語句塊for循環(huán)語句的執(zhí)行過程是:循環(huán)變量從遍歷結(jié)構(gòu)中取值,如果能取到值,就執(zhí)行循環(huán)體語句塊,然后再返回遍歷結(jié)構(gòu)取值,如果能取到值,再次執(zhí)行循環(huán)體語句塊,直至遍歷結(jié)構(gòu)中的數(shù)據(jù)取完為止。遍歷結(jié)構(gòu)是指包含多個數(shù)據(jù)元素的復(fù)合數(shù)據(jù)。循環(huán)結(jié)構(gòu)程序設(shè)計for循環(huán)程序示例從鍵盤輸入若干個以正整數(shù)表示的考試成績,計算總成績和平均成績并輸出。循環(huán)結(jié)構(gòu)程序設(shè)計for語句中的range()函數(shù)range()函數(shù)的一般格式如下:range(start,end,step)功能:生成若干個整數(shù)值,初始數(shù)值為start,結(jié)束數(shù)值為end-1或end+1(注意,不包括end),步長為step。當(dāng)步長step為正數(shù)時,結(jié)束數(shù)值為end-1;當(dāng)步長step為負(fù)數(shù)時,結(jié)束數(shù)值為end+1。其中,start和step都可以省略,省略時默認(rèn)值分別為0和1。循環(huán)結(jié)構(gòu)程序設(shè)計while循環(huán)語句while循環(huán)語句的語法格式為:

while表達(dá)式:語句塊

while語句的執(zhí)行過程是:先計算表達(dá)式的值,若表達(dá)式的值為True,則執(zhí)行循環(huán)體語句塊;然后再次計算表達(dá)式的值,若結(jié)果仍為True,再次執(zhí)行循環(huán)體語句塊;如此繼續(xù)下去,直至表達(dá)式的值變?yōu)镕alse,則結(jié)束while循環(huán)語句的執(zhí)行。

循環(huán)結(jié)構(gòu)程序設(shè)計while循環(huán)程序示例從鍵盤上輸入若干個以正整數(shù)表示的考試成績,計算總成績和平均成績并輸出。與前面示例不同的是,不知道成績的個數(shù),用輸入-1作為結(jié)束。循環(huán)結(jié)構(gòu)程序設(shè)計帶else的循環(huán)語句帶else的for循環(huán)語句和while循環(huán)語句格式如下:

for循環(huán)變量in遍歷結(jié)構(gòu):while表達(dá)式:語句塊1語句塊1else:else:語句塊2語句塊2執(zhí)行過程:當(dāng)循環(huán)語句正常結(jié)束時,執(zhí)行else對應(yīng)的語句塊;當(dāng)循環(huán)語句提前結(jié)束時,不執(zhí)行else對應(yīng)的語句塊。帶else的循環(huán)語句一般要和break語句配合使用。循環(huán)結(jié)構(gòu)程序設(shè)計break語句break語句的語法格式如下:breakbreak語句用于循環(huán)結(jié)構(gòu)中,其功能是提前結(jié)束整個循環(huán),轉(zhuǎn)去執(zhí)行循環(huán)結(jié)構(gòu)后面的語句。continue語句continue語句的語法格式如下:continuecontinue語句也是用于循環(huán)結(jié)構(gòu)中,其功能是提前結(jié)束本次循環(huán),轉(zhuǎn)回到循環(huán)的開始判斷是否執(zhí)行下一次循環(huán)。循環(huán)結(jié)構(gòu)程序設(shè)計帶break語句的循環(huán)程序示例從鍵盤上輸入一個大于1的正整數(shù),判斷其是否為素數(shù)。帶else的for語句和break配合使用,使程序更為簡潔、邏輯清晰。循環(huán)結(jié)構(gòu)程序設(shè)計Python程序?qū)嵗龔逆I盤輸入一個字符串,把字符串中的數(shù)字字符分離出來并組成一個整數(shù),再乘以數(shù)字字符的個數(shù)后輸出,如果輸入“a23TY78hy”,則輸出數(shù)值9512(2378乘以4)。循環(huán)結(jié)構(gòu)程序設(shè)計Python程序?qū)嵗页?00~999中的所有水仙花數(shù),所謂水仙花數(shù)是指該數(shù)的各位數(shù)字的立方和等于該數(shù)本身,如153=13+53+33。循環(huán)結(jié)構(gòu)程序設(shè)計Python程序?qū)嵗旅娴某绦虍嫵鰣A形螺旋線。循環(huán)結(jié)構(gòu)程序設(shè)計Python程序?qū)嵗旅娴某绦虍嫵稣叫温菪€。需要說明的是,正方形圖不是若干個正方形套在一起,而是一條線畫出來的。算法與程序設(shè)計算法的作用;算法的特性;算法的評價標(biāo)準(zhǔn)/03算法的作用用計算機(jī)解決問題的幾個主要階段分析問題、設(shè)計算法:認(rèn)真分析要解決的問題及要實現(xiàn)的功能,給出解決問題的明確步驟,即設(shè)計出針對要解決問題的算法。選定語言、編寫程序:根據(jù)問題的性質(zhì),選定一種合適的程序設(shè)計語言(及相應(yīng)的開發(fā)環(huán)境),依據(jù)算法編寫源程序。執(zhí)行程序:對編寫出的源程序進(jìn)行編譯執(zhí)行或解釋執(zhí)行,程序中如果沒有語法錯誤,則會完成編譯或解釋并執(zhí)行程序,如果程序中存在語法錯誤,則編譯器或解釋器會給出提示信息,包括錯誤的位置及錯誤的性質(zhì)等,可根據(jù)提示信息找到錯誤并且改正。算法的作用用計算機(jī)解決問題的幾個主要階段程序調(diào)試測試:沒有語法錯誤,并不能說明程序完全無錯,可能還存在語義(邏輯)錯誤。程序通過編譯或解釋后,要選用一些有代表性的數(shù)據(jù)對程序進(jìn)行測試,經(jīng)過一定的測試,如果沒有發(fā)現(xiàn)錯誤,程序就可以交付使用了。如果在測試中發(fā)現(xiàn)錯誤,就要分析錯誤的性質(zhì),根據(jù)錯誤的性質(zhì)修改算法或修改程序(程序排錯),對于較大規(guī)模的程序,程序排錯是一項困難的工作,既需要經(jīng)驗,也需要一定的方法和工具支持。初學(xué)編程者感覺難點在于語言基本要素和語法規(guī)則的掌握,而實際上編寫高質(zhì)量、高性能程序的難點是良好的算法設(shè)計,相對于算法設(shè)計,編寫程序是比較簡單的。算法的作用算法與程序設(shè)計示例(從鍵盤輸入40個數(shù),找出其中的最大值并輸出)。思路1:通過鍵盤輸入40個數(shù)并分別存入40個變量a1、a2、a3、……、a40中,之后首先找出變量a1、a2中的較大者存入maxi,然后把變量maxi的值依次與變量a3、a4、a40中的值比較,如果maxi中的值小,則替換maxi的值,最后保留在maxi中的值就是40個數(shù)中的最大值。按思路1把程序代碼完整寫出來,一共會有121行代碼。這才有40個數(shù)據(jù),如果是400個數(shù)據(jù)、4000個數(shù)據(jù),更多的數(shù)據(jù)呢?很顯然,用這種思路編寫程序不是一個好方法,即這種找最大值的算法不好。算法的作用算法與程序設(shè)計示例(從鍵盤輸入40個數(shù),找出其中的最大值并輸出)?;谒悸?的程序代碼算法的作用算法與程序設(shè)計示例(從鍵盤輸入40個數(shù),找出其中的最大值并輸出)。思路2:假定第1個數(shù)就是最大值,存入maxi變量;然后第2個數(shù)和maxi中的值進(jìn)行比較,如果第2個數(shù)大,則用其替換掉maxi中的值,否則保持maxi中的值不變;這樣第3個數(shù),第4個數(shù),……,第40個數(shù),一直比較下去,maxi中總是保存比較過的數(shù)的最大值。按思路2編寫的程序只有6行代碼,而且,即使有400個數(shù)據(jù)、4000個數(shù)據(jù),或更多的數(shù)據(jù),用這6行代碼同樣能夠把其中的最大值找出來。算法的作用算法設(shè)計與程序設(shè)計示例(從鍵盤輸入40個數(shù),找出其中的最大值并輸出)。按思路2編寫的程序代碼。好的算法對于高效率編寫高質(zhì)量程序是多么的重要。實際上,包括人臉識別、機(jī)器翻譯、智能問答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、巧妙的算法設(shè)計。

算法的特性算法的定義算法(algorithm)就是為解決一個問題而采取的方法和步驟。程序(program)是指為讓計算機(jī)完成特定的任務(wù)而設(shè)計的指令序列或語句序列,一般認(rèn)為機(jī)器語言程序或匯編語言源程序由指令序列構(gòu)成,而高級語言源程序由語句序列構(gòu)成。程序設(shè)計(programming)是用來溝通算法與計算機(jī)的橋梁;程序是程序設(shè)計人員編寫的、計算機(jī)能夠理解并執(zhí)行的指令序列或語句序列,程序是解決問題的算法在計算機(jī)中的具體實現(xiàn)。算法的特性算法的特性有窮性:一個算法必須總是在執(zhí)行有限個操作步驟和可以接受的時間內(nèi)完成其執(zhí)行過程。即對于一個算法,要求其在時間和空間上均是有窮的。確定性:算法中的每一步都必須有明確的含義,不允許存在二義性。可行性:算法中描述的每一步操作都應(yīng)該能有效地執(zhí)行,并最終得到確定的結(jié)果。輸入及輸出:一個算法應(yīng)該有零個或多個輸入數(shù)據(jù),有一個或多個輸出數(shù)據(jù)。執(zhí)行算法的目的是為了求解,而“解”就是輸出,因此沒有輸出的算法是沒有意義的。從這個簡單的例子可以看出,好的算法對于高效率編寫高質(zhì)量程序是多么的重要。實際上,包括人臉識別、機(jī)器翻譯、智能問答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、精巧的算法設(shè)計 算法的評價標(biāo)準(zhǔn)算法的正確性算法的正確性是指算法能夠正確地求解所要解決的問題,就目前的研究來看,要想通過理論方式證明一個算法的正確性是非常復(fù)雜和困難的,一般采用測試的方法,基于算法編寫程序,然后對程序進(jìn)行測試。針對所要解決的問題,選定一些有代表性的輸入數(shù)據(jù),經(jīng)程序執(zhí)行后,查看輸出結(jié)果是否和預(yù)期結(jié)果一致,如果不一致,則說明程序中存在錯誤,應(yīng)予以查找并改正。經(jīng)過一定范圍的測試和程序修改,不再發(fā)現(xiàn)新的錯誤,程序可以交付使用,在使用過程中仍有可能發(fā)現(xiàn)錯誤,再繼續(xù)修改,這時的修改稱為程序維護(hù)。從這個簡單的例子可以看出,好的算法對于高效率編寫高質(zhì)量程序是多么的重要。實際上,包括人臉識別、機(jī)器翻譯、智能問答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、精巧的算法設(shè)計 算法的評價標(biāo)準(zhǔn)算法的正確性程序測試示例:從鍵盤輸入兩個自然數(shù)并分別賦值給n1和n2(n1<n2),輸出n1~n2之間的所有偶數(shù)。測試此程序時,如果給n1、n2分別輸入1和9,則會輸出4個偶數(shù):2、4、6、8,結(jié)果是正確的,如果據(jù)此就認(rèn)定程序正確,是不行的。實際上,如果給n1、n2分別輸入1和10,輸出結(jié)果仍然是4個偶數(shù):2、4、6、8,這個結(jié)果是不正確的,原因在于range(n1,n2)中的n2應(yīng)為n2+1,因為range(n1,n2+1)的取值范圍才是n1~n2,而range(n1,n2)的取值范圍是n1~n2-1,顯然不符合題目要求。算法的評價標(biāo)準(zhǔn)算法的時間復(fù)雜度算法的時間復(fù)雜度是指依據(jù)算法編寫出程序后,在計算機(jī)上運(yùn)行時所耗費(fèi)的時間度量。一個程序在計算機(jī)上運(yùn)行的時間取決于程序運(yùn)行時輸入的數(shù)據(jù)量、對源程序編譯所需要的時間、執(zhí)行每條語句所需要的時間以及語句重復(fù)執(zhí)行的次數(shù)。其中,最重要的是語句重復(fù)執(zhí)行的次數(shù)。通常,把整個程序中語句的重復(fù)執(zhí)行次數(shù)之和作為該程序的時間復(fù)雜度,記為T(n),其中n為問題的規(guī)模。算法的時間復(fù)雜度T(n)實際上是表示當(dāng)問題的規(guī)模n充分大時,該程序運(yùn)行時間的一個數(shù)量級度量,用O表示。算法的評價標(biāo)準(zhǔn)算法的時間復(fù)雜度示例百錢買百雞問題:百錢買百雞問題出自于我國古代數(shù)學(xué)史上的杰作《張丘建算經(jīng)》,張丘建是我國南北朝時期北魏數(shù)學(xué)家,書中對百錢買百雞問題的描述是:“今有雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。凡百錢買雞百只,問雞翁、母、雛各幾何?”算法的評價標(biāo)準(zhǔn)算法的時間復(fù)雜度示例這個程序總的循環(huán)次數(shù)是100萬次(即100×100×100次),即需要驗證100萬種可能的組合,時間復(fù)雜度為O(n3)。改寫后程序的循環(huán)次數(shù)為660次,時間復(fù)雜度降低為O(n2)。算法的評價標(biāo)準(zhǔn)算法的空間復(fù)雜度算法的空間復(fù)雜度是指依據(jù)算法編寫出程序后,在計算機(jī)上運(yùn)行時所需內(nèi)存空間大小的度量,也是和問題規(guī)模n有關(guān)的度量。算法的可理解性算法主要是為了人們的閱讀與交流,可理解性好的算法有利于人們的正確理解,有利于程序員據(jù)此編寫出正確的、易于理解的程序。為增強(qiáng)程序的可理解性,要注重培養(yǎng)良好的編程風(fēng)格。數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計概念和術(shù)語;線性結(jié)構(gòu);樹形結(jié)構(gòu);圖狀結(jié)構(gòu)/04數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的作用程序要處理的數(shù)據(jù)需要存儲在內(nèi)存單元中,整個內(nèi)存空間是由連續(xù)編址的一個個內(nèi)存單元組成的,多么復(fù)雜的數(shù)據(jù)也只能存放在這樣的一個一維空間內(nèi),這是數(shù)據(jù)存儲的物理結(jié)構(gòu)。對于矩陣、家族關(guān)系表、交通運(yùn)輸網(wǎng)這樣的數(shù)據(jù),如果編程人員直接使用數(shù)據(jù)存儲的物理結(jié)構(gòu),會大大增加編程的難度和工作量。能否找到一種機(jī)制,使得數(shù)據(jù)的內(nèi)部存儲結(jié)構(gòu)(物理結(jié)構(gòu))是線性連續(xù)的,而其邏輯結(jié)構(gòu)更符合人們習(xí)慣的方式,編寫程序時面對的是邏輯結(jié)構(gòu),程序執(zhí)行時,由支持相應(yīng)結(jié)構(gòu)的編譯程序自動把邏輯結(jié)構(gòu)映射成物理結(jié)構(gòu),從而簡化程序的編寫,減輕編程人員的工作量。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的概念和術(shù)語數(shù)據(jù)是信息的載體,它能夠被計算機(jī)識別、存儲和加工處理。計算機(jī)科學(xué)中,所謂數(shù)據(jù)就是計算機(jī)加工處理的對象,它可以是數(shù)值數(shù)據(jù),也可以是非數(shù)值數(shù)據(jù),如圖像、聲音、文本等。數(shù)據(jù)項是數(shù)據(jù)不可分割的最小單位。數(shù)據(jù)項有名和值之分,數(shù)據(jù)項名是數(shù)據(jù)項的標(biāo)識,用變量定義,而數(shù)據(jù)項值是它的一個可能取值。年齡就是一個數(shù)據(jù)項,在Python中可以定義為變量age,其取值可以是19、20等。數(shù)據(jù)元素是數(shù)據(jù)的基本單位,具有完整、確定的實際意義。數(shù)據(jù)元素一般由若干數(shù)據(jù)項組成。學(xué)生的基本情況就是一個數(shù)據(jù)元素,由學(xué)號、姓名、性別、年齡等數(shù)據(jù)項組成。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的概念和術(shù)語數(shù)據(jù)對象或稱數(shù)據(jù)元素類,是具有相同性質(zhì)的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。在某個具體問題中,數(shù)據(jù)元素都具有相同的性質(zhì),屬于同一數(shù)據(jù)對象,數(shù)據(jù)元素是數(shù)據(jù)元素類的一個實例。對于一個學(xué)生管理系統(tǒng)來說,某大學(xué)所有學(xué)生的基本情況就是數(shù)據(jù),所有本科生的基本情況、所有碩士研究生的基本情況可以看作是不同的數(shù)據(jù)對象。數(shù)據(jù)結(jié)構(gòu)(datastructure)指互相之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合。在任何問題中,數(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ù)元素之間存在著一對一的關(guān)系,如線性表、棧、隊列和數(shù)組等。按學(xué)號排列的學(xué)生數(shù)據(jù)可以看作是一個線性表,每個學(xué)生有且只有一個前驅(qū)(第一個學(xué)生除外)、有且只有一個后繼(最后一個學(xué)生除外)。樹形結(jié)構(gòu):數(shù)據(jù)元素之間存在著一對多的關(guān)系,如樹、二叉樹等。一個單位的工作人員之間的關(guān)系就可以表示成一棵樹,每個人有一個直接領(lǐng)導(dǎo)(單位的最高領(lǐng)導(dǎo)除外)和多個直接下屬(最基層的工作人員除外)。數(shù)據(jù)結(jié)構(gòu)概述三種基本數(shù)據(jù)結(jié)構(gòu)圖狀結(jié)構(gòu):數(shù)據(jù)元素之間存在著多對多的關(guān)系,圖狀結(jié)構(gòu)也稱網(wǎng)狀結(jié)構(gòu),如無向圖和有向圖等。鐵路交通圖是一種典型的圖狀結(jié)構(gòu),任意兩個城市之間可能存在多條路徑連通。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)的物理結(jié)構(gòu)與邏輯結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)描述的是數(shù)據(jù)元素之間的邏輯關(guān)系(如矩陣、樹、圖等)。數(shù)據(jù)在計算機(jī)中的表示稱為數(shù)據(jù)的物理結(jié)構(gòu)或存儲結(jié)構(gòu),它研究數(shù)據(jù)結(jié)構(gòu)在計算機(jī)中的實現(xiàn)方法,包括數(shù)據(jù)元素的表示及元素間關(guān)系的表示。數(shù)據(jù)的存儲結(jié)構(gòu)可采用順序存儲或鏈?zhǔn)酱鎯Φ姆椒ām樞虼鎯κ前堰壿嬌舷噜彽脑卮鎯υ谖锢砦恢靡蚕噜彽拇鎯卧?,由此得到順序存儲結(jié)構(gòu),常借助于編程語言中的數(shù)組或列表等來實現(xiàn)。鏈?zhǔn)酱鎯壿嬌舷噜彽脑夭灰笃湮锢砦恢孟噜彛亻g的邏輯關(guān)系通過附設(shè)的指針字段來表示,由此得到鏈?zhǔn)酱鎯Y(jié)構(gòu)。鏈?zhǔn)酱鎯Y(jié)構(gòu)通常借助于編程語言中的指針來實現(xiàn)。線性結(jié)構(gòu)

線性結(jié)構(gòu)是最常用、最簡單的數(shù)據(jù)結(jié)構(gòu),包括線性表、隊列、棧等,C語言中的數(shù)組、Python語言中的列表和元組都是線性結(jié)構(gòu)。線性表、隊列、??梢杂脭?shù)組或列表來實現(xiàn),本節(jié)以Python語言中的列表為例介紹線性結(jié)構(gòu)的使用。列表(list)是包含0個或多個數(shù)據(jù)的有序序列,其中的每個數(shù)據(jù)稱為元素,列表的元素個數(shù)(列表長度)和元素內(nèi)容都是可以改變的。使用列表,能夠靈活方便地對批量數(shù)據(jù)進(jìn)行組織和處理。線性結(jié)構(gòu)創(chuàng)建列表創(chuàng)建列表的語法格式如下:列表名=[值1,值2,值3,…,值n]功能:把一組值放在一對方括號內(nèi)組織成列表值并賦值給一個列表變量。列表值可以有0個、1個或多個,如果有多個列表值,值與值之間用逗號分隔。線性結(jié)構(gòu)訪問列表訪問列表中元素的語法格式如下:

列表名[索引值]列表是序列類型,其中的元素按所在的位置順序都有一個唯一的索引值(序號),通過這個索引值可以訪問到指定的元素。Python為列表元素設(shè)置了兩套索引:從0開始遞增索的正向引和從-1開始遞減的逆向索引。線性結(jié)構(gòu)增加列表元素增加列表元素的語法格式如下:列表名.append(新增元素值)或

列表名.insert(索引值,新增元素值)其中,append()函數(shù)用于在列表的末尾追加元素,insert()函數(shù)用于在列表的指定位置插入元素。線性結(jié)構(gòu)刪除列表元素刪除列表元素的語法格式如下:列表名.remove(元素值)或

del列表名[索引值]其中,remove()函數(shù)用于從列表中刪除指定的值,若有多個值和指定值相同,只刪除第一個。del格式用于刪除和指定索引值對應(yīng)的列表元素值。線性結(jié)構(gòu)修改列表元素值修改列表元素值的語法格式如下:列表名[索引值]=新元素值通過賦值語句的形式,用新元素值替換指定位置的現(xiàn)有元素值。對于已創(chuàng)建列表,既可以修改某個指定索引值對應(yīng)的元素值,也可以修改指定索引值范圍內(nèi)的若干元素值。線性結(jié)構(gòu)修改列表元素值如果給定的新值個數(shù)多于指定范圍內(nèi)的元素值個數(shù)(如lst2[-1:]=["金融學(xué)","二班"]),則相當(dāng)于增加元素值。如果給定的新值個數(shù)少于指定范圍內(nèi)的元素值個數(shù)(如lst2[1:3]=[“張明”]),則相當(dāng)于刪除元素值。線性結(jié)構(gòu)常用列表操作線性結(jié)構(gòu)常用列表操作線性結(jié)構(gòu)列表應(yīng)用示例統(tǒng)計一批數(shù)據(jù)中奇數(shù)的個數(shù)。線性結(jié)構(gòu)列表的元素還是列表(二維列表)如果一個列表中的元素也是列表,其實表示的是二維表或二維數(shù)組。在Python語言中,可以用元素為列表的列表表示其他高級語言中的二維數(shù)組。對于下圖所示的二維表數(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的值由用戶輸入。問題分析6行的楊輝三角數(shù)據(jù)如上圖(a)所示,為了便于描述,給出上圖(b)的形式。從圖(b)可以看出,各行數(shù)據(jù)的共同特點是:第1列和最后一列的值全為1,從第3行開始,其他位置的值等于其左上方位置值和正上方位置值之和??梢园颜麄€楊輝三角的數(shù)據(jù)存入一個列表(yanghui_lst),其中的每個元素(代表三角形中每行的數(shù)據(jù))也是一個列表(row_lst)。第1、2行的數(shù)據(jù)可以直接賦值,從第3行開始,逐個生成數(shù)據(jù)存入行列表row_lst,再將行列表作為元素值存入三角形列表yanghui_lst中。線性結(jié)構(gòu)二維列表應(yīng)用示例輸出楊輝三角前n行的數(shù)據(jù),n的值由用戶輸入。樹形結(jié)構(gòu)樹的定義樹(tree)是n(n≥0)個結(jié)點的有限集合。

當(dāng)n=0時,稱為空樹。在一棵非空樹T中:有且僅有一個特定的結(jié)點稱為樹的根結(jié)點;當(dāng)n>1時,除根結(jié)點之外的其余結(jié)點被分成m(m≥1)個互不相交的集合T1,T2,…,Tm,其中每一個集合Ti(1≤i≤m)本身又是一棵樹,并且稱為根結(jié)點的子樹。樹中的一個結(jié)點可以看作是一個數(shù)據(jù)元素。樹形結(jié)構(gòu)可以定義為Python中的字典。樹形結(jié)構(gòu)創(chuàng)建字典創(chuàng)建字典的語法格式如下:

字典名={鍵1:值1,鍵2:值2,鍵3:值3,…,鍵n:值n}功能:字典也是由若干個元素組成,由一對大括號括起來,每個元素是一個“鍵:值”對的形式,“鍵:值”對之間用逗號分開。如果有多個“鍵”相同的“鍵:值”對,只保留最后一個。樹形結(jié)構(gòu)訪問字典訪問字典的語法格式如下:字典名[鍵]功能:字典中的元素沒有對應(yīng)的索引值,元素的存儲順序可能與創(chuàng)建字典時的書寫順序不一致。對字典的訪問是根據(jù)“鍵”來找對應(yīng)的“值”。樹形結(jié)構(gòu)對字典的操作樹形結(jié)構(gòu)更新字典更新字典的語法格式如下:字典名[鍵]=值使用賦值語句可以增加元素或修改現(xiàn)有元素的值。如果在字典中沒有找到指定的“鍵”,則在字典中增加一個“鍵:值”對,如果找到,則用指定的“值”替換現(xiàn)有值。該語句既能增加元素,又能修改元素值。使用此功能要仔細(xì),否則,本來要進(jìn)行修改操作,由于“鍵”沒寫對,實際是完成了增加元素的功能。樹形結(jié)構(gòu)字典合并字典合并的語法格式如下:字典名1.update(字典名2)如果兩個字典的“鍵”沒有相同的,則把字典2的“鍵:值”對添加到字典1中(實現(xiàn)兩個字典的合并),如果有相同的,用字典2中的值修改字典1中相同“鍵”的對應(yīng)“值”。樹形結(jié)構(gòu)刪除字典元素或字典語法格式如下:

del字典名[鍵]如果在字典中找到指定的“鍵”,則刪除“鍵”和對應(yīng)的“值”,如果沒有找到指定的“鍵”,則會報錯。如果只有字典名,則刪除整個字典。還可以使用pop()函數(shù)刪除字典元素,語法格式如下:

字典名.pop(鍵,值)如果字典中存在指定的“鍵”,則返回對應(yīng)的“值”,同時刪除該“鍵:值”對,如果指定的“鍵”不存在,返回函數(shù)中給出的“值”。樹形結(jié)構(gòu)字典應(yīng)用示例基于字典實現(xiàn)學(xué)生信息管理:可以把學(xué)生信息組織成一個字典,以學(xué)號為“鍵”,其他信息為“值”,但這個“值”又是一個字典,可以實現(xiàn)查找、統(tǒng)計、修改等功能,如下程序?qū)崿F(xiàn)了根據(jù)輸入查找某個專業(yè)的學(xué)生信息的功能。樹形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫程序?qū)崿F(xiàn)某部門上下級部門的查找。樹形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫程序?qū)崿F(xiàn)某部門上下級部門的查找。把樹形結(jié)構(gòu)的內(nèi)部機(jī)構(gòu)設(shè)置定義為字典樹形結(jié)構(gòu)字典應(yīng)用示例定義函數(shù),用于在字典dic中查找結(jié)點node的上、下層結(jié)點。樹形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫程序?qū)崿F(xiàn)某部門上下級部門的查找。在主程序中調(diào)用函數(shù),實現(xiàn)查找功能。執(zhí)行程序的輸出結(jié)果如下:圖狀結(jié)構(gòu)圖的定義和術(shù)語圖是由非空的頂點集合和邊的集合組成的。對于左下圖,其頂點集合V={v1,v2,v3,v4,v5},邊的集合E={(v1,v2),(v1,v4),(v2,v3),(v2,v5),(v3,v4),(v3,v5),(v4,v5)}在一個圖中,如果頂點之間的連線(邊)是無向的,稱該圖為無向圖(左下圖);如果頂點之間的連線是有向的,稱該圖為有向圖(右下圖)。圖狀結(jié)構(gòu)圖的存儲結(jié)構(gòu)對于下面的無向圖,可以存儲為鄰接矩陣,由于(v1,v2)有連線,對應(yīng)元素值為1,由于(v1,v3)沒有連線,對應(yīng)元素為0。由于是無向圖,其鄰接矩陣是對稱的。鄰接矩陣可定義成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)圖的存儲結(jié)構(gòu)對于下面的無向圖,也可以存儲為鄰接表。由于頂點v1和頂點v2(序號為1)、v4(序號為3)有連線,所以有鄰接表中的,其余類似。鄰接表可定義成Python中的如下列表:

g_lst2=[['V1','V2','V4'],['V2','V3','V5'],['V3','V4','V5'],['V4','V5']]

編譯原理與程序設(shè)計編譯程序概述;詞法分析;語法分析;中間代碼生成;中間代碼優(yōu)化;編譯程序的開發(fā)/05編譯程序概述執(zhí)行高級語言源程序的步驟通過編譯程序(compiler)把源程序翻譯成機(jī)器語言程序(目標(biāo)程序)。執(zhí)行目標(biāo)程序。編譯程序的組成一個編譯程序一般包括詞法分析、語法分析、語義分析、中間代碼生成、中間代碼優(yōu)化和目標(biāo)代碼生成等工作。編譯程序的構(gòu)成詞法分析詞法分析的任務(wù)是從左至右逐個字符地對源程序進(jìn)行掃描,進(jìn)行詞法檢查并識別出一個個單詞,并以機(jī)內(nèi)符的形式表示單詞序列,用機(jī)內(nèi)符的形式表示單詞是為了便于后續(xù)工作的完成。詞法分析還要完成其他一些相關(guān)任務(wù),如過濾掉源程序中的注釋和空白,發(fā)現(xiàn)詞法錯誤,指出錯誤的位置和錯誤性質(zhì)等。編譯程序的構(gòu)成語法分析其任務(wù)是確認(rèn)作為詞法分析結(jié)果的單詞序列是否為給定語言的一個正確程序。在語法分析中,給定語言用文法表示,如果給定的程序(此時看作單詞串或機(jī)內(nèi)符串)能夠與該文法相匹配,則認(rèn)為程序是正確的,否則程序是錯誤的。單詞序列與給定文法匹配的方式有兩種:自頂向下分析法和自底向上分析法。自頂向下分析法是從文法的開始符出發(fā)試圖推導(dǎo)出給定的單詞串,如果能夠推導(dǎo)出,則說明單詞串是語法正確的程序,否則是錯誤的程序。自底向上分析方法是從給定的單詞串開始,試圖歸約(推導(dǎo)的逆操作)為文法的開始符,如果能歸約到文法開始符,則確認(rèn)單詞串是正確的程序,否則是錯誤的程序。編譯程序的構(gòu)成語義分析語義的任務(wù)是審查每個語法結(jié)構(gòu)的靜態(tài)語義,即驗證語法結(jié)構(gòu)合法的程序是否真正有意義,有時把這個工作稱為靜態(tài)語義分析或靜態(tài)審查。編譯程序的構(gòu)成中間代碼生成中間代碼是復(fù)雜性介于源程序語言和機(jī)器語言之間的一種表示形式。為了使編譯程序結(jié)構(gòu)在邏輯上更為簡單明確,常采用中間代碼,這樣可以將與機(jī)器相關(guān)的某些實現(xiàn)細(xì)節(jié)置于代碼生成階段仔細(xì)處理,并且可以在中間代碼一級進(jìn)行計算和優(yōu)化工作,使得計算和代碼優(yōu)化比較容易實現(xiàn)。

表達(dá)式a+b*c的中間代碼(逆波蘭式)為abc*+采用逆波蘭式形式表示表達(dá)式,可以簡化表達(dá)式的計算,在從左至右的掃描中,遇到運(yùn)算符就可以計算,運(yùn)算對象在該運(yùn)算符的左邊。而在一般表達(dá)式中,遇到運(yùn)算符,需要先比較和其他運(yùn)算符的優(yōu)先級別,然后才能決定是否進(jìn)行計算,對計算機(jī)來講處理難度比較大,效率比較低。

編譯程序的構(gòu)成中間代碼優(yōu)化中間代碼優(yōu)化的任務(wù)是對中間代碼進(jìn)行等價變換,使得變換后的代碼運(yùn)行結(jié)果與變換前代碼運(yùn)行結(jié)果相同,而運(yùn)行速度提高或存儲空間減少。常用的優(yōu)化技術(shù)有刪除多余運(yùn)算、代碼外提、強(qiáng)度削弱、變換循環(huán)控制條件、合并已知量與復(fù)寫傳播和刪除無用賦值等。

編譯程序的構(gòu)成目標(biāo)代碼生成目標(biāo)代碼生成是把經(jīng)過優(yōu)化后的中間代碼作為輸入,將其轉(zhuǎn)換成特定機(jī)器的機(jī)器語言程序或匯編語言程序作為輸出,這樣的轉(zhuǎn)換程序稱為代碼生成器。代碼生成器的構(gòu)造與輸入的中間代碼形式和輸出的目標(biāo)代碼的機(jī)器結(jié)構(gòu)密切相關(guān)。特別是高級語言的多樣性和計算機(jī)結(jié)構(gòu)的多樣性為代碼生成的理論研究和實現(xiàn)技術(shù)帶來很大的復(fù)雜性。編譯程序的開發(fā)編譯程序是一種相當(dāng)復(fù)雜的系統(tǒng)軟件,通常包含數(shù)萬行代碼,甚至數(shù)百萬行、千萬行代碼。隨著編譯技術(shù)的發(fā)展,編譯程序的生成周期也在逐漸縮短,但仍然需要很多人年的工作量,而且工作很艱巨,正確性也不易保證。計算機(jī)科學(xué)家們?yōu)榱藢崿F(xiàn)編譯程序的自動生成做了大量的工作,已有詞法分析程序的自動生成系統(tǒng)和語法分析程序的自動生成系統(tǒng)。編譯程序自動生成的關(guān)鍵是語義處理問題,近年來形式語義學(xué)的研究取得了很大的進(jìn)展,大大推動了編譯程序的自動生成研究工作,已出現(xiàn)了一些編譯程序(或某個階段工作)的自動生成系統(tǒng)。目前的主要問題是時間效率、空間節(jié)省問題。由自動生成系統(tǒng)產(chǎn)生的編譯程序,比人工開發(fā)的編譯程序占用更多的存儲空間,運(yùn)行效率也比較低。本章結(jié)束計算機(jī)導(dǎo)論袁方編著清華大學(xué)出版社出版《計算機(jī)導(dǎo)論(第5版)》配套課件計算機(jī)導(dǎo)論第7章軟件開發(fā)知識目錄CONTENTS03數(shù)據(jù)庫的發(fā)展01計算機(jī)軟件概述02數(shù)據(jù)庫原理及應(yīng)用0405軟件工程軟件開發(fā)過程計算機(jī)軟件概述系統(tǒng)軟件;應(yīng)用軟件/01計算機(jī)軟件的作用只有硬件的計算機(jī)是不能完成任何工作的,在硬件的基礎(chǔ)上,配置合適的軟件,才能充分發(fā)揮計算機(jī)的整體功能。

硬件是計算機(jī)的軀體,軟件是計算機(jī)的靈魂。

計算機(jī)專業(yè)人員的一項重要工作是開發(fā)軟件,開發(fā)軟件(特別是中大規(guī)模軟件)以程序設(shè)計能力為基礎(chǔ),以軟件工程知識作指導(dǎo),以數(shù)據(jù)庫知識為支撐。程序是完成一定功能的指令或語句的序列。軟件=程序+文檔。系統(tǒng)軟件系統(tǒng)軟件靠近硬件層,其功能主要是管理計算機(jī)軟硬件資源,與具體應(yīng)用領(lǐng)域無關(guān),為應(yīng)用軟件提供一些基本的、共同的功能支持。系統(tǒng)軟件并不能解決具體應(yīng)用問題,但解決具體問題的應(yīng)用軟件要在系統(tǒng)軟件的支持下才能開發(fā)和運(yùn)行。系統(tǒng)軟件主要包括操作系統(tǒng)、語言翻譯程序和數(shù)據(jù)庫管理系統(tǒng)等。系統(tǒng)軟件操作系統(tǒng)能否充分發(fā)揮計算機(jī)硬件的性能,操作系統(tǒng)起著非常重要的作用;使用者能否方便地操作使用計算機(jī),操作系統(tǒng)同樣發(fā)揮著重要作用。從微型機(jī)到超級計算機(jī)都必須在其硬件平臺上加載相應(yīng)的操作系統(tǒng)之后,才能構(gòu)成一個完整的、功能強(qiáng)大的計算機(jī)系統(tǒng)。也只有在操作系統(tǒng)的支持下,其他系統(tǒng)軟件和各種應(yīng)用軟件才能開發(fā)和運(yùn)行。操作系統(tǒng)(OS)可定義為:有效地組織和管理計算機(jī)系統(tǒng)中的硬件和軟件資源,合理地組織計算機(jī)工作流程,控制程序的執(zhí)行,并向用戶提供多種服務(wù)功能及友好界面,方便用戶使用計算機(jī)的系統(tǒng)軟件。目前,常用的操作系統(tǒng)是Windows、macOS、UNIX和Linux等。系統(tǒng)軟件語言翻譯程序程序設(shè)計語言大體經(jīng)歷了機(jī)器語言、匯編語言和高級語言三個階段。機(jī)器語言的優(yōu)點:機(jī)器語言程序能夠直接在計算機(jī)上執(zhí)行。匯編語言和高級語言的出現(xiàn),給程序設(shè)計帶來了很大的方便。但是,用匯編語言或高級語言編寫出的源程序,計算機(jī)并不能直接執(zhí)行,需要翻譯機(jī)器語言程序才能執(zhí)行。人們開發(fā)了相應(yīng)的翻譯程序,用于匯編語言源程序的翻譯程序叫匯編程序,用于高級語言源程序的翻譯程序叫解釋程序或編譯程序。各種匯編程序和編譯程序/解釋程序都屬于系統(tǒng)軟件。目前常用的高級語言有Python、C、C++、C#和Java等。系統(tǒng)軟件數(shù)據(jù)庫管理系統(tǒng)計算機(jī)應(yīng)用面最廣的一個領(lǐng)域是信息管理,信息管理的關(guān)鍵技術(shù)是數(shù)據(jù)庫技術(shù),把信息存入數(shù)據(jù)庫中并編寫相應(yīng)的數(shù)據(jù)庫應(yīng)用程序是開發(fā)信息管理系統(tǒng)的主要工作。如果沒有數(shù)據(jù)庫管理系統(tǒng)提供支持環(huán)境,數(shù)據(jù)庫的建立及數(shù)據(jù)庫應(yīng)用程序的開發(fā)是很困難的,甚至無法實現(xiàn)。數(shù)據(jù)庫管理系統(tǒng)是一個幫助人們建立數(shù)據(jù)庫和開發(fā)數(shù)據(jù)庫應(yīng)用程序的系統(tǒng)軟件,有了這個系統(tǒng)軟件的支持,建立數(shù)據(jù)庫和開發(fā)數(shù)據(jù)庫應(yīng)用程序就容易了。目前常用的數(shù)據(jù)庫管理系統(tǒng)有Oracle公司的Oracle、MySQL,微軟公司的SQLServer、Access,IBM公司的DB2等。應(yīng)用軟件應(yīng)用軟件用于解決實際問題,包括通用應(yīng)用軟件和專用應(yīng)用軟件通用應(yīng)用軟件:可以為多個行業(yè)和領(lǐng)域的人們使用,完成各自的任務(wù),如辦公軟件中的Excel就是一個通用的應(yīng)用軟件。專用應(yīng)用軟件:只供某個行業(yè)或某些人使用,如火車票售票軟件只能用于火車站、售票點或線上售賣火車票。應(yīng)用軟件包括軟件開發(fā)環(huán)境、辦公軟件、輔助設(shè)計軟件、多媒體制作軟件、網(wǎng)頁制作軟件、網(wǎng)絡(luò)通信軟件、工具軟件和實際應(yīng)用軟件等。數(shù)據(jù)庫原理及應(yīng)用關(guān)系數(shù)據(jù)庫;關(guān)系數(shù)據(jù)庫語言;常用關(guān)系數(shù)據(jù)庫管理系統(tǒng);數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)工具;數(shù)據(jù)庫設(shè)計/02關(guān)系數(shù)據(jù)庫數(shù)據(jù)庫相關(guān)概念數(shù)據(jù)庫(DB)是長期存儲在計算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲,具有較低的數(shù)據(jù)冗余度、較高的數(shù)據(jù)獨(dú)立性,并且可以為多個用戶共享。數(shù)據(jù)庫管理系統(tǒng)(DBMS)是位于用戶和操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,主要完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)庫的運(yùn)行管理和數(shù)據(jù)庫的維護(hù)等功能。數(shù)據(jù)庫應(yīng)用系統(tǒng)是以數(shù)據(jù)庫為核心的,在數(shù)據(jù)庫管理系統(tǒng)的支持下完成一定的數(shù)據(jù)存儲和管理功能的應(yīng)用軟件系統(tǒng),數(shù)據(jù)庫應(yīng)用系統(tǒng)也稱為數(shù)據(jù)庫系統(tǒng)(DBS)。關(guān)系數(shù)據(jù)庫應(yīng)用示例:針對大學(xué)生選課信息的存儲和管理,設(shè)計數(shù)據(jù)庫中的表。按傳統(tǒng)方式,我們可以把學(xué)生的選課信息放入下表所示的表格中。關(guān)系數(shù)據(jù)庫應(yīng)用示例:針對大學(xué)生選課信息的存儲和管理,設(shè)計數(shù)據(jù)庫中的表。傳統(tǒng)方式的不足如果按此表格結(jié)構(gòu)直接對應(yīng)成數(shù)據(jù)庫中的表,數(shù)據(jù)的冗余(數(shù)據(jù)重復(fù))比較大。每個學(xué)生的姓名、年齡、專業(yè),每門課程的課程名、學(xué)分都會在表中多次重復(fù)存放。數(shù)據(jù)冗余不僅浪費(fèi)存儲空間,更大的問題是容易造成數(shù)據(jù)的不一致。例如,某個同學(xué)如果轉(zhuǎn)專業(yè)了,那么對應(yīng)的表中數(shù)據(jù)應(yīng)該修改,如果多次存儲,就可能只修改部分值,導(dǎo)致該同學(xué)在表中的專業(yè)有兩個不同的值,這會給以后信息查詢等留下隱患。關(guān)系數(shù)據(jù)庫應(yīng)用示例:針對大學(xué)生選課信息的存儲和管理,設(shè)計數(shù)據(jù)庫中的表。遵循數(shù)據(jù)庫理論,可以把上面的一個表設(shè)計成表7.2~7.4的形式。關(guān)系數(shù)據(jù)庫應(yīng)用示例:針對大學(xué)生選課信息的存儲和管理,設(shè)計數(shù)據(jù)庫中的表。遵循數(shù)據(jù)庫理論,可以把上面的一個表設(shè)計成表7.2~7.4的形式。關(guān)系數(shù)據(jù)庫應(yīng)用示例:針對大學(xué)生選課信息的存儲和管理,設(shè)計數(shù)據(jù)庫中的表。這3個表格可以對應(yīng)成數(shù)據(jù)庫中的如下3個關(guān)系表,帶下畫線的屬性為主碼,主碼能唯一確定某個實體,如學(xué)號能唯一確定某個學(xué)生。

學(xué)生(學(xué)號,姓名,年齡,系別)課程(課程號,課程名,學(xué)分)選課(學(xué)號,課程號,成績)這樣存儲學(xué)生、課程和學(xué)生選課信息,基本去除了數(shù)據(jù)冗余。如果某個學(xué)生轉(zhuǎn)專業(yè)了,只在學(xué)生表中修改一個記錄即可。關(guān)系數(shù)據(jù)庫語言(SQL)SQL語言的特點非過程化的語言:只要提出“做什么”,而不必說明“如何做”,既減輕了用戶的負(fù)擔(dān),又提高了數(shù)據(jù)的獨(dú)立性與安全性。功能一體化的語言:基于同樣的語言風(fēng)格/語法格式可以完成數(shù)據(jù)定義、數(shù)據(jù)操作等功能。一種語法兩種使用方式:既可以被用戶以一種人機(jī)交互的方式,在終端鍵盤上直接輸入SQL命令來對數(shù)據(jù)庫進(jìn)行操作;又可以作為一種嵌入式語言,被程序設(shè)計人員在開發(fā)應(yīng)用程序時直接嵌入到某種高級語言(如Python語言)中使用。關(guān)系數(shù)據(jù)庫語言(SQL)SQL語言的特點面向集合操作的語言:非關(guān)系數(shù)據(jù)模型采用面向記錄的操作方式,操作對象是單一的某條記錄,而SQL允許用戶在較高層的數(shù)據(jù)結(jié)構(gòu)上工作,操作對象可以是若干記錄的集合,簡稱記錄集。所有SQL語句都接受記錄集作為輸入,返回記錄集作為輸出,其面向集合的特性還允許一條SQL語句的結(jié)果作為另一條SQL語句的輸入。語法簡潔、易學(xué)易用的標(biāo)準(zhǔn)語言:SQL不僅功能強(qiáng)大,而且語法接近英語口語,符合人類的思維習(xí)慣,因此較為容易學(xué)習(xí)和掌握。同時又由于它是一種通用的標(biāo)準(zhǔn)語言,使用SQL編寫的程序也具有良好的移植性。關(guān)系數(shù)據(jù)庫語言(SQL)SQL語言應(yīng)用示例:基于學(xué)生、課程、選課3個表,查詢選修了“計算機(jī)導(dǎo)論”課程的學(xué)生的姓名,可以寫出如下查詢語句:SELECT學(xué)生.姓名FROM學(xué)生,選課,課程WHERE學(xué)生.學(xué)號=選課.學(xué)號AND選課.課程號=課程.課程號AND課程.課程名="計算機(jī)導(dǎo)論";該語句值說明了查找什么,在哪幾個表中去查,并沒有說明如何去查。常用關(guān)系數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)的類型數(shù)據(jù)庫領(lǐng)域有4種主要的數(shù)據(jù)模型,即層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P?。?shù)據(jù)模型是組織數(shù)據(jù)的方式。層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫已過時,面向?qū)ο髷?shù)據(jù)庫沒有研發(fā)成功,現(xiàn)在用的是關(guān)系數(shù)據(jù)庫。近年來,計算機(jī)科學(xué)技術(shù)不斷發(fā)展,關(guān)系數(shù)據(jù)庫管理系統(tǒng)也不斷發(fā)展進(jìn)化,AB公司(2009年被Oracle公司收購)的MySQL、Microsoft公司的Access等是小型關(guān)系數(shù)據(jù)庫管理系統(tǒng)的代表,Oracle公司的Oracle、Microsoft公司的SQLServer、IBM公司的DB2等是功能強(qiáng)大的大型關(guān)系數(shù)據(jù)庫管理系統(tǒng)的代表。數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)工具早期的數(shù)據(jù)庫應(yīng)用由于是比較簡單的單機(jī)系統(tǒng),數(shù)據(jù)庫管理系統(tǒng)選用dBASE、FoxBASE、FoxPro、VisualFoxPro等,這些系統(tǒng)自身帶有開發(fā)環(huán)境,所以這時的數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)可以不用選擇開發(fā)工具。隨著計算機(jī)技術(shù)(特別是網(wǎng)絡(luò)技術(shù))和應(yīng)用需求的發(fā)展,數(shù)據(jù)庫應(yīng)用模式已逐步發(fā)展到C/S模式和B/S模式,數(shù)據(jù)庫管理系統(tǒng)需要選用功能強(qiáng)大的Oracle、SQLServer、DB2等,這時選用合適的開發(fā)工具成為提高數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)效率和質(zhì)量的一個重要因素。目前,可以選用Python作為數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)工具,在標(biāo)準(zhǔn)庫或第三方庫的支持下,使用Python語言開發(fā)數(shù)據(jù)庫應(yīng)用系統(tǒng)簡單、快捷。數(shù)據(jù)庫設(shè)計需求分析總體工作:對組織的工作現(xiàn)狀和用戶需求進(jìn)行調(diào)查、分析,明確用戶的信息需求和系統(tǒng)功能,提出擬建系統(tǒng)的邏輯方案。這里的重點是對建立數(shù)據(jù)庫的必要性及可行性進(jìn)行分析和研究,確定數(shù)據(jù)庫在整個數(shù)據(jù)庫應(yīng)用系統(tǒng)中的地位,確定出各個數(shù)據(jù)庫之間的關(guān)系。具體工作:選用哪種數(shù)據(jù)庫管理系統(tǒng)(DBMS)軟件及相應(yīng)的軟硬件、網(wǎng)絡(luò)環(huán)境配置;確定數(shù)據(jù)庫系統(tǒng)的功能;確定建立一個還是幾個數(shù)據(jù)庫;確定數(shù)據(jù)庫中表的個數(shù)及結(jié)構(gòu)。數(shù)據(jù)庫設(shè)計概念結(jié)構(gòu)設(shè)計將需求分析階段得到的用戶需求抽象為反映現(xiàn)實世界信息需求的數(shù)據(jù)庫概念結(jié)構(gòu)(概念模式)就是概念結(jié)構(gòu)設(shè)計。概念結(jié)構(gòu)從現(xiàn)實世界抽象而來,又是各種數(shù)據(jù)模型的共同基礎(chǔ),實際上是現(xiàn)實世界與邏輯結(jié)構(gòu)(機(jī)器世界)之間的一個過渡。描述概念模型的有效工具是實體-聯(lián)系圖(E-R圖)。概念結(jié)構(gòu)設(shè)計包括三個步驟:設(shè)計局部E-R圖、集成局部E-R圖為全局E-R圖、優(yōu)化全局E-R圖。數(shù)據(jù)庫設(shè)計邏輯結(jié)構(gòu)設(shè)計邏輯結(jié)構(gòu)設(shè)計是把概念結(jié)構(gòu)設(shè)計階段的E-R圖轉(zhuǎn)換成與具體的DBMS產(chǎn)品所支持的數(shù)據(jù)模型相一致的邏輯結(jié)構(gòu)。邏輯結(jié)構(gòu)設(shè)計包括兩個步驟:將E-R圖轉(zhuǎn)換為關(guān)系模型、對關(guān)系模型進(jìn)行優(yōu)化。優(yōu)化工作要用到函數(shù)依賴、關(guān)系范式等知識;得到優(yōu)化后的關(guān)系數(shù)據(jù)模型,就可以向特定的關(guān)系數(shù)據(jù)庫管理系統(tǒng)轉(zhuǎn)換,實際上是將一般的關(guān)系模型轉(zhuǎn)換成符合某一具體的能被計算機(jī)接受的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)模型,如Oracle、SQLServer、DB2等。數(shù)據(jù)庫設(shè)計物理結(jié)構(gòu)設(shè)計數(shù)據(jù)庫在實際的物理設(shè)備上的存儲結(jié)構(gòu)和存取方法稱為數(shù)據(jù)庫的物理結(jié)構(gòu)。為設(shè)計好的邏輯模型選擇一個最符合應(yīng)用要求的物理結(jié)構(gòu)就是數(shù)據(jù)庫的物理結(jié)構(gòu)設(shè)計。物理結(jié)構(gòu)設(shè)計的主要內(nèi)容包括三項:確定數(shù)據(jù)的存儲安排、存取路徑的選擇與調(diào)整和確定系統(tǒng)配置。RDBMS產(chǎn)品一般都提供有一些系統(tǒng)配置變量、存儲分配參數(shù)(同時使用數(shù)據(jù)庫的用戶數(shù)、同時打開的數(shù)據(jù)庫對象數(shù)、緩沖區(qū)的長度等),系統(tǒng)為這些變量賦予了合適的默認(rèn)值,在進(jìn)行數(shù)據(jù)庫的物理設(shè)計時可以直接使用這些值,也可以根據(jù)實際應(yīng)用環(huán)境重新設(shè)置這些值。數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫實施數(shù)據(jù)庫實施階段的工作就是根據(jù)邏輯設(shè)計和物理設(shè)計的結(jié)果,在選用的RDBMS上建立起數(shù)據(jù)庫。具體講有如下3項工作:建立數(shù)據(jù)庫的結(jié)構(gòu):以邏輯設(shè)計和物理設(shè)計的結(jié)果為依據(jù),用RDBMS的數(shù)據(jù)定義語言書寫數(shù)據(jù)庫結(jié)構(gòu)定義源程序并執(zhí)行程序。載入實驗數(shù)據(jù)并測試應(yīng)用程序:實驗數(shù)據(jù)可以是部分實際數(shù)據(jù),也可以是模擬數(shù)據(jù),應(yīng)使實驗數(shù)據(jù)盡可能覆蓋各種可能的實際情況,通過運(yùn)行應(yīng)用程序,測試系統(tǒng)的性能指標(biāo)。如不符合,是程序的問題修改程序,是數(shù)據(jù)庫的問題,則修改數(shù)據(jù)庫設(shè)計。載入全部實際數(shù)據(jù)并試運(yùn)行應(yīng)用程序,發(fā)現(xiàn)問題做類似處理。數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫運(yùn)行與維護(hù)數(shù)據(jù)庫經(jīng)過試運(yùn)行后就可以投入實際運(yùn)行了。但是,由于應(yīng)用環(huán)境在不斷變化,對數(shù)據(jù)庫設(shè)計進(jìn)行評價、調(diào)整、修改等維護(hù)工作是一個長期的任務(wù),也是設(shè)計工作的繼續(xù)和提高。在數(shù)據(jù)庫運(yùn)行階段,對數(shù)據(jù)庫經(jīng)常性的維護(hù)工作主要由數(shù)據(jù)庫管理員完成,主要工作包括數(shù)據(jù)庫的轉(zhuǎn)儲和恢復(fù)、數(shù)據(jù)庫的安全性和完整性控制、數(shù)據(jù)庫性能的監(jiān)督分析和優(yōu)化、數(shù)據(jù)庫的重組織與重構(gòu)造等。數(shù)據(jù)庫設(shè)計總結(jié)

數(shù)據(jù)庫設(shè)計以數(shù)據(jù)庫為主線說明數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)過程,分析、設(shè)計、實施、運(yùn)行維護(hù)分布在了這個主線上。后面的軟件工程著眼于一般軟件系統(tǒng)的設(shè)計開發(fā),數(shù)據(jù)庫設(shè)計是其中的一個環(huán)節(jié)。

當(dāng)開發(fā)實際項目時,以數(shù)據(jù)庫為主的數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)可以遵循數(shù)據(jù)庫設(shè)計過程,不以數(shù)據(jù)庫為主的一般軟件系統(tǒng)的開發(fā)可以遵循軟件工程的思想。數(shù)據(jù)庫的發(fā)展分布式數(shù)據(jù)庫;大數(shù)據(jù);區(qū)塊鏈;數(shù)據(jù)倉庫;數(shù)據(jù)挖掘/03分布式數(shù)據(jù)庫分布式數(shù)據(jù)庫概念分布式數(shù)據(jù)庫(DBS)是指分布在一個計算機(jī)網(wǎng)絡(luò)上的多個邏輯相關(guān)的數(shù)據(jù)庫的集合。即分布式數(shù)據(jù)庫是一組結(jié)構(gòu)化的數(shù)據(jù)集合,邏輯上屬于同一個系統(tǒng),物理上分布在計算機(jī)網(wǎng)絡(luò)中各個不同的場地上。從物理位置上看,數(shù)據(jù)分別存放在地理位置不同的數(shù)據(jù)庫中,但從用戶使用的角度看,數(shù)據(jù)如同存放在一個統(tǒng)一的數(shù)據(jù)庫中一樣。分布式數(shù)據(jù)庫系統(tǒng)(D-DBS)由分布式數(shù)據(jù)庫和分布式數(shù)據(jù)庫管理系統(tǒng)組成。分布式數(shù)據(jù)庫管理系統(tǒng)(D-DBMS)是分布式數(shù)據(jù)庫系統(tǒng)的一組軟件,負(fù)責(zé)對分布式數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行管理和操作。分布式數(shù)據(jù)庫分布式數(shù)據(jù)庫管理系統(tǒng)的組成本地數(shù)據(jù)庫管理系統(tǒng):每個結(jié)點上都有一個局部數(shù)據(jù)庫管理系統(tǒng)。全局?jǐn)?shù)據(jù)庫管理系統(tǒng):把物理上分散的局部數(shù)據(jù)庫整合成邏輯上統(tǒng)一的全局?jǐn)?shù)據(jù)庫。全局?jǐn)?shù)據(jù)字典:支持全局?jǐn)?shù)據(jù)庫管理系統(tǒng)對各局部數(shù)據(jù)庫的操作。通信管理:在分布式數(shù)據(jù)庫各結(jié)點之間傳送消息和數(shù)據(jù),完成通信功能。大數(shù)據(jù)大數(shù)據(jù)的定義大數(shù)據(jù)(bigdata)是指規(guī)模大到目前的軟件工具難以有效收集、存儲、管理和分析的數(shù)據(jù)。也指來自于多維多源的數(shù)據(jù)。大數(shù)據(jù)的特點數(shù)據(jù)量巨大:一般都在太字節(jié)(TB)以上;類型多樣:包括數(shù)值、文本、圖像、視頻、音頻等各種類型的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù);處理速度快:對大數(shù)據(jù)的分析處理速度要快,分析結(jié)果要能及時用于支持決策,也有人解釋為數(shù)據(jù)的增長速度快;價值大:原始數(shù)據(jù)價值密度低,但經(jīng)分析處理后價值巨大。大數(shù)據(jù)大數(shù)據(jù)應(yīng)用示例一美國華盛頓大學(xué)計算機(jī)專家奧倫·埃齊奧尼開發(fā)了一個機(jī)票價格預(yù)測系統(tǒng)Farecast,幫助人們在合適的時間以最低的價格購買機(jī)票到2012年為止,F(xiàn)arecast系統(tǒng)用了將近10萬億條價格記錄來幫助預(yù)測美國國內(nèi)航班的票價。Farecast票價預(yù)測的準(zhǔn)確度高達(dá)75%,使用Farecast

票價預(yù)測工具

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論