程序設(shè)計(jì)基礎(chǔ)整理課件_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)整理課件_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)整理課件_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)整理課件_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)整理課件_第5頁(yè)
已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2022/7/28程序設(shè)計(jì)-2005秋1提要程序設(shè)計(jì)基本概念結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言基礎(chǔ)知識(shí)高級(jí)語(yǔ)言程序開(kāi)發(fā)環(huán)境基本知識(shí)小結(jié)2022/7/28程序設(shè)計(jì)-2005秋2提要程序設(shè)計(jì)基本概念結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言基礎(chǔ)知識(shí)高級(jí)語(yǔ)言程序開(kāi)發(fā)環(huán)境基本知識(shí)小結(jié)2022/7/28程序設(shè)計(jì)-2005秋3什么是程序?程序(Program)就是供計(jì)算機(jī)執(zhí)行后,能完成特定功能的指令序列(Instructions sequence)程序=計(jì)算機(jī)指令序列程序包含兩方面的內(nèi)容數(shù)據(jù)對(duì)象(Objects)及數(shù)據(jù)對(duì)象之間關(guān)系數(shù)據(jù)結(jié)構(gòu)(Data structure)對(duì)這些對(duì)象的處理過(guò)程算法(Algorithm)2022/7/28程序設(shè)計(jì)

2、-2005秋4程序數(shù)據(jù)結(jié)構(gòu)算法程序 數(shù)據(jù)結(jié)構(gòu) 算法Program Data Structure Algorithm 這個(gè)公式由Niklaus Wirth首先提出。 Niklaus Wirth 是PASCAL之父和結(jié)構(gòu)化程序 設(shè)計(jì)的首創(chuàng)者,1984圖靈獎(jiǎng)獲得者。2022/7/28程序設(shè)計(jì)-2005秋5數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)由某一數(shù)據(jù)對(duì)象及該對(duì)象中所有數(shù)據(jù)成員之間的關(guān)系組成。記為:Data_Structure = D, R其中,D是數(shù)據(jù)對(duì)象,R是該對(duì)象中所有數(shù)據(jù)成員之間的關(guān)系的有限集合2022/7/28程序設(shè)計(jì)-2005秋6數(shù)據(jù)結(jié)構(gòu)(續(xù))程序的處理對(duì)象是描述客觀事物的數(shù)據(jù)由于客觀事物的多樣性,會(huì)有不同形

3、式的數(shù)據(jù)整數(shù)、實(shí)數(shù)、字符,以及所有計(jì)算機(jī)能夠接收和處理的各種各樣符號(hào)集合在程序中,形式不同的數(shù)據(jù)采用數(shù)據(jù)類型來(lái)標(biāo)識(shí)變量的數(shù)據(jù)類型說(shuō)明變量可能取的值的集合、施于變量的操作的集合2022/7/28程序設(shè)計(jì)-2005秋7數(shù)據(jù)結(jié)構(gòu)(續(xù))數(shù)據(jù)類型一組形式相同的數(shù)據(jù)集,對(duì)這組數(shù)據(jù)可施行的一組操作集對(duì)數(shù)據(jù)結(jié)構(gòu)的總括數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)對(duì)象及其相互關(guān)系和構(gòu)造方法程序的數(shù)據(jù)結(jié)構(gòu)描述了程序中的數(shù)據(jù)間的組織形式和結(jié)構(gòu)關(guān)系2022/7/28程序設(shè)計(jì)-2005秋8算法算法即問(wèn)題的求解方法算法由一系列求解步驟組成。算法的描述由經(jīng)明確說(shuō)明的一組簡(jiǎn)單指令和規(guī)則組成,計(jì)算機(jī)按規(guī)則執(zhí)行其中的指令能在有限的步驟內(nèi)解決一個(gè)問(wèn)題或者完成一

