大學計算機基礎—程序設計基礎(理工類)_第1頁
大學計算機基礎—程序設計基礎(理工類)_第2頁
大學計算機基礎—程序設計基礎(理工類)_第3頁
大學計算機基礎—程序設計基礎(理工類)_第4頁
大學計算機基礎—程序設計基礎(理工類)_第5頁
已閱讀5頁,還剩135頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 2第十章 程序設計基礎 310.1 程序與程序設計 410.1.1 10.1.1 程序與程序設計程序與程序設計 計算機是依靠硬件和軟件的配合進行工作的,硬件是計算機是依靠硬件和軟件的配合進行工作的,硬件是計算機系統(tǒng)的基礎,軟件附著在硬件上,指揮和控制計算機系統(tǒng)的基礎,軟件附著在硬件上,指揮和控制硬件工作。硬件工作。 那么,那么,? 計算機程序計算機程序(核心)(核心)文檔資料文檔資料軟件軟件軟件安裝說明書軟件安裝說明書 用戶使用手冊用戶使用手冊 有關技術資料、服務信息等有關技術資料、服務信息等 10.1 程序與程序設計 510.1 程序與程序設計 10.1.1 10.1.1 程序與程序設計

2、程序與程序設計 那么什么是那么什么是呢?呢? 事實上,為了能讓計算機解決實際問題并完成預定功事實上,為了能讓計算機解決實際問題并完成預定功能,人們需要按照解題步驟和功能要求,從計算機的能,人們需要按照解題步驟和功能要求,從計算機的指令系統(tǒng)中選出相關的指令并進行編排指令系統(tǒng)中選出相關的指令并進行編排( (稱為編程稱為編程) ),形成一組有序的指令集合。形成一組有序的指令集合。 所以,計算機程序就是計算機為完成某一任務所必須所以,計算機程序就是計算機為完成某一任務所必須執(zhí)行的一系列指令的集合。執(zhí)行的一系列指令的集合。 而用程序設計語言而用程序設計語言( (也稱計算機語言也稱計算機語言) )來編寫計

3、算機程來編寫計算機程序的過程就叫程序設計。序的過程就叫程序設計。 610.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展 計算機程序設計語言經歷了從計算機程序設計語言經歷了從機器語言、匯編語言機器語言、匯編語言到到高高級語言級語言的發(fā)展歷程。的發(fā)展歷程。1GL2GL3GL 4GL 10.1 程序與程序設計 710.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展1. 1.機器語言機器語言 機器語言是計算機誕生和發(fā)展初期使用的語言。機器機器語言是計算機誕生和發(fā)展初期使用的語言。機器語言程序是語言程序是由和的二進制代碼由和的二進制代碼按一定規(guī)則按一定規(guī)則組成組成的,的,并能被

4、機器直接理解和執(zhí)行的指令集合。并能被機器直接理解和執(zhí)行的指令集合。例如,計算例如,計算A=8+12A=8+12的機器語言程序如下:的機器語言程序如下: 10110000 00001000 10110000 00001000 : :把把8 8放入累加器放入累加器A A中中 00101100 00001100 00101100 00001100 :12:12與累加器與累加器A A中的值相加,結果中的值相加,結果 仍放入仍放入A A中中 11110100 11110100 : :結束,停機結束,停機10.1 程序與程序設計 810.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展1. 1.

5、機器語言機器語言 機器語言編寫的程序不僅難讀、難懂、難修改,而且機器語言編寫的程序不僅難讀、難懂、難修改,而且不同機器使用的指令系統(tǒng)也不盡相同,所以現在已經不同機器使用的指令系統(tǒng)也不盡相同,所以現在已經沒有人使用沒有人使用機器語言直接編程了。機器語言直接編程了。 當然,機器語言也有其優(yōu)點,編寫的程序代碼不需要當然,機器語言也有其優(yōu)點,編寫的程序代碼不需要翻譯,因此占用空間少,翻譯,因此占用空間少,執(zhí)行速度快執(zhí)行速度快。 10.1 程序與程序設計 910.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展2. 2.匯編語言匯編語言 匯編語言開始于匯編語言開始于2020世紀世紀5050年代

6、初。為了克服機器語言的年代初。為了克服機器語言的缺點,人們將缺點,人們將機器指令的代碼用英文助記符來表示機器指令的代碼用英文助記符來表示,例,例如用如用ADDADD表示加、表示加、JMPJMP表示程序跳轉等。表示程序跳轉等。 例如,計算例如,計算A=8+12A=8+12的匯編語言程序如下:的匯編語言程序如下: MOV MOV A , 8A , 8 : : 把把8 8放入累加器放入累加器A A中中 ADD ADD A , 12A , 12 : : 1212與累加器與累加器A A中的值相加,結果仍放入中的值相加,結果仍放入A A中中 HLT HLT : : 結束,停機結束,停機 10.1 程序與程

7、序設計 1010.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展2. 2.匯編語言匯編語言 匯編語言克服了機器語言難讀、難懂的缺點,同時又匯編語言克服了機器語言難讀、難懂的缺點,同時又保持了其編程質量高,占存儲空間少,執(zhí)行速度快的保持了其編程質量高,占存儲空間少,執(zhí)行速度快的優(yōu)點。故在編寫優(yōu)點。故在編寫系統(tǒng)軟件和過程控制軟件系統(tǒng)軟件和過程控制軟件時,時,仍經常仍經常采用采用匯編語言。匯編語言。 但匯編語言仍然是但匯編語言仍然是面向機器面向機器的語言。使用匯編語言編的語言。使用匯編語言編程需要直接安排存儲,規(guī)定寄存器和運算器的動作次程需要直接安排存儲,規(guī)定寄存器和運算器的動作次序等。

