版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第二章 程序設(shè)計語言,程序設(shè)計語言是人機交換信息的媒體,也是人人交換信息的工具 2.1 高級程序設(shè)計語言概述 最初的語言是機器語言,例:AXAX46,用容易記憶的英文單詞代替約定的指令,易讀寫程序, 導致了匯編語言的誕生,使用匯編語言編程需要: 直接安排存儲,規(guī)定寄存器、運算器動作次序 了解數(shù)據(jù)表示的約定(定點、浮點、雙精度) 不同的計算機在指令長度、尋址方式、寄存器數(shù)目、指令表示等都時不同,使得匯編程序不僅不可移植而且讀起來也很費勁 導致了高級語言的出現(xiàn),例,匯編:,2.2 高級程序設(shè)計語言實現(xiàn)計算的方式,高級語言程序必須經(jīng)過翻譯變成機器語言程序 翻譯有兩種做法:編譯和解釋,相應(yīng)的翻譯工具分
2、別叫做編譯器和解釋器 2.2.1 編譯器工作原理 首先是識別符號串:關(guān)鍵字、字面量、標識符、運算符、注釋行、特殊符號等六類符號,這個過程就是詞法分析(Lexical Analysis) 第二步作語法分析(Syntax Analysis)一個語句就作為一串記號流由語法分析器處理。按照語言的文法檢查每個語法分析樹,第三步作語義分析(Semantic Analysis)對各句子的語法樹作檢查:運算符兩邊類型是否相兼容;該作哪些類型轉(zhuǎn)換;控制轉(zhuǎn)移到不該去的地方;是否有重名等等。若有錯轉(zhuǎn)出錯處理,否則生成執(zhí)行代碼 第四步是中間代碼生成。中間代碼是向目標碼過渡的一種編碼,形式盡可能和機器的匯編語言相似,但
3、不涉及具體機器的操作碼和地址碼。好處是可在中間碼上作優(yōu)化 第五步是優(yōu)化。對中間碼程序作局部和全局優(yōu)化,使運行更快,占用空間最小 第六步是代碼生成 。 生成目標機器的目標碼(或匯編)程序,高級語言源程序經(jīng)編譯后,得到的目標模塊還需進行連接。連接程序(即Linker)找出需要連接的外部模塊并到模塊庫中找出被調(diào)用的模塊,調(diào)入內(nèi)存并連接到目標模塊上,形成可執(zhí)行程序。,2.2.2 高級語言程序的解釋執(zhí)行,解釋執(zhí)行需要有一個解釋器(lnterpretor ),它先作詞法分析,建立內(nèi)部符號表; 再作語法和語義分析,即以中間碼建立語法樹,并作類型檢查。 完成檢查后把每一語句壓入執(zhí)行堆棧,壓入后立即解釋執(zhí)行,操
4、作系統(tǒng)的命令、BASIC、VB、Prolog、LISP、Java、Java Script、Post Script都是解釋執(zhí)行的,各種應(yīng)用軟件提供的界面語言(一般都很?。┒喟胧墙忉寛?zhí)行的。 解釋器不大,工作空間也不大、能根據(jù)程序執(zhí)行情況決定下一步做什么(人工智能經(jīng)常是這樣的)是它的優(yōu)點, 不過,解釋執(zhí)行難于優(yōu)化、效率較低,這是這類語言的致命缺點,2.3 高級程序設(shè)計語言基本特征,2.3.1 變量、表達式、賦值 計算的數(shù)據(jù)對象特別是計算結(jié)果的對象在編程時是不存在的。我們只能用變量表示它 例:已知三角形三邊長度求面積: s := 0.5*(a+b+c) area := sqrt(s*(s-a)*(s
5、-b)*(s-c) 其中a,b,c,s,area是變量,0.5是常量(也是字面量),“+”和“*”是運算符,sqrt是開平方函數(shù) 表達式是常量、變量、函數(shù)調(diào)用或者由它們和運算符組成的序列 :=是賦值號它將右端表達式算出的結(jié)果賦給左端的變量,2.3.2 程序的控制結(jié)構(gòu)1.條件語句,有了條件判斷if(E)then TB else FB endif,打破了自上至下逐句執(zhí)行的模式 當表達式E為真時,執(zhí)行TB塊那一組語句 為假時跳過TB塊執(zhí)行FB塊那一組語句 早期的if 語句借助goto語句改變執(zhí)行順序,但這種無條件goto不能保證結(jié)構(gòu)的完整性,即另外某處也可以goto到這個條件分支中,2迭代語句,例如
6、,求自然數(shù)1到10000之和的程序,迭代結(jié)構(gòu)的一般式有幾種:,while (E) do S enddo 表達式E為真執(zhí)行S ,直至E為假 (a)當循環(huán),do S Until (E) 先執(zhí)行S再查看E, E為真不重復 (b) 直到循環(huán),for (i=E0;E1;E2)do S enddo i得初值E0,判斷iE2,執(zhí)行S后i增量E1,判斷若iE2, 出for-do (c) 計數(shù)循環(huán),(1)結(jié)構(gòu)化程序控制,(2)其它控制結(jié)構(gòu),方便使用的變體: Case語句是嵌套if的簡化,Do-until,for-do均為while-do變體,其它控制 Call-return : 程序單元間的轉(zhuǎn)移,執(zhí)行后返回原地
7、。 Exception-raise: 程序出了異常情況,raise(引發(fā))后,正常執(zhí)行轉(zhuǎn)到異常處理程序段,并不再返回。在C+中,使用的是try throw結(jié)構(gòu),在VB中是ON ERROR GOTO 語句。 Abort(STOP) : 強行停止執(zhí)行。 Exit: 轉(zhuǎn)到本程序塊末端。 Delay XX : 延遲XX時間后繼續(xù)執(zhí)行。,2.3.2 數(shù)據(jù)類型,計算機中計算對象(不管是常量、變量)都是有類型的,類型不同內(nèi)部表示不同,就是象12+32.7這種簡單的計算也是不允許的,要先做類型轉(zhuǎn)換才能計算 1.常用的基本類型,強類型語言(所謂強類型,就是編譯時所有變量類型均確定,類型轉(zhuǎn)換必須顯式地給出) 無類
8、型語言則無需變量的類型聲明,給它什么值它就是什么類型。 2. 數(shù)組 Dim Names(15) As String 聲明16個元素數(shù)組,每個元素都是字符串類型 Dim Matrix(9,9) As Double 是10*10=100元素的方陣,元素為雙精度浮點數(shù) 不同類型的一維數(shù)組能否組成一多維數(shù)組?一般語言不可以,VB利用Variant可以把它們聯(lián)接起來并把它叫做數(shù)組的數(shù)組,3. 記錄,相同或不同類型數(shù)據(jù)組成的結(jié)構(gòu)叫記錄。 記錄型記錄了對象的屬性信息,記錄的各個組成部分,稱為記錄域,各個域的數(shù)據(jù)類型可以不相同。 用VB聲明的一個例子: Type Person Record Name As S
9、tring Age As Integer Sex As String Telnumber As String Lable As Integer Endtype,在VB中,可以這樣聲明數(shù)組型變量: Dim Student1 As Person Record 訪問記錄元素用點表示法: Student1.Name=“ChangShan” Student1. Age=20 Student1. Sex=“Male” Student1. Telnumber=“(010)62783294”,4.指針類型,在講述指針之前,讓我們首先來看一個例子(我們采用C語言來描述): int I; /* 定義一個整型變量
10、I */ I=1; /* I賦值為1 */ I=I+1: /* 表達式計算 */ 計算機語言中的變量,代表的只是計算機內(nèi)存中的一個存儲單元,單元中存放的內(nèi)容是變化的 若變量中存放的不是對象,而是另一個變量在計算機內(nèi)存中的存儲地址,則 這種變量被稱為指針變量,變量P中存放的是另一個變量A的地址,而變量A中存放的卻是數(shù)值:123,提供指針類型的語言一般都提供兩種與指針有關(guān)的操作:取地址操作和取值操作 取值操作取的是指針所指的變量的值,*P=123 取地址操作取的是變量的內(nèi)存地址,P= -引用 Function F(X,Y:float) return float; -傳值,2.3.6 變量的生命期和
11、Static變量,程序中的變量生命期隨其聲明所在程序塊而異 按其“壽命”的長短有:,若需要一個局部變量在局部程序塊消失后依然保留其值,又不希望它是全局變量被該局部塊以外的程序引用,則可使用靜態(tài)(Static)局部變量 注意:Static 變量在局部模塊中聲明,2.3.7 輸入/輸出,程序的輸入/輸出分作兩大類: 一類是程序之間以文件形式進行數(shù)據(jù)傳遞。 另一類是人機交互, 一般由高級程序設(shè)計語言以過程調(diào)用的形式實現(xiàn)。過程在高級語言內(nèi)部通過操作系統(tǒng)調(diào)用完成,2.4 面向?qū)ο蟪绦蛘Z言的基本特征,面向?qū)ο笳Z言是過程式語言的進一步發(fā)展。 2.4.1 對象概述,過程式程序的結(jié)構(gòu)是層層調(diào)用,下層程序除自己聲
12、明的數(shù)據(jù)而外共享上層程序聲明的數(shù)據(jù) 一個子程序改動了共享數(shù)據(jù)則另一個必然受影響。我們叫它數(shù)據(jù)耦合,“分而治之”的思想使我們想到進一步封裝,即把相關(guān)的數(shù)據(jù)與過程裝在一起,盡可能讓它獨立。 設(shè)想有一程序有100個子程序,經(jīng)過分析,這100個子程序并不是每個子程序都要用到所有的數(shù)據(jù),把數(shù)據(jù)相關(guān)和程序相關(guān)(有嵌套調(diào)用)的分成組。,這樣封裝的程序塊是一個復雜的計算對象,私有的數(shù)據(jù)描述了本對象的狀態(tài),操作表示了本對象的行為 對象接受外界的消息而動作,改變對象內(nèi)部的狀態(tài),數(shù)據(jù)叫做對象的屬性(Attribate), 操作則改稱方法(Method), 即改變屬性的方法。對象間相互只有通信,“調(diào)用”方法叫發(fā)消息(
13、Message),2.4.2 類與對象,對象是封裝了屬性和方法的實體,客觀世界的對象往往有許多相似之處,我們沿用程序中表達數(shù)據(jù)的抽象辦法,定義一類對象然后聲明它的不同實例。 Dim v As Double v是雙精型的數(shù)據(jù)變量 Dim OK As Command Button OK是按鈕類的對象變量 這個類CommandButton是系統(tǒng)事先定義好的,OK是它的實例對象。有著和CommandButton一樣的屬 性和方法,只是要給出各屬性的值。 類是生成實例的樣板,是實例加工廠,堆棧類,Class char_stack int size /私有屬性 char *tos, *end; char
14、*s public: /公共方法 char_stack (int sz); char_stack(); int push (char c); char pop(); char top(); ;,再單寫各方法定義,如: int char_stack:push(char c) return *tos=end? *tos+=c:0; ,有了這個類就可以對實例對象作計算了,下面給出該類的使用例子: main() char c char_stack stk1(100) /聲明一實例對象stk1 stk1.push(%) /壓入%到stk1中 stk1.push (#) c=stk1.pop() /從stk1中彈出一字符 if (stk1.top()=#). else ,2.4.3 類定義,類封裝了屬性和方法 類中的成員原則上是類私有(private)的,外部是看不到也不得訪問的。 為了保證與類外界通信可以定義公有(public)屬性。上例中屬性全部是私有方法全部是公有的。當然,也可以定義公有數(shù)據(jù)和私有方法 由于類的數(shù)據(jù)結(jié)構(gòu)比較復雜,類一般有構(gòu)造(實例的)函數(shù)(constructor)和析構(gòu)函數(shù)(Destructor)。它們都可以重復定義多次(以不同的方法構(gòu)造實例),面向?qū)ο蟮姆庋b性可以支持各獨立對象的協(xié)作計算,不需要主控對象。 在其它類的方法定義中,可以嵌入向另外一些類發(fā)消息的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣州醫(yī)科大學附屬第五醫(yī)院人才招聘計劃備考題庫及參考答案詳解1套
- 2026年【企業(yè)招聘】貴陽云巖阿瑪施眼科門診部誠邀備考題庫及參考答案詳解1套
- 2026年三河市營商環(huán)境義務(wù)監(jiān)督員招聘30人備考題庫及一套答案詳解
- 2026年義烏市中心醫(yī)院腫瘤科非編人員招聘備考題庫及1套完整答案詳解
- 2026年商丘工學院教師招聘79人多崗多人備考題庫及答案詳解參考
- 2026年上海工藝美術(shù)職業(yè)學院招聘工作人員備考題庫及一套參考答案詳解
- 2026年寰宇東方國際集裝箱(寧波)有限公司招聘備考題庫及答案詳解一套
- 2026年云南富寧縣緊密型醫(yī)共體歸朝分院招聘編外工作人員的備考題庫及一套參考答案詳解
- 2026年大涌醫(yī)院第四期公開招聘工作人員備考題庫及一套參考答案詳解
- 2026年中糧福悅家(北京)食品有限公司招聘備考題庫及1套參考答案詳解
- 移風易俗宣傳課件
- 智慧醫(yī)療智能病房管理系統(tǒng)操作手冊
- 高級衛(wèi)生專業(yè)技術(shù)資格考試臨床醫(yī)學檢驗臨床微生物(042)(副高級)試題及解答參考(2025年)
- 四川省南充市2024-2025學年高一數(shù)學上學期期末考試試題含解析
- JGJ100-2015車庫建筑設(shè)計規(guī)范
- 2024屆高考語文復習:二元思辨類作文
- DB11T 696-2023 預拌砂漿應(yīng)用技術(shù)規(guī)程
- (完整word版)英語四級單詞大全
- 井下作業(yè)技術(shù)油水井措施酸化課件解析
- 旅游接待業(yè) 習題及答案匯總 重大 第1-10章 題庫
- 智慧金庫項目需求書
評論
0/150
提交評論