4、個(gè)函數(shù)的計(jì)算算法要求組成算法的規(guī)則和步驟的意義應(yīng)是唯一確定的,是沒(méi)有二義性的2022/7/28程序設(shè)計(jì)-2005秋9算法(續(xù))算法中的操作是有序的,必須按算法指定的操作順序執(zhí)行,能在有限步驟后給出問(wèn)題的結(jié)果求解同一問(wèn)題可能有多種算法,選擇算法主要考慮正確性可靠性簡(jiǎn)單性易理解性執(zhí)行效率空間(內(nèi)存和磁盤(pán))代價(jià)等2022/7/28程序設(shè)計(jì)-2005秋10算法(續(xù))描述算法的常用工具有流程圖(又稱框圖)流程圖是算法的圖形描述,流程圖往往比程序更直觀清晰,容易閱讀和理解,它不僅可以作為編寫(xiě)程序的依據(jù),也是交流算法思想的重要工具在逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法中,目前多數(shù)采用結(jié)構(gòu)化的偽代碼 (pseudo

5、code)來(lái)描述算法2022/7/28程序設(shè)計(jì)-2005秋11數(shù)據(jù)結(jié)構(gòu)vs.算法明確了問(wèn)題的算法,才能較好設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)要選擇好算法,又常常依賴于合理的數(shù)據(jù)結(jié)構(gòu)程序是和數(shù)據(jù)結(jié)構(gòu)不可分割的。程序在描述算法同時(shí),也必須完整地描述作為算法的操作對(duì)象的數(shù)據(jù)結(jié)構(gòu)。對(duì)于一些復(fù)雜的問(wèn)題,常有因數(shù)據(jù)的表示方式和結(jié)構(gòu)的差異,問(wèn)題的抽象求解算法也會(huì)完全不同2022/7/28程序設(shè)計(jì)-2005秋12程序的性質(zhì)目的性程序有明確的目的,程序運(yùn)行時(shí)能完成賦予它的功能分步性程序?yàn)橥瓿善鋸?fù)雜的功能,由一系列計(jì)算機(jī)可執(zhí)行的步驟組成有序性程序的執(zhí)行步驟是有序的,不可隨意改變程序步驟的執(zhí)行順序有限性程序是有限的指令序列,程序所包含的

6、步驟是有限的操作性有意義的程序總是對(duì)某些對(duì)象進(jìn)行操作,使其改變狀態(tài),完成其功能2022/7/28程序設(shè)計(jì)-2005秋13什么是程序設(shè)計(jì)?程序設(shè)計(jì)(Program design ) :設(shè)計(jì)和編制程序的過(guò)程設(shè)計(jì)程序:數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和算法設(shè)計(jì)編制程序:把設(shè)計(jì)轉(zhuǎn)化為某種程序語(yǔ)言的代碼程序設(shè)計(jì)需要程序設(shè)計(jì)方法 軟件工程(Software Engineering)方法學(xué)結(jié)構(gòu)化設(shè)計(jì)方法、面向?qū)ο蠓椒ǔ绦蛟O(shè)計(jì)語(yǔ)言 程序語(yǔ)言學(xué)Basic, Pascal, C, C+, Java, C#2022/7/28程序設(shè)計(jì)-2005秋14什么是好的程序?高效(Efficient)可靠(Reliable)易讀(Easy to

7、read)可維護(hù)(Maintainable)可重用(Re-usable)可移植(Portable)2022/7/28程序設(shè)計(jì)-2005秋15什么是程序設(shè)計(jì)語(yǔ)言?程序設(shè)計(jì)語(yǔ)言是人與計(jì)算機(jī)對(duì)話的工具,是用來(lái)書(shū)寫(xiě)計(jì)算機(jī)程序的語(yǔ)言人機(jī)語(yǔ)言(human-machine language)程序設(shè)計(jì)語(yǔ)言分三類機(jī)器語(yǔ)言(Machine language)匯編語(yǔ)言(Assembly language)高級(jí)語(yǔ)言(High-level language)2022/7/28程序設(shè)計(jì)-2005秋16程序設(shè)計(jì)語(yǔ)言High-level languageMachine languageAssembly language202

8、2/7/28程序設(shè)計(jì)-2005秋17機(jī)器語(yǔ)言機(jī)器語(yǔ)言:計(jì)算機(jī)的指令系統(tǒng)計(jì)算機(jī)都只能直接執(zhí)行由其自身機(jī)器語(yǔ)言編寫(xiě)的程序機(jī)器語(yǔ)言與計(jì)算機(jī)的硬件密切相關(guān)機(jī)器語(yǔ)言中的計(jì)算機(jī)指令通常用一個(gè)二進(jìn)制形式的代碼,由若干位1和0組成一條計(jì)算機(jī)指令指示計(jì)算機(jī)一次完成一個(gè)最基本的操作2022/7/28程序設(shè)計(jì)-2005秋18匯編語(yǔ)言匯編語(yǔ)言:用類英語(yǔ)單詞縮寫(xiě)的符號(hào)指令代替機(jī)器語(yǔ)言的二進(jìn)制代碼指令用匯編語(yǔ)言編寫(xiě)的程序在計(jì)算機(jī)上執(zhí)行,先要將用匯編語(yǔ)言編寫(xiě)的源程序轉(zhuǎn)換成機(jī)器語(yǔ)言程序。稱完成這個(gè)轉(zhuǎn)換功能的程序?yàn)椤皡R編程序“(assembler)2022/7/28程序設(shè)計(jì)-2005秋19高級(jí)程序最接近自然語(yǔ)言的程序設(shè)計(jì)語(yǔ)言主