8、此外,不同計算機的指令長度、尋址方式、寄序等。此外,不同計算機的指令長度、尋址方式、寄存器數目等都不一樣,所以匯編語言程序的通用性較存器數目等都不一樣,所以匯編語言程序的通用性較差。差。 10.1 程序與程序設計 1110.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展2. 2.匯編語言匯編語言 匯編語言編寫的程序匯編語言編寫的程序,必須經過,必須經過匯編程序匯編程序翻譯成計算機所能識別的機器語翻譯成計算機所能識別的機器語言后,才能被計算機執(zhí)行言后,才能被計算機執(zhí)行 。 10.1 程序與程序設計 匯編程序匯編程序 匯編語言匯編語言 源程序源程序 機器語言機器語言 程序程序 翻譯翻譯

9、 1210.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展3.3.高級語言高級語言 從最初與計算機交流的痛苦經歷中,人們意識到,應從最初與計算機交流的痛苦經歷中,人們意識到,應該設計一種這樣的語言,它接近于數學語言或自然語該設計一種這樣的語言,它接近于數學語言或自然語言,同時又不依賴于計算機硬件,編出的程序能在所言,同時又不依賴于計算機硬件,編出的程序能在所有計算機上通用。經過努力,有計算機上通用。經過努力,19541954年年,第一個完全脫,第一個完全脫離機器硬件的高級語言離機器硬件的高級語言FORTRANFORTRAN語言問世語言問世了。了。 高級語言的表示高級語言的表示形式近

10、似于自然語言形式近似于自然語言,對各種公式的,對各種公式的表示近似于數學公式。而且,一條高級語言語句的功表示近似于數學公式。而且,一條高級語言語句的功能往往相當于十幾條甚至幾十條匯編語言的指令,程能往往相當于十幾條甚至幾十條匯編語言的指令,程序編寫相對比較簡單。因此,在序編寫相對比較簡單。因此,在工程計算、數據處理工程計算、數據處理等方面,人們等方面,人們常用常用高級語言來編寫程序。高級語言來編寫程序。 10.1 程序與程序設計 1310.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展3.3.高級語言高級語言 用高級語言編寫的程序稱為高級語言源程序,也不能用高級語言編寫的程序稱為高

11、級語言源程序,也不能直接執(zhí)行,必須經過語言處理程序的直接執(zhí)行,必須經過語言處理程序的后才后才能執(zhí)行。能執(zhí)行。 語言處理程序語言處理程序 高級語言高級語言 源程序源程序 機器語言機器語言 程序程序 6.2 高級高級語言語言源源程序程序的的執(zhí)行過程執(zhí)行過程 解釋解釋/編譯編譯 10.1 程序與程序設計 1410.1.2 10.1.2 程序設計語言的發(fā)展程序設計語言的發(fā)展4. 4.非過程化的程序語言非過程化的程序語言 人們稱高級語言是人們稱高級語言是第代語言第代語言,其特點是,其特點是面向過程。面向過程。面向過程是指用戶在程序中不但要說明解決什么問題,面向過程是指用戶在程序中不但要說明解決什么問題,

12、還要告訴計算機如何去解決。還要告訴計算機如何去解決。 計算機技術的發(fā)展要求新一代的計算機語言能夠根據計算機技術的發(fā)展要求新一代的計算機語言能夠根據用戶說明的問題,用戶說明的問題,智能化智能化的去自動尋找解決方案,具的去自動尋找解決方案,具有這種功能的語言稱為有這種功能的語言稱為第第4 4代語言代語言(Fourth(FourthGeneratioGeneration Languagen Language,4GL)4GL)。目前目前4GL4GL尚未發(fā)展成熟尚未發(fā)展成熟,主要,主要面向面向基于數據庫應用的領域(基于數據庫應用的領域(SQL)SQL),還不適用于科學計算、,還不適用于科學計算、高速實時

13、系統(tǒng)和系統(tǒng)軟件等的開發(fā)。高速實時系統(tǒng)和系統(tǒng)軟件等的開發(fā)。10.1 程序與程序設計 1510.1.3 10.1.3 常見的程序設計語言常見的程序設計語言第一個高級程序設計語言是第一個高級程序設計語言是FORTRANFORTRAN語言語言, ,它是由美國它是由美國IBMIBM公司在公司在2020世紀世紀5050年代開發(fā)出來的。之后年代開發(fā)出來的。之后, ,隨著計算機應隨著計算機應用的發(fā)展用的發(fā)展, ,先后出現了先后出現了COBOLCOBOL、BASICBASIC、PASCALPASCAL、C C、C+C+、JavaJava等高級語言。等高級語言。由美國著名的計算機先驅人物約翰由美國著名的計算機先驅

14、人物約翰巴克斯巴克斯( John ( John Wamer)Wamer)于于19541954年提出。年提出。FOUTRANFOUTRAN是是FORmula TRANslatorFORmula TRANslator的的縮寫,意思是縮寫,意思是“公式翻譯機公式翻譯機”。顧名思義,該語言。顧名思義,該語言主要用主要用于科學計算于科學計算。FORTRANFORTRAN自推出之日起,版本不斷更新,功自推出之日起,版本不斷更新,功能不斷增強,目前在工程應用領域,能不斷增強,目前在工程應用領域,FORTRANFORTRAN仍然被廣泛仍然被廣泛使用使用。 10.1 程序與程序設計 1610.1.3 10.1.

