版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)導(dǎo)論第6章程序設(shè)計(jì)知識(shí)目錄CONTENTS03算法與程序設(shè)計(jì)01程序設(shè)計(jì)語言02Python語言程序設(shè)計(jì)0405數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)編譯原理與程序設(shè)計(jì)程序設(shè)計(jì)語言機(jī)器語言;匯編語言;早期高級(jí)語言;結(jié)構(gòu)化程序設(shè)計(jì)語言;面向?qū)ο蟪绦蛟O(shè)計(jì)語言/01程序設(shè)計(jì)語言程序設(shè)計(jì)語言的定義簡單說法:程序設(shè)計(jì)語言是用來編寫計(jì)算機(jī)程序的語言。規(guī)范描述:程序設(shè)計(jì)語言是一種讓人與計(jì)算機(jī)之間進(jìn)行交流,讓計(jì)算機(jī)理解人的意圖并按照人的意圖完成工作的符號(hào)系統(tǒng)。目前常用的高級(jí)程序設(shè)計(jì)語言主要有Python、C++、Java等。程序設(shè)計(jì)語言機(jī)器語言機(jī)器語言(machinelanguage)是由二進(jìn)制編碼的機(jī)器語言指令構(gòu)成的語言,是一種依附于機(jī)器硬件的語言。每種處理器(CPU)都有自己專用的機(jī)器語言指令集合,這些指令能夠被計(jì)算機(jī)直接執(zhí)行。每條機(jī)器語言指令完成一個(gè)簡單任務(wù)。一條機(jī)器語言指令由兩個(gè)部分組成:操作碼和操作數(shù),操作碼用于說明指令的功能,操作數(shù)用于說明參與操作的數(shù)據(jù)或數(shù)據(jù)所在的寄存器編號(hào)或數(shù)據(jù)所在內(nèi)存單元的地址。操作碼和操作數(shù)都是以二進(jìn)制的形式表示。程序設(shè)計(jì)語言機(jī)器語言程序示例把兩個(gè)內(nèi)存單元中的數(shù)據(jù)相加,并將結(jié)果存入另外一個(gè)單元。用機(jī)器語言編寫程序,編程人員必須要記住每條指令對(duì)應(yīng)的二進(jìn)制編碼是什么,編寫出來的程序就是由0和1組成的數(shù)字串。這樣就存在幾個(gè)方面的困難:指令難以準(zhǔn)確記憶、程序代碼容易寫錯(cuò)、程序難以理解和修改。程序設(shè)計(jì)語言匯編語言匯編語言(assemblylanguage)是由助記符指令構(gòu)成的語言,也是一種依附于機(jī)器硬件的語言。在匯編語言中,使用助記符(類英文單詞)來表示指令的操作碼,使用存儲(chǔ)單元或寄存器的名字表示操作數(shù)。這樣,相對(duì)于機(jī)器語言,記憶匯編語言的指令就容易多了,編寫出的程序也比較容易理解。程序設(shè)計(jì)語言匯編語言匯編語言程序示例(把兩個(gè)內(nèi)存單元中的數(shù)據(jù)相加,并將結(jié)果存入另外一個(gè)單元)實(shí)際上,計(jì)算機(jī)只能直接執(zhí)行由機(jī)器語言編寫的程序。用匯編語言編寫的程序稱為匯編語言源程序,需要首先翻譯成機(jī)器語言程序(目標(biāo)程序),才能被計(jì)算機(jī)執(zhí)行,完成這種翻譯工作的程序稱為匯編程序或匯編器。程序設(shè)計(jì)語言早期高級(jí)語言機(jī)器語言中的指令用二進(jìn)制編碼表示,匯編語言中的指令用英文助記符表示。高級(jí)語言(highlevellanguage)中的語句用英文和數(shù)學(xué)公式表示,更容易被編程人員理解和掌握。使用高級(jí)語言編寫出的程序稱為高級(jí)語言源程序,也需要先翻譯成目標(biāo)程序,才能為計(jì)算機(jī)理解和執(zhí)行。翻譯模式由2種:編譯模式和解釋模式。程序設(shè)計(jì)語言代表性早期高級(jí)語言FORTRAN語言:FORTRAN是公式翻譯器(FORmula
TRANslator)的縮寫,是第一個(gè)高級(jí)語言。FORTRAN語言用于數(shù)學(xué)公式的表達(dá)和科學(xué)計(jì)算,1957年FORTRAN的第一個(gè)版本研發(fā)成功,其編譯程序由25000行機(jī)器語言代碼組成。以后又陸續(xù)推出多個(gè)版本,包括結(jié)構(gòu)化程序設(shè)計(jì)語言版本和面向?qū)ο蟮某绦蛟O(shè)計(jì)語言版本。ALGOL語言:ALGOL是算法語言(ALGOrithmLanguage)的縮寫。AIGOL語言也是用于科學(xué)計(jì)算,其最早版本是1958年出現(xiàn)的ALGOL58,后續(xù)版本有ALGOL60和ALGOL68,這兩個(gè)版本曾經(jīng)在我國得到廣泛的學(xué)習(xí)和使用,其后繼語言Pascal出現(xiàn)后,ALGOL逐漸被淘汰。程序設(shè)計(jì)語言代表性早期高級(jí)語言COBOL語言:COBOL是面向商業(yè)的通用語言(COmmon
BusinessOrientedLanguage)的縮寫。COBOL語言用于企業(yè)管理和事務(wù)處理,1960年4月正式公布第一個(gè)COBOL文本,后續(xù)推出多個(gè)版本。BASIC語言:BASIC是初學(xué)者通用符號(hào)指令碼(Beginner′sAllpurposeSymbolicInstructionCode)的英文縮寫,1964年BASIC第1版發(fā)布。BASIC確實(shí)簡單、易學(xué),一經(jīng)推出,很快流行起來。BASIC語言在我國也曾經(jīng)廣泛流行。程序設(shè)計(jì)語言結(jié)構(gòu)化程序設(shè)計(jì)思想沿用編寫小程序的方法編寫中大規(guī)模的程序是不行的,往往導(dǎo)致編寫出的程序可靠性差、錯(cuò)誤多且難以發(fā)現(xiàn)和修改。1969年,埃德斯加·狄克斯特拉提出了結(jié)構(gòu)化程序設(shè)計(jì)的概念,強(qiáng)調(diào)從程序結(jié)構(gòu)和風(fēng)格上來研究程序設(shè)計(jì),注重程序結(jié)構(gòu)的清晰性,注重程序的可理解性和可修改性。經(jīng)過幾年的探索和實(shí)踐,結(jié)構(gòu)化程序設(shè)計(jì)方法的應(yīng)用確實(shí)取得了成效,遵循結(jié)構(gòu)化程序設(shè)計(jì)方法編寫出來的程序,不僅結(jié)構(gòu)良好、容易理解和閱讀,而且容易發(fā)現(xiàn)和改正其中的錯(cuò)誤。程序設(shè)計(jì)方法要有相應(yīng)的程序設(shè)計(jì)語言支持。程序設(shè)計(jì)語言結(jié)構(gòu)化程序設(shè)計(jì)語言Pascal語言:Pascal是一種通用的高級(jí)語言,是在ALGOL語言的基礎(chǔ)上發(fā)展起來的,以法國著名物理學(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語言有很大的影響,在我國也曾廣泛流行。程序設(shè)計(jì)語言結(jié)構(gòu)化程序設(shè)計(jì)語言C語言:1963年,英國劍橋大學(xué)在ALGOL60的基礎(chǔ)上添加了硬件處理功能,推出了CPL語言,1967年推出了簡化版的CPL(BCPL)。1970年美國貝爾實(shí)驗(yàn)室以BCPL為基礎(chǔ),設(shè)計(jì)出更簡單且更接近硬件的B語言。但B語言過于簡單,功能有限。1972~1973年,貝爾實(shí)驗(yàn)室在B語言的基礎(chǔ)上設(shè)計(jì)出了C語言。C語言既保持了BCPL和B語言精練、接近硬件的優(yōu)點(diǎn),又彌補(bǔ)了它們過于簡單、無數(shù)據(jù)類型的不足。1973年,貝爾實(shí)驗(yàn)室將用匯編語言編寫的UNIX操作系統(tǒng)用C語言改寫成UNIX第5版,C語言代碼占90%以上。1975年,用C語言編寫的UNIX第6版公布后,C語言的優(yōu)點(diǎn)引起人們的關(guān)注,隨著UNIX的日益廣泛使用,C語言也迅速得以推廣和廣泛應(yīng)用。程序設(shè)計(jì)語言面向?qū)ο蟪绦蛟O(shè)計(jì)思想結(jié)構(gòu)化程序設(shè)計(jì)方法在一定程度上保證了編寫較大規(guī)模程序的質(zhì)量,但隨著時(shí)間的推移,也逐漸暴露了其在編寫大規(guī)模程序時(shí)的不足。面向?qū)ο蠓椒ú辉賹栴}分解為過程,而是將問題分解為對(duì)象,對(duì)象將自己的屬性和方法封裝成一個(gè)整體,供編程人員使用,對(duì)象之間的相互作用則通過消息傳遞來實(shí)現(xiàn)。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,可以使人們對(duì)復(fù)雜系統(tǒng)的認(rèn)識(shí)過程與程序設(shè)計(jì)過程盡可能一致,能夠更好地保證大程序的質(zhì)量。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法也要有面向?qū)ο蟪绦蛟O(shè)計(jì)語言支持。程序設(shè)計(jì)語言面向?qū)ο蟪绦蛟O(shè)計(jì)語言Simula67和Smalltalk:Simula67發(fā)布于1967年,被公認(rèn)為是面向?qū)ο笳Z言的鼻祖。20世紀(jì)80年代美國施樂帕羅奧多研究中心推出了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言沒有能夠廣泛流行起來。C++語言:C++語言由貝爾實(shí)驗(yàn)室的本賈尼·斯特勞斯特盧普在20世紀(jì)80年代初設(shè)計(jì)并實(shí)現(xiàn)的,它是以C語言為基礎(chǔ)、支持?jǐn)?shù)據(jù)抽象和面向?qū)ο笏枷氲耐ㄓ贸绦蛟O(shè)計(jì)語言。C++是C語言的擴(kuò)充,借助于C語言的普及基礎(chǔ),C++得到廣泛應(yīng)用。
UNIXCC++程序設(shè)計(jì)語言面向?qū)ο蟪绦蛟O(shè)計(jì)語言Java語言是由SunMicrosystems公司于1995年5月推出的一個(gè)支持網(wǎng)絡(luò)計(jì)算的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。Java語言吸收了Smalltalk語言和C++語言的優(yōu)點(diǎn),并增加了并發(fā)程序設(shè)計(jì)、網(wǎng)絡(luò)通信和多媒體數(shù)據(jù)控制等特性,也是目前得到廣泛應(yīng)用的一種面向?qū)ο蟪绦蛟O(shè)計(jì)語言。C#語言:C#語言是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NETFramework之上的高級(jí)程序設(shè)計(jì)語言。C#在語法規(guī)則與系統(tǒng)結(jié)構(gòu)上與Java有著很多的相似之處,比如它包括了單繼承機(jī)制、界面以及與Java幾乎相同的語法,是微軟公司基于.NET網(wǎng)絡(luò)框架進(jìn)行系統(tǒng)開發(fā)的主角。程序設(shè)計(jì)語言面向?qū)ο蟪绦蛟O(shè)計(jì)語言Python語言:Python是一種完全面向?qū)ο蟮摹⒔忉屝偷某绦蛟O(shè)計(jì)語言,1991年發(fā)布了第一個(gè)公開版本。由于Python語言易學(xué)易用以及有大量的內(nèi)置庫和第三方庫可用,使得它成為一種得到廣泛應(yīng)用的程序設(shè)計(jì)語言。本書以Python為例簡要介紹編程知識(shí),詳細(xì)介紹可查閱袁方、肖勝剛、齊鴻志編寫的《Python語言程序設(shè)計(jì)(第2版)》一書。Python語言程序設(shè)計(jì)Python語言的特點(diǎn);Python程序的執(zhí)行:Python的基礎(chǔ)語法;Python的基本數(shù)據(jù)類型Python的類型轉(zhuǎn)換;順序結(jié)構(gòu)程序設(shè)計(jì);分支結(jié)構(gòu)程序設(shè)計(jì);Python程序?qū)嵗?02Python語言的特點(diǎn)易學(xué)易用Python語言的語法很多來自于C語言,但比C語言更為簡潔。相對(duì)于其他常用的程序設(shè)計(jì)語言,Python可以用更少的代碼實(shí)現(xiàn)相同的功能,更容易學(xué)習(xí)和使用,使編程人員更多地關(guān)注數(shù)據(jù)處理邏輯,而不是語法細(xì)節(jié)。庫函數(shù)豐富Python解釋器提供了幾百個(gè)內(nèi)置庫,還有十幾萬個(gè)第三方庫可用,幾乎覆蓋了計(jì)算機(jī)應(yīng)用的各個(gè)領(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語句或一個(gè)Python表達(dá)式,計(jì)算機(jī)就執(zhí)行語句或計(jì)算表達(dá)式的結(jié)果。IDLE實(shí)際上是一個(gè)Python的外殼,它提供了交互式的命令執(zhí)行方式,可以在提示符“>>>”后面輸入想要執(zhí)行的語句或表達(dá)式,回車后可以立即顯示執(zhí)行結(jié)果。命令行方式示例>>>print(“HelloWorld.”) >>>311**(1/3)Python程序的執(zhí)行程序文件方式在IDLE界面中,選擇菜單File→NewFile(新建文件),打開程序編輯窗口,可以輸入若干條語句,組成一個(gè)Python源程序。選擇菜單File→Save可以把程序代碼存盤,選擇菜單File→SaveAs…可以另存為…,選擇菜單File→Open可以打開已有文件,選擇Run→RunModule可以執(zhí)行程序文件,等等。Python的基礎(chǔ)語法Python標(biāo)識(shí)符Python語言規(guī)定:標(biāo)識(shí)符是由字母、數(shù)字和下畫線三種字符構(gòu)成的,且第一個(gè)字符必須是字母或下畫線的字符序列。Python語言的變量、函數(shù)、文件等各種實(shí)體的名字都需要用標(biāo)識(shí)符來表示。定義標(biāo)識(shí)符時(shí)要注意如下幾點(diǎn):必須以字母或下畫線作為開始符號(hào),數(shù)字不能作為開始符號(hào),但以下畫線開始的標(biāo)識(shí)符一般都有特定含義,所以盡量不用以下畫線開始的自定義標(biāo)識(shí)符。標(biāo)識(shí)符中只能出現(xiàn)字母、數(shù)字和下畫線,不能出現(xiàn)其他符號(hào)。同一字母的大寫和小寫被認(rèn)為是兩個(gè)不同的字符。關(guān)鍵字有特定的含義,不能用作用戶自定義標(biāo)識(shí)符使用。盡可能做到見名知義,增加程序的可理解性。Python的基礎(chǔ)語法常量與變量常量:是指在整個(gè)程序的執(zhí)行過程中其值不能被改變的量,也就是所說的常數(shù)。在用Python語言編寫程序時(shí),常量可以直接使用,常量的類型是由常量值本身決定的。例如,12是整型常量、34.56是浮點(diǎn)型常量、′a′和"Python"是字符串常量等。變量:是指在程序的執(zhí)行過程中其值可以被改變的量。變量要先定義(賦值),后使用。變量定義就是給變量賦值,格式如下:
變量名1,變量名2,…,變量名n=表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:為各變量在內(nèi)存中分配相應(yīng)的內(nèi)存單元并賦以相應(yīng)的值。分別計(jì)算出賦值號(hào)右邊各表達(dá)式的值,并依次賦給左邊的變量。Python的基礎(chǔ)語法常量與變量變量定義示例Python的基本數(shù)據(jù)類型整型整型就是整數(shù)類型。Python語言中整數(shù)的取值范圍很大,理論上沒有限制,實(shí)際取值受限于所用計(jì)算機(jī)的內(nèi)存容量,對(duì)于一般應(yī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語言中,邏輯數(shù)據(jù)只有兩個(gè)值:False(假)和True(真)。需要注意的是,兩個(gè)邏輯值的首字母大寫,其他字母小寫。FALSE、false、TRUE、true等書寫方式都不是正確的Python邏輯值。布爾型示例Python的基本數(shù)據(jù)類型字符串型字符串型數(shù)據(jù)用于表示字符序列,字符串常量是由一對(duì)引號(hào)括起來的字符序列。Python語言有三種形式的字符串:一對(duì)單引號(hào)括起來的字符序列,如,′Python′、′程序設(shè)計(jì)′;一對(duì)雙引號(hào)括起來的字符序列,如"Python"、"程序設(shè)計(jì)";一對(duì)三引號(hào)括起來的字符序列,如′′′Python′′′、′′′程序設(shè)計(jì)′′′。關(guān)于字符串的幾點(diǎn)解釋單引號(hào)括起來的字符串中可以出現(xiàn)雙引號(hào),雙引號(hào)括起來的字符串中可以出現(xiàn)單引號(hào),三引號(hào)括起來的字符串中可以出現(xiàn)單引號(hào)和雙引號(hào)。單引號(hào)或雙引號(hào)括起來的字符串只能書寫在一行內(nèi),三引號(hào)括起來的字符串可以書寫多行。Python的基本數(shù)據(jù)類型字符串型關(guān)于字符串的幾點(diǎn)解釋字符串有兩個(gè)特例,一個(gè)是單字符字符串,可稱為字符;另一個(gè)是不包含任何字符的字符串,稱為空字符串。由三引號(hào)括起來的字符序列,如果出現(xiàn)在賦值語句中或print()函數(shù)內(nèi),當(dāng)作字符串處理;如果直接出現(xiàn)在程序中,當(dāng)作程序注釋。字符串示例Python的基本數(shù)據(jù)類型字符串型轉(zhuǎn)義字符:Python語言中,以Unicode編碼存儲(chǔ)字符串,單個(gè)英文字符和單個(gè)漢字都被看作一個(gè)字符。如果用到控制符,只能寫成編碼值的形式。如09、0A(十六進(jìn)制數(shù))分別表示水平制表符、換行等。直接書寫編碼值的方式需要記憶編碼值,也容易寫錯(cuò)。為此,Python語言給出了一種轉(zhuǎn)義符的表示形式,以反斜杠(\)開始的符號(hào)不再是原來的意義,而是轉(zhuǎn)換為新的含義。如\n代表換行符,\t代表水平制表符等。Python的基本數(shù)據(jù)類型字符串型字符串的訪問:對(duì)于字符串,除了可以整體使用外,還有兩種常用的訪問方式:索引方式和切片方式。索引訪問方式也稱為單字符訪問方式,語法格式如下:
字符串變量名[索引值]功能:從字符串中取出與索引值對(duì)應(yīng)的一個(gè)字符。Python的基本數(shù)據(jù)類型字符串型切片訪問:該方式也稱為子串訪問方式,語法格式如下:
字符串變量名[i:j:k]功能:從字符串中取出多個(gè)字符。其中,i為開始位置,j為結(jié)束位置(但不包括j位置上的字符),k為步長。參數(shù)i、j、k都可以省略。在步長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)開始)轉(zhuǎn)換為整型,把由數(shù)字和1位小數(shù)點(diǎn)組合成的字符串(可由正負(fù)號(hào)開始)轉(zhuǎn)化為浮點(diǎn)型數(shù)據(jù)。eval()函數(shù)的語法格式如下:
eval(字符串)功能:將字符串的內(nèi)容,即去掉界定符(引號(hào))之后的表達(dá)式看作一個(gè)Python表達(dá)式,并計(jì)算出表達(dá)式的值作為函數(shù)的結(jié)果。順序結(jié)構(gòu)程序設(shè)計(jì)賦值語句賦值語句的語法格式:
變量名1,變量名2,…,變量名n=表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:先計(jì)算出各表達(dá)式的值,然后依次賦給賦值運(yùn)算符左邊的變量。一個(gè)賦值語句可以只給一個(gè)變量賦值,也可以同時(shí)給多個(gè)變量賦值。對(duì)于一些先進(jìn)行運(yùn)算再賦值的操作,Python語言還提供了7個(gè)常用的復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=、//=、**=。
順序結(jié)構(gòu)程序設(shè)計(jì)用input()函數(shù)輸入數(shù)據(jù)使用input()函數(shù)輸入數(shù)據(jù)的語法格式如下:
變量=input("提示信息")功能:從鍵盤輸入數(shù)據(jù)并賦給變量,Python解釋器把用戶的輸入看作字符串。
順序結(jié)構(gòu)程序設(shè)計(jì)用print()函數(shù)輸出數(shù)據(jù)使用print()函數(shù)輸出數(shù)據(jù)的語法格式如下: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)(,)分開,如果沒有任何表達(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é)構(gòu)。在順序結(jié)構(gòu)程序中,程序的執(zhí)行是按照語句塊出現(xiàn)的先后次序順序執(zhí)行的,并且每個(gè)語句塊都會(huì)被執(zhí)行到。順序結(jié)構(gòu)程序設(shè)計(jì)示例通過鍵盤輸入直角三角形的兩個(gè)直角邊邊長,計(jì)算斜邊邊長并輸出。分支結(jié)構(gòu)程序設(shè)計(jì)if語句if語句用來實(shí)現(xiàn)單分支選擇,語法格式為:
if表達(dá)式:
語句塊if語句的執(zhí)行過程是:先計(jì)算表達(dá)式的值,若值為True(真),則執(zhí)行if子句(表達(dá)式后面的語句塊),然后執(zhí)行if結(jié)構(gòu)后面的語句;否則,跳過if子句,直接執(zhí)行if結(jié)構(gòu)后面的語句。分支結(jié)構(gòu)程序設(shè)計(jì)if-else語句if-else語句用來實(shí)現(xiàn)雙分支選擇,其語法格式為:
if表達(dá)式:語句塊1else:語句塊2iif-else語句的執(zhí)行過程是:先計(jì)算表達(dá)式的值,若結(jié)果為True,則執(zhí)行if子句(語句塊1),否則執(zhí)行else子句(語句塊2)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)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)是指包含多個(gè)數(shù)據(jù)元素的復(fù)合數(shù)據(jù)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for循環(huán)程序示例從鍵盤輸入若干個(gè)以正整數(shù)表示的考試成績,計(jì)算總成績和平均成績并輸出。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語句中的range()函數(shù)range()函數(shù)的一般格式如下:range(start,end,step)功能:生成若干個(gè)整數(shù)值,初始數(shù)值為start,結(jié)束數(shù)值為end-1或end+1(注意,不包括end),步長為step。當(dāng)步長step為正數(shù)時(shí),結(jié)束數(shù)值為end-1;當(dā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)語句while循環(huán)語句的語法格式為:
while表達(dá)式:語句塊
while語句的執(zhí)行過程是:先計(jì)算表達(dá)式的值,若表達(dá)式的值為True,則執(zhí)行循環(huán)體語句塊;然后再次計(jì)算表達(dá)式的值,若結(jié)果仍為True,再次執(zhí)行循環(huán)體語句塊;如此繼續(xù)下去,直至表達(dá)式的值變?yōu)镕alse,則結(jié)束while循環(huán)語句的執(zhí)行。
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while循環(huán)程序示例從鍵盤上輸入若干個(gè)以正整數(shù)表示的考試成績,計(jì)算總成績和平均成績并輸出。與前面示例不同的是,不知道成績的個(gè)數(shù),用輸入-1作為結(jié)束。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)帶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é)束時(shí),執(zhí)行else對(duì)應(yīng)的語句塊;當(dāng)循環(huán)語句提前結(jié)束時(shí),不執(zhí)行else對(duì)應(yīng)的語句塊。帶else的循環(huán)語句一般要和break語句配合使用。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)break語句break語句的語法格式如下:breakbreak語句用于循環(huán)結(jié)構(gòu)中,其功能是提前結(jié)束整個(gè)循環(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è)計(jì)帶break語句的循環(huán)程序示例從鍵盤上輸入一個(gè)大于1的正整數(shù),判斷其是否為素?cái)?shù)。帶else的for語句和break配合使用,使程序更為簡潔、邏輯清晰。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Python程序?qū)嵗龔逆I盤輸入一個(gè)字符串,把字符串中的數(shù)字字符分離出來并組成一個(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ū)嵗旅娴某绦虍嫵鰣A形螺旋線。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Python程序?qū)嵗旅娴某绦虍嫵稣叫温菪€。需要說明的是,正方形圖不是若干個(gè)正方形套在一起,而是一條線畫出來的。算法與程序設(shè)計(jì)算法的作用;算法的特性;算法的評(píng)價(jià)標(biāo)準(zhǔn)/03算法的作用用計(jì)算機(jī)解決問題的幾個(gè)主要階段分析問題、設(shè)計(jì)算法:認(rèn)真分析要解決的問題及要實(shí)現(xiàn)的功能,給出解決問題的明確步驟,即設(shè)計(jì)出針對(duì)要解決問題的算法。選定語言、編寫程序:根據(jù)問題的性質(zhì),選定一種合適的程序設(shè)計(jì)語言(及相應(yīng)的開發(fā)環(huán)境),依據(jù)算法編寫源程序。執(zhí)行程序:對(duì)編寫出的源程序進(jìn)行編譯執(zhí)行或解釋執(zhí)行,程序中如果沒有語法錯(cuò)誤,則會(huì)完成編譯或解釋并執(zhí)行程序,如果程序中存在語法錯(cuò)誤,則編譯器或解釋器會(huì)給出提示信息,包括錯(cuò)誤的位置及錯(cuò)誤的性質(zhì)等,可根據(jù)提示信息找到錯(cuò)誤并且改正。算法的作用用計(jì)算機(jī)解決問題的幾個(gè)主要階段程序調(diào)試測試:沒有語法錯(cuò)誤,并不能說明程序完全無錯(cuò),可能還存在語義(邏輯)錯(cuò)誤。程序通過編譯或解釋后,要選用一些有代表性的數(shù)據(jù)對(duì)程序進(jìn)行測試,經(jīng)過一定的測試,如果沒有發(fā)現(xiàn)錯(cuò)誤,程序就可以交付使用了。如果在測試中發(fā)現(xiàn)錯(cuò)誤,就要分析錯(cuò)誤的性質(zhì),根據(jù)錯(cuò)誤的性質(zhì)修改算法或修改程序(程序排錯(cuò)),對(duì)于較大規(guī)模的程序,程序排錯(cuò)是一項(xiàng)困難的工作,既需要經(jīng)驗(yàn),也需要一定的方法和工具支持。初學(xué)編程者感覺難點(diǎn)在于語言基本要素和語法規(guī)則的掌握,而實(shí)際上編寫高質(zhì)量、高性能程序的難點(diǎn)是良好的算法設(shè)計(jì),相對(duì)于算法設(shè)計(jì),編寫程序是比較簡單的。算法的作用算法與程序設(shè)計(jì)示例(從鍵盤輸入40個(gè)數(shù),找出其中的最大值并輸出)。思路1:通過鍵盤輸入40個(gè)數(shù)并分別存入40個(gè)變量a1、a2、a3、……、a40中,之后首先找出變量a1、a2中的較大者存入maxi,然后把變量maxi的值依次與變量a3、a4、a40中的值比較,如果maxi中的值小,則替換maxi的值,最后保留在maxi中的值就是40個(gè)數(shù)中的最大值。按思路1把程序代碼完整寫出來,一共會(huì)有121行代碼。這才有40個(gè)數(shù)據(jù),如果是400個(gè)數(shù)據(jù)、4000個(gè)數(shù)據(jù),更多的數(shù)據(jù)呢?很顯然,用這種思路編寫程序不是一個(gè)好方法,即這種找最大值的算法不好。算法的作用算法與程序設(shè)計(jì)示例(從鍵盤輸入40個(gè)數(shù),找出其中的最大值并輸出)。基于思路1的程序代碼算法的作用算法與程序設(shè)計(jì)示例(從鍵盤輸入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中總是保存比較過的數(shù)的最大值。按思路2編寫的程序只有6行代碼,而且,即使有400個(gè)數(shù)據(jù)、4000個(gè)數(shù)據(jù),或更多的數(shù)據(jù),用這6行代碼同樣能夠把其中的最大值找出來。算法的作用算法設(shè)計(jì)與程序設(shè)計(jì)示例(從鍵盤輸入40個(gè)數(shù),找出其中的最大值并輸出)。按思路2編寫的程序代碼。好的算法對(duì)于高效率編寫高質(zhì)量程序是多么的重要。實(shí)際上,包括人臉識(shí)別、機(jī)器翻譯、智能問答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計(jì)算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、巧妙的算法設(shè)計(jì)。
算法的特性算法的定義算法(algorithm)就是為解決一個(gè)問題而采取的方法和步驟。程序(program)是指為讓計(jì)算機(jī)完成特定的任務(wù)而設(shè)計(jì)的指令序列或語句序列,一般認(rèn)為機(jī)器語言程序或匯編語言源程序由指令序列構(gòu)成,而高級(jí)語言源程序由語句序列構(gòu)成。程序設(shè)計(jì)(programming)是用來溝通算法與計(jì)算機(jī)的橋梁;程序是程序設(shè)計(jì)人員編寫的、計(jì)算機(jī)能夠理解并執(zhí)行的指令序列或語句序列,程序是解決問題的算法在計(jì)算機(jī)中的具體實(shí)現(xiàn)。算法的特性算法的特性有窮性:一個(gè)算法必須總是在執(zhí)行有限個(gè)操作步驟和可以接受的時(shí)間內(nèi)完成其執(zhí)行過程。即對(duì)于一個(gè)算法,要求其在時(shí)間和空間上均是有窮的。確定性:算法中的每一步都必須有明確的含義,不允許存在二義性。可行性:算法中描述的每一步操作都應(yīng)該能有效地執(zhí)行,并最終得到確定的結(jié)果。輸入及輸出:一個(gè)算法應(yīng)該有零個(gè)或多個(gè)輸入數(shù)據(jù),有一個(gè)或多個(gè)輸出數(shù)據(jù)。執(zhí)行算法的目的是為了求解,而“解”就是輸出,因此沒有輸出的算法是沒有意義的。從這個(gè)簡單的例子可以看出,好的算法對(duì)于高效率編寫高質(zhì)量程序是多么的重要。實(shí)際上,包括人臉識(shí)別、機(jī)器翻譯、智能問答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計(jì)算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、精巧的算法設(shè)計(jì) 算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的正確性算法的正確性是指算法能夠正確地求解所要解決的問題,就目前的研究來看,要想通過理論方式證明一個(gè)算法的正確性是非常復(fù)雜和困難的,一般采用測試的方法,基于算法編寫程序,然后對(duì)程序進(jìn)行測試。針對(duì)所要解決的問題,選定一些有代表性的輸入數(shù)據(jù),經(jīng)程序執(zhí)行后,查看輸出結(jié)果是否和預(yù)期結(jié)果一致,如果不一致,則說明程序中存在錯(cuò)誤,應(yīng)予以查找并改正。經(jīng)過一定范圍的測試和程序修改,不再發(fā)現(xiàn)新的錯(cuò)誤,程序可以交付使用,在使用過程中仍有可能發(fā)現(xiàn)錯(cuò)誤,再繼續(xù)修改,這時(shí)的修改稱為程序維護(hù)。從這個(gè)簡單的例子可以看出,好的算法對(duì)于高效率編寫高質(zhì)量程序是多么的重要。實(shí)際上,包括人臉識(shí)別、機(jī)器翻譯、智能問答等人工智能應(yīng)用在內(nèi)的很多應(yīng)用,我們看到的是在計(jì)算機(jī)或手機(jī)上運(yùn)行的程序(軟件),而程序(軟件)的背后是高水平、精巧的算法設(shè)計(jì) 算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的正確性程序測試示例:從鍵盤輸入兩個(gè)自然數(shù)并分別賦值給n1和n2(n1<n2),輸出n1~n2之間的所有偶數(shù)。測試此程序時(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ù)算法編寫出程序后,在計(jì)算機(jī)上運(yùn)行時(shí)所耗費(fèi)的時(shí)間度量。一個(gè)程序在計(jì)算機(jī)上運(yùn)行的時(shí)間取決于程序運(yùn)行時(shí)輸入的數(shù)據(jù)量、對(duì)源程序編譯所需要的時(shí)間、執(zhí)行每條語句所需要的時(shí)間以及語句重復(fù)執(zhí)行的次數(shù)。其中,最重要的是語句重復(fù)執(zhí)行的次數(shù)。通常,把整個(gè)程序中語句的重復(fù)執(zhí)行次數(shù)之和作為該程序的時(shí)間復(fù)雜度,記為T(n),其中n為問題的規(guī)模。算法的時(shí)間復(fù)雜度T(n)實(shí)際上是表示當(dāng)問題的規(guī)模n充分大時(shí),該程序運(yùn)行時(shí)間的一個(gè)數(shù)量級(jí)度量,用O表示。算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的時(shí)間復(fù)雜度示例百錢買百雞問題:百錢買百雞問題出自于我國古代數(shù)學(xué)史上的杰作《張丘建算經(jīng)》,張丘建是我國南北朝時(shí)期北魏數(shù)學(xué)家,書中對(duì)百錢買百雞問題的描述是:“今有雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。凡百錢買雞百只,問雞翁、母、雛各幾何?”算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的時(shí)間復(fù)雜度示例這個(gè)程序總的循環(huán)次數(shù)是100萬次(即100×100×100次),即需要驗(yàn)證100萬種可能的組合,時(shí)間復(fù)雜度為O(n3)。改寫后程序的循環(huán)次數(shù)為660次,時(shí)間復(fù)雜度降低為O(n2)。算法的評(píng)價(jià)標(biāo)準(zhǔn)算法的空間復(fù)雜度算法的空間復(fù)雜度是指依據(jù)算法編寫出程序后,在計(jì)算機(jī)上運(yùn)行時(shí)所需內(nèi)存空間大小的度量,也是和問題規(guī)模n有關(guān)的度量。算法的可理解性算法主要是為了人們的閱讀與交流,可理解性好的算法有利于人們的正確理解,有利于程序員據(jù)此編寫出正確的、易于理解的程序。為增強(qiáng)程序的可理解性,要注重培養(yǎng)良好的編程風(fēng)格。數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)概念和術(shù)語;線性結(jié)構(gòu);樹形結(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í)慣的方式,編寫程序時(shí)面對(duì)的是邏輯結(jié)構(gòu),程序執(zhí)行時(shí),由支持相應(yīng)結(jié)構(gòu)的編譯程序自動(dòng)把邏輯結(jié)構(gòu)映射成物理結(jié)構(gòu),從而簡化程序的編寫,減輕編程人員的工作量。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)的概念和術(shù)語數(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ù)語數(shù)據(jù)對(duì)象或稱數(shù)據(jù)元素類,是具有相同性質(zhì)的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。在某個(gè)具體問題中,數(shù)據(jù)元素都具有相同的性質(zhì),屬于同一數(shù)據(jù)對(duì)象,數(shù)據(jù)元素是數(shù)據(jù)元素類的一個(gè)實(shí)例。對(duì)于一個(gè)學(xué)生管理系統(tǒng)來說,某大學(xué)所有學(xué)生的基本情況就是數(shù)據(jù),所有本科生的基本情況、所有碩士研究生的基本情況可以看作是不同的數(shù)據(jù)對(duì)象。數(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ù)元素之間存在著一對(duì)一的關(guān)系,如線性表、棧、隊(duì)列和數(shù)組等。按學(xué)號(hào)排列的學(xué)生數(shù)據(jù)可以看作是一個(gè)線性表,每個(gè)學(xué)生有且只有一個(gè)前驅(qū)(第一個(gè)學(xué)生除外)、有且只有一個(gè)后繼(最后一個(gè)學(xué)生除外)。樹形結(jié)構(gòu):數(shù)據(jù)元素之間存在著一對(duì)多的關(guān)系,如樹、二叉樹等。一個(gè)單位的工作人員之間的關(guān)系就可以表示成一棵樹,每個(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),如無向圖和有向圖等。鐵路交通圖是一種典型的圖狀結(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ù)據(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),常借助于編程語言中的數(shù)組或列表等來實(shí)現(xiàn)。鏈?zhǔn)酱鎯?chǔ)對(duì)邏輯上相鄰的元素不要求其物理位置相鄰,元素間的邏輯關(guān)系通過附設(shè)的指針字段來表示,由此得到鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)通常借助于編程語言中的指針來實(shí)現(xiàn)。線性結(jié)構(gòu)
線性結(jié)構(gòu)是最常用、最簡單的數(shù)據(jù)結(jié)構(gòu),包括線性表、隊(duì)列、棧等,C語言中的數(shù)組、Python語言中的列表和元組都是線性結(jié)構(gòu)。線性表、隊(duì)列、棧可以用數(shù)組或列表來實(shí)現(xiàn),本節(jié)以Python語言中的列表為例介紹線性結(jié)構(gòu)的使用。列表(list)是包含0個(gè)或多個(gè)數(shù)據(jù)的有序序列,其中的每個(gè)數(shù)據(jù)稱為元素,列表的元素個(gè)數(shù)(列表長度)和元素內(nèi)容都是可以改變的。使用列表,能夠靈活方便地對(duì)批量數(shù)據(jù)進(jìn)行組織和處理。線性結(jié)構(gòu)創(chuàng)建列表創(chuàng)建列表的語法格式如下:列表名=[值1,值2,值3,…,值n]功能:把一組值放在一對(duì)方括號(hào)內(nèi)組織成列表值并賦值給一個(gè)列表變量。列表值可以有0個(gè)、1個(gè)或多個(gè),如果有多個(gè)列表值,值與值之間用逗號(hào)分隔。線性結(jié)構(gòu)訪問列表訪問列表中元素的語法格式如下:
列表名[索引值]列表是序列類型,其中的元素按所在的位置順序都有一個(gè)唯一的索引值(序號(hào)),通過這個(gè)索引值可以訪問到指定的元素。Python為列表元素設(shè)置了兩套索引:從0開始遞增索的正向引和從-1開始遞減的逆向索引。線性結(jié)構(gòu)增加列表元素增加列表元素的語法格式如下:列表名.append(新增元素值)或
列表名.insert(索引值,新增元素值)其中,append()函數(shù)用于在列表的末尾追加元素,insert()函數(shù)用于在列表的指定位置插入元素。線性結(jié)構(gòu)刪除列表元素刪除列表元素的語法格式如下:列表名.remove(元素值)或
del列表名[索引值]其中,remove()函數(shù)用于從列表中刪除指定的值,若有多個(gè)值和指定值相同,只刪除第一個(gè)。del格式用于刪除和指定索引值對(duì)應(yīng)的列表元素值。線性結(jié)構(gòu)修改列表元素值修改列表元素值的語法格式如下:列表名[索引值]=新元素值通過賦值語句的形式,用新元素值替換指定位置的現(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語言中,可以用元素為列表的列表表示其他高級(jí)語言中的二維數(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的值由用戶輸入。問題分析6行的楊輝三角數(shù)據(jù)如上圖(a)所示,為了便于描述,給出上圖(b)的形式。從圖(b)可以看出,各行數(shù)據(jù)的共同特點(diǎn)是:第1列和最后一列的值全為1,從第3行開始,其他位置的值等于其左上方位置值和正上方位置值之和。可以把整個(gè)楊輝三角的數(shù)據(jù)存入一個(gè)列表(yanghui_lst),其中的每個(gè)元素(代表三角形中每行的數(shù)據(jù))也是一個(gè)列表(row_lst)。第1、2行的數(shù)據(jù)可以直接賦值,從第3行開始,逐個(gè)生成數(shù)據(jù)存入行列表row_lst,再將行列表作為元素值存入三角形列表yanghui_lst中。線性結(jié)構(gòu)二維列表應(yīng)用示例輸出楊輝三角前n行的數(shù)據(jù),n的值由用戶輸入。樹形結(jié)構(gòu)樹的定義樹(tree)是n(n≥0)個(gè)結(jié)點(diǎn)的有限集合。
當(dāng)n=0時(shí),稱為空樹。在一棵非空樹T中:有且僅有一個(gè)特定的結(jié)點(diǎn)稱為樹的根結(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)本身又是一棵樹,并且稱為根結(jié)點(diǎn)的子樹。樹中的一個(gè)結(jié)點(diǎn)可以看作是一個(gè)數(shù)據(jù)元素。樹形結(jié)構(gòu)可以定義為Python中的字典。樹形結(jié)構(gòu)創(chuàng)建字典創(chuàng)建字典的語法格式如下:
字典名={鍵1:值1,鍵2:值2,鍵3:值3,…,鍵n:值n}功能:字典也是由若干個(gè)元素組成,由一對(duì)大括號(hào)括起來,每個(gè)元素是一個(gè)“鍵:值”對(duì)的形式,“鍵:值”對(duì)之間用逗號(hào)分開。如果有多個(gè)“鍵”相同的“鍵:值”對(duì),只保留最后一個(gè)。樹形結(jié)構(gòu)訪問字典訪問字典的語法格式如下:字典名[鍵]功能:字典中的元素沒有對(duì)應(yīng)的索引值,元素的存儲(chǔ)順序可能與創(chuàng)建字典時(shí)的書寫順序不一致。對(duì)字典的訪問是根據(jù)“鍵”來找對(duì)應(yīng)的“值”。樹形結(jié)構(gòu)對(duì)字典的操作樹形結(jié)構(gòu)更新字典更新字典的語法格式如下:字典名[鍵]=值使用賦值語句可以增加元素或修改現(xiàn)有元素的值。如果在字典中沒有找到指定的“鍵”,則在字典中增加一個(gè)“鍵:值”對(duì),如果找到,則用指定的“值”替換現(xiàn)有值。該語句既能增加元素,又能修改元素值。使用此功能要仔細(xì),否則,本來要進(jìn)行修改操作,由于“鍵”沒寫對(duì),實(shí)際是完成了增加元素的功能。樹形結(jié)構(gòu)字典合并字典合并的語法格式如下:字典名1.update(字典名2)如果兩個(gè)字典的“鍵”沒有相同的,則把字典2的“鍵:值”對(duì)添加到字典1中(實(shí)現(xiàn)兩個(gè)字典的合并),如果有相同的,用字典2中的值修改字典1中相同“鍵”的對(duì)應(yīng)“值”。樹形結(jié)構(gòu)刪除字典元素或字典語法格式如下:
del字典名[鍵]如果在字典中找到指定的“鍵”,則刪除“鍵”和對(duì)應(yīng)的“值”,如果沒有找到指定的“鍵”,則會(huì)報(bào)錯(cuò)。如果只有字典名,則刪除整個(gè)字典。還可以使用pop()函數(shù)刪除字典元素,語法格式如下:
字典名.pop(鍵,值)如果字典中存在指定的“鍵”,則返回對(duì)應(yīng)的“值”,同時(shí)刪除該“鍵:值”對(duì),如果指定的“鍵”不存在,返回函數(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é)生信息的功能。樹形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫程序?qū)崿F(xiàn)某部門上下級(jí)部門的查找。樹形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫程序?qū)崿F(xiàn)某部門上下級(jí)部門的查找。把樹形結(jié)構(gòu)的內(nèi)部機(jī)構(gòu)設(shè)置定義為字典樹形結(jié)構(gòu)字典應(yīng)用示例定義函數(shù),用于在字典dic中查找結(jié)點(diǎn)node的上、下層結(jié)點(diǎn)。樹形結(jié)構(gòu)字典應(yīng)用示例某單位A有如圖所示的內(nèi)部機(jī)構(gòu)設(shè)置,編寫程序?qū)崿F(xiàn)某部門上下級(jí)部門的查找。在主程序中調(diào)用函數(shù),實(shí)現(xiàn)查找功能。執(zhí)行程序的輸出結(jié)果如下:圖狀結(jié)構(gòu)圖的定義和術(shù)語圖是由非空的頂點(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)之間的連線(邊)是無向的,稱該圖為無向圖(左下圖);如果頂點(diǎn)之間的連線是有向的,稱該圖為有向圖(右下圖)。圖狀結(jié)構(gòu)圖的存儲(chǔ)結(jié)構(gòu)對(duì)于下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年洗車場綠色環(huán)保技術(shù)與設(shè)備轉(zhuǎn)讓合同3篇
- 2024版精密機(jī)房建造協(xié)議條款版
- 2024聘請(qǐng)教練合同
- 二零二四平面模特演藝事業(yè)聘用合同-影視界簽約范本9篇
- 2024版設(shè)備進(jìn)口采購協(xié)議中英文版版B版
- 2024門窗安裝安全協(xié)議與合同書
- 2025年度鋁合金門窗行業(yè)綠色建筑認(rèn)證合同4篇
- 2025年版IT咨詢服務(wù)合同樣本6篇
- 二零二四南京租房合同家具家電使用及維修協(xié)議3篇
- 2024英倫游學(xué)夏令營境外緊急聯(lián)絡(luò)與協(xié)助服務(wù)合同3篇
- 2025年度土地經(jīng)營權(quán)流轉(zhuǎn)合同補(bǔ)充條款范本
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學(xué)一模試卷
- 2025中國人民保險(xiǎn)集團(tuán)校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 0的認(rèn)識(shí)和加、減法(說課稿)-2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)人教版(2024)001
- 重癥患者家屬溝通管理制度
- 醫(yī)院安全生產(chǎn)治本攻堅(jiān)三年行動(dòng)實(shí)施方案
- 法規(guī)解讀丨2024新版《突發(fā)事件應(yīng)對(duì)法》及其應(yīng)用案例
- 信息安全意識(shí)培訓(xùn)課件
- Python試題庫(附參考答案)
- 成都市國土資源局關(guān)于加強(qiáng)國有建設(shè)用地土地用途變更和
評(píng)論
0/150
提交評(píng)論