9、要由語(yǔ)句(statements)構(gòu)成,語(yǔ)句是要計(jì)算機(jī)完成任務(wù)的命令有統(tǒng)一的語(yǔ)法,獨(dú)立于具體機(jī)器,便于人們編碼,閱讀和理解用高級(jí)語(yǔ)言編寫(xiě)的程序(源程序)在計(jì)算機(jī)上執(zhí)行,先要由編譯器(也稱為編譯程序)將源程序轉(zhuǎn)換成機(jī)器語(yǔ)言程序既能方便地描述客觀對(duì)象,又能借助于編譯器為計(jì)算機(jī)所接受的語(yǔ)言2022/7/28程序設(shè)計(jì)-2005秋20機(jī)器語(yǔ)言/匯編語(yǔ)言/高級(jí)語(yǔ)言機(jī)器語(yǔ)言計(jì)算機(jī)匯編程序解釋器編譯器高級(jí)語(yǔ)言匯編語(yǔ)言AssemblerInterpreterCompiler2022/7/28程序設(shè)計(jì)-2005秋21高級(jí)語(yǔ)言分類目前的高級(jí)語(yǔ)言可分三類面向過(guò)程的語(yǔ)言(Procedural language)面向問(wèn)題的

10、語(yǔ)言(Declarative language)描述語(yǔ)言面向?qū)ο蟮恼Z(yǔ)言(Object-oriented language)2022/7/28程序設(shè)計(jì)-2005秋22面向過(guò)程的語(yǔ)言早期最流行最常用的程序設(shè)計(jì)語(yǔ)言為面向過(guò)程型的語(yǔ)言Cobol, Fortran, Basic, C, 可獨(dú)立于計(jì)算機(jī)編寫(xiě)程序,但編寫(xiě)程序時(shí),程序不僅要說(shuō)明做什么(what),更重要的是非常詳細(xì)地告訴計(jì)算機(jī)如何做(how),程序需要詳細(xì)描述解題的過(guò)程和細(xì)節(jié)2022/7/28程序設(shè)計(jì)-2005秋23面向問(wèn)題的語(yǔ)言不必關(guān)心問(wèn)題的求解算法和求解的過(guò)程,只需指出問(wèn)題是做什么,數(shù)據(jù)的輸入和輸出形式,就能得到所需結(jié)果數(shù)據(jù)庫(kù)查詢和操縱語(yǔ)

11、言:SQL( Structured Query Language)語(yǔ)言邏輯語(yǔ)言專家系統(tǒng)語(yǔ)言:Prolog, Lisp等2022/7/28程序設(shè)計(jì)-2005秋24面向?qū)ο蟮恼Z(yǔ)言目的是克服面向過(guò)程語(yǔ)言過(guò)分強(qiáng)調(diào)求解過(guò)程細(xì)節(jié),程序不易復(fù)用的缺點(diǎn)引入了對(duì)象、消息、類、繼承、封裝、抽象、多態(tài)性等機(jī)制和概念用面向?qū)ο笳Z(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),以問(wèn)題中的對(duì)象為基礎(chǔ),將具有類似性質(zhì)的對(duì)象抽象成類,利用繼承機(jī)制,對(duì)差異進(jìn)行程序設(shè)計(jì)是目前的主流編程語(yǔ)言:C+, Java2022/7/28程序設(shè)計(jì)-2005秋25程序設(shè)計(jì)語(yǔ)言分類與自然語(yǔ)言親密關(guān)系機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言描述/求解問(wèn)題方式面向過(guò)程語(yǔ)言:Basic, Pa