15、3 常見的程序設計語言常見的程序設計語言 COBOLCOBOL(COmmon Business Oriented Language, 通用事務處理語言)是在美國國防部推動下,由政府機構和工是在美國國防部推動下,由政府機構和工業(yè)界聯(lián)合開發(fā)的一種語言,于業(yè)界聯(lián)合開發(fā)的一種語言,于19601960年正式推出,主要年正式推出,主要用于用于商業(yè)數據處理。商業(yè)數據處理。 COBOLCOBOL語言曾經使用非常廣泛,語言曾經使用非常廣泛,2020世紀世紀7070年代近一年代近一半的程序是用半的程序是用COBOLCOBOL語言編寫的。當前,語言編寫的。當前,在商業(yè)領域,在商業(yè)領域, C COBOLOBOL語言仍

16、然占有重要席位語言仍然占有重要席位。10.1 程序與程序設計 1710.1.3 10.1.3 常見的程序設計語言常見的程序設計語言 BASICBASIC(Beginners All-purpose Symbolic Instruction Code, 初學者的通用符號指令代碼)是是19641964年由美國的年由美國的JoJohn G. Kemenyhn G. Kemeny和和 Thomas E. Kurtz Thomas E. Kurtz 在在FORTRANFORTRAN語言的基礎上語言的基礎上開發(fā)的。由于開發(fā)的。由于簡單易學簡單易學,BASICBASIC語言得到了廣泛普及。語言得到了廣泛普及

17、。 Microsoft Microsoft公司對公司對BASICBASIC可謂是一往情深,從早期微型可謂是一往情深,從早期微型機上內置的機上內置的BASICBASIC,到,到8080年代產生的第一個編譯版本年代產生的第一個編譯版本Quick BQuick BASICASIC,直到目前,直到目前非常流行的非常流行的Visual BasicVisual Basic,一直沒有中斷過,一直沒有中斷過對對BASICBASIC語言的的改進。語言的的改進。 最新出現的最新出現的Visual Basic. NETVisual Basic. NET,是采用,是采用MicrosoftMicrosoft的的. .

18、NETNET技術的技術的Visual BasicVisual Basic語言。語言。 10.1 程序與程序設計 1810.1.3 10.1.3 常見的程序設計語言常見的程序設計語言PASCALPASCAL是由瑞士計算機科學家是由瑞士計算機科學家Niklaus Wirth Niklaus Wirth 設計的一設計的一種語言,種語言,19681968年提出后被全世界廣泛接受。這個語言的名字年提出后被全世界廣泛接受。這個語言的名字是為了紀念著名的法國數學家,也是計算科學的先驅是為了紀念著名的法國數學家,也是計算科學的先驅Blaise Blaise PascalPascal而起的。由于結構小巧、語法嚴

19、謹、數據類型豐富,而起的。由于結構小巧、語法嚴謹、數據類型豐富,從從2020世紀世紀7070年代末往后的很長一段時間里,年代末往后的很長一段時間里, PASCALPASCAL成為世成為世界范圍的界范圍的計算機專業(yè)教學語言計算機專業(yè)教學語言。 2020世紀世紀8080年代,隨著年代,隨著C C語言的流行,語言的流行,PASCALPASCAL走向了走向了衰落衰落。目前,在商業(yè)上僅有目前,在商業(yè)上僅有BorlandBorland公司仍在開發(fā)基于公司仍在開發(fā)基于PASCALPASCAL語言語言系統(tǒng)的系統(tǒng)的DelphiDelphi,它使用了面向對象與軟件組件的概念,主要,它使用了面向對象與軟件組件的概念

20、,主要用于開發(fā)商用軟件。用于開發(fā)商用軟件。 10.1 程序與程序設計 1910.1.3 10.1.3 常見的程序設計語言常見的程序設計語言是由美國貝爾實驗室的是由美國貝爾實驗室的Kennet L. ThompsonKennet L. Thompson和和Dennis Dennis M. RitchieM. Ritchie于于19721972年設計開發(fā)的,當時主要用于編寫年設計開發(fā)的,當時主要用于編寫UNIXUNIX操操作系統(tǒng)。后來由于其功能豐富、使用靈活、執(zhí)行速度快、可作系統(tǒng)。后來由于其功能豐富、使用靈活、執(zhí)行速度快、可移植性強,迅速成為最廣泛使用的程序設計語言之一。移植性強,迅速成為最廣泛使

21、用的程序設計語言之一。 C C語言既可以用來語言既可以用來開發(fā)系統(tǒng)軟件開發(fā)系統(tǒng)軟件,也可以用來開發(fā)應用,也可以用來開發(fā)應用軟件,應用領域很廣泛。例如,在中國廣泛使用的計算機輔軟件,應用領域很廣泛。例如,在中國廣泛使用的計算機輔助設計軟件助設計軟件AutoCADAutoCAD、數學軟件系統(tǒng)、數學軟件系統(tǒng)MathematicaMathematica等,以及許等,以及許多語言編譯系統(tǒng)本身,其軟件系統(tǒng)的全部或部分都是用多語言編譯系統(tǒng)本身,其軟件系統(tǒng)的全部或部分都是用C C語言語言開發(fā)的。開發(fā)的。C C語言已經語言已經成為最重要的軟件系統(tǒng)開發(fā)語言之一成為最重要的軟件系統(tǒng)開發(fā)語言之一。10.1 程序與程序

