版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 程序設(shè)計(jì)基礎(chǔ),-大學(xué)計(jì)算機(jī)教學(xué)部,2,第十章 程序設(shè)計(jì)基礎(chǔ),3,10.1 程序與程序設(shè)計(jì),4,軟件 = 計(jì)算機(jī)程序 + 文檔資料,10.1.1 程序與程序設(shè)計(jì) 計(jì)算機(jī)是依靠硬件和軟件的配合進(jìn)行工作的,硬件是計(jì)算機(jī)系統(tǒng)的基礎(chǔ),軟件附著在硬件上,指揮和控制硬件工作。 那么,軟件是什么呢?,軟件安裝說明書 用戶使用手冊(cè) 有關(guān)技術(shù)資料、服務(wù)信息等,10.1 程序與程序設(shè)計(jì),5,計(jì)算機(jī)程序 = 一系列指令的集合,10.1 程序與程序設(shè)計(jì),10.1.1 程序與程序設(shè)計(jì) 那么什么是計(jì)算機(jī)程序呢? 事實(shí)上,為了能讓計(jì)算機(jī)解決實(shí)際問題并完成預(yù)定功能,人們需要按照解題步驟和功能要求,從計(jì)算機(jī)的指令系統(tǒng)中選
2、出相關(guān)的指令并進(jìn)行編排(稱為編程),形成一組有序的指令集合。 所以,計(jì)算機(jī)程序就是計(jì)算機(jī)為完成某一任務(wù)所必須執(zhí)行的一系列指令的集合。 而用程序設(shè)計(jì)語(yǔ)言(也稱計(jì)算機(jī)語(yǔ)言)來(lái)編寫計(jì)算機(jī)程序的過程就叫程序設(shè)計(jì)。,6,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言經(jīng)歷了從機(jī)器語(yǔ)言、匯編語(yǔ)言到高級(jí)語(yǔ)言的發(fā)展歷程。,10.1 程序與程序設(shè)計(jì),7,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 1.機(jī)器語(yǔ)言 機(jī)器語(yǔ)言是計(jì)算機(jī)誕生和發(fā)展初期使用的語(yǔ)言。機(jī)器語(yǔ)言程序是由和的二進(jìn)制代碼按一定規(guī)則組成的,并能被機(jī)器直接理解和執(zhí)行的指令集合。 例如,計(jì)算A=8+12的機(jī)器語(yǔ)言程序如下: 10110000 00001000 :
3、把8放入累加器A中 00101100 00001100 :12與累加器A中的值相加,結(jié)果 仍放入A中 11110100 :結(jié)束,停機(jī),10.1 程序與程序設(shè)計(jì),8,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 1.機(jī)器語(yǔ)言 機(jī)器語(yǔ)言編寫的程序不僅難讀、難懂、難修改,而且不同機(jī)器使用的指令系統(tǒng)也不盡相同,所以現(xiàn)在已經(jīng)沒有人使用機(jī)器語(yǔ)言直接編程了。 當(dāng)然,機(jī)器語(yǔ)言也有其優(yōu)點(diǎn),編寫的程序代碼不需要翻譯,因此占用空間少,執(zhí)行速度快。,10.1 程序與程序設(shè)計(jì),9,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 2.匯編語(yǔ)言 匯編語(yǔ)言開始于20世紀(jì)50年代初。為了克服機(jī)器語(yǔ)言的缺點(diǎn),人們將機(jī)器指令的代碼用英文助記符來(lái)表示,例如用
4、ADD表示加、JMP表示程序跳轉(zhuǎn)等。 例如,計(jì)算A=8+12的匯編語(yǔ)言程序如下: MOV A , 8 : 把8放入累加器A中 ADD A , 12 : 12與累加器A中的值相加,結(jié)果仍放入A中 HLT : 結(jié)束,停機(jī),10.1 程序與程序設(shè)計(jì),10,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 2.匯編語(yǔ)言 匯編語(yǔ)言克服了機(jī)器語(yǔ)言難讀、難懂的缺點(diǎn),同時(shí)又保持了其編程質(zhì)量高,占存儲(chǔ)空間少,執(zhí)行速度快的優(yōu)點(diǎn)。故在編寫系統(tǒng)軟件和過程控制軟件時(shí),仍經(jīng)常采用匯編語(yǔ)言。 但匯編語(yǔ)言仍然是面向機(jī)器的語(yǔ)言。使用匯編語(yǔ)言編程需要直接安排存儲(chǔ),規(guī)定寄存器和運(yùn)算器的動(dòng)作次序等。此外,不同計(jì)算機(jī)的指令長(zhǎng)度、尋址方式、寄存器數(shù)目等
5、都不一樣,所以匯編語(yǔ)言程序的通用性較差。,10.1 程序與程序設(shè)計(jì),11,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 2.匯編語(yǔ)言 匯編語(yǔ)言編寫的程序(源程序),必須經(jīng)過匯編程序(一種語(yǔ)言處理程序)翻譯成計(jì)算機(jī)所能識(shí)別的機(jī)器語(yǔ)言后,才能被計(jì)算機(jī)執(zhí)行 。,10.1 程序與程序設(shè)計(jì),12,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 3.高級(jí)語(yǔ)言 從最初與計(jì)算機(jī)交流的痛苦經(jīng)歷中,人們意識(shí)到,應(yīng)該設(shè)計(jì)一種這樣的語(yǔ)言,它接近于數(shù)學(xué)語(yǔ)言或自然語(yǔ)言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有計(jì)算機(jī)上通用。經(jīng)過努力,1954年,第一個(gè)完全脫離機(jī)器硬件的高級(jí)語(yǔ)言FORTRAN語(yǔ)言問世了。 高級(jí)語(yǔ)言的表示形式近似于自然語(yǔ)言,對(duì)各種
6、公式的表示近似于數(shù)學(xué)公式。而且,一條高級(jí)語(yǔ)言語(yǔ)句的功能往往相當(dāng)于十幾條甚至幾十條匯編語(yǔ)言的指令,程序編寫相對(duì)比較簡(jiǎn)單。因此,在工程計(jì)算、數(shù)據(jù)處理等方面,人們常用高級(jí)語(yǔ)言來(lái)編寫程序。,10.1 程序與程序設(shè)計(jì),13,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 3.高級(jí)語(yǔ)言 用高級(jí)語(yǔ)言編寫的程序稱為高級(jí)語(yǔ)言源程序,也不能直接執(zhí)行,必須經(jīng)過語(yǔ)言處理程序的解釋或編譯后才能執(zhí)行。,10.1 程序與程序設(shè)計(jì),14,10.1.2 程序設(shè)計(jì)語(yǔ)言的發(fā)展 4.非過程化的程序語(yǔ)言 人們稱高級(jí)語(yǔ)言是第代語(yǔ)言,其特點(diǎn)是面向過程。面向過程是指用戶在程序中不但要說明解決什么問題,還要告訴計(jì)算機(jī)如何去解決。 計(jì)算機(jī)技術(shù)的發(fā)展要求新一代
7、的計(jì)算機(jī)語(yǔ)言能夠根據(jù)用戶說明的問題,智能化的去自動(dòng)尋找解決方案,具有這種功能的語(yǔ)言稱為第4代語(yǔ)言(FourthGeneration Language,4GL)。目前4GL尚未發(fā)展成熟,主要面向基于數(shù)據(jù)庫(kù)應(yīng)用的領(lǐng)域(SQL),還不適用于科學(xué)計(jì)算、高速實(shí)時(shí)系統(tǒng)和系統(tǒng)軟件等的開發(fā)。,10.1 程序與程序設(shè)計(jì),15,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 第一個(gè)高級(jí)程序設(shè)計(jì)語(yǔ)言是FORTRAN語(yǔ)言,它是由美國(guó)IBM公司在20世紀(jì)50年代開發(fā)出來(lái)的。之后,隨著計(jì)算機(jī)應(yīng)用的發(fā)展,先后出現(xiàn)了COBOL、BASIC、PASCAL、C、C+、Java等高級(jí)語(yǔ)言。 1. FORTRAN語(yǔ)言 由美國(guó)著名的計(jì)算機(jī)先驅(qū)人物約
8、翰巴克斯( John Wamer)于1954年提出。FOUTRAN是FORmula TRANslator的縮寫,意思是“公式翻譯機(jī)”。顧名思義,該語(yǔ)言主要用于科學(xué)計(jì)算。FORTRAN自推出之日起,版本不斷更新,功能不斷增強(qiáng),目前在工程應(yīng)用領(lǐng)域,F(xiàn)ORTRAN仍然被廣泛使用。,10.1 程序與程序設(shè)計(jì),16,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 2. COBOL語(yǔ)言 COBOL(COmmon Business Oriented Language, 通用事務(wù)處理語(yǔ)言)是在美國(guó)國(guó)防部推動(dòng)下,由政府機(jī)構(gòu)和工業(yè)界聯(lián)合開發(fā)的一種語(yǔ)言,于1960年正式推出,主要用于商業(yè)數(shù)據(jù)處理。 COBOL語(yǔ)言曾經(jīng)使用非常廣泛
9、,20世紀(jì)70年代近一半的程序是用COBOL語(yǔ)言編寫的。當(dāng)前,在商業(yè)領(lǐng)域, COBOL語(yǔ)言仍然占有重要席位。,10.1 程序與程序設(shè)計(jì),17,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 3. BASIC語(yǔ)言 BASIC(Beginners All-purpose Symbolic Instruction Code, 初學(xué)者的通用符號(hào)指令代碼)是1964年由美國(guó)的John G. Kemeny和 Thomas E. Kurtz 在FORTRAN語(yǔ)言的基礎(chǔ)上開發(fā)的。由于簡(jiǎn)單易學(xué),BASIC語(yǔ)言得到了廣泛普及。 Microsoft公司對(duì)BASIC可謂是一往情深,從早期微型機(jī)上內(nèi)置的BASIC,到80年代產(chǎn)生的第
10、一個(gè)編譯版本Quick BASIC,直到目前非常流行的Visual Basic,一直沒有中斷過對(duì)BASIC語(yǔ)言的的改進(jìn)。 最新出現(xiàn)的Visual Basic. NET,是采用Microsoft的. NET技術(shù)的Visual Basic語(yǔ)言。,10.1 程序與程序設(shè)計(jì),18,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 4. PASCAL語(yǔ)言 PASCAL是由瑞士計(jì)算機(jī)科學(xué)家Niklaus Wirth 設(shè)計(jì)的一種語(yǔ)言,1968年提出后被全世界廣泛接受。這個(gè)語(yǔ)言的名字是為了紀(jì)念著名的法國(guó)數(shù)學(xué)家,也是計(jì)算科學(xué)的先驅(qū)Blaise Pascal而起的。由于結(jié)構(gòu)小巧、語(yǔ)法嚴(yán)謹(jǐn)、數(shù)據(jù)類型豐富,從20世紀(jì)70年代末往后的
11、很長(zhǎng)一段時(shí)間里, PASCAL成為世界范圍的計(jì)算機(jī)專業(yè)教學(xué)語(yǔ)言。 20世紀(jì)80年代,隨著C語(yǔ)言的流行,PASCAL走向了衰落。目前,在商業(yè)上僅有Borland公司仍在開發(fā)基于PASCAL語(yǔ)言系統(tǒng)的Delphi,它使用了面向?qū)ο笈c軟件組件的概念,主要用于開發(fā)商用軟件。,10.1 程序與程序設(shè)計(jì),19,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 5. C與C+語(yǔ)言 是由美國(guó)貝爾實(shí)驗(yàn)室的Kennet L. Thompson和Dennis M. Ritchie于1972年設(shè)計(jì)開發(fā)的,當(dāng)時(shí)主要用于編寫UNIX操作系統(tǒng)。后來(lái)由于其功能豐富、使用靈活、執(zhí)行速度快、可移植性強(qiáng),迅速成為最廣泛使用的程序設(shè)計(jì)語(yǔ)言之一。 C
12、語(yǔ)言既可以用來(lái)開發(fā)系統(tǒng)軟件,也可以用來(lái)開發(fā)應(yīng)用軟件,應(yīng)用領(lǐng)域很廣泛。例如,在中國(guó)廣泛使用的計(jì)算機(jī)輔助設(shè)計(jì)軟件AutoCAD、數(shù)學(xué)軟件系統(tǒng)Mathematica等,以及許多語(yǔ)言編譯系統(tǒng)本身,其軟件系統(tǒng)的全部或部分都是用C語(yǔ)言開發(fā)的。C語(yǔ)言已經(jīng)成為最重要的軟件系統(tǒng)開發(fā)語(yǔ)言之一。,10.1 程序與程序設(shè)計(jì),20,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 5. C與C+語(yǔ)言 1980年,貝爾實(shí)驗(yàn)室的Bjarne Stroustrup對(duì)C語(yǔ)言進(jìn)行了擴(kuò)充,加入了面向?qū)ο蟮母拍?,并?983年改名為 C+。目前,C+已經(jīng)成為應(yīng)用最廣的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。Microsoft公司的Visual C+和Borland公
13、司的 C+ Builder是C+語(yǔ)言最常用的開發(fā)工具,利用這些開發(fā)工具,可以高效率的開發(fā)出復(fù)雜的Windows應(yīng)用程序。 最新出現(xiàn)的C#語(yǔ)言使用了C+的語(yǔ)法和語(yǔ)義,是基于Microsoft公司推出的新一代軟件開發(fā)環(huán)境.NET平臺(tái)的高級(jí)程序設(shè)計(jì)語(yǔ)言。,10.1 程序與程序設(shè)計(jì),21,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 6. Java語(yǔ)言 Java是Sun公司開發(fā)的一種跨平臺(tái)的網(wǎng)絡(luò)編程語(yǔ)言,于1995年正式發(fā)布。其語(yǔ)言風(fēng)格與C+接近,但舍棄了C+中一些不常用或容易被誤用的成分,如指針等。 Java語(yǔ)言最主要的特點(diǎn)是,同一個(gè)Java程序不用重新編譯就可以在不同平臺(tái)的計(jì)算機(jī)上運(yùn)行。Java在網(wǎng)絡(luò)上的獨(dú)特
14、優(yōu)勢(shì)以及其跨平臺(tái)的特點(diǎn),使得它已經(jīng)成為Internet上最受歡迎的編程語(yǔ)言之一。,10.1 程序與程序設(shè)計(jì),22,10.1.3 常見的程序設(shè)計(jì)語(yǔ)言 7.網(wǎng)頁(yè)設(shè)計(jì)類語(yǔ)言 目前,最常用的3種動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì)語(yǔ)言有ASP(Active Server Pages)、JSP(Java Server Pages)、PHP(Hypertext Preprocessor)。三者都提供在 HTML代碼中混合某種程序代碼、由語(yǔ)言引擎解釋執(zhí)行程序代碼的能力。 ASP是一個(gè)Web服務(wù)器端的開發(fā)環(huán)境,利用它可以產(chǎn)生和執(zhí)行動(dòng)態(tài)的、互動(dòng)的、高性能的Web服務(wù)應(yīng)用程序。ASP支持VBScript、JScript等腳本語(yǔ)言。 JS
15、P是用Java語(yǔ)言作為腳本語(yǔ)言的,并可以在Servlet和JavaBean的支持下,完成功能強(qiáng)大的站點(diǎn)程序。 PHP是一種跨平臺(tái)的服務(wù)器端的嵌入式腳本語(yǔ)言。它大量地借用C、Java和Perl語(yǔ)言的語(yǔ)法,并融合PHP自己的特性,使Web開發(fā)者能夠快速地寫出動(dòng)態(tài)生成頁(yè)面。,10.1 程序與程序設(shè)計(jì),23,10.2 算法,24,10.2 算法,10.2.1 算法的基本概念 廣義的說,為解決一個(gè)問題而采取的方法和步驟,就稱為“算法”。本書所關(guān)心的當(dāng)然只限于“計(jì)算機(jī)算法”。所謂的計(jì)算機(jī)算法就是使用計(jì)算機(jī)來(lái)解決一個(gè)問題時(shí)所采取的特定方法和步驟。,25,10.2 算法,10.2.1 算法的基本概念 例如,要
16、求出1+2+3+100的和,可設(shè)計(jì)如下的計(jì)算機(jī)算法。 設(shè)兩個(gè)變量:一個(gè)變量sum用來(lái)存放求和的結(jié)果,另一個(gè)變量i用來(lái)存放每次被加的數(shù)值; S1:使0=sum; S2:使1=i ; S3:使i的值累加到sum中,即sum+i=sum ; S4:使i的值加1,i+1=i ; S5:如果i=100,返回S3繼續(xù)執(zhí)行;否則,算法結(jié)束。 最后得到的sum的值就是要求的和。,26,10.2 算法,10.2.1 算法的基本概念 算法設(shè)計(jì)完成后,用某種程序設(shè)計(jì)語(yǔ)言描述出來(lái)就是計(jì)算機(jī)程序了。 算法與程序設(shè)計(jì)語(yǔ)言及程序的關(guān)系如圖所示。,27,10.2.2 算法的特征 1確定性 算法的描述必須無(wú)歧義,以保證算法的執(zhí)
17、行結(jié)果是確定的。 2可行性 算法中的每一步操作都必須是可執(zhí)行的,也就是說算法中每一步都能通過手工或機(jī)器在有限時(shí)間內(nèi)完成。 3輸入 一個(gè)算法有0個(gè)或多個(gè)輸入,在算法運(yùn)算開始之前給出算法所需數(shù)據(jù)的初值,這些輸入取自特定的對(duì)象集合。 4輸出 作為算法運(yùn)算的結(jié)果,一個(gè)算法產(chǎn)生一個(gè)或多個(gè)輸出,輸出是同輸入有某種特定關(guān)系的量。 5有窮性 一個(gè)算法總是在執(zhí)行了有窮步的運(yùn)算后終止,即該算法是可達(dá)的。,10.2 算法,28,10.2 算法,10.2.3 算法的表示方法 算法有很多種表示方法,常用的有自然語(yǔ)言、流程圖、N-S圖、偽代碼等。 1. 自然語(yǔ)言 用人們?nèi)粘J褂玫恼Z(yǔ)言,即自然語(yǔ)言來(lái)描述算法通俗易懂,但存在
18、以下缺陷: (1)易產(chǎn)生歧義,往往要根據(jù)上下文才能判別其確切含義; (2)語(yǔ)句繁瑣、冗長(zhǎng),尤其是描述包含選擇和循環(huán)的算法時(shí),不太方便。 因此,一般不用自然語(yǔ)言來(lái)描述算法,除非是很簡(jiǎn)單的問題。,29,10.2 算法,10.2.3 算法的表示方法 2. 流程圖 流程圖是用如圖所示的一些圖框、線條以及文字說明來(lái)描述算法。 流程圖表示的算法形象、直觀,便于交流。 因此被廣泛使用。,30,10.2 算法,流程圖,順序結(jié)構(gòu),入口,分支結(jié)構(gòu),循環(huán)結(jié)構(gòu),P 條件,A 語(yǔ)句1,B 語(yǔ)句2,31,真,假,要求出1+2+3+100的和,32,10.2 算法,10.2.3 算法的表示方法 3. N-S圖 N-S圖是一
19、種簡(jiǎn)化的流程圖,去掉了流程圖中的流程線,全部算法寫在一個(gè)矩形框內(nèi)。N-S圖三種基本結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)的符號(hào)如圖所示。 N-S圖表示算法直觀、形象,且比流程圖緊湊易畫。 實(shí)際應(yīng)用中也經(jīng)常采用。,33,10.2 算法,10.2.3 算法的表示方法 4. 偽代碼 用流程圖和N-S圖表示算法直觀易懂,但畫起來(lái)比較費(fèi)事,尤其當(dāng)設(shè)計(jì)一個(gè)復(fù)雜算法并需要反復(fù)修改時(shí),就更加麻煩。為了設(shè)計(jì)算法時(shí)方便,常用一種稱為偽代碼的工具。所謂“偽代碼”就是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來(lái)描述算法。 偽意味著假,因此用偽代碼寫的算法是一種假代碼不能被計(jì)算機(jī)所理解,但便于轉(zhuǎn)換成某種語(yǔ)言編寫的計(jì)算機(jī)程序。
20、 用偽代碼寫算法并無(wú)固定的、嚴(yán)格的語(yǔ)法規(guī)則,只要意思表達(dá)清楚,書寫格式清晰易讀即可。,34,10.2.4 算法的評(píng)價(jià) 1.正確性:無(wú)歧義,四個(gè)含義: a. 程序不含語(yǔ)法錯(cuò)誤; b.程序?qū)捉M輸入的數(shù)據(jù)能夠得出滿足規(guī)格說明要求的結(jié)果; c.程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組數(shù)據(jù)能夠得出滿足規(guī)格說明要求的結(jié)果; d. 程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能產(chǎn)生滿足規(guī)格說明要求的結(jié)果。 達(dá)到d層的正確性極為困難,一般以c層作為正確性的衡量標(biāo)準(zhǔn)。 2.可讀性:有助于對(duì)算法的閱讀、交流、理解、調(diào)試和修改。 3.健壯性:對(duì)非法輸入數(shù)據(jù),能適當(dāng)作出反映或進(jìn)行處理。 4.效率與低存儲(chǔ)量要求:時(shí)間復(fù)雜度和空
21、間復(fù)雜度,10.2 算法,35,10.2 算法,10.2.4 算法的評(píng)價(jià) 時(shí)間復(fù)雜度:是從算法效率的角度來(lái)考慮的,指依據(jù)算法編寫出的程序在計(jì)算機(jī)上運(yùn)行所消耗的時(shí)間。常常從算法中選取一種基本操作,以該基本操作重復(fù)執(zhí)行的次數(shù)作為算法的時(shí)間復(fù)雜度。 空間復(fù)雜度:指依據(jù)算法編寫出的程序在計(jì)算機(jī)上運(yùn)行時(shí)所占存儲(chǔ)空間的大小。通常也用算法所占輔助存儲(chǔ)空間大小的數(shù)量級(jí)來(lái)表示算法的空間復(fù)雜度。,36,10.2 算法,10.2.5 常用算法 1. 交換兩個(gè)變量的值,引例:設(shè)有兩個(gè)杯子A和B,分別盛放酒和醋,要求將它們互換。,S1:CA,S2:AB,S3:BC,37,10.2 算法,10.2.5 常用算法 1. 交
22、換兩個(gè)變量的值,已知變量x和y中分別存放了數(shù)據(jù),現(xiàn)在要交換其中的數(shù)據(jù)。為了達(dá)到交換的目的,需要引進(jìn)一個(gè)中間變量m(每個(gè)變量代表著一塊內(nèi)存區(qū)域),其算法如下: 將x中的數(shù)據(jù)送給變量m,即xm; 將y中的數(shù)據(jù)送給變量x,即yx; 將m中的數(shù)據(jù)送給變量y,即my。,自然語(yǔ)言描述算法,38,流程圖,NS流程圖,39,10.2 算法,10.2.5 常用算法 2. 累加和累乘,累加和累乘是程序設(shè)計(jì)常用的算法,累加是指將數(shù)值不斷的累加到累加器上,如前面所介紹的1+2+3+100。累加器,存放累加和的變量。,sum=sum+x 累加器,sum為累加器變量,40,10.2 算法,10.2.5 常用算法 2. 累
23、加和累乘,例:5+10+15+100,請(qǐng)同學(xué)們討論有多少種算法?,算法1、 直接賦值。如右圖,注意:實(shí)際編程時(shí),省略號(hào)也必須換成數(shù)字,顯然本例中只有20個(gè)數(shù)字累加,還可以用這種方法,如果有幾萬(wàn)個(gè)數(shù)字累加,這種方法就沒有辦法實(shí)現(xiàn)。,41,10.2 算法,10.2.5 常用算法 2. 累加和累乘,例:5+10+15+100,請(qǐng)同學(xué)們討論有多少種算法?,算法2、 使用公式。 (5+100)+(10+95)+(15+90)+(50+55) =105*10,注意:本例中,根據(jù)數(shù)字規(guī)律可以使用上面的公式。但不具有通用性。,42,10.2 算法,10.2.5 常用算法,算法3、 使用累加。 使用循環(huán)變量i,
24、取5100之間的數(shù)字,步長(zhǎng)為5。 5*(1+2+3+20),循環(huán)變量i, 取120之間的數(shù)字,步長(zhǎng)為1 請(qǐng)看右圖。,真,假,43,10.2 算法,10.2.5 常用算法,算法3、 使用累加。 使用循環(huán)變量i,取5100之間的數(shù)字,步長(zhǎng)為5。 5*(1+2+3+20),循環(huán)變量i, 取120之間的數(shù)字,步長(zhǎng)為1 請(qǐng)看右圖。,真,假,44,10.2 算法,10.2.5 常用算法,算法4、 使用枚舉。 使循環(huán)變量i取1100之間的每個(gè)整數(shù),步長(zhǎng)為1。 在循環(huán)中只有當(dāng)i是5的倍數(shù)時(shí)才將i 累加到S中。 請(qǐng)看右圖,這種方法的通用性最好。,真,真,假,假,45,10.2 算法,10.2.5 常用算法 3.
25、枚舉法(窮舉法或試湊法),1.根據(jù)條件確定答案的范圍,利用循環(huán)將范圍內(nèi)所有可能的情況一一列出。 2. 對(duì)所有可能的情況逐一驗(yàn)證。若某個(gè)情況符合條件,則為一個(gè)解;若全部情況均不符合條件,則問題無(wú)解。,46,10.2 算法,10.2.5 常用算法 3.枚舉法(窮舉法或試湊法),1.m的因子范圍為1-m之間的整數(shù)。 2. 設(shè)置變量i取1-m之間的每個(gè)整數(shù),對(duì)i的每個(gè)取值進(jìn)行判斷。,例:顯示出正整數(shù)m的所有因子。,真,假,假,真,47,10.2 算法,10.2.5 常用算法 3.枚舉法(窮舉法或試湊法),1.m和n最大公約數(shù)的范圍為n1之間的整數(shù)。 2. 設(shè)置變量i從n開始向1變化,當(dāng)找到第一個(gè)能夠同
26、時(shí)整除m和n的數(shù),即是m、n最大公約數(shù)。,例:顯示出正整數(shù)m和n的最大公約數(shù)(m=n)。,真,假,假,真,48,10.2 算法,10.2.5 常用算法 4.遞推法(迭代法),從初值出發(fā),歸納出新值與舊值間的關(guān)系,利用循環(huán)來(lái)完成迭代,每次循環(huán)時(shí)都從舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。,例:猴子吃桃子問題。小猴有桃若干,每天吃掉現(xiàn)有數(shù)的一半多一個(gè),到第7天要吃時(shí)只剩下一個(gè)了,問小猴原有桃子多少個(gè)? 設(shè)第n天的桃子為xn,它是前一天的桃子數(shù)的一半少1個(gè), 遞推公式 xn-1=(xn+1)2,49,10.2 算法,10.2.5 常用算法 4.遞推法(迭代法),50,10.2 算法,10.2.5
27、常用算法 5.求最值,如果要求最大值,在n個(gè)數(shù)中先假設(shè)第1個(gè)數(shù)為最大值并存入變量max,用變量max依次同第2、3、n個(gè)數(shù)據(jù)逐一比較,一旦某個(gè)數(shù)比max大,則用這個(gè)數(shù)來(lái)替換max中原有的值,所有數(shù)比較完,最大值也就獲得(打擂法)。,51,10.2 算法,10.2.5 常用算法 5.求最值,例:輸入三個(gè)數(shù),輸出其中的最大值。,52,10.2 算法,10.2.5 常用算法 5.求最值,例:輸入n個(gè)數(shù),輸出其中的最小值。,53,10.3 C程序入門,54,產(chǎn)生背景 ALGOL 60CPL語(yǔ)言BCPLB語(yǔ)言,寫UNIX系統(tǒng) 產(chǎn)生過程 時(shí)間:19721973 地點(diǎn):美國(guó)貝爾實(shí)驗(yàn)室 目的:UNIX操作系統(tǒng)
28、 設(shè)計(jì)人: Ken.Thompson和Dennis.M.Ritchie C標(biāo)準(zhǔn) 標(biāo)準(zhǔn)C: 1978年 K ,輸出: This is a c program.,例. 第一個(gè)程序This is a c program .,printf語(yǔ)句中的“n”是換行符,10.3.2 C程序結(jié)構(gòu),58,/* 例 求兩個(gè)整數(shù)之和*/ #include /* 主函數(shù) */ void main() int a,b,sum; /*定義變量*/ a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum); /* 求兩個(gè)數(shù) x , y 之和的函數(shù) */ int add(int x,int
29、 y) int z; z=x+y; return(z); ,運(yùn)行結(jié)果: sum=34,printf語(yǔ)句中的“ %d ”是表示“十進(jìn)制整數(shù)類型”,59,例 從鍵盤輸入兩個(gè)整數(shù),輸出其中較大的數(shù),#include void main() int max(int x,int y) int a,b,c; scanf(“%d,%d”, ,scanf語(yǔ)句中“ sum=0; for(i=1; i10;i+) for(j=1;j10;j+) sum+=i*j ; printf(“%dn”,sum); ,優(yōu)秀程序員的素質(zhì)之一: 使用TAB縮進(jìn) 對(duì)齊 有足夠的注釋 有合適的空行,C語(yǔ)言格式特點(diǎn),61,C語(yǔ)言結(jié)構(gòu)特
30、點(diǎn) 函數(shù)與主函數(shù) 程序由一個(gè)或多個(gè)函數(shù)組成 必須有且只能有一個(gè)主函數(shù)main(),可以放在程序中任一位置 程序執(zhí)行從main開始,在main中結(jié)束,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行。 程序語(yǔ)句 C程序由語(yǔ)句組成 用“;”作為語(yǔ)句終止符 注釋 /* */為注釋,不能嵌套 VC中也可以使用/ 不產(chǎn)生編譯代碼,例: /*This is the main /* of example1.1*/ */,編譯預(yù)處理命令,62,file.exe,程序代碼的錄入, 生成源程序*.c,語(yǔ)法分析查錯(cuò),翻譯 生成目標(biāo)程序*.obj,與其它目標(biāo)程序或庫(kù) 鏈接裝配,生成可執(zhí)行 程序*.exe,10.3.3 C程序的上機(jī)步驟,
31、63,VC+集成開發(fā)環(huán)境,打開VC。 單擊“file/new” 選擇“file”選項(xiàng)卡, C+ source file 輸入文件名(擴(kuò)展名.c), 選擇保存位置(Lacation)。 單擊“OK”,.c,64,VC+集成開發(fā)環(huán)境,編譯、鏈接和運(yùn)行的命令項(xiàng)都處在菜單Build之中。 注意,在對(duì)程序進(jìn)行編譯、鏈接和運(yùn)行前,最好先保存自己的工程(使用“FileSave All”菜單項(xiàng))以避免程序運(yùn)行時(shí)系統(tǒng)發(fā)生意外而使自己之前的工作付之東流。 首先選擇執(zhí)行菜單第一項(xiàng)Compile,此時(shí)將對(duì)程序進(jìn)行編譯。 若編譯中發(fā)現(xiàn)錯(cuò)誤(error)或警告(warning),將在Output窗口中顯示出它們所在的行以
32、及具體的出錯(cuò)或警告信息,可以通過這些信息的提示來(lái)糾正程序中的錯(cuò)誤或警告(注意,錯(cuò)誤是必須糾正的,否則無(wú)法進(jìn)行下一步的鏈接;而警告則不然,它并不影響進(jìn)行下一步,當(dāng)然最好還是能把所有的警告也“消滅”掉)。當(dāng)沒有錯(cuò)誤與警告出現(xiàn)時(shí),Output窗口所顯示的最后一行應(yīng)該是: “Hello.obj-0 error(s), 0warning(s)”。,65,VC+集成開發(fā)環(huán)境,選擇菜單的第二項(xiàng)Build來(lái)進(jìn)行鏈接生成可執(zhí)行程序。 在鏈接中出現(xiàn)的錯(cuò)誤也將顯示到Output窗口中。鏈接成功后,Output窗口所顯示的最后一行應(yīng)該是: “hello.exe-0 error(s), 0 warning(s)”。 運(yùn)
33、行(執(zhí)行) 程序,選擇Execute項(xiàng)(該選項(xiàng)前有一個(gè)深色的感嘆號(hào)標(biāo)志“!”. VC6將運(yùn)行已經(jīng)編好的程序,執(zhí)行后將出現(xiàn)如圖所示,其中的“press any key to continue”是由系統(tǒng)產(chǎn)生的,使得用戶可以瀏覽輸出結(jié)果,直到按下了任一個(gè)鍵盤按鍵時(shí)為止(那時(shí)又將返回到集成界面的編輯窗口處)。 編譯、鏈接和運(yùn)行也可以使用工具按鈕。 建立C的源程序也可以直接在windows新建一文本文件,然后將擴(kuò)展名改為.C。,66,10.4 基本數(shù)據(jù)類型與運(yùn)算符,67,C語(yǔ)言是一種強(qiáng)類型的計(jì)算機(jī)語(yǔ)言,所有用到的數(shù)據(jù),必須被說明為某種數(shù)據(jù)類型,數(shù)據(jù)類型是程序設(shè)計(jì)中的重要概念。數(shù)據(jù)類型確定數(shù)據(jù)在內(nèi)存中占所
34、空間的大小及存儲(chǔ)形式。在C語(yǔ)言中,數(shù)據(jù)類型可分為:基本類型,構(gòu)造類型,指針類型,空類型四大類。,10.4.1 C的數(shù)據(jù)類型,68,10.4.1 C的數(shù)據(jù)類型,C 數(shù) 據(jù) 類 型,基本類型,構(gòu)造類型,指針類型,空類型 void,字符型 char,整 型,實(shí) 型(浮點(diǎn)型),單精度型 float,雙精度型 double,數(shù)組類型,結(jié)構(gòu)體類型,共用體類型,短整型 short,長(zhǎng)整型 long,整型 int,數(shù)據(jù)類型決定: 1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù) 2. 數(shù)據(jù)取值范圍 3. 可以進(jìn)行的操作,69,10.4.1 C的數(shù)據(jù)類型,短整型,整型(int),整型,長(zhǎng)整型,無(wú)符號(hào)(unsigned short),有符
35、號(hào)(short),無(wú)符號(hào)(unsigned),有符號(hào)(int),無(wú)符號(hào)(unsigned long),有符號(hào)(long),70,標(biāo)識(shí)符 定義:標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、文件名的字符串序列名字。 命名規(guī)則: 只能由字母、數(shù)字、下劃線組成,且第一個(gè)字符必須是字母或下劃線 大小寫字母含義不同,一般用小寫 不能使用關(guān)鍵字 使用:先定義、后使用,標(biāo)識(shí)符應(yīng)該“見名知意”,如 total , max 標(biāo)識(shí)符應(yīng)該“不宜混淆”,如 l與1 , O與0,10.4.2 常量與變量,71,常量和符號(hào)常量 定義:程序運(yùn)行過程中,其值不能被改變的量(常數(shù)) 分類:直接常量、符號(hào)常量,72,符號(hào)常量:用標(biāo)識(shí)符
36、代表常量 一般用大寫字母: PRICE 、 PI 定義格式: #define 符號(hào)常量 常量 其值在作用域內(nèi)不能改變和再賦值。,例 符號(hào)常量舉例 #define PRICE 30 #include void main() int num,total; num=10; total=num*PRICE; printf(total=%dn,total); ,符號(hào)常量的優(yōu)點(diǎn)是:見名知意、一改全改,73,變量 定義:其值可以改變的量。 定義格式:數(shù)據(jù)類型 變量名; 變量應(yīng)該有名字,并在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。 變量名和變量值有不同的含義 變量實(shí)際代表一塊內(nèi)存存貯區(qū)域 變量名實(shí)為這個(gè)區(qū)域的標(biāo)識(shí),例 變量
37、的使用 main() int a; a=3; printf(“a=%d,a); ,74,整型常量(整常數(shù))的三種表示方法 十進(jìn)制整數(shù):由數(shù)字09和正負(fù)號(hào)表示. 如 123,-456,0 八進(jìn)制整數(shù):由數(shù)字0開頭,后跟數(shù)字07表示. 如 0123,011 十六進(jìn)制整數(shù):由0 x開頭,后跟09,af,AF表示. 如 0 x123,0 xff 八、十六進(jìn)制數(shù)都是無(wú)符號(hào)數(shù)。,整數(shù)數(shù)據(jù),75,注意: 十進(jìn)制數(shù)10的二進(jìn)制形式為1010,不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,Turbo C 2.0和Turbo C+ 3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲(chǔ)單元,VC+ 6.0則分配4個(gè)字節(jié)
38、。 數(shù)值是以補(bǔ)碼(complement) 表示的。,76,整型變量的分類:,共六種,有符號(hào)基本整型 有符號(hào)短整型 有符號(hào)長(zhǎng)整型 無(wú)符號(hào)基本整型 無(wú)符號(hào)短整型 無(wú)符號(hào)長(zhǎng)整型,(signed)int (signed)short (int ) (signed) long (int) unsigned int unsigned short (int) unsigned long (int),注意:括號(hào)表示其中的內(nèi)容是可選的.,77,整數(shù)類型的有關(guān)數(shù)據(jù)(VC+):,類型 類型說明符 長(zhǎng)度 數(shù)的范圍 基本型 int 4字節(jié) -231231-1 短整型 short 2字節(jié) -215215-1 長(zhǎng)整型 lon
39、g 4字節(jié) -231231-1 無(wú)符號(hào)整型 unsigned 4字節(jié) 0 (232-1) 無(wú)符號(hào)短整型 unsigned short 2字節(jié) 065535 無(wú)符號(hào)長(zhǎng)整型 unsigned long 4字節(jié) 0(232-1),78,整型變量的定義: 定義整型變量的一般形式: 類型說明符 變量名,變量名,.; 在定義變量的同時(shí)給變量賦值稱為變量初始化。變量初始化的格式為: 類型說明符 變量名=,變量名=,.;,79,【例】分析以下程序的運(yùn)行結(jié)果。 #include main() int a=1, b=2,c; long x=29,y=2147483600; c=a; a=10; printf(a+
40、b=%d,x+y=%ld,c=%dn,a+b,x+y,c); ,程序的運(yùn)行結(jié)果為: a+b=12,x+y=2147483629,c=1,80,【例】分析以下程序的運(yùn)行結(jié)果。 #include main() short d=-1; printf(%hd,%hun,d,d); ,程序的運(yùn)行結(jié)果為: -1,65535,81,【例】分析以下程序的運(yùn)行結(jié)果。 #include main() int i=65535; short j=i; printf(i=%d,j=%dn,i,j); ,程序的運(yùn)行結(jié)果為: i=65535,j=-1,本例中,變量i是整型變量,在內(nèi)存中占四個(gè)字節(jié)。65535在內(nèi)存中存放形式
41、為: 00000000 00000000 11111111 11111111 變量是j 是短整型變量,在內(nèi)存中只占兩個(gè)字節(jié),因此在將i賦給j時(shí),只將低端的兩個(gè)字節(jié)賦給j中內(nèi)容為: 11111111 11111111 (-1的補(bǔ)碼) 所以輸出的i為65535,j 為-1。,82,浮點(diǎn)型常量的表示方法,兩種表 示形式,小數(shù) 指數(shù),0.123 3e-3,注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù),1e3、1.8e-3、-123e-6、-.1e-3 e3、2.1e3.5、.e3、e,浮點(diǎn)型數(shù)據(jù)(實(shí)型數(shù)據(jù)),83,浮點(diǎn)型變量: 浮點(diǎn)型變量分為單精度(float型)、雙精度(double
42、型)。 浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式是用科學(xué)記數(shù)法(即指數(shù)的方式)存放的,在占用相同的存儲(chǔ)空間時(shí),浮點(diǎn)型數(shù)據(jù)可以存儲(chǔ)更大范圍的數(shù)據(jù),但浮點(diǎn)型數(shù)據(jù)有有效位限制(精度)。,84,【例】分析以下程序的運(yùn)行結(jié)果。 #include main() float x=101235342.98345678; double y=422222222345.11223344556677889900; printf(x=%f,y=%lfn,x,y); ,程序的運(yùn)行結(jié)果為: x=101235344.000000,y=422222222345.112240,八個(gè)有效位,十六個(gè)有效位,85,在內(nèi)存中存放字符時(shí),所存放的是該
43、字符的二進(jìn)制代碼(ASCII碼),字符型數(shù)據(jù),86,字符常量 (1)用單引號(hào)包含的一個(gè)字符是字符型常量 (2)只能包含一個(gè)字符,例,a,A, 1 abc、“a”,字符型數(shù)據(jù),87,有些以“”開頭的特殊字符稱為轉(zhuǎn)義字符,88,【例】分析以下程序的運(yùn)行結(jié)果。 main() int x=16,y=2008; printf(y=%drx=%dn,y,x); printf(%c%c%cb%.1fn,C,+,+,6.0); ,程序的運(yùn)行結(jié)果為: x=1608 C+6.0,89,字符變量 字符型變量用來(lái)存放字符常量,注意只能放一個(gè)字符。 字符變量的定義形式如下:char c1,c2; 一個(gè)字符變量在內(nèi)存中占
44、一個(gè)字節(jié)。,90,【例】分析以下程序的運(yùn)行結(jié)果。 #include main() char a=66; int b=A; printf(%d,%cn,a,a); printf(%d,%cn,b,b); ,程序的運(yùn)行結(jié)果為: 66,B 65,A,91,【例】以下程序?qū)崿F(xiàn)大小寫字母轉(zhuǎn)換。 #include main() char a=x,b=Y; /* a,b被說明為字符變量并賦值*/ a=a-32; /*把小寫字母換成大寫字母 */ b=b+32; printf(%c,%cn,a,b); ,程序的運(yùn)行結(jié)果為: X, y,92,字符串常量 字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列. 合法的字符串常量
45、: “How do you do.”, “CHINA”, “a” , “$123.45” 可以輸出一個(gè)字符串,如 printf(“How do you do.”);,字符串常量,93,是字符常量,”是字符串常量,二者不 同。 如:假設(shè)被指定為字符變量 :char c,c=a; ”a”;c”CHINA”;,結(jié)論:不能把一個(gè)字符串常量賦給一個(gè)字符變量。,94,規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè) “字符 串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。 規(guī)定以字符作為字符串結(jié)束標(biāo)志。,如:如果有一個(gè)字符串常量” ,實(shí)際上在內(nèi)存中是:,它占內(nèi)存單元不是個(gè)字符,而是個(gè)字符,最后一個(gè)字符為。但在輸出時(shí)不輸
46、出。,95,【例】分析以下程序的運(yùn)行結(jié)果。 #include #include main() printf(%d,%dn,strlen(abcd),sizeof(abcd); ,程序的運(yùn)行結(jié)果為: 4,5,strlen是用來(lái)計(jì)算字符串的長(zhǎng)度,這是一個(gè)庫(kù)函數(shù) sizeof是用來(lái)計(jì)算字符串所占存儲(chǔ)空間的大小,這是一個(gè)運(yùn)算符。,96,編程時(shí),要在程序中寫一些算式,這些算式就是表達(dá)式;一個(gè)表達(dá)式可能包含一個(gè)或多個(gè)操作,而連接這些操作對(duì)象的是運(yùn)算符。如:x+y-z/2就是一個(gè)C語(yǔ)言表達(dá)式。 特殊的,在程序設(shè)計(jì)語(yǔ)言中,單個(gè)常量、單個(gè)變量、單個(gè)函數(shù)也算表達(dá)式。 C語(yǔ)言運(yùn)算符有:算術(shù)運(yùn)算符、關(guān)系與邏輯運(yùn)算符、
47、賦值運(yùn)算符、條件運(yùn)算符、逗號(hào)運(yùn)算符等。,10.4.2 運(yùn)算符和表達(dá)式,97,算術(shù)運(yùn)算符和算術(shù)表達(dá)式 基本算術(shù)運(yùn)算符: + - * / % 結(jié)合方向:從左向右 優(yōu)先級(jí): - -* / % - + - (2) (3) (4) 說明: “-”可為單目運(yùn)算符時(shí),右結(jié)合性 兩整數(shù)相除,結(jié)果為整數(shù) %要求兩側(cè)均為整型數(shù)據(jù) + - * / 運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為實(shí)數(shù),結(jié)果是double型,例 5/2 = -5/2.0 =,例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2,例 5/2 = 2 -5/2.0 = -2.5,例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 =
48、0 5.5%2 (),98,自增、自減運(yùn)算符+ 作用:使變量值加1或減1 種類: 前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1),例j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,j=4,/3,j=4,/c=20,a=4,/c=15,a=4,99,幾點(diǎn)說明:,例 -i+ i=3; printf(“%d”,-i+);, -(i+),/-
49、3,+ - 不能用于常量和表達(dá)式,如 5+,(a+b)+ + - 結(jié)合方向: 自右向左 優(yōu)先級(jí):- + - -* / % -+ - (2) (3) (4) 該運(yùn)算符常用于循環(huán)語(yǔ)句中,使循環(huán)變量加減1,有關(guān)表達(dá)式使用中的問題說明 不同系統(tǒng)對(duì)運(yùn)算符和表達(dá)式的處理次序不同,盡可能寫通用性強(qiáng)的語(yǔ)句 不要寫有歧義和不知系統(tǒng)如何執(zhí)行的程序,100,賦值運(yùn)算符和賦值表達(dá)式,簡(jiǎn)單賦值運(yùn)算符 符號(hào): = 格式: 變量標(biāo)識(shí)符=表達(dá)式 作用:將一個(gè)數(shù)據(jù)(常量或表達(dá)式)賦給一個(gè)變量 左側(cè)必須是變量,不能是常量或表達(dá)式,例 a=3; d=func(); c=d+2;,例 3=x-2*y; a+b=3; (),類型轉(zhuǎn)換
50、賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型,例 float f ; int i=10; f=i; 則 f=10.0,例 int i; i=2.56; /結(jié)果i=2;,101,復(fù)合賦值運(yùn)算符 種類:+= -= *= /= %= = = a=5,/表達(dá)式值11,c=6,a=11,/表達(dá)式值10,a=10,b=4,c=6,/表達(dá)式值5,a=5,b=10,c=2,103,關(guān)系運(yùn)算符及其優(yōu)先次序 C語(yǔ)言提供6種關(guān)系運(yùn)算符 種類:= != 結(jié)合方向:自左向右 優(yōu)先級(jí)別:, (大于) = (大于等于) = = (等于) ! = (不等于),優(yōu)先級(jí)6(高),優(yōu)先級(jí)7(低),ca+b / c(
51、a+b) ab!=c / (ab)!=c a=bc / a=(bc),104,關(guān)系表達(dá)式 用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子,關(guān)系表達(dá)式的值:是邏輯值“真”或“假”,用1和0表示,ab , (a+b)(b+c) , 5=3,int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,/表達(dá)式值1,/表達(dá)式值1,/表達(dá)式值0,/d=1,/f=0,105,關(guān)系運(yùn)算幾點(diǎn)注意:,例 5278在C中是允許的, 值為,0,例 int i=1, j=7,a; a=i+(j%4!=0); 則a=,2,例 a0 結(jié)果為 A100 結(jié)果為,1,0,結(jié)合方向自左至右,用ASCII值比較,
52、106,關(guān)系運(yùn)算中應(yīng)該注意,注意區(qū)分“ = ”與“ = = ” int a = 0,b =1; if(a = b) printf(“a equal to b”); else printf(“a not equal to b”);,應(yīng)避免對(duì)實(shí)數(shù)作相等或不等于0的判斷 如 1.0/3.0*3.0=1.0 可改寫為:fabs(1.0/3.0*3.0-1.0)1e-6,結(jié)果為: a equal to b,107,邏輯運(yùn)算符和邏輯表達(dá)式 用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。 邏輯運(yùn)算符: C語(yǔ)言提供3種邏輯運(yùn)算符,“b=5; !a ab=2;c=3;d=4;m=1;n=1; 則
53、 (m=ab),例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a x0,表達(dá)式值為a xy?1:1.5 /xy ,值為1.0; xy ,值為1.5,max=(ab)? a:b; /max=ab? a:b;,嵌套:x0?1:(x0?-1:0),ab?a:cd?c:d ab?a:(c d?c:d),114,例 輸入一個(gè)字母,大寫轉(zhuǎn)小寫,然后輸出字母,#include void main() char ch; scanf(%c, ,輸入:A 輸出:a,115,逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式 形式:表達(dá)式1,表達(dá)式2,表達(dá)式n 結(jié)合性:從左向右 優(yōu)先級(jí): 15,級(jí)別最低 逗號(hào)表達(dá)
54、式的值:等于表達(dá)式n(最后一個(gè)表達(dá)式)的值,例 a=3*5,a*4 a=3*5,a*4,a+5 例 x=(a=3,6*3) x=a=3,6*a 例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表達(dá)式值60,/a=15,表達(dá)式值20,/賦值表達(dá)式,表達(dá)式值18,x=18,/逗號(hào)表達(dá)式,表達(dá)式值18,x=3,/1,2,3,/3,2,3,116,例: 逗號(hào)表達(dá)式使用 main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x); ,1
55、17,10.5 輸入輸出,118,C程序結(jié)構(gòu): 一個(gè)C程序可以由多個(gè)源程序文件構(gòu)成 一個(gè)源程序文件由若干函數(shù)、預(yù)編譯命令及全局變量聲明部分構(gòu)成 函數(shù)包括數(shù)據(jù)定義部分和執(zhí)行部分,執(zhí)行部分是C語(yǔ)言語(yǔ)句,完成對(duì)數(shù)據(jù)的操作,10.5.1 C語(yǔ)句概述,119,C語(yǔ)句分為5類 控制語(yǔ)句:共9種 完成一定的控制功能,這些語(yǔ)句能夠根據(jù)一定的測(cè)試條件決定某些語(yǔ)句是否被執(zhí)行,如分支、循環(huán)、跳轉(zhuǎn)等語(yǔ)句。,120,空語(yǔ)句:只有一個(gè)“ ; ”,什么也不做,表達(dá)式語(yǔ)句:由表達(dá)式加“ ; ”組成 典型的是賦值語(yǔ)句,由賦值表達(dá)式加分號(hào)構(gòu)成 如:y=x+1是表達(dá)式,而y=x+1;則是賦值語(yǔ)句。,函數(shù)調(diào)用語(yǔ)句:由函數(shù)加“ ; ”
56、組成,printf(“This is a C program”);,a=3 ; i+ ;,for(i=0;i100;i+) ; ,121,復(fù)合語(yǔ)句: 用 括起來(lái)的一組語(yǔ)句,也稱作程序塊。 一般形式:,int i=0,sum=0; while(i=100) sum=sum+i; i=i+1; ,說明 復(fù)合語(yǔ)句“ ”后不加分號(hào) 語(yǔ)法上和等同一條語(yǔ)句 復(fù)合語(yǔ)句可嵌套,122,標(biāo)準(zhǔn)輸入輸出函數(shù) putchar 輸出字符, scanf 格式輸入,puts 輸出字符串 getchar 輸入字符, printf 格式輸出,gets 輸入字符串,C語(yǔ)言本身沒有I/O語(yǔ)句,所有I/O都由函數(shù)來(lái)實(shí)現(xiàn)。 C語(yǔ)言的標(biāo)
57、準(zhǔn)庫(kù)函數(shù) 由編譯系統(tǒng)提供的一系列函數(shù),以庫(kù)形式存放在系統(tǒng)中,不是C語(yǔ)言文本的組成部分。 庫(kù)函數(shù)已編譯成目標(biāo)文件(.obj),在連接階段才與源程序編譯成的目標(biāo)文件相連接,生成可執(zhí)行文件。 調(diào)用形式: 函數(shù)名(參數(shù)表) 注意在調(diào)用C語(yǔ)言庫(kù)函數(shù)時(shí),需要使用編譯預(yù)處理命令#include ,使相應(yīng)的頭文件包含到用戶源程序中。,#include 或 #include ”stdio.h”,常用頭文件: stdio.h 定義輸入輸出函數(shù) string.h 定義字符串操作函數(shù) math.h 定義sin、cos等數(shù)學(xué)函數(shù),10.5.2 輸入輸出概述,123,putchar 函數(shù)(單字符輸出函數(shù)),輸出一個(gè)字符:
58、,格式: putchar( 字符); 或 putchar( 字符變量); 強(qiáng)調(diào):字符常量要加 括起來(lái),運(yùn)行結(jié)果:BOY,/* 例 putchar(字符)*/ #include void main() putchar(B); putchar(O); putchar(Y); ,/* 例 putchar(字符變量) */ #include void main() char a,b,c; a=B; b=O; c=Y; putchar(a); putchar(b); utchar(c); ,結(jié)果當(dāng)然還是一樣的!,10.5.3 字符輸入輸出,124,輸出轉(zhuǎn)義字符,/* 例 putchar(控制字符) */ #include void main() char a,b; a=O; b=k; putchar(a); putchar(n); putchar(b); ,運(yùn)行結(jié)果:O k,/*例 putchar( ) 含有轉(zhuǎn)義符* / #include void main() char a; a=B; putc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小升初音樂試卷及答案
- 生活燃煤供應(yīng)工春節(jié)假期安全告知書
- 2025年軟件開發(fā)項(xiàng)目質(zhì)量保證手冊(cè)
- 消費(fèi)者行為學(xué)試題及答案
- 消防公文寫作題庫(kù)及答案
- 線上銷售題目及答案
- 食品檢驗(yàn)員春節(jié)假期安全告知書
- 2025年北京中國(guó)文物交流中心面向社會(huì)招聘高層次專業(yè)技術(shù)人員筆試歷年參考題及答案
- 倉(cāng)儲(chǔ)公司托盤管理制度
- 外科護(hù)理副高職稱考試題庫(kù)及答案
- 國(guó)家自然基金形式審查培訓(xùn)
- 2026馬年卡通特色期末評(píng)語(yǔ)(45條)
- NCCN臨床實(shí)踐指南:肝細(xì)胞癌(2025.v1)
- 免租使用協(xié)議書
- 2025 AHA心肺復(fù)蘇與心血管急救指南
- 2026年九江職業(yè)大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)帶答案詳解
- 危化品庫(kù)區(qū)風(fēng)險(xiǎn)動(dòng)態(tài)評(píng)估-洞察與解讀
- 激光焊接技術(shù)規(guī)范
- 消防聯(lián)動(dòng)排煙天窗施工方案
- 2025年高考物理 微專題十 微元法(講義)(解析版)
- 2025年國(guó)家能源投資集團(tuán)有限責(zé)任公司校園招聘筆試備考題庫(kù)含答案詳解(新)
評(píng)論
0/150
提交評(píng)論