12、scal, C面向問(wèn)題語(yǔ)言:SQL, Lisp, Prolog面向?qū)ο笳Z(yǔ)言: C+, Java程序設(shè)計(jì)風(fēng)格結(jié)構(gòu)化語(yǔ)言Pascal, C, C+, Java非結(jié)構(gòu)化語(yǔ)言Cobol, Fortran, Basic2022/7/28程序設(shè)計(jì)-2005秋26提要程序設(shè)計(jì)基本概念結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言基礎(chǔ)知識(shí)高級(jí)語(yǔ)言程序開(kāi)發(fā)環(huán)境基本知識(shí)小結(jié)2022/7/28程序設(shè)計(jì)-2005秋27結(jié)構(gòu)化程序設(shè)計(jì)方法程序結(jié)構(gòu)自頂向下模塊化設(shè)計(jì)方法模塊算法的逐步求精(stepwise refinement)設(shè)計(jì)方法用結(jié)構(gòu)化控制結(jié)構(gòu)描述算法和編寫(xiě)程序2022/7/28程序設(shè)計(jì)-2005秋28自頂向下模塊化設(shè)計(jì)方法限制程序復(fù)雜性是

13、程序設(shè)計(jì)核心程序結(jié)構(gòu)自頂向下模塊化設(shè)計(jì)方法就是把大程序按功能劃分成一些較小的部分,每個(gè)完成獨(dú)立功能分解模塊的原則是簡(jiǎn)單性、獨(dú)立性和完整性。模塊化設(shè)計(jì)方法開(kāi)發(fā)程序,使程序具有較高的可靠性和靈活性,同時(shí)便于程序的測(cè)試和維護(hù)2022/7/28程序設(shè)計(jì)-2005秋29自頂向下模塊化設(shè)計(jì)方法(續(xù))在用模塊化方法劃分程序模塊時(shí),應(yīng)盡量讓模塊具有如下良好性質(zhì):模塊具有單一入口和單一出口模塊不宜過(guò)大,模塊功能單一模塊的執(zhí)行不對(duì)環(huán)境產(chǎn)生副作用讓模塊與環(huán)境的聯(lián)系僅限于輸入和輸出參數(shù),模塊的內(nèi)部結(jié)構(gòu)與調(diào)用它的程序無(wú)關(guān)盡量用模塊的名字調(diào)用模塊2022/7/28程序設(shè)計(jì)-2005秋30模塊算法逐步求精設(shè)計(jì)方法程序設(shè)計(jì)的

14、基本方法是抽象、枚舉、歸納抽象包括算法抽象和數(shù)據(jù)抽象算法抽象是指算法的尋求(或開(kāi)發(fā))采用逐步求精、逐層分解的方法數(shù)據(jù)抽象也指在算法抽象的過(guò)程中逐步完善數(shù)據(jù)結(jié)構(gòu)和引入新的數(shù)據(jù)及確定關(guān)于數(shù)據(jù)的操作2022/7/28程序設(shè)計(jì)-2005秋31逐步求精設(shè)計(jì)方法(續(xù))算法設(shè)計(jì)采用逐步求精設(shè)計(jì)方法,先設(shè)計(jì)出一個(gè)抽象算法,這是一個(gè)在抽象數(shù)據(jù)上實(shí)施一系列抽象操作的算法,由粗略的控制結(jié)構(gòu)和抽象的計(jì)算步驟組成。抽象操作只指明“做什么”,對(duì)這些抽象操作的細(xì)化就是想方設(shè)法回答它“如何做”采用逐步求精的方法,由粗到細(xì),將抽象步驟進(jìn)一步分解成若干子任務(wù)。分而治之,對(duì)仍不具體的抽象子任務(wù)再進(jìn)行分解。如此反復(fù)地一步步細(xì)化,算法

15、越來(lái)越具體,抽象成分越來(lái)越少,直至可以編程為止2022/7/28程序設(shè)計(jì)-2005秋32程序的基本結(jié)構(gòu)單元順序結(jié)構(gòu)條件選擇結(jié)構(gòu)If c Then op1 Else op2 循環(huán)結(jié)構(gòu)Do While 循環(huán)結(jié)構(gòu)While循環(huán)結(jié)構(gòu)For 循環(huán)結(jié)構(gòu)任何可計(jì)算問(wèn)題,可用上述三種結(jié)構(gòu)編程解決2022/7/28程序設(shè)計(jì)-2005秋33順序結(jié)構(gòu)把復(fù)雜的計(jì)算工作分解成一系列逐條執(zhí)行的操作序列順序結(jié)構(gòu)就是為把一個(gè)復(fù)雜的計(jì)算用若干簡(jiǎn)單計(jì)算的順序執(zhí)行提供控制手段。順序結(jié)構(gòu)執(zhí)行時(shí),從序列的第一個(gè)操作開(kāi)始,順序執(zhí)行序列中的操作,直至序列的最后一個(gè)操作執(zhí)行后結(jié)束2022/7/28程序設(shè)計(jì)-2005秋34順序結(jié)構(gòu)實(shí)例實(shí)例:交