22、設計 2010.1.3 10.1.3 常見的程序設計語言常見的程序設計語言 19801980年,貝爾實驗室的年,貝爾實驗室的Bjarne StroustrupBjarne Stroustrup對對C C語言語言進行了擴充,進行了擴充,加入了面向對象加入了面向對象的概念,并于的概念,并于19831983年改名為年改名為 C+C+。目前,。目前,C+C+已經成為應用最廣的面向對象程序設計語已經成為應用最廣的面向對象程序設計語言。言。MicrosoftMicrosoft公司的公司的Visual C+Visual C+和和BorlandBorland公司的公司的 C+ BC+ Builderuilde

23、r是是C+C+語言最常用的開發(fā)工具,利用這些開發(fā)工具,語言最常用的開發(fā)工具,利用這些開發(fā)工具,可以高效率的開發(fā)出復雜的可以高效率的開發(fā)出復雜的WindowsWindows應用程序。應用程序。 最新出現的最新出現的C#C#語言語言使用了使用了C+C+的語法和語義,是基的語法和語義,是基于于MicrosoftMicrosoft公司推出的新一代軟件開發(fā)環(huán)境公司推出的新一代軟件開發(fā)環(huán)境.NET.NET平臺的平臺的高級程序設計語言。高級程序設計語言。10.1 程序與程序設計 2110.1.3 10.1.3 常見的程序設計語言常見的程序設計語言 JavaJava是是SunSun公司開發(fā)的一種跨平臺的網絡編

24、程語言,公司開發(fā)的一種跨平臺的網絡編程語言,于于19951995年正式發(fā)布。其語言風格年正式發(fā)布。其語言風格與與C+C+接近接近,但舍棄了,但舍棄了C+C+中一些不常用或容易被誤用的成分,如指針等。中一些不常用或容易被誤用的成分,如指針等。 JavaJava語言最主要的特點是,同一個語言最主要的特點是,同一個JavaJava程序不用重程序不用重新編譯就可以在不同平臺的計算機上運行。新編譯就可以在不同平臺的計算機上運行。JavaJava在網絡上在網絡上的獨特優(yōu)勢以及其跨平臺的特點,使得它已經的獨特優(yōu)勢以及其跨平臺的特點,使得它已經成為成為InternInternetet上最受歡迎的編程語言之一。

25、上最受歡迎的編程語言之一。 10.1 程序與程序設計 2210.1.3 10.1.3 常見的程序設計語言常見的程序設計語言 目前,最常用的目前,最常用的3 3種動態(tài)網頁設計語言有種動態(tài)網頁設計語言有ASPASP(Active Server PageActive Server Pages s)、)、JSPJSP(Java Server PagesJava Server Pages)、)、PHPPHP(Hypertext PreprocessorHypertext Preprocessor)。)。三者都提供在三者都提供在 HTMLHTML代碼中混合某種程序代碼、由語言引擎解釋執(zhí)行程代碼中混合某種程

26、序代碼、由語言引擎解釋執(zhí)行程序代碼的能力。序代碼的能力。 ASPASP是一個是一個WebWeb服務器端的開發(fā)環(huán)境,利用它可以產生和服務器端的開發(fā)環(huán)境,利用它可以產生和執(zhí)行動態(tài)的、互動的、高性能的執(zhí)行動態(tài)的、互動的、高性能的WebWeb服務應用程序。服務應用程序。ASPASP支持支持VBScriptVBScript、JScriptJScript等腳本語言。等腳本語言。 JSP JSP是用是用JavaJava語言作為腳本語言的,并可以在語言作為腳本語言的,并可以在ServletServlet和和J JavaBeanavaBean的支持下,完成功能強大的站點程序。的支持下,完成功能強大的站點程序。

27、PHPPHP是一種跨平臺的服務器端的嵌入式腳本語言。它大量是一種跨平臺的服務器端的嵌入式腳本語言。它大量地借用地借用C C、JavaJava和和PerlPerl語言的語法,并融合語言的語法,并融合PHPPHP自己的特性,自己的特性,使使WebWeb開發(fā)者能夠快速地寫出動態(tài)生成頁面。開發(fā)者能夠快速地寫出動態(tài)生成頁面。 10.1 程序與程序設計 2310.2 算法 算法的基本概念算法的基本概念算法的特征算法的特征算法的表示方法算法的表示方法算法的評價算法的評價常用算法常用算法 2410.2 算法 10.2.1 10.2.1 算法的基本概念算法的基本概念廣義的說,為解決一個問題而采取的方法和步驟,就

28、稱為廣義的說,為解決一個問題而采取的方法和步驟,就稱為“算法算法”。本書所關心的當然只限于。本書所關心的當然只限于“計算機算法計算機算法”。所。所謂的計算機算法就是使用計算機來解決一個問題時所采取謂的計算機算法就是使用計算機來解決一個問題時所采取的特定的特定方法和步驟。方法和步驟。 2510.2 算法 10.2.1 10.2.1 算法的基本概念算法的基本概念例如例如,要求出要求出1+2+3+1001+2+3+100的和,可設計如下的計算機的和,可設計如下的計算機算法。算法。設兩個變量:一個設兩個變量:一個變量變量sumsum用來存放求和的結果,另一用來存放求和的結果,另一個個變量變量i i用來

