版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章算法基礎與程序設計01問題求解過程02算法基礎03程序設計基礎Contents目錄01問題求解過程介紹用計算機求解問題的基本過程問題求解過程分析問題建立模型設計算法編寫程序調試測試程序圖10-1問題求解過程圖即確定計算機要做什么,實現(xiàn)自然語言的邏輯建模。即將原始問題轉化為數(shù)學模型。即形式化地描述解決問題的途徑和方法。即將算法翻譯成計算機程序。即發(fā)現(xiàn)和修改程序運行過程中存在的錯誤。問題某商場銷售一批襯衫,平均每天可出售30件,每件盈利50元,為擴大銷售,增加盈利,盡快減少庫存,商場決定降價,如果每件降1元,商場平均每天可多賣2件,若商場平均每天要盈利2100元,問襯衫降價多少元?問題求解過程舉例1.分析問題已知:平均每天可出售30件,每件盈利50元,如果每件降1元,商場平均每天可多賣2件,商場平均每天要盈利2100元。目標:盡快減少庫存,計算每件襯衫降價多少元。計算邏輯:盈利=單件盈利*銷售數(shù)量2.建立模型假設:每件襯衫降價x元。計算公式:2100=(50-x)*(30+2*x)整理公式:x2-35x+300=0數(shù)學模型:求一元二次方程ax2+bx+c=0的根。3.設計算法begininputa,b,c//輸入a,b,cx1,x2←0//變量賦初值if(b2-4ac>=0){x1=(-b+sqrt(b2-4ac))/2ax2=(-b-sqrt(b2-4ac))/2a}outputx1,x2//輸出根結果end4.編寫程序intmain(){floata,b,c,x1=0,x2=0;cin>>a>>b>>c;if(b*b-4*a*c>=0){x1=(-b+sqrt(b*b-4*a*c))/2*a;x2=(-b-sqrt(b*b-4*a*c))/2*a;}cout<<x1<<””<<x2;}5.調試測試對于程序進行測試,看看運行結果是否符合預先的期望,如果不符合,要進行判斷,找出問題出現(xiàn)的地方,對算法或程序進行修正,直到得到正確的結果。由于商場要盡快減少庫存,所以降價20元是最佳選擇。02算法基礎介紹有關算法的基本知識,并對常見的算法進行舉例01算法的概念02算法的特性和評價03算法的三種結構Contents目錄04算法的表示05算法舉例簡單地說,算法就是解決問題的一系列步驟。廣義地說,為解決問題而采用的方法和步驟就是算法。算法是程序設計的基礎,算法的質量直接影響程序運行的效率。算法是求解問題步驟的有序集合,它能夠產生結果并在有限時間內結束。1
算法的概念舉一個簡單的算法例子,假設求兩個自然數(shù)m和n的最大公約數(shù),通常使用輾轉相除的歐幾里得算法,算法描述如下:①輸入兩數(shù)m、n。②m除以n得到余數(shù)r。③若r=0,則n即為最大公約數(shù),算法結束;否則繼續(xù)進行下一步。④令m←n,n←r,轉到第②步。《九章算術》是我國古代最早的算學著作,以算法為主要內容,全書采用問題集的形式,收有246個與生產、生活實踐有聯(lián)系的應用問題,其中每道題有問(題目)、答(答案)、術(解題的步驟),有的是一題一術,有的是多題一術或一題多術。這些問題依照性質和解法分別隸屬于方田、粟米、衰(cuī)分、少廣、商功、均輸、盈不足、方程及勾股,共九章?!毒耪滤阈g》對中國古代數(shù)學發(fā)展起了承前啟后的作用,是世界古代數(shù)學名著之一,書中分數(shù)解算方法、聯(lián)立一次方程解法、負數(shù)等,當時在世界上都屬于杰出的研究成果。民族之光-九章算術民族之光-九章算術2020年12月4日,中國科學技術大學宣布該校潘建偉等人成功構建76個光子的量子計算原型機,該原型機的名字"九章",意為紀念中國古代最早的數(shù)學專著《九章算術》。民族之光-九章算術一般地,算法應該具有以下特性。1.確定性:一個算法中的每一個步驟必須是精確的定義、無二義性,不會使編程者對算法中的描述產生不同的理解。2.有窮性:一個算法必須在執(zhí)行有窮步后結束,每一步必須在有窮的時間內完成。3.可行性:算法描述的步驟在計算機上是可行的,能在一個合理的范圍內有效地執(zhí)行,并應能得到一個明確的結果。4.輸入:一般有零個或多個輸入值。5.輸出:一個算法的執(zhí)行過程中或結束后要有輸出結果,或者產生相應的動作指令。2
算法的特性和評價通??梢詮囊韵聨讉€方面來評價算法的優(yōu)劣。1.算法的正確性算法正確性是指算法應該滿足具體問題的需求。其中“正確”的含義大體上可以分為4個層次。(1)算法所對應的程序沒有語法錯誤。(2)算法所對應的程序對于幾組輸入數(shù)據(jù)能夠得出滿足要求的結果。(3)算法所對應的程序對于精心選擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)能夠得到滿足要求的結果。(4)算法所對應的程序對于一切合法的輸入數(shù)據(jù)都能產生滿足要求的結果。達到第4層含義下的正確性是極為困難的,不少大型軟件在使用多年后,仍然還能發(fā)現(xiàn)其中的錯誤。一般情況下,以第3層含義的正確性作為衡量一個算法是否正確的標準。2
算法的特性和評價2.可讀性
一個好的算法首先應該便于人們理解和相互交流,其次才是機器可執(zhí)行。可讀性好的算法有助于人對算法的理解,難懂的算法容易隱藏錯誤且難于調試和修改。3.健壯性
作為一個好的算法,當輸入非法數(shù)據(jù)時,也能適當?shù)刈龀稣_反應或進行相應的處理,而不會產生一些莫名其妙的輸出結果,或者毫無反應甚至崩潰。2
算法的特性和評價4.高效率和低存儲量
算法的效率通常是指算法的執(zhí)行時間,即根據(jù)算法編寫的程序在運行過程中,從開始到結束所需要的時間。對于一個具體問題的解決通??梢杂卸鄠€算法,執(zhí)行時間短的算法效率比較高。所謂的存儲量是指算法在執(zhí)行過程中對存儲空間的需求。一個算法對應的程序在執(zhí)行時必須加載到計算機的內存中,程序本身、程序中用到的變量都要占用內存空間,除了這些內存消耗外,程序在執(zhí)行過程中還可能動態(tài)地申請額外的內存空間。通常情況下,我們根據(jù)算法運行時所需要的時間和空間,即算法運行的時間復雜度和空間復雜度來評價算法的優(yōu)劣。2
算法的特性和評價結構化程序設計思想包含兩個方面的內容,一是程序由三種基本的邏輯結構組成,二是程序設計要自頂向下進行。三種結構分別是順序、分支和循環(huán)。其中分支也稱選擇或判斷。事實證明,使用這三種結構可以使得程序或算法很容易地被理解。結構化程序要求任何程序只有一個入口或出口,程序中沒有執(zhí)行不到的語句,且沒有無限循環(huán)發(fā)生。算法是程序的基礎,程序是算法的實現(xiàn)。因此程序的邏輯結構也就是進行算法設計的三種結構。3
算法的三種結構1.順序結構
順序結構是算法設計中最簡單的一種結構,它使求解問題的過程按照順序由上至下進行。如圖10-2所示就是一個順序結構的表示,其中有兩個框代表算法的步驟,執(zhí)行了A后接下來執(zhí)行B指定的操作。
事實上,無論哪一類算法,它的主結構都是順序結構的,從一個入口開始,到一個出口結束。3
算法的三種結構3
算法的三種結構AB圖10-2順序結構2.分支結構
分支結構也叫條件結構、選擇結構或判斷結構,在算法設計過程中,可能會出現(xiàn)判斷,如判斷某門功課的成績,大于或等于60分為“及格”,否則為“不及格”,這時就必須采用分支結構實現(xiàn)。如圖10-3所示為分支結構的一般表示。若條件成立,則執(zhí)行分支A,否則執(zhí)行分支B。
如果在A或B中,又需要根據(jù)判斷設計分支結構,就會出現(xiàn)嵌套的分支結構(多分支結構)。3
算法的三種結構3
算法的三種結構條件AB成立不成立圖10-3分支結構
3.循環(huán)結構
在算法設計過程中可能會出現(xiàn)重復執(zhí)行一組工作步驟的情況,我們可以通過循環(huán)結構來控制。有兩類循環(huán)結構:當型(while)循環(huán)結構和直到型(until)循環(huán)結構。當型循環(huán)的原理如圖10-4所示,當條件成立時執(zhí)行A,執(zhí)行完A后再判斷條件是否成立,若成立則繼續(xù)執(zhí)行A,如此反復,直至條件不成立才結束循環(huán)。
直到型循環(huán)的原理如圖10-5所示,先執(zhí)行A,再判斷條件是否成立,如果條件不成立則繼續(xù)執(zhí)行A,如此反復,直至條件成立才結束循環(huán)。
這兩種循環(huán)結構的區(qū)別在于循環(huán)體A的執(zhí)行順序:對while結構,如果一開始循環(huán)條件就不成立,則A將不會被執(zhí)行;而對until結構,無論循環(huán)條件成立與否,A至少被執(zhí)行一次。3
算法的三種結構3
算法的三種結構A圖10-5直到型循環(huán)結構條件A成立不成立圖10-4當型循環(huán)結構條件成立不成立
算法的表示是為了把算法以某種形式加以描述,同一個算法可以通過多種形式來表達,常用的有自然語言、傳統(tǒng)流程圖、N-S流程圖、偽代碼、計算機語言等。1.自然語言
自然語言是人們日常使用的語言,是人類交流信息的工具,因此最常用的表達問題的方法也就是自然語言。10.2.1節(jié)中的算法步驟就是用自然語言方式描述的。用自然語言表示,通俗易懂,但存在以下缺陷:
(1)易產生歧義性,往往根據(jù)上下文才能判別其含義,不太嚴格。
(2)語句比較煩瑣、文字冗長,并且很難清楚地表達算法的邏輯流程,尤其當描述有選擇、循環(huán)結構的算法時,不太方便和直觀。
所以,除了簡單的問題以外,一般不用自然語言描述算法。對于一些需要有背景知識進行推理的表達,也許自然語言是最好的選擇。4
算法的表示2.流程圖
流程圖是算法表示的常用的方法,它采用一些圖框、線條以及文字說明來形象、直觀地描述從算法開始到結束的流程,而不考慮其實現(xiàn)過程的細節(jié)。美國國家標準化協(xié)會規(guī)定了一些常用的流程圖符號,如表10-1所示。4
算法的表示4
算法的表示符號名稱圖形功能起止框
表示算法的開始和結束輸入/輸出框
表示算法的輸入輸出操作處理框
表示算法中的各種處理操作判斷框
表示算法中的條件判斷操作流程線
表示算法的執(zhí)行方向連接點
表示流程圖的延續(xù)4
算法的表示3.N-S流程圖
N-S圖是美國學者I.Nassi和B.Shneideman提出的一種新的流程圖形式,并以他們的姓名的第一個字母命名。N-S圖中去掉了傳統(tǒng)流程圖中帶箭頭的流程線,全部算法以一個大的矩形框表示,該框內還可以嵌套一些從屬于它的小矩形框,適合結構化程序設計。圖10-7表示了結構化程序設計的三種基本結構的N-S圖。4
算法的表示ABT條件FAB當條件成立AA(a)順序結構(b)分支結構(c)當型循環(huán)結構(d)直到型循環(huán)結構直到條件成立4.偽代碼
偽代碼是一種算法的表達方法,產生于20世紀70年代,它是在程序開發(fā)過程中表達算法的一種非正式的符號系統(tǒng),它不考慮實現(xiàn)算法的計算機語言,是一種與程序設計過程一致的、表達簡明扼要的語義結構的方法。4
算法的表示偽代碼使用介于自然語言和計算機語言之間的文字和符號來描述算法,有如下簡單約定:(1)每個算法用Begin開始、End結束;若僅表示部分實現(xiàn)代碼可省略。(2)每一條指令占一行,指令后不跟任何符號。(3)“//”標志表示注釋的開始,一直到行尾。(4)算法的輸入輸出以Input/Output后加參數(shù)表的形式表示。(5)用“←”表示賦值。(6)用縮進表示代碼塊結構,包括while和for循環(huán)、if分支判斷等;塊中多條語句用一對{}括起來。(7)數(shù)組形式:數(shù)組名[下界……上界];數(shù)組元素:數(shù)組名[序號]。(8)一些函數(shù)調用或處理簡單任務可以用一句自然語言代替。4
算法的表示10.2.1節(jié)中的關于求最大公約數(shù)的算法可以采用如下的偽代碼方式進行描述,該算法描述采用當型循環(huán)結構。4
算法的表示BeginInputm,n//輸入m和n使m>nr←0//變量賦初值r←m/nwhile(r>0){m←nn←rr←m/n}Outputn//輸出最大公約數(shù)End
設計一個問題的求解方案需要經過理解問題、找出重點、設計方案、執(zhí)行方案、在執(zhí)行過程中修正設計方案的過程,還需要掌握更多的數(shù)學知識,包括圖論、組合學等。
下面舉一個“求100~1000以內的水仙花數(shù)”的例子,來說明如何理解問題并設計方案。
所謂的水仙花數(shù)是,一個n位的正整數(shù)的每一位數(shù)的n次冪之和等于這個數(shù)本身。例如,153=13+53+33,因此153是水仙花數(shù)。100~1000之間的水仙花數(shù)還有370,371和407等。理解這個問題不難,但要設計能夠讓計算機進行計算的算法就需要解決以下幾個問題:
(1)要遍歷全部的3位正整數(shù);
(2)分解每一個3位正整數(shù),分別得到該正整數(shù)的3個整數(shù)位;
(3)檢查它們的立方和是否與原數(shù)相等,如果相等,則是水仙花數(shù)。5
算法舉例1.基本算法
算法有很多,同一個問題也有多種算法,例如,最為常見的排序算法,就有選擇法、冒泡法、快速排序、堆排序、希爾排序、桶排序、合并排序、計數(shù)排序、基數(shù)排序等。其原因是,對不同的數(shù)據(jù)類型及數(shù)據(jù)表達,一種方法是有效的,但另一種方法則效果不佳。(1)求和
求和是學習計算機程序設計首先遇到的算法問題。適合計算機求和的算法是在循環(huán)中使用加法求和。例如,計算n~m之間的整數(shù)之和。
假設使用sum存放求和結果,使用i作為循環(huán)控制變量,則求和算法可以通過以下偽代碼方式進行描述。5
算法舉例5
算法舉例Beginsum←0//定義求和結果變量,初始值為0i←n//將n賦值給循環(huán)控制變量iwhilei<=mdo{sum←sum+i//將循環(huán)控制變量i的值累加到sum中i←i+1//準備下一個數(shù)}End
這個算法的循環(huán)過程完成兩個操作,將一個整數(shù)加到sum中,并準備下一次循環(huán)操作。其中,i既是加數(shù),也是循環(huán)控制變量。(2)累積
累積是將一組數(shù)連續(xù)相乘求其積,類似于求和計算,把求和計算的加號變?yōu)槌颂柤纯?。典型的例子就是計算整?shù)N的階乘。(3)求最大值和最小值
判斷兩個數(shù)的大小的算法是許多算法的基礎,求最大值和最小值的算法,使用分支結構就可以實現(xiàn),這里以求最大值為例。5
算法舉例BeginInputa,bmax←aifmax<bmax←boutputmaxEndBeginInputa,bmax←aifa>bmax←aelsemax←boutputmaxEnd(4)求數(shù)的位數(shù)
給定一個整數(shù)n,如何計算得到它的位數(shù)呢?可以考慮的算法是,將該數(shù)循環(huán)除以10直到結果為0結束,把循環(huán)次數(shù)記錄下來就是這個數(shù)的位數(shù)。5
算法舉例Begincount←1//count為計數(shù)變量,初值為1inputnn←n/10whilen≠0do{count←count+1n←n/10//將n除以10的結果重新賦值給n}outputcountEnd2.遞歸
為了獲得大型問題的解決方案,常用的方法就是把該大型問題化解為一個或幾個相似的、規(guī)模更小的子問題。對子問題可以采用同樣的方法。這樣,一直遞歸下去,直到子問題足夠小,成為一個基本情況,這時可以直接給出子問題的解答。
遞歸是算法的自我調用。有關求N的階乘的計算就是最典型的遞歸結構。為了說明遞歸算法的結構,把這個問題從定義的角度進行展開。
假設階乘函數(shù)的定義為:5
算法舉例遞歸算法f(5)=5×f(4)f(4)=4×f(3)f(3)=3×f(2)f(2)=2×f(1)f(1)=1×f(0)f(0)=1f(1)=1×1f(2)=2×1f(3)=3×2f(4)=4×6f(5)=5×24圖10-8計算階乘的遞歸步驟
遞歸是一個重復調用的過程,我們把它對自身的調用看作是產生了一個副本,每次調用都有一個副本產生并等待處理,當結束條件滿足時將停止產生副本。如圖10-8所示的遞歸過程的結束條件是f(0)=1,當遞歸進入這個步驟后,副本將停止產生,算法將處于等待狀態(tài)的副本按照后進先出(FILO)的原則依次處理(返回),最后得到運算結果。
每個遞歸過程都包含如下兩個步驟:
(1)定義一個能夠不使用遞歸方法就可以直接處理的基本情況作為出口,即定義一個終止遞歸的條件;
(2)不斷調用遞歸方法本身,將一種特殊的情況化解為規(guī)模較小的情況,持續(xù)下去,最終到達對基本情況的求解。5
算法舉例上面的計算階乘的示例,可以寫成下面的f()函數(shù):intf(intn){if(n==0)return1;elsereturnn*f(n-1);}5
算法舉例4.排序
排序是是將一組原始數(shù)據(jù)按照遞增或遞減的規(guī)律進行重新排列的算法。常用排序算法分類參見10.2.5節(jié),這里介紹選擇排序。選擇排序算法的主要思想是,掃描數(shù)據(jù)序列,找到最小的數(shù)據(jù),將該數(shù)據(jù)交換到序列最前面的位置,然后對其余數(shù)據(jù)序列重復前面的步驟直到數(shù)據(jù)全部排序為止(默認從小到大排序)。
對一組數(shù)的排序的算法涉及數(shù)據(jù)形式和組織結構,為簡單起見,我們舉例說明。假設有一組6個數(shù):12,6,1,15,3,19,現(xiàn)在希望將該數(shù)組中的數(shù)據(jù)采用選擇排序方法從小到大排列,圖10-9演示了6個數(shù)的排序過程,圖中的陰影方框表示未排序數(shù)據(jù)。5
算法舉例圖10-9選擇排序算法排序過程選擇排序算法的偽代碼如下:selectionSort(arrayA){for(inti=0;i<A.length-1;i++){
//外循環(huán)變量i,控制循環(huán)次數(shù),掃描n-1次找最小數(shù)并交換到數(shù)組前方intmin=ifor(intj=i+1;j<A.length;j++){
//內循環(huán)找最小數(shù)的位置if(A[j]<A[min]){min=j}}5
算法舉例if(i!=min){
//最小數(shù)與序列最前面位置i的元素A[i]交換intswap=A[i]A[i]=A[min]A[min]=swap}}}
那么對n個數(shù)的排序需要n-1次掃描過程:第一次掃描過程將比較n個數(shù),得到最小的那個數(shù)的位置,和第一個數(shù)的位置互換,比較次數(shù)為n-1次;第二次掃描將從第二個數(shù)開始,得到次小的數(shù)與第二個數(shù)的位置互換,比較次數(shù)為n-2次;最后一次比較最后的兩個數(shù),比較次數(shù)為1次??梢缘玫?,對n個數(shù)選擇法排序的比較次數(shù)為:(n-1)+(n-2)+……+2+1,即n(n-1)/2次,如圖10-9所示6個數(shù)的排序的比較次數(shù)為15次。
以算法的概念,掃描過程為外循環(huán),掃描次數(shù)為n-1次,每次掃描的過程為內循環(huán),每次掃描中進行比較的次數(shù)為n-i次,i為外循環(huán)的次數(shù)。每次比較得到的結果是記錄較小的那個數(shù)的位置,內循環(huán)結束,再進行位置的互換。5
算法舉例5.查找
在計算機科學中,另外一種常用的算法是查找,即把一個特定的數(shù)據(jù)從數(shù)組或序列中找到并提供它所在的位置,即索引(下標),如圖10-10所示。
對于數(shù)組或序列數(shù)據(jù)的查找有兩種基本方法:順序查找和折半查找。數(shù)組或序列無序或有序,順序查找都可實現(xiàn),而折半查找必須使用在已經排序的數(shù)組或序列中。
順序查找從列表的第一個數(shù)據(jù)開始,當給定的數(shù)據(jù)與表中的數(shù)據(jù)匹配時,查找過程結束,給出這個數(shù)據(jù)所在數(shù)組或序列的位置。
5
算法舉例12611531917
對數(shù)據(jù)量較小的數(shù)組或序列,順序查找是沒有什么問題的。對大量數(shù)據(jù)的數(shù)組或序列,這個算法的查找速度就變得非常慢了。如果數(shù)組或序列是無序的,則順序查找是唯一的算法。對已經排序了的數(shù)組或序列可以使用折半查找。當然,無序的數(shù)組或序列也可以先進行排序再使用折半查找。
折半查找算法是指在在一個有序數(shù)據(jù)集中(假設數(shù)據(jù)元素遞增排列),將搜索項與數(shù)據(jù)集的中間位置的數(shù)據(jù)元素進行比較,如果搜索項小于中間位置的數(shù)據(jù)元素,則只搜索數(shù)據(jù)集的前半部分;否則,搜索數(shù)據(jù)集的后半部分。
如果搜索項等于中間位置的數(shù)據(jù)元素,則返回該中間位置的數(shù)據(jù)元素的地址,搜索成功結束。折半查找算法的偽代碼如下:5
算法舉例FuncbinarySearch(list[0..N-1],DataElementsearchItem)//參數(shù)為需要查找的數(shù)據(jù),返回數(shù)據(jù)位置{
intleft=0;//定義查找范圍的左邊界
intright=length-1;//定義查找范圍的右邊界
intmid=-1;//定義查找范圍的中間位置
booleanfound=false;//定義查找結果標志
while(left<=rightand!found)//如果左邊界小于等于右邊界且未找到,就繼續(xù)折半
{
mid=(left+right)/2;//以折半方式計算新的查找范圍中間位置
if(list[mid]=searchItem)//如果中間位置的值等于要查找的值,就設置為已找到
found=true;5
算法舉例5
算法舉例else
if(list[mid]>searchItem)//如果中間位置的值大于要查找的數(shù)據(jù),則重新設置查找范圍的右邊界
right=mid+1;
else//如果中間位置的值小于要查找的數(shù)據(jù),則重新設置查找范圍的左邊界
left=mid+1;}if(found)//如果查找結果標志為已找到,則返回中間位置,否則返回-1returnmid;elsereturn-1;}如果采用遞歸方式,折半查找算法的偽代碼如下:binarySearch(list[0..N-1],searchValue,left,right){//參數(shù)為數(shù)據(jù)序列、要查找的值、左邊界、右邊界
if(right<left)//如果右邊界小于左邊界,說明未找到
return-1;
mid=left+((right-left)/2);//計算查找范圍的中間位置
if(list[mid]>searchValue)
//如果中間位置的值大于要查找的值,則遞歸查找左半部分
binarySearch(list,searchValue,left,mid-1);5
算法舉例elseif(list[mid]<searchValue)
//如果中間位置的值小于要查找的值,則遞歸查找右半部分
binarySearch(list,searchValue,mid+1,right);
else
returnmid;
}5
算法舉例5
算法舉例假設要從一個有序數(shù)組或序列中查找值為75的數(shù)據(jù)位置,折半查找的計算過程如圖10-10所示。03程序設計基礎講解程序設計的基礎知識以及面向過程與面向對象程序設計思想01計算機語言概述02程序設計基本元素03面向過程的程序設計思想Contents目錄04面向對象的程序設計思想1計算機語言概述程序設計語言泛指一切用于書寫計算機程序的語言,包括匯編語言、機器語言以及高級語言??梢钥闯龀绦蛟O計語言是計算機語言的一個子集。程序設計語言可分為低級語言與高級語言兩大類。低級語言是與機器有關的語言,包括機器語言和匯編語言。高級語言是與機器無關的語言。1計算機語言概述1.機器語言機器語言是以“0”、“1”二進制代碼形式表示的機器基本指令的集合,是計算機硬件唯一可以直接識別的語言。機器語言是最早出現(xiàn)的計算機語言,屬于第一代程序設計語言。使用機器語言編寫程序是十分痛苦的,因為這種語言直觀性較差、難閱讀、難修改。而且,由于每臺計算機的指令系統(tǒng)往往各不相同,所以,在一臺計算機上執(zhí)行的程序,要想在中一臺不同的計算機上執(zhí)行,必須重新編寫程序,造成了重復工作。但是,由于使用的是針對特定型號計算機的語言,故而運算效率是所有語言中最高的。1計算機語言概述2.匯編語言匯編語言是為了解決機器語言難于理解和記憶的缺點,用易于理解和記憶的名稱和符號表示機器指令。例如,用“ADD”代表加法,“MOV”代表數(shù)據(jù)移動等。匯編語言比機器語言直觀,使得程序的編寫、糾錯和維護變得相對簡單了。匯編語言源程序需要由匯編程序翻譯成機器語言程序才能執(zhí)行。由于匯編語言還是針對特定硬件的一種程序設計語言,因此效率仍十分高,能準確發(fā)揮計算機硬件的功能和特長,程序精煉而質量高,所以至今仍是一種常用而強有力的軟件開發(fā)工具。但匯編語言基本上還是一條指令對應一種基本操作,對機器硬件十分依賴,移植性不好。不論是機器語言還是匯編語言都是面向硬件具體操作的,要求使用者必須對硬件結構及其工作原理都十分熟悉,這對非計算機專業(yè)人員是難以做到的,對于計算機的推廣應用是不利的。1計算機語言概述3.高級語言高級語言是人們?yōu)榱私鉀Q低級語言的不足而設計的程序設計語言。它是一些接近于自然語言和數(shù)學語言的語句組成。因此,更接近于要解決問題的表示方法,并在一定程度上與機器無關。用高級語言編寫的程序易學、易用、易維護。高級語言是有語法結構的,有著接近自然語意的指令集,高級語言編寫出的程序稱為源程序,該程序需要通過翻譯系統(tǒng)編譯或解釋后才能被計算機執(zhí)行。高級語言不依賴于計算機系統(tǒng),不同的翻譯程序可以把相同的高級語言程序翻譯成不同計算機可執(zhí)行的機器語言。這些機器語言是不同的,但它們的意義是一樣的,執(zhí)行效果是一樣的。常見的高級語言有FORTRAN、Basic、Pascal、C、C++、Java、C#、Python等。2程序設計基本元素程序設計語言的基本元素是指大多數(shù)高級程序設計語言的必不可少的組成元素。一般包括語句、表達式、注釋、數(shù)據(jù)類型、程序控制結構、子例程等。語句是組成語言的最小的獨立元素。程序是計算機指令的序列,因此可以說程序是一個或多個計算機語句組成的序列。語句本身是由許多語言元素組成的。在語句中,常用的語言元素包括變量、常量、運算符、表達式、函數(shù)、賦值等。變量的名稱應該遵循程序設計語言的標識符命名規(guī)則。不同的程序設計語言,標識符命名規(guī)則也不盡相同。為了增強程序源代碼的可讀性,變量的名稱建議采用大小寫字母結合的描述性名稱。例如,用來存儲學生姓名的studentName變量名稱比x變量名稱的可讀性要高。程序設計基本元素程序設計語言元素語句:表達式、賦值表達式:變量、常量、運算符數(shù)據(jù)類型:數(shù)值、字符、布爾控制語句:順序、分支、循環(huán)注釋子例程程序設計基本元素程序是計算機指令的序列,因此可以說程序是一個或多個計算機語句組成的序列。語句本身是由許多語言元素組成的。常用的語言元素包括變量、常量、運算符、表達式、函數(shù)、賦值等。
printf("%-5d",i*100+j*10+k);
k=a*b*c+100+sum(a,2);表達式是構成語句的重要元素。表達式是常量、變量、運算符、函數(shù)調用等按照優(yōu)先級規(guī)則組成的序列。
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)程序設計基本元素基本數(shù)據(jù)類型通過組合可以構成復雜的復合數(shù)據(jù)類型。一般地,基本數(shù)據(jù)類型包括:整數(shù)類型、浮點數(shù)據(jù)類型、字符類型和字符串類型、布爾類型、枚舉類型等。程序設計基本元素變量的名稱應該遵循程序設計語言的標識符命名規(guī)則。為了增強程序源代碼的可讀性,變量的名稱建議采用大小寫字母結合的描述性名稱。例如,用來存儲學生姓名的studentName變量名稱比x變量名稱的可讀性要高。
intcount1,count2;
booleanisman;
char
studentname;程序設計基本元素注釋是程序中的有助于理解代碼的提示和說明。在處理注釋時,任何編譯程序或解釋程序都會忽略注釋。intcount1,count2;//count1代表1班人數(shù),count2代表2班人數(shù)程序有三種基本結構類型,即順序結構、條件分支結構和循環(huán)結構。除此以外,還有其他一些程序控制結構,例如異常處理等。程序設計基本元素程序三種基本控制結構類型switch(表達式){case1:…break;case2:…break;}for(inti=0;i<=100;i++){…}while(i<=100){…}do{…}while(i<=100)try{…}catch(e){…}finally{…}if(表達式){…}else{…}條件分支結構循環(huán)結構異常處理AA;BB;CC;順序結構程序設計基本元素子例程是某個主程序的一部分代碼,該代碼執(zhí)行特定的任務并且與主程序中的其他代碼相對獨立。子例程又被稱為子程序、過程、方法、函數(shù)等。在主程序中可以調用子例程來執(zhí)行。main()
{
int
i=1,j=1,k;
sum(i,j,10);
}intsum(inta,intb,intc)//子例程{intsum=0;sum=a+b+c;returnsum;}
3面向過程的程序設計思想高級語言分為面向過程的語言和面向對象的語言。其中,面向過程是一種以過程為中心的編程思想。面向過程也可稱之為面向記錄編程思想,就是分析出解決問題所需要的步驟,然后定義函數(shù)來實現(xiàn)每一個步驟,工作時只需要依次調用各個函數(shù)就可以了。假設需要編程控制一部智能手機,面向過程的編程思想是先定義開機、打電話、上網(wǎng)、關機等過程,接下來只需要在主程序中調用每個過程即可。以下偽代碼表達了面向過程的程序設計思想。3面向過程的程序設計思想voidmain(){charnumber=;
start();//調用開機方法(過程函數(shù))
call(number);//調用打電話方法(過程函數(shù))
internet();//調用上網(wǎng)方法(過程函數(shù))
close();//調用關機方法(過程函數(shù))
……}start(){...}//開機方法(過程函數(shù))具體實現(xiàn)call(char[]number){...}//打電話方法(過程函數(shù))具體實現(xiàn)internet(){...}//上網(wǎng)方法(過程函數(shù))具體實現(xiàn)close(){...}//關機方法(過程函數(shù))具體實現(xiàn)……4面向對象的程序設計思想
面向對象是一種以事物為中心的編程思想,將抽象出的數(shù)據(jù)和方法(函數(shù))封裝到一個類(class)中,供程序設計者使用。
假設需要編程控制一部智能手機,面向對象的編程方法首先需要將手機實體抽象成類,需要定義類的靜態(tài)屬性,例如品牌、顏色、手機號碼等,還要定義類的動態(tài)方法,例如設置手機屬性、獲取手機屬性、開機、打電話等。以下偽代碼表達了對手機實體類的定義。4面向對象的程序設計思想publicclassTelePhone{
Stringbrand=””;
Stringcolor=””;
Stringnumber=””;
voidsetBrand(Stringbrand){……}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023小學教師年終工作總結(17篇)
- 液壓轉向器物流課程設計
- 珠海水箱保溫施工方案
- 山東護坡格賓網(wǎng)施工方案
- 投訴處理與客戶滿意度
- 生活項目課程設計
- 2023年新教材湘教版高中地理必修第二冊全冊章節(jié)分層課時練習題含答案解析
- 城市規(guī)劃與建設長效管理實施辦法
- 社交媒體公司財務總監(jiān)招聘協(xié)議
- 歐式沙發(fā)卡座施工方案
- 財務負責人統(tǒng)一委派制度
- 瀝青路面施工監(jiān)理工作細則
- 物業(yè)設備設施系統(tǒng)介紹(詳細).ppt
- 公司走賬合同范本
- 獲獎一等獎QC課題PPT課件
- 市場調查的產生與發(fā)展
- 人教版小學三年級數(shù)學上冊判斷題(共3頁)
- 國際項目管理手冊The Project Manager’s Manual
- 小學五年級思政課教案三篇
- 華為內部虛擬股管理暫行條例
- 大劇院建設項目設計投資造價估算
評論
0/150
提交評論