16、換變量x和y的值可分解為順序執(zhí)行的三個(gè)操作步驟: temp=x;/*將x的值暫存于temp */ x = y; /* 將x置成y的值 */ y=temp;/*將y置成temp的值 */2022/7/28程序設(shè)計(jì)-2005秋35條件選擇結(jié)構(gòu)條件選擇結(jié)構(gòu)有一個(gè)判斷條件和兩個(gè)供選擇分支操作組成一般形式: if (判斷條件) 分支操作1; else 分支操作2;2022/7/28程序設(shè)計(jì)-2005秋36條件選擇結(jié)構(gòu)執(zhí)行過(guò)程先計(jì)算判斷條件,如判斷條件的值為真,即條件成立,則執(zhí)行分支操作1 否則,若判斷條件的值為假,即條件不成立,則執(zhí)行分支操作2 注意,無(wú)論判斷條件為何值,條件選擇結(jié)構(gòu)只執(zhí)行分支操作1或分

17、支操作2之一條件選擇結(jié)構(gòu)中的分支又可以是任何控制結(jié)構(gòu),當(dāng)分支操作又是條件選擇結(jié)構(gòu)時(shí),就呈現(xiàn)嵌套(nested)的條件選擇結(jié)構(gòu)2022/7/28程序設(shè)計(jì)-2005秋37實(shí)例int max(int x,int y) /* 定義max函數(shù),函數(shù)值為整型, 形式參數(shù)x,y為整型*/int z; /* max函數(shù)中的聲明部分,定義本函數(shù)中用到的變量z為整型*/ if (xy) z=x; else z=y;return (z); 2022/7/28程序設(shè)計(jì)-2005秋38循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)為描述循環(huán)操作提供控制手段在C中,循環(huán)結(jié)構(gòu)有以下三種:while 循環(huán)結(jié)構(gòu)do-while 循環(huán)結(jié)構(gòu)for 循環(huán)結(jié)構(gòu)20

18、22/7/28程序設(shè)計(jì)-2005秋39while 循環(huán)結(jié)構(gòu)由一個(gè)循環(huán)條件和一個(gè)循環(huán)操作語(yǔ)句(稱為循環(huán)體)組成 一般形式: while ( 循環(huán)條件 ) 循環(huán)體2022/7/28程序設(shè)計(jì)-2005秋40while 循環(huán)結(jié)構(gòu)執(zhí)行過(guò)程每次循環(huán)前,先求循環(huán)條件的值,當(dāng)條件成立時(shí),就執(zhí)行循環(huán)體,并接著再次求循環(huán)條件的值,以確定循環(huán)體是否再次被執(zhí)行當(dāng)循環(huán)條件的值一開(kāi)始為假,或某次循環(huán)后其值為假,則結(jié)束循環(huán)操作2022/7/28程序設(shè)計(jì)-2005秋41實(shí)例計(jì)算5!:void main( ) int i,t; t=1; i=2; while(i=5) t=t*i; i=i+1; printf(%d,t);20

19、22/7/28程序設(shè)計(jì)-2005秋42do-while 循環(huán)結(jié)構(gòu)由一個(gè)循環(huán)條件和一個(gè)循環(huán)操作語(yǔ)句(稱為循環(huán)體)組成 一般形式: do 循環(huán)體 while ( 循環(huán)條件 );2022/7/28程序設(shè)計(jì)-2005秋43do-while循環(huán)結(jié)構(gòu)執(zhí)行過(guò)程每次循環(huán)前,先執(zhí)行循環(huán)體,接著再求循環(huán)條件的值,當(dāng)條件成立時(shí),再執(zhí)行循環(huán)體如此反復(fù),直到循環(huán)條件的值為假,結(jié)束循環(huán)操作2022/7/28程序設(shè)計(jì)-2005秋44實(shí)例求 s = 1 + 2 + 3 + + 100用do-while語(yǔ)句可描述成: s = 0; i = 1; do s += i; i+ ; while (i = 100);2022/7/28