29、存放每次被加的數值;用來存放每次被加的數值; S1S1:使:使0=sum;0=sum; S2 S2:使:使1=i ;1=i ;S3S3:使:使i i的值的值到到sumsum中,即中,即sum+i=sum sum+i=sum ;S4S4:使:使i i的值加的值加1 1,i+1=i ;i+1=i ;S5S5:如果:如果i=100,i=n)。 4810.2 算法 10.2.5 10.2.5 常用算法常用算法4. 4.遞推法遞推法( (迭代法迭代法) ) 從初值出發(fā),歸納出新值與舊值間的關系,利用循環(huán)來從初值出發(fā),歸納出新值與舊值間的關系,利用循環(huán)來完成迭代,每次循環(huán)時都從舊值的基礎上遞推出新值,完成

30、迭代,每次循環(huán)時都從舊值的基礎上遞推出新值,并由新值代替舊值。并由新值代替舊值。例:例:猴子吃桃子問題。小猴有桃若干,每天吃猴子吃桃子問題。小猴有桃若干,每天吃掉現有數的一半多一個,到第掉現有數的一半多一個,到第7天要吃時只剩下天要吃時只剩下一個了,問小猴原有桃子多少個?一個了,問小猴原有桃子多少個?設第設第n天的桃子為天的桃子為xn,它是前一天的桃子數的一,它是前一天的桃子數的一半少半少1個,個,遞推公式遞推公式 xn-1=(xn+1)2 4910.2 算法 10.2.5 10.2.5 常用算法常用算法4. 4.遞推法遞推法( (迭代法迭代法) ) 5010.2 算法 10.2.5 10.2

31、.5 常用算法常用算法5. 5.求最值求最值 如果要求最大值,在如果要求最大值,在n n個數中先假設第個數中先假設第1 1個數為最大值并個數為最大值并存入變量存入變量maxmax,用變量,用變量maxmax依次同第依次同第2 2、3 3、n n個數個數據逐一比較,一旦某個數比據逐一比較,一旦某個數比maxmax大,則用這個數來替換大,則用這個數來替換maxmax中原有的值,所有數比較完,最大值也就獲得(打中原有的值,所有數比較完,最大值也就獲得(打擂法擂法) )。 5110.2 算法 10.2.5 10.2.5 常用算法常用算法5. 5.求最值求最值 例:例:輸入三個數,輸入三個數,輸出其中的

32、最大輸出其中的最大值。值。 5210.2 算法 10.2.5 10.2.5 常用算法常用算法5. 5.求最值求最值 例:例:輸入輸入n個數,個數,輸出其中的最小輸出其中的最小值。值。 5310.3 C程序入門 C C語言概述語言概述C C程序結構程序結構C C程序的上機步驟程序的上機步驟 54 產生背景ALGOL 60CPL語言BCPLB語言,寫UNIX系統(tǒng) 產生過程時間:19721973地點:美國貝爾實驗室目的:UNIX操作系統(tǒng)設計人: Ken.Thompson和Dennis.M.Ritchie C標準標準C: 1978年 K&R合著The C Programming LanguageANS

33、I C: 1983年87 ANSI C: 1987年1990年國際標準的ANSI C ,1994年再次修訂。 C版本Turbo C 或稱 TCTCVisual C+ VC VC10.3.1 C10.3.1 C語言概述語言概述 55 C語言的特點:C語言具有完善的功能和非常高的效率。 C語言可以對硬件操作,是介于匯編語言和高級語言之間的一種語言。C語言是結構化的程序設計語言。C語言具有豐富的數據類型和運算類型。C語言具有良好的移植性。C語言書寫靈活,表達簡潔。10.3.1 C10.3.1 C語言概述語言概述 56表1 C語言與Pascal語言比較通過表1 我們可以得出結論:C比 Pascal簡練

34、,因此源程序更短,編程效率高。C C語言語言PASCALPASCAL語言語言含義含義 if(e) S;if(e) S;int i;int i;int a10;int a10;int f();int f();int int * *p;p;i+=2;i+=2;i+, +i;i+, +i;BEGIN BEGIN ENDENDIF (e) THEN S;IF (e) THEN S;VAR i :INTEGER;VAR i :INTEGER;VAR a:ARRAY1.10 OF INTVAR a:ARRAY1.10 OF INTEGER;EGER;FUNCTION f():INTEGER;FUNCTIO

35、N f():INTEGER;VAR P: INTEGER; VAR P: INTEGER; i=i+2;i=i+2;i=i+1;i=i+1;函數體、分程序、復合語句函數體、分程序、復合語句條件語句條件語句 定義定義i i為整形變量為整形變量定義定義a a為一維數組為一維數組定義定義f f為返回整形值函數為返回整形值函數; ;p p為指向整形變量的指針變量為指向整形變量的指針變量; ; 賦值語句,使賦值語句,使i+2i+2賦給賦給I Ii i自增值自增值1 1,i i加加1 1賦給賦給I I 57/* example1.1 The first C Program*/#include main()

36、 printf(“This is a c program.n”);注釋編譯預處理主函數語句輸出:This is a c program.例例. . 第一個程序第一個程序This is a c program . printfprintf語句中的“nn”是換行換行符符 10.3.2 C10.3.2 C程序程序結構結構 58/* 例 求兩個整數之和*/#include /* 主函數 */void main() int a,b,sum; /*定義變量*/ a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum);/* 求兩個數 x , y 之和的函數 */int

37、 add(int x,int y) int z; z=x+y; return(z);運行結果:sum=34函數語句預處理命令注釋printfprintf語句中的“ %d %d ”是表示“十進制整數類型十進制整數類型” 59例例 從鍵盤輸入兩個整數,輸出其中較大的數從鍵盤輸入兩個整數,輸出其中較大的數#include void main() int max(int x,int y) int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf( max = %d,c);int max(int x,int y) int z; if(xy) z=x; els

38、e z=y; return(z);scanfscanf語句中“&a”的含義是“取地址取地址”輸入:10,20 輸出:max = 20聲明部分,定義變量聲明部分,定義變量調用調用max函數,返回值賦給函數,返回值賦給c定義定義max子函數,函數值子函數,函數值、形參、形參x、y為整型為整型通過通過max函數將函數將z值帶回調用處值帶回調用處 60 多多用用小寫小寫字母,大小寫敏感字母,大小寫敏感 不使用行號,不使用行號,無程序行無程序行概念概念 可使用空行和空格可使用空行和空格 常用常用鋸齒形鋸齒形書寫格式書寫格式main( ) . . . . . . .main( ) int i , j ,

39、sum; sum=0; for(i=1; i10;i+) for(j=1;j10;j+) sum+=i*j ; printf(“%dn”,sum);優(yōu)秀程序員的素質之一: 使用TAB縮進 對齊 有足夠的注釋 有合適的空行C C語言格式特點語言格式特點 61C C語言結構特點語言結構特點 函數與主函數函數與主函數程序由一個或多個函數組成程序由一個或多個函數組成必須有且只能有一個主函數必須有且只能有一個主函數mainmain()(),可以放在程序中任一位置可以放在程序中任一位置程序執(zhí)行從程序執(zhí)行從mainmain開始,在開始,在mainmain中結束,其它函數通過嵌套調用中結束,其它函數通過嵌套調

40、用得以執(zhí)行。得以執(zhí)行。 程序語句程序語句C C程序由語句組成程序由語句組成用用“; ;”作為語句終止符作為語句終止符 注釋注釋/ /* * * */ /為注釋為注釋, ,不能嵌套不能嵌套VCVC中也可以使用中也可以使用/不產生編譯代碼不產生編譯代碼例: /*This is the main /* of example1.1*/ */ 非法v編譯預處理命令編譯預處理命令 62編輯鏈接編譯執(zhí)行 開 始 編 輯 編 譯 連 接 執(zhí) 行 有錯?結果正確? 結 束有源程序 file.c目 標 程序file.obj庫函數和其它目標程序可執(zhí)行目標程序無正確不正確file.exe程序代碼的錄入,生成源程序*.

41、c語法分析查錯,翻譯生成目標程序*.obj與其它目標程序或庫鏈接裝配,生成可執(zhí)行程序*.exe10.3.3 C10.3.3 C程序的上機步驟程序的上機步驟 63VC+集成開發(fā)環(huán)境 打開VC。 單擊“file/new” 選擇“file”選項卡, C+ source file 輸入文件名(擴展名.c), 選擇保存位置(Lacation)。 單擊“OK” 64VC+集成開發(fā)環(huán)境l編譯、鏈接和運行的命令項都處在菜單Build之中。 注意,在對程序進行編譯、鏈接和運行前,最好先保存自己的工程(使用“FileSave All”菜單項)以避免程序運行時系統(tǒng)發(fā)生意外而使自己之前的工作付之東流。l首先選擇執(zhí)行菜

42、單第一項Compile,此時將對程序進行編譯。 若編譯中發(fā)現錯誤(error)或警告(warning),將在Output窗口中顯示出它們所在的行以及具體的出錯或警告信息,可以通過這些信息的提示來糾正程序中的錯誤或警告(注意,錯誤是必須糾正的,否則無法進行下一步的鏈接;而警告則不然,它并不影響進行下一步,當然最好還是能把所有的警告也“消滅”掉)。當沒有錯誤與警告出現時,Output窗口所顯示的最后一行應該是: “Hello.obj-0 error(s), 0warning(s)”。 65VC+集成開發(fā)環(huán)境選擇菜單的第二項選擇菜單的第二項BuildBuild來進行鏈接生成可執(zhí)行程序。來進行鏈接生成