20、程序設(shè)計(jì)-2005秋45for 循環(huán)結(jié)構(gòu)由為循環(huán)有關(guān)變量賦初值的表達(dá)式、循環(huán)條件、循環(huán)后對(duì)變量的修正表達(dá)式和循環(huán)執(zhí)行的循環(huán)體組成一般形式:for(賦初值表達(dá)式;循環(huán)條件表達(dá)式;修正表達(dá)式) 循環(huán)體2022/7/28程序設(shè)計(jì)-2005秋46for 循環(huán)結(jié)構(gòu)執(zhí)行過(guò)程循環(huán)前,先執(zhí)行賦初值表達(dá)式,為循環(huán)中的有關(guān)變量賦初值每輪循環(huán)開(kāi)始,先求循環(huán)條件的值,若條件不成立,則結(jié)束循環(huán)當(dāng)條件成立時(shí),執(zhí)行循環(huán)體;然后求變量修正表達(dá)式,更新有關(guān)變量的值;接著再次求循環(huán)條件如此反復(fù),直到條件為假,結(jié)束循環(huán)2022/7/28程序設(shè)計(jì)-2005秋47實(shí)例求 s = 1 + 2 + 3 + + 100用for語(yǔ)句可以寫(xiě)成:

21、for(s = 0, i = 1; i = 100; i+) s += i;2022/7/28程序設(shè)計(jì)-2005秋48提要程序設(shè)計(jì)基本概念結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言基礎(chǔ)知識(shí)高級(jí)語(yǔ)言程序開(kāi)發(fā)環(huán)境基本知識(shí)小結(jié)2022/7/28程序設(shè)計(jì)-2005秋49Dennis M. Ritchie(丹尼斯里奇)2022/7/28程序設(shè)計(jì)-2005秋50Dennis M. Ritchie(續(xù))Harvard University獲學(xué)士和博士學(xué)位1967年加入Bell實(shí)驗(yàn)室工作至今1972年發(fā)明C語(yǔ)言1978年, Brian W.Kernighan和Dennis M.Ritchie 合著The C Programming

22、LanguageTuring獎(jiǎng)(1983)和IEEE先驅(qū)獎(jiǎng)(1992)獲得者、美國(guó)工程院院士2022/7/28程序設(shè)計(jì)-2005秋51C語(yǔ)言發(fā)展史1960年出現(xiàn)的ALGOL 60是一種面向問(wèn)題的高級(jí)語(yǔ)言,它離硬件比較遠(yuǎn),不宜用來(lái)編寫(xiě)系統(tǒng)程序1963年英國(guó)的劍橋大學(xué)推出了CPL (combined programming language)語(yǔ)言。CPL語(yǔ)言在ALGOL 60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)1967年英國(guó)劍橋大學(xué)的Matin Richards對(duì)CPL語(yǔ)言做了簡(jiǎn)化,推出了BCPL (basic combined programming language) 語(yǔ)言2022/7

23、/28程序設(shè)計(jì)-2005秋52C語(yǔ)言發(fā)展史(續(xù))1970年美國(guó)貝爾實(shí)驗(yàn)室的Ken Thompson 以BCPL語(yǔ)言為基礎(chǔ),設(shè)計(jì)出了簡(jiǎn)單且很接近硬件的B語(yǔ)言 (取BCPL的第一個(gè)字母), 并用B語(yǔ)言寫(xiě)了第一個(gè)UNIX操作系統(tǒng)。但B語(yǔ)言過(guò)于簡(jiǎn)單,功能有限1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie 在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過(guò)于簡(jiǎn)單,數(shù)據(jù)無(wú)類型等)。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫(xiě),即UNIX第5版2022/7/2

24、8程序設(shè)計(jì)-2005秋53C語(yǔ)言發(fā)展史(續(xù))1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C語(yǔ)言問(wèn)世以來(lái)各種版本對(duì)C的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSI C1987年,ANSI又公布了新標(biāo)準(zhǔn) 87 ANSIC1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO (International Standard Organization) 接受87 ANSI C為ISO C 的標(biāo)準(zhǔn)(ISO 98991990)2022/7/28程序設(shè)計(jì)-2005秋54一個(gè)C程序?qū)嵗粋€(gè)只輸出一行信息的程序 #include void main( ) /* 主函數(shù) */ printf(This book is .n); 2022/