43、可執(zhí)行程序。 在鏈接中出現的錯誤也將顯示到在鏈接中出現的錯誤也將顯示到OutputOutput窗口中。鏈接成功后,窗口中。鏈接成功后,OutpOutputut窗口所顯示的最后一行應該是:窗口所顯示的最后一行應該是: “ “hello.exe-0 error(s), 0 warning(s)”hello.exe-0 error(s), 0 warning(s)”。運行運行( (執(zhí)行執(zhí)行) ) 程序,選擇程序,選擇ExecuteExecute項項( (該選項前有一個深色該選項前有一個深色的感嘆號標志的感嘆號標志“!”. . VC6VC6將運行已經編好的程序,執(zhí)行后將出現如圖所示,其中的將運行已經編

44、好的程序,執(zhí)行后將出現如圖所示,其中的“prespress any key to continue”s any key to continue”是由系統(tǒng)產生的,使得用戶可以瀏覽輸出結是由系統(tǒng)產生的,使得用戶可以瀏覽輸出結果,直到按下了任一個鍵盤按鍵時為止果,直到按下了任一個鍵盤按鍵時為止( (那時又將返回到集成界面的那時又將返回到集成界面的編輯窗口處編輯窗口處) )。編譯、鏈接和運行也可以使用工具按鈕。編譯、鏈接和運行也可以使用工具按鈕。建立建立C C的源程序也可以直接在的源程序也可以直接在windowswindows新建一文本文件,新建一文本文件,然后將擴展名改為然后將擴展名改為.C.C。

45、6610.4 基本數據類型與運算符 C C的數據類型的數據類型表達式和運算符表達式和運算符 67C C語言是一種強類型的計算機語言,所有用到的數據,語言是一種強類型的計算機語言,所有用到的數據,必須被說明為某種數據類型,數據類型是程序設計必須被說明為某種數據類型,數據類型是程序設計中的重要概念。數據類型確定數據在內存中占所空中的重要概念。數據類型確定數據在內存中占所空間的大小及存儲形式。在間的大小及存儲形式。在C C語言中,數據類型可分為:語言中,數據類型可分為:基本類型,構造類型,指針類型,空類型四大類?;绢愋?,構造類型,指針類型,空類型四大類。10.4.1 C10.4.1 C的數據類型的

46、數據類型 6810.4.1 C的數據類型的數據類型C C數數據據類類型型基本類型基本類型構造類型構造類型指針類型指針類型空類型空類型 void字符型字符型 char整整 型型實實 型(浮點型)型(浮點型)單精度型單精度型 float雙精度型雙精度型 double數組類型數組類型結構體類型結構體類型共用體類型共用體類型短整型短整型 short長整型長整型 long整型整型 int數據類型決定:1. 數據占內存字節(jié)數2. 數據取值范圍3. 可以進行的操作 6910.4.1 C的數據類型的數據類型短整型整型(int)整型長整型無符號(unsigned short)有符號(short)無符號(unsi

47、gned)有符號(int)無符號(unsigned long)有符號(long) 70標識符標識符v定義:標識變量名、符號常量名、函數名、數組名、定義:標識變量名、符號常量名、函數名、數組名、文件名的字符串序列文件名的字符串序列名字名字。v命名規(guī)則:命名規(guī)則:l只能由只能由字母、數字、下劃線字母、數字、下劃線組成,且組成,且第一個字第一個字符必須是字母或下劃線符必須是字母或下劃線l大小寫字母含義不同,一般用大小寫字母含義不同,一般用小寫小寫l不能使用不能使用關鍵字關鍵字v使用:使用:先定義、后使用先定義、后使用標識符應該“見名知意見名知意”,如,如 total , maxtotal , max

48、標識符應該“不宜混淆不宜混淆”,如,如 l l與與1 , O1 , O與與0 010.4.2 常量與變量常量與變量 71常量和符號常量常量和符號常量v定義:程序運行過程中,其值不能被改變的量(常數)定義:程序運行過程中,其值不能被改變的量(常數)v分類:直接常量、分類:直接常量、符號常量符號常量類型類型示例示例直直接接常常量量整型常量整型常量12 、 0 、 -3實型常量實型常量4.6 、 -1.23、1.23e+5字符常量字符常量a 、 b 字符串常量字符串常量a、abc、10符號常量符號常量PRICE 、 PAI 72l符號常量符號常量: :用用標識符標識符代表常量代表常量u一般用大寫字母

49、:一般用大寫字母: PRICE 、 PIu定義格式:定義格式: #define 符號常量符號常量 常量常量u其值在作用域內不能改變和再賦值。其值在作用域內不能改變和再賦值。例例 符號常量舉例符號常量舉例#define PRICE 30#include void main() int num,total; num=10; total=num*PRICE; printf(total=%dn,total);total=300運行結果:符號常量的優(yōu)點是:見名知意、一改全見名知意、一改全改改 73變量變量v 定義:其值可以改變的量。定義:其值可以改變的量。v 定義格式:定義格式:數據類型數據類型 變量名

50、;變量名; v 變量應該有名字,并在內存中占據一定的存儲單元。變量應該有名字,并在內存中占據一定的存儲單元。 v 變量名和變量值有不同的含義變量名和變量值有不同的含義l變量實際代表一塊內存存貯區(qū)域變量實際代表一塊內存存貯區(qū)域l變量名實為這個區(qū)域的標識變量名實為這個區(qū)域的標識 a3例例 變量的使用變量的使用main() int a; a=3; printf(“a=%d,a);變量名變量值存儲區(qū)域 74 整型常量(整常數)的三種表示方法整型常量(整常數)的三種表示方法v 十進制整數:由數字十進制整數:由數字09和正負號表示和正負號表示. . 如 123,-456,0v 八進制整數:由數字八進制整數

51、:由數字0開頭開頭, ,后跟數字后跟數字07表示表示. . 如 0123,011v 十六進制整數:由十六進制整數:由0 x開頭開頭, ,后跟后跟09,af,AF表表示示. . 如 0 x123,0 xff八、十六進制數都是無符號數。八、十六進制數都是無符號數。整數整數數據數據 75 注意:注意:v 十進制數十進制數1010的二進制形式為的二進制形式為10101010,不同的編譯系統(tǒng)為整,不同的編譯系統(tǒng)為整型數據分配的字節(jié)數是不相同的,型數據分配的字節(jié)數是不相同的,Turbo C 2.0Turbo C 2.0和和Turbo Turbo C+ 3.0C+ 3.0為一個整型變量在內存中分配為一個整型

52、變量在內存中分配2 2個字節(jié)的存儲單個字節(jié)的存儲單元,元,VC+ 6.0VC+ 6.0則分配則分配4 4個字節(jié)。個字節(jié)。v 數值是以補碼數值是以補碼(complement) (complement) 表示的。表示的。 76整型變量的分類:整型變量的分類:共六種共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int) 注意:注意:括號表示其中的內容是可選的. 77 整數

53、類型的有關數據(VC+): 78整型變量的定義整型變量的定義: :定義整型變量的一般形式:定義整型變量的一般形式: 類型說明符類型說明符 變量名變量名, ,變量名變量名,.;,.;在定義變量的同時給變量賦值稱為變量初始化。在定義變量的同時給變量賦值稱為變量初始化。變量初始化的格式為:變量初始化的格式為:類型說明符類型說明符 變量名變量名=,變量名變量名=,.;,.; 79【例】分析以下程序的運行結果。 #includemain() int a=1, b=2,c; long x=29,y=2147483600; c=a; a=10; printf(a+b=%d,x+y=%ld,c=%dn,a+b

54、,x+y,c); 80【例】分析以下程序的運行結果。 #includemain() short d=-1; printf(%hd,%hun,d,d); 81【例】分析以下程序的運行結果。 #includemain() int i=65535; short j=i; printf(i=%d,j=%dn,i,j);本例中,變量本例中,變量i i是整型變量,在內存中占四個字節(jié)。是整型變量,在內存中占四個字節(jié)。6553565535在內存中存放形式在內存中存放形式為:為:00000000 00000000 11111111 1111111100000000 00000000 11111111 11111