25、7/28程序設(shè)計(jì)-2005秋55C程序特點(diǎn)一個(gè)C程序有一個(gè)名為 main 的主函數(shù)主函數(shù)前的關(guān)鍵字void表示該函數(shù)不返回結(jié)果在函數(shù)名之后要有一對(duì)圓括號(hào),里面定義參數(shù)函數(shù)體用花括號(hào)“ ” 括住?;ɡㄌ?hào)可以用來(lái)括起任何一組C代碼,從而構(gòu)成復(fù)合語(yǔ)句或分程序簡(jiǎn)單C語(yǔ)句之后有一個(gè)分號(hào)“;”程序中的“/* */”表示程序的注釋部分。注釋便于人閱讀程序,對(duì)程序編譯和運(yùn)行都沒(méi)有作用#include 是編譯預(yù)處理命令行,指明有關(guān)輸入和輸出標(biāo)準(zhǔn)函數(shù)也將是程序的一部分2022/7/28程序設(shè)計(jì)-2005秋56【例】讀入兩個(gè)整數(shù),輸出它們的和/* 1 */ #include /* 2 */ void main()/

26、* 3 */ /* 變量定義部分 */* 4 */ int x, y, sum; /* 定義 x, y, sum */* 5 */ /* 以下為語(yǔ)句序列 */* 6 */ printf(Input x and yn);/*提示輸入數(shù)據(jù)*/* 7 */ scanf(%d%d, &x, &y); /* 輸入x和y的值 */* 8 */ sum = x+y ; /* 完成x+y的計(jì)算,求sum=x+y */* 9 */ printf(x + y = %dn, sum); /* 輸出結(jié)果 */* 10 */2022/7/28程序設(shè)計(jì)-2005秋57【例】利用公式:C = (5/9)(F-32)輸出F氏

27、溫度與C氏溫度對(duì)照表,設(shè)已知F氏溫度取0、20、200。#include void main() float f, c; /* 變量定義 */ int lower, upper, step; lower = 0; upper = 200; step = 20; f = lower; while (f = upper) /* 循環(huán)計(jì)算 */ c = 5.0/9.0 * (f - 32.0); printf(“%3.0f %6.1fn”, f, c); f = f + step; 2022/7/28程序設(shè)計(jì)-2005秋58【例】輸入兩個(gè)實(shí)數(shù), 輸出它們中的小的數(shù)#include void main

28、() float x, y, c; /* 變量定義 */ float min(float, float); /* 函數(shù)說(shuō)明 */ printf(“輸入x和y. n); scanf(%f%f, &x, &y ); c = min(x, y); /* 調(diào)用函數(shù) min() */ printf(MIN(%.2f, %.2f) = %.2fn, x, y, c);float min(float a, float b) float temp ; /* 函數(shù)使用的變量的定義 */ if (a b) temp = a; else temp = b;return temp ; /* 返回 temp 到調(diào)用 m

29、in() 函數(shù)處 */2022/7/28程序設(shè)計(jì)-2005秋59函數(shù)(Function)C程序由若干函數(shù)組成。每個(gè)程序都有一個(gè)主函數(shù)-main()函數(shù)一個(gè)函數(shù)定義由函數(shù)頭和函數(shù)體組成。函數(shù)頭包括函數(shù)屬性、 函數(shù)返回值類型、函數(shù)名、函數(shù)形式參數(shù)名,形式參數(shù)類型。函數(shù)結(jié)構(gòu)的一般形式: 函數(shù)返回值類型 函數(shù)名(參數(shù)說(shuō)明表) 說(shuō)明和定義部分; 執(zhí)行語(yǔ)句序列 2022/7/28程序設(shè)計(jì)-2005秋60函數(shù)(續(xù))函數(shù)可以沒(méi)有參數(shù),但函數(shù)名之后的一對(duì)圓括號(hào)是必須的函數(shù)體是函數(shù)頭之后用一對(duì)花括號(hào)括住的部分。函數(shù)體用于描述實(shí)現(xiàn)函數(shù)功能的代碼,它又包括:說(shuō)明和定義部分說(shuō)明數(shù)據(jù)結(jié)構(gòu)(類型)和定義函數(shù)專用的局部變量等

30、執(zhí)行部分由語(yǔ)句和控制結(jié)構(gòu)代碼組成2022/7/28程序設(shè)計(jì)-2005秋61【例】統(tǒng)計(jì)輸入字符行中各數(shù)字符、空白符與制表符符以及其它字符的出現(xiàn)次數(shù)。#include void main() int c, k, nWhite, nOther; int nDigit10; /* 定義有10個(gè)數(shù)字符的計(jì)數(shù)器 */ nWhite = nOther = 0; for(k = 0; k = 0 & c = 9) /* 如是數(shù)字符 */ +nDigitc 0;/* 對(duì)應(yīng)數(shù)字符的計(jì)數(shù)器增1 */ else if (c = | c = t) +nWhite; else +nOther; /* 其它字符計(jì)數(shù)器增1

31、*/ for(k = 0; k 10; k+) /* 輸出對(duì)應(yīng)數(shù)字符及其出現(xiàn)次數(shù) */ printf(”%c : %dn”, 0+k, nDigitk); printf(”white space : %dn other : %dnn”, nWhite, nOther);2022/7/28程序設(shè)計(jì)-2005秋62C語(yǔ)言詞匯基本符號(hào)數(shù)字10個(gè)(09)英文字母大、小寫(xiě)各26個(gè)(AZ,az)下線字符“_”其他構(gòu)成特殊符號(hào)的字符集基本詞匯字面形式常量特殊符號(hào)(運(yùn)算符)關(guān)鍵字標(biāo)識(shí)符(命名數(shù)據(jù)對(duì)象)2022/7/28程序設(shè)計(jì)-2005秋63關(guān)鍵詞(Keyword)auto break case char c

32、onst continue default do double else enum extern float for goto if int long register return short signed static struct switch typedef union unsigned voidvolatile while2022/7/28程序設(shè)計(jì)-2005秋64關(guān)鍵詞(續(xù))下面幾個(gè)雖不屬于關(guān)鍵字,但建議把它們看作關(guān)鍵字,不要在程序中隨便使用。它們用在程序的預(yù)處理命令行中define undef include ifdefifndefendif line elif2022/7/28程

33、序設(shè)計(jì)-2005秋65標(biāo)識(shí)符(Identifier)作用:用來(lái)標(biāo)識(shí)變量、常量、類型、函數(shù)、語(yǔ)句等程序?qū)ο?,C語(yǔ)言用標(biāo)識(shí)符給它們命名命名規(guī)則:在C語(yǔ)言中,一個(gè)合理的標(biāo)識(shí)符由英文字母或下線符開(kāi)頭,后跟或不跟由字母、下線符、數(shù)字符組成的字符列。一般以下線符開(kāi)頭的標(biāo)識(shí)符作內(nèi)部使用2022/7/28程序設(shè)計(jì)-2005秋66標(biāo)識(shí)符(續(xù))命名要求:標(biāo)識(shí)符作為程序成分對(duì)象的名稱,為了便于聯(lián)想和記憶,建議使用能反映該對(duì)象意義的標(biāo)識(shí)符限制:注意不同系統(tǒng)對(duì)標(biāo)識(shí)符的有效字符個(gè)數(shù)有不同的規(guī)定。對(duì)于限制標(biāo)識(shí)符8個(gè)有效字符的系統(tǒng)來(lái)說(shuō),兩個(gè)超過(guò)8個(gè)字符的不同標(biāo)識(shí)符,當(dāng)前8個(gè)字符依次相同時(shí),系統(tǒng)就認(rèn)為它們是同一個(gè)標(biāo)識(shí)符2022/7/28程序設(shè)計(jì)-2005秋67C語(yǔ)言數(shù)據(jù)類型三種數(shù)據(jù)類型基本數(shù)據(jù)類型、指針類型、復(fù)合數(shù)據(jù)類型基本數(shù)據(jù)類型三種整型(short, int, long)實(shí)型(float, double, long double)字符型(char)2022/7/28程序設(shè)計(jì)-2005秋68C語(yǔ)言數(shù)據(jù)類型(續(xù))復(fù)合數(shù)據(jù)類型數(shù)組、結(jié)構(gòu)、聯(lián)合和枚舉指針類型指針類型直接賦予數(shù)據(jù)對(duì)象在內(nèi)存中的地址的概念2022/7/28程序設(shè)計(jì)-2005秋69常量(Constant)在程序運(yùn)行過(guò)程中,其值不能改變或不允許改變的數(shù)據(jù)對(duì)象常量按值的表示形式區(qū)分它的類型整型常量:15浮點(diǎn)型常量:5.0字符型常量: a指針常量:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論