55、111變量是變量是j j 是短整型變量,在內存中只占兩個字節(jié),因此在將是短整型變量,在內存中只占兩個字節(jié),因此在將i i賦給賦給j j時,只將時,只將低端的兩個字節(jié)賦給低端的兩個字節(jié)賦給j j中內容為:中內容為: 11111111 11111111 11111111 11111111 (-1-1的補碼)的補碼)所以輸出的所以輸出的i i為為6553565535,j j 為為-1-1。 82浮點型常量的表示方法浮點型常量的表示方法兩種表兩種表示形式示形式小數小數指數指數0.1230.1233 3e-3e-3注意注意: :字母e(或E)之前必須有數字,且e后面的指數必須為整數 浮點型浮點型數據(實

56、型數據)數據(實型數據) 83浮點型變量浮點型變量: :浮點型變量分為單精度浮點型變量分為單精度(float(float型型) )、雙精度、雙精度(double(double型型) )。 浮點型數據在內存中的存放形式是用科學記數法(即指數的方式)存放的,在占用相同的存儲空間時,浮點型數據可以存儲更大范圍的數據,但浮點型數據有有效位限制(精度)。類型類型說明符數的范圍(絕對值)字節(jié)數有效位單精度float0和1.210-383.41038478雙精度double0和2.310-3081.71030881516 84【例】分析以下程序的運行結果。 #includemain() float x=10

57、1235342.98345678;double y=422222222345.11223344556677889900;printf(x=%f,y=%lfn,x,y); 程序的運行結果為:程序的運行結果為:x=101235344.000000 x=101235344.000000,y=422222222345.112240y=422222222345.112240八個有效位十六個有效位 85在內存中存放字符時,所存放的是該字符的二進制代碼(ASCII碼)字符型字符型數據數據字符十進制代碼八進制十六進制二進制換行1012A00001010回車1315D00001101空格324020000100

58、00字符094857607130390011000000111001字符AZ6590101132415A0100000101011010字符az97122141172617A0110000101111010 86字符常量字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符a a, ,A A, , 1 1abcabc、“a a”字符型字符型數據數據 87 有些以有些以“ ”開頭的特殊字符稱為轉義字符開頭的特殊字符稱為轉義字符轉義字符轉義字符的意義ASCII碼(十進制)n回車換行符,將光標移到下一行開頭10r回車符,將光標移到本行開頭13t制表符,將光標橫向跳到下一個制表位置9b

59、退格符,將光標移到前一列8f換頁符,將光標移到下一頁開頭12反斜杠字符()92雙引號字符()34單引號字符()39ddd13位八進制數所代表的字符xhh12位十六進制數所代表的字符 88【例】分析以下程序的運行結果。 main() int x=16,y=2008; printf(y=%drx=%dn,y,x); printf(%c%c%cb%.1fn,C,+,+,6.0);程序的運行結果為:程序的運行結果為:x=1608x=1608C+6.0C+6.0 89字符變量字符變量 字符型變量用來存放字符常量,注意只能放字符型變量用來存放字符常量,注意只能放一個字符。一個字符。 字符變量的定義形式如下

60、:字符變量的定義形式如下:char c1,c2;char c1,c2; 一個字符變量在內存中占一個字節(jié)。一個字符變量在內存中占一個字節(jié)。 90【例】分析以下程序的運行結果。 #includemain() char a=66; int b=A; printf(%d,%cn,a,a); printf(%d,%cn,b,b); 程序的運行結果為:程序的運行結果為:66,B66,B65,A65,A 91【例例】以下程序以下程序實現實現大小大小寫寫字母字母轉換轉換。#includemain() char a=x,b=Y; /* a,b被說明為字符變量并賦值*/ a=a-32; /*把小寫字母換成大寫字母

溫馨提示

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

最新文檔

評論

0/150

提交評論