下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第1章程序設(shè)計基礎(chǔ)人的思維形式思維,是具有意識的人腦對于客觀現(xiàn)實的本質(zhì)屬性和內(nèi)部規(guī)律做出的自覺、間接和概括的反映。人的思維通常包括形象思維、抽象思維和靈感思維三種基本的思維形式。形象思維是指主體運用表象、直感、想象等形式,對研究對象的有關(guān)形象信息,以及貯存在大腦里的形象信息進行加工,從而從形象上認識和把握研究對象的本質(zhì)和規(guī)律,這種思維形式具有形象性、非邏輯性、粗略性和想象性。抽象思維(也稱為邏輯思維)與形象思維不同,它是指人們借助于概念、判斷、推理這些形式所進行的思考活動,是人腦對客觀事物間接的、概括的反映,它使人對事物的認識由外部的表面特征深入到內(nèi)在聯(lián)系,由感性的具體進入抽象的規(guī)定,形成概念、判斷、推理??梢哉f抽象思維是智力的核心部分,在人類的認識活動中占有主導地位。至于靈感思維,很難做出明確的界定。靈感實際上是潛思維,是潛在意識的表現(xiàn)。潛意識是如何工作的?采取什么方式?也不外是抽象思維和形象思維。因此,搞清楚形象思維和抽象思維,也就可以體會靈感思維的內(nèi)涵和規(guī)律了。在具體的思維活動中,不可能局限于哪ー種思維形式。解決ー個問題,做ー項工作或某個思維過程,往往需要將幾種形式巧妙結(jié)合,協(xié)同使用。人的思維和語言是緊密聯(lián)系的。思維是人腦的功能,思維的進行必須借助一定的物質(zhì)基礎(chǔ),這種物質(zhì)基礎(chǔ)就是語言。語言是人和人之間進行交流的工具,是思維的外衣。如果沒有語言,思維的功能也只是潛在的。因此在思維活動中語言是非常重要的,思維的過程是通過語言進行的,思維的結(jié)果也是通過語言的物質(zhì)表現(xiàn)才能為人們所感受。通常所說的語言為人類自然語言,廣義的語言還包括人工語言,人工語言就是在自然語言之外,人工定義的一套符號系統(tǒng),例如計算機語言,計算機正是利用這樣的人工語言來模擬人的思維。計算機作為ー套機器,本身并不具備思維能力,人們?yōu)榱四苁褂嬎銠C模擬人類的思維,制定了各種符號和語法規(guī)則,并賦之以相應的含義,以此來刻畫描述思維形式,這種語言稱為計算機語言。當人們想通過計算機完成人的某些功能時,必須事先把人完成該功能的思維過程用計算機語言表達出來,輸入計算機,當人們向計算機發(fā)出完成該功能的指令時,計算機就會快速、高效的完成,計算機也就會“思維”了。本學期我們學習的C語言就是計算機語言中的ー種,所有語言都是有共性的。除了我們的母語漢語,我們接觸的其他語言主要是英語,它有自己的基本符號、語句組成形式、語法規(guī)則,我們已經(jīng)有所體會。C語言也是如此,它之所以稱為ー種語言,也同樣具有語言的特征,它也有自己的基本符號、數(shù)據(jù)類型、運算符、基本結(jié)構(gòu)。程序設(shè)計基礎(chǔ)計算機已進入人類生活的各個領(lǐng)域,人們可以利用計算機解決一些實際的問題,例如數(shù)值計算、數(shù)據(jù)管理、過程控制等。表面上看計算機也有了思維的能力,但就其本質(zhì)上而言,計算機的這種“思維”仍然是模擬人類的思維,是人類思維在計算機上的一種表現(xiàn)形式。程序設(shè)計的基本概念.程序程序(Program)就是ー系列的操作步驟,計算機程序就是由人事先規(guī)定的計算機完成某項工作的操作步驟。每ー步驟的具體內(nèi)容由計算機能夠理解的指令來描述,這些指令告訴計算機“做什么”和“怎樣做”。它是用戶依據(jù)某種規(guī)則(程序設(shè)計語言的語法)編寫而成的。通常一個程序應該包含以下兩個方面的內(nèi)容:(1)對數(shù)據(jù)的描述。在程序中,要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。(2)對數(shù)據(jù)操作的描述。也就是具體的操作步驟,即算法。在ー個程序中數(shù)據(jù)和對數(shù)據(jù)的操作二者缺ー不可。沒有數(shù)據(jù),操作就成了無源之水,沒有具體的操作,數(shù)據(jù)也就失去了存在的價值。.程序設(shè)計程序設(shè)計(Programming)是給出解決特定問題程序的過程,是軟件構(gòu)造活動中的重要組成部分。程序設(shè)計往往以某種程序設(shè)計語言為工具,給出這種語言下的程序。一般的程序設(shè)計包括下述幾個階段:(1)分析階段分析階段由用戶和程序開發(fā)人員共同研究確定程序應完成的功能,解決“做什么”的問題。(2)設(shè)計階段由程序設(shè)計人員設(shè)計軟件的總體結(jié)構(gòu),也就是確定程序的組成模塊,以及各模塊之間的關(guān)系,并設(shè)計每個模塊的實現(xiàn)細節(jié)及具體算法。(3)編碼階段利用程序設(shè)計語言編寫各算法的程序代碼。(4)測試階段由專門的測試人員對編寫完成的程序代碼進行測試,盡可能多的發(fā)現(xiàn)其中的錯誤。(5)調(diào)試和運行階段借助于一定的調(diào)試工具找出程序中錯誤的具體位置,并改正錯誤,并在運行期間進行維護。程序設(shè)計語言(ProgrammingLanguage)是ー組用來定義計算機程序的語法規(guī)則。它是?種被標準化的交流技巧,用來向計算機發(fā)出指令。程序設(shè)計語言通??梢苑譃闄C器語言、匯編語言和高級語言。(1)機器語言機器語言是最底層的計算機語言,也是唯一能被計算機系統(tǒng)識別而直接使用的程序設(shè)計語言。機器語言屬于CPU的指令系統(tǒng),其每一條指令都是由二進制數(shù)0和1構(gòu)成的指令碼。機器語言與特定的機器有關(guān),計算機硬件不同,其機器語言也會不同。因此,針對某一臺計算機編寫的機器語言程序不能移植到其他計算機匕降低了程序的可移植性。(2)匯編語言匯編語言也是ー種面向機器的程序設(shè)計語言,它是機器語言中地址部分符號化的結(jié)果,因此匯編語言也稱為“符號語言”。計算機能夠識別的只有機器語言,用匯編語言編寫的程序不能直接被計算機執(zhí)行。因此,匯編語言編寫的程序在執(zhí)行之前必須翻譯成機器語言程序,這個過程稱為匯編過程。機器語言和匯編語言同屬于低級語言。它們與特定的機器有關(guān)、功效高,但使用復雜、繁瑣、費時、易出差錯。(3)高級語言初期的計算機語言比較繁瑣,與人類自然語言的差距很大,掌握起來比較艱難,隨著不斷的改進,計算機語言已經(jīng)逐步向人類的自然語言靠攏,出現(xiàn)了結(jié)構(gòu)化程序設(shè)計語言及面向?qū)ο蟮某绦蛟O(shè)計語言等高級語言,這些高級語言其特點是在一定程度上與具體機器無關(guān),易學、易用、易維護。但是用高級語言編寫的程序也不能直接被計算機識別,在執(zhí)行之前也要先翻譯成計算機能夠識別的機器指令。目前用到的高級語言很多,例如,VisualC++、VisualBasic、Java、Delphi等。圖1-1描述了程序設(shè)計語言的發(fā)展演變過程。ハBASIC卜ansi-basicqbasicvisual-basic_FORTRAN: FORTRAN77fFORTRAN90 f面向過程與面向?qū)ο骳語言是屬于面向過程的程序設(shè)計語言,面向過程程序設(shè)計又叫結(jié)構(gòu)化程序設(shè)計?!懊嫦蜻^程”是一種以事件為中心的編程思想;“面向?qū)ο蟆保∣bjectOriented,簡稱OOP)是ー種以事物為中心的編程思想。面向過程是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟ー步ー步實現(xiàn),使用的時候依次調(diào)用這些函數(shù)。面向?qū)ο笫前褬?gòu)成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。比如:開發(fā)一個五子棋游戲程序,面向過程的設(shè)計思路就是首先分析問題的步驟:1、開始游戲;2、黑子先走;3、繪制畫面;4,判斷輸贏;5、輪到白子;6、繪制畫面;7、判斷輸贏;8、返回步驟2;9、輸出最后結(jié)果。把上面每個步驟用分別的函數(shù)來實現(xiàn),程序就開發(fā)出來了。面向?qū)ο蟮脑O(shè)計則是從另外的思路來解決問題。整個五子棋可以分為1、黑白雙方,這兩方的行為是ー模ー樣的,2、棋盤系統(tǒng),負責繪制畫面,3、規(guī)則系統(tǒng),負責判定諸如犯規(guī)、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。在進行面向過程的程序開發(fā)時,需要程序的編寫者要十分清楚這個程序有那些功能,或者說有哪些函數(shù),函數(shù)之間是怎樣進行調(diào)用的,每ー步的函數(shù)返回值是什么,需要程序開發(fā)者嚴格控制每ー個步驟,對每個步驟做到心中有數(shù)。而面向?qū)ο蟪绦蛟O(shè)計方法以數(shù)據(jù)為中心來描述系統(tǒng),數(shù)據(jù)相對于功能而言具有較強的穩(wěn)定性,因此更易于維護。無疑面向?qū)ο笫歉呒壍摹5窃诿嫦蜻^程的基礎(chǔ)上發(fā)展起來的,從某種程度上講,面向過程是面向?qū)澫蟮囊徊糠?。我們掌握好了面向過程程序設(shè)計オ可以更好的掌握面向?qū)ο蟪绦蛟O(shè)計。本書講的是C語言,是最適合入門者學習的程序設(shè)計語言,無論對教學、實踐,還是讀者今后后續(xù)的學習都是有巨大幫助的,學好C語言可以從容的學習C++、JAVA,當然也可學習其他語言,因為計算機語言也是相通的。關(guān)于面向過程和面向?qū)ο笞x者先有這樣ー個簡単的印象,讀者學完第5章函數(shù)就會對面向過程有著深刻的理解了。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)是指互相之間存在著ー種或多種關(guān)系的數(shù)據(jù)元素的集合。是整個計算機科學與技術(shù)領(lǐng)域的ー個重要概念。它用來反映一個數(shù)據(jù)的內(nèi)部構(gòu)成,即一個數(shù)據(jù)包含什么內(nèi)容,以什么方式構(gòu)成,呈什么結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)有邏輯上的數(shù)據(jù)結(jié)構(gòu)和物理上的數(shù)據(jù)結(jié)構(gòu)之分。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分數(shù)據(jù)之間的邏輯關(guān)系,而物理上的數(shù)據(jù)結(jié)構(gòu)反映成分數(shù)據(jù)在計算機內(nèi)部的存儲安排。數(shù)據(jù)結(jié)構(gòu)是信息的ー種組織方式,好的數(shù)據(jù)結(jié)構(gòu)可以提高算法的效率,它通常與一組算法的集合相對應,通過這組算法集合可以對數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進行某種操作。.數(shù)據(jù)結(jié)構(gòu)的基本概念
數(shù)據(jù)項:數(shù)據(jù)的不可分割的最小単位。數(shù)據(jù)元素:是數(shù)據(jù)的基本單位,數(shù)據(jù)中的一個“個體”。它還可以再由不可分割的數(shù)據(jù)項組成。數(shù)據(jù)對象:是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的ー個子集。數(shù)據(jù):是ー個集合的概念,是對客觀事物的符號表示,在計算機科學中是指所有能被輸入到計算機中,并被計算機處理的符號的總稱。是計算機處理的信息的某種特定的符號表示形式。.數(shù)據(jù)結(jié)構(gòu)的研究對象數(shù)據(jù)結(jié)構(gòu)作為ー門學科,主要研究數(shù)據(jù)的各種邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),以及對數(shù)據(jù)的各種操作。因此,主要有三個方面的內(nèi)容:(1)數(shù)據(jù)元素之間的邏輯關(guān)系,也稱數(shù)據(jù)的邏輯結(jié)構(gòu)(LogicalStructure);數(shù)據(jù)的邏輯結(jié)構(gòu)是從邏輯關(guān)系上描述數(shù)據(jù),與數(shù)據(jù)的存儲無關(guān),是獨立于計算機的。數(shù)據(jù)的邏輯結(jié)構(gòu)可以看作是從具體問題抽象出來的數(shù)學模型。通常,數(shù)據(jù)的邏輯結(jié)構(gòu)簡稱為數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)反映了數(shù)據(jù)元素之間存在的一種或多種特定的關(guān)系,根據(jù)數(shù)據(jù)元素之間不同的關(guān)系特性,可以將數(shù)據(jù)結(jié)構(gòu)歸結(jié)為以下四類:(a)集合結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間除了“同屬于ー個集合”的關(guān)系外別無其他關(guān)系。(b)線性結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在ー個對ー個的前趨后繼關(guān)系,若結(jié)構(gòu)是非空集,則有且僅有一個開始結(jié)點和一個終端結(jié)點,并且所有結(jié)點都最多只有一個直接前趨和一個直接后繼。線性表是ー個典型的線性結(jié)構(gòu)。棧、隊列、串等都屬于線性結(jié)構(gòu)。(c)樹形結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在一個對多個的關(guān)系,任何ー個節(jié)點最多有一個前趨,可以有多個后繼,是ー種典型的非線性結(jié)構(gòu)。典型的樹形結(jié)構(gòu)包括ニ叉樹、森林、B樹等。(d)圖形結(jié)構(gòu)(網(wǎng)狀結(jié)構(gòu))集合結(jié)構(gòu)線性結(jié)構(gòu)樹形結(jié)構(gòu)網(wǎng)狀結(jié)構(gòu)(圖形)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在多個對多個的關(guān)系,這種結(jié)構(gòu)的特征是任何ー個元素可以有多個前趨,也可以有多個后繼,是ー種多對多的前趨后繼關(guān)系。典型的圖形結(jié)構(gòu)包括有向圖、無向圖、連通圖等。集合結(jié)構(gòu)線性結(jié)構(gòu)樹形結(jié)構(gòu)網(wǎng)狀結(jié)構(gòu)(圖形)圖1-2數(shù)據(jù)的邏輯結(jié)構(gòu)(2)數(shù)據(jù)元素及其關(guān)系在計算機存儲器內(nèi)的表示,稱為數(shù)據(jù)的存儲結(jié)構(gòu)(StorageStructure);數(shù)據(jù)的存儲結(jié)構(gòu)是邏輯結(jié)構(gòu)用計算機語言的實現(xiàn)(亦稱為映象),它依賴于計算機語言。數(shù)據(jù)的存儲結(jié)構(gòu)通常包括以下四種基本存儲方法:
(a)順序存儲方法順序存儲方法把邏輯上相鄰的數(shù)據(jù)元素存儲在物理位置上相鄰的存儲單元里,該方法主要應用于線性的數(shù)據(jù)結(jié)構(gòu)。由此得到的存儲表示稱為順序存儲結(jié)構(gòu),通常借助于程序語言的數(shù)組類型描述。(b)鏈接存儲方法鏈接存儲方法不要求邏輯上相鄰的結(jié)點在物理位置上亦相鄰,通過在每ー個數(shù)據(jù)元素中增加一個存放地址的指針,用此指針來表示數(shù)據(jù)元素之間的邏輯關(guān)系。由此得到的存儲表示稱為鏈式存儲結(jié)構(gòu),通常借助于程序設(shè)計語言的指針類型描述。(c)索引存儲方法索引存儲方法通常在儲存結(jié)點信息的同時,還建立附加的索引表。索引表由若干索引項組成。索引項的一般形式是: (關(guān)鍵字、地址)其中,關(guān)鍵字是能唯一標識ー個結(jié)點的那些數(shù)據(jù)項。若每個結(jié)點在索引表中都有一個索引項,則該索引表稱之為稠密索引(DenseIndex)?若一組結(jié)點在索引表中只對應ー個索引項,則該索引表稱為稀疏索引(SpareIndex)。(d)散列存儲方法散列存儲方法根據(jù)結(jié)點的關(guān)鍵字直接計算出該結(jié)點的存儲地址。(3)數(shù)據(jù)的運算對數(shù)據(jù)施加的操作,即數(shù)據(jù)的運算。數(shù)據(jù)的運算定義在數(shù)據(jù)的邏輯結(jié)構(gòu)上,每種邏輯結(jié)構(gòu)都有一個運算的集合。最常用的檢索、插入、刪除、更新、排序等運算實際上只是在抽象的數(shù)據(jù)上所施加的一系列抽象的操作。數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲結(jié)構(gòu)及數(shù)據(jù)的運算這三方面是ー個整體,需要結(jié)合起來去理解。同一邏輯結(jié)構(gòu)的不同存儲結(jié)構(gòu)可冠以不同的數(shù)據(jù)結(jié)構(gòu)名稱來標識,例如線性表是ー種邏輯結(jié)構(gòu),若采用順序方法的存儲表示,可稱其為順序表;若采用鏈式存儲方法,則可稱其為鏈表;若采用散列存儲方法,則可稱為散列表。算法算法是指完成一個任務或解決ー個問題所需要的具體步驟和方法。也就是說給定初始狀態(tài)或輸入數(shù)據(jù),經(jīng)過計算機程序的有限次運算,能夠得出所要求或期望的終止狀態(tài)或輸出數(shù)據(jù)。.算法的特征ー個算法應該具有以下五個重要的特征:(1)有窮性:有窮性是算法的重要特征,不論采用什么算法其目的是解決問題。因此,ー個算法必須在有限的操作步驟內(nèi)完成。如果一個算法的執(zhí)行時間是無限的,或在期望的時間內(nèi)沒有完成,那么這種算法就是無用和徒勞的,我們不能稱其為算法。(2)確切性:算法中的每ー步驟必須有確切的定義,即算法的描述必須無歧義,以保證算法的執(zhí)行結(jié)果是確定的:(3)輸入:ー個算法通常有0個或多個輸入,以此刻畫運算對象的初始情況:(4)輸出:算法的目的是解決問題,ー個算法通常有一個或多個輸出,以便反映算法運算的結(jié)果;(5)可行性:又稱有效性,算法中的每一個步驟原則上都能夠精確地運行,算法中描述的操作都可以通過已經(jīng)實現(xiàn)的基本運算執(zhí)行有限次來實現(xiàn)。.算法的組成要素算法通常由兩種基本要素組成:ー個是對數(shù)據(jù)對象的運算和操作;另外一個是算法的控制結(jié)構(gòu)。(1)算法中對數(shù)據(jù)的運算和操作:對于所有算法都是按照要求從環(huán)境能夠運行的所有操作中選擇合適的操作所組成的ー組指令序列。(2)算法的控制結(jié)構(gòu):算法中各操作之間的執(zhí)行順序。包括順序、選擇、循環(huán)三中結(jié)構(gòu)。.算法的描述方法描述算法的方法多種多樣,有自然語言、偽代碼、流程圖、N-S圖以及PAD圖等。(1)自然語言描述用自然語言描述即用人們?nèi)粘J褂玫恼Z言如漢語、英語或數(shù)學語言描述算法?!纠?-11計算1到N的累加和,使用自然語言描述該算法如下:stepl:輸入N的值;step2:將變量i的置為1;累加和sum的置為〇;step3:如果i<=N,則執(zhí)行第4步,否則轉(zhuǎn)到第7步執(zhí)行;step4:計算sum+i,并將結(jié)果賦給sum;step5:計算i+1,并將結(jié)果賦給i;step6:重新返回到第3步開始執(zhí)行;step7:輸出sum的結(jié)果。以上就是用自然語言配合數(shù)學語言所描述的算法。用自然語言描述的算法通俗易懂,而且容易掌握,但是其不足是容易出現(xiàn)二義性、難以淸晰表達出分支、循環(huán)結(jié)構(gòu)、而且算法的描述冗長,與計算機的具體高級語言形式差距較大。(2)用偽代碼(Pseudocode)描述算法:偽代碼是ー種介于自然語言與計算機語言之間的算法描述方法,常用自然語言、數(shù)學語言和符號來描述算法的操作步驟。偽代碼結(jié)構(gòu)性較強,比較容易書寫和理解,修改起來也相對方便。其特點是不拘泥于語言的語法結(jié)構(gòu),而著重以靈活的形式表現(xiàn)被描述對象。偽代碼沒有統(tǒng)一的標準,可以自己定義,也可以采用與程序設(shè)計語言類似的形式?!纠?-21計算1到N的累加和,使用偽代碼描述該算法如下:開始山鍵盤輸入N值置變量i初值為1置累加和變量sum初值為0當i<=N時執(zhí)行以下步驟:
sum=sum+ii=i+l輸出sum的值結(jié)束(3)用流程圖描述算法流程圖也叫框圖,是ー種傳統(tǒng)的算法表示法,它利用幾何圖框來代表各種不同性質(zhì)的操作,用流程線來指示算法的執(zhí)行方向。其特點是直觀,設(shè)計者的思路表達得清楚易懂,便于檢査修改。利用傳統(tǒng)流程圖描述算法時常用符號如下:圖1-3常見的流程圖符號使用流程圖描述算法時,一-般要注意以下幾點:(a)流程圖圖框中的文字要盡量簡潔,而且應根據(jù)解決問題的步驟從上至下順序地畫出流程圖:(b)流程線的走向總是從上向下或從左向右,為避免流程圖的圖形顯得過長,圖中的流程線要盡量短;(c)流程圖對算法的描述可粗可細,但是根據(jù)實際問題的復雜性,流程圖達到的最終效果應該是,根據(jù)流程圖就可以用某種程序設(shè)計語言實現(xiàn)相應的算法?!纠?-3】計算1到N的累加和,使用傳統(tǒng)流程圖描述該算法如下:
(d)用N-S圖描述算法N-S圖是由美國人LNassi和B.Shneiderman共同提出的,其主要特點是取消了流程線,全部算法由一些基本的矩形框圖順序排列組成一個大矩形表示,即不允許程序任意轉(zhuǎn)移,而只能順序執(zhí)行,因此,N-S圖是?種結(jié)構(gòu)化的算法描述方法。N-S圖有以下流程圖符號。順序結(jié)構(gòu) 選擇結(jié)構(gòu) While順序結(jié)構(gòu) 選擇結(jié)構(gòu) While循環(huán) Until循環(huán)圖1-51例1N]計算1到N的累加和,使用N-S圖描述該算法如下:C語言的發(fā)展與特點C語言的發(fā)展狀況C語言是!97I年由美國貝爾實驗室的D.M.Ritchie用了一年的時間設(shè)計發(fā)明的,1972年投入使用。從圖6-1中可以看到C語言直接來源于B語言,但它的根源可以追溯到ALGOL6O0ALGOL60是ー種結(jié)構(gòu)嚴謹,面向過程的語言,與計算機硬件相距甚遠,不適合編寫系統(tǒng)軟件。1963年英國劍橋大學在此基礎(chǔ)上推出了CPL語言,雖然接近硬件,但卻太復雜難以實現(xiàn)。1967年,劍橋大學的MatinRinchards對CPL語言作了簡化,推出了BCPL語言。1970年貝爾實驗室的Ken.Thompson以BCPL語言為基礎(chǔ)設(shè)計了更簡單也更接近硬件的B語言。而D.M.Ritchie又將B語言發(fā)展成C語言。1973年K.Thompson和D.M.Ritchie用C語言重寫UNIX操作系統(tǒng)獲得巨大成功,同時由B.W.Kernighan和D.M.Ritchit合著了著名的“THECPROGRAMMINGLANGUAGE”ー書。通常簡稱為《K&R》,也有大稱之為《K&R》標準。但是,在《K&R》中并沒有定義?個完整的標準C語言。1983年美國國家標準化協(xié)會(ANSI)為C語言制定了一套ANSI標準,1987年ANSI公布了87ANSI標準成為現(xiàn)行的C語言標準。早期的C語言主要是用于UNIX系統(tǒng)。由于C語言的強大功能和各方面的優(yōu)點逐漸為人們認識,到了八十年代,C開始進入其它操作系統(tǒng),并很快在各類大、中、小和微型計算機上得到了廣泛的使用。90年代至今,美國Borland公司陸續(xù)推出了TurboC、TurboC++、BorlandC++以及C++Builder等系列產(chǎn)品,Microsoft公司也推出了MicrosoftC,VisualC等產(chǎn)品。目前這些產(chǎn)品均提供了面向?qū)ο蟮目梢暬_發(fā)環(huán)境,用戶可以快速、方便地建立DOS/Windows應用程序。C語言已成為程序員使用最多的編程語言之一。無論是面向硬件編程,還是面向大型數(shù)據(jù)庫編程;無論編寫應用軟件,還是編寫操作系統(tǒng);C語言都是首選編程語言。C語言的特點.語言簡潔緊湊、方便靈活C語言中提供了32個關(guān)鍵字,9種程序結(jié)構(gòu)控制語句,程序書寫格式自由。.運算功能豐富C語言提供了34種運算符,它把括號、賦值、強制類型轉(zhuǎn)換等都作為運算符處理。從而使C的運算類型極為豐富,表達式類型多樣化,靈活使用各種運算符可以實現(xiàn)在其它高級語言中難以實現(xiàn)的運算。.數(shù)據(jù)類型豐富C的數(shù)據(jù)類型有:整型、實型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實現(xiàn)各種復雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運算。尤其是指針類型數(shù)據(jù),使得C語言的使用更加靈活、多樣。
.結(jié)構(gòu)化的程序設(shè)計語言結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?便于使用、維護以及調(diào)試。在結(jié)構(gòu)化程序設(shè)計中,對于ー個復雜的問題,通常是劃分為多個相對簡單的功能模塊,對于這些小的功能模塊C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。.語法結(jié)構(gòu)松散。為保證編程者有較大的自由度,C語言放寬了語法檢查;例如,C語言對數(shù)組下標越界不作檢查,由程序員自己保證程序的正確。對變量的類型使用比較靈活,例如整型量與字符型數(shù)據(jù)以及邏輯型數(shù)據(jù)可以通用。因此,要求編程人員謹慎細心。.C語言允許直接訪問物理地址,直接對硬件進行操作。C語言能實現(xiàn)匯編語言的大部分功能,可以直接對硬件進行操作。因此C語言既具有高級語言的功能,又具有低級語言的許多功能,又被稱為“中間語言”,C語言可用來寫系統(tǒng)軟件。.生成目標代碼質(zhì)量高,程序的執(zhí)行效率高。一般只比匯編程序生成的目標代碼效率低!0%~20%o.可移植性好。C語言突出的?個優(yōu)點就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機型,可以在不同系統(tǒng)之間方便的進行移植。簡單程序示例為說明c程序的特點,下面通過幾個例子,使讀者對c語言編寫的程序有個初步的認識?!纠?-5]在屏幕上顯示一句話:hello!?//包含標準輸入//包含標準輸入輸出頭文件/?定義主函數(shù)?/#include<stdio.h>voidmain()printf("hello!\n");/printf("hello!\n");/?在屏幕上輸出hello,光標移到下一行?/運行結(jié)果:hello?Pressanykeytocontinue分析:Uun是注釋,用于注釋一行,注釋不影響程序的編譯和運行?!?*”和“*/”之間括起來的內(nèi)容也是注釋,可用于注釋多行。(3)只要程序用到輸入輸出函數(shù),如輸出函數(shù)printf(),就需要在程序中包含stdio.h頭文件,即標準輸入輸出頭文件,寫法為:#include<stdio.h>或#include"stdio.h"o(4)程序由主函數(shù)voidmain()組成,void為main函數(shù)的返回值類型,為空。(5)函數(shù)內(nèi)容用大括號{}括起來,也叫做函數(shù)體,main函數(shù)的函數(shù)體開始于左花括號“{",結(jié)束于右花括號mian()函數(shù)中只有一個函數(shù)調(diào)用語句,用于在屏幕ヒ顯示指定的字符串信息,'作為語句結(jié)束的標志。hello后面的\n叫做轉(zhuǎn)義字符,意為回車換行。(8)輸出結(jié)果后面的"Pressanykeytocontinue”是系統(tǒng)自動添加的,不算做輸出結(jié)果?!纠?-6】從鍵盤上輸入任意ー個整數(shù),計算其平方,并在顯示器上輸出結(jié)果。/*progl.06*/#include<stdio.h>voidmain()/?以下聲明變量?/intn; 〃聲明整型變量nunsignedht$ /Z聲明無符號整型變量s/?以下是執(zhí)行語句?/printf("n="); /Z顯示字符串,作為提示信息scanf("%d",&n); /Z 鍵盤輸入s=n*n; /Z計算平方并賦值printf("s=%d",s);/7顯示計算結(jié)果程序運行情況:輸入6,回車,運行結(jié)果如下:輸入ー6,回車,運行結(jié)果如下:=一6=36Pressanykeytocontinue分析:本程序中聲明了變量n和s。因為變量n從鍵盤上讀取整數(shù)值,所以聲明其為整型(int)變量;而變量s保存的平方不會為負,所以聲明其為無符號整型(unsignedint)變量。木程序演示了如何聲明變量,如何從鍵盤輸入數(shù)據(jù)給變量,如何利用變量進行計算,以及如何輸出變量的值?!纠?-7】由鍵盤輸入三角形的三個邊長,計算該三角形的面積。/*progl.07*/#include<stdio.h> 〃包含輸入輸出頭文件include<math.h> 〃包含數(shù)學函數(shù)頭文件doublefun(floata,floatb,floatc)/Z定義用戶函數(shù),函數(shù)名為fun,返刖類型為double
doublem;m=(a+b+c)/2.0;returnsqrt(m*(m-a)*(m-b)*(m-c));〃調(diào)用開平方函數(shù)sqrt?并用return語句將表達式的值返回主函數(shù)}voidmiin() 〃定義main函數(shù){floatab,c; 〃定義3個單精度浮點型(實型)變量a,b,cdoublearea: 〃定義1個雙精度浮點型變量areaprintf("pleaseinputa,b,c:\n");scanf("%f%f%f&a,&b,&c);〃輸入3個數(shù)字,用空格或回車分隔area=fun(a,b,c); 〃調(diào)用fun函數(shù)并賦值printf("area=%6.2f\n",area); 〃輸出結(jié)果)程序運行情況:輸入345,按回車,運行結(jié)果如下:pleaseinput345area=6.00Pressanykeytocontinue輸入,運行結(jié)果如下:pleaseinputa,b,c:area=13.10Pressanykeytocontinue分析:本例說明如何編寫自定義函數(shù),如何調(diào)用自定義函數(shù),如何使用C系統(tǒng)提供給我們的庫函數(shù),以及如何聲明和使用局部變量?!纠??8】由鍵盤輸入任意圓的半徑r,計算其周長和面積。〃宏定義,PI代表3.14159〃聲明自定義函數(shù)〃宏定義,PI代表3.14159〃聲明自定義函數(shù)cir」();〃聲明自定義函數(shù)cir_s();/?以下是主程序(主函數(shù))*/voidmain()float「l,s;float「l,s;printf(nr=n);scanf("%f\&r);l=cir_l(r);〃變量聲明語句〃鍵盤輸入,對r賦值〃計算圓的周長,賦值給變量1s=cir_s(r); 〃計算圓的面積,賦值給變量sprintf("l=%f\ns=%f\n",l,s);〃輸出結(jié)果) 〃程序結(jié)束/?定義計算圓的周長的函數(shù)?/floatcir_l(floatx) 〃子函數(shù)頭,括號中的“floatx”為定義形參floatz 〃聲明局部變量if(x>0) 〃如果參數(shù)大于〇,則計算圓的周長z=2*PI*x;returnz 〃返回函數(shù)值/?定義計算圓的面積的函數(shù)?/floatcir_s(floatx)floatz 〃聲明局部變量if(x>0) 〃如果參數(shù)大于〇,則計算圓的周長Z=PI*X*X;returnz 〃返回函數(shù)值程序執(zhí)行過程:程序執(zhí)行后,輸入1.2,按回車,運行結(jié)果如下:妙=1?21=7.539816s=4.523890Pressanykeytocontinue分析:本例題中又演示了如何使用簡單宏定義:#definePI3.14159C程序的書寫格式通過上面的c程序例子,我們可以發(fā)現(xiàn)c程序的書寫格式有以下特點:(1)在C程序中,習慣于使用小寫英文字母,例如,intfloat代表整數(shù)類型和浮點類型,而大寫字母多用于表示常量或其他特殊用途。例如,例1-8中的宏定義,PI代表3.14159。C語言的大小寫字母敏感,例如cir、Cir、CIR代表不同的標識符。(3)每個C程序中有必須有一個名稱為main的函數(shù),并且只能有一個。通常稱main()函數(shù)為主函數(shù),其第一個花括號“ビ和最后ー個花括號“ド標志函數(shù)體的開始和結(jié)尾。(4)在C程序中,用花括號“{”和“ド括起的部分表示ー個獨立的程序模塊,例如,ー個函數(shù)體或ー個由多個簡單語句組成的復合語句。注意,“{”和“ド必須成對出現(xiàn)。(5)構(gòu)成函數(shù)的基本單位是語句,每個語句必須以英文格式的分號結(jié)束。語句的起始位置沒有特別的要求。程序中可以有空行,也可以在一行中有多個語句。例如:printf("r="); 〃顯示字符串scanf("%f',&r):〃鍵盤輸入,對r賦值也可以將這兩句寫在一行:printf("r=");scanf("%f',&r);為了使C程序便于閱讀,編寫程序時通常采用“縮排方式”,即內(nèi)層語句縮進若干列,且同層的語句左對齊,這也是ー個程序編寫者應具有的基本素質(zhì)。例如:floatcir_s(floatx)floatz 〃聲明局部變量if(x>0) 〃如果參數(shù)大于〇,則計算圓的周長z=PI*x*x; 〃內(nèi)層語句進行縮排return4 〃返回函數(shù)值(6)程序中可插入注釋。注釋用來対程序進行說明,也是程序的重要組成部分,可增強程序的可讀性。注釋在編譯時不產(chǎn)生代碼,編譯時編譯器將其作為“空白符”處理,不會影響程序的運行。注釋的內(nèi)容可以是任何字符,包括中文。一般在程序或函數(shù)的開始處用注釋說明程序或函數(shù)的功能。我們也可以在調(diào)試程序時使用注釋,例如程序運行出現(xiàn)問題,我們可以將這個問題以外的代碼注釋掉,有針對性的對問題進行處理,處理后再將剛オ的注釋去掉。恰當?shù)氖褂米⑨屢彩且粋€C程序編寫者應具備的基本素質(zhì)。在VC++6.0中,要掌握兩種注釋的方式。第一種:ウ/”,用于注釋一行,表示從ケ/”開始一直到行尾均為注釋,注釋一行用。第二種:ウ?”和“ウ”之間括起來的內(nèi)容也是注釋,通常用于注釋多行,當然用于注釋單行也可以?!?*”是注釋的開始,“*/”表示注釋的結(jié)束?!?*”和“*/”之間的內(nèi)容均是注釋內(nèi)容。例如:/*ThisismyfirstcprogramOnlyuseonefunction:printf();Nosyntaxerror,rmh甲py */(7)在C程序最開始處通常有預處理命令,例如上面4個例子的開始處都有#include<stdio.h>預處理命令。#include<stdio.h>的作用是把stdio.h這個頭文件內(nèi)容插入到該命令所在的位置。在C語言系統(tǒng)中,“*.h”形式的文件被稱為頭文件。頭文件中包含了使用系統(tǒng)函數(shù)和常量的有關(guān)信息。例如,在stdio.h頭文件中包含了printf()和scanf()的聲明信息。math.h頭文件包含了sqrt()函數(shù)的信息。除了#includeタト,還有其他ー些預處理命令,比如,例1-8中的宏定義#definePI3.14159也是預處命令中的一種,將3.14159賦值給PI,用來表示圓周率,有了這個宏定義,在程序中就可以使用這個標識符P1來代替3.14159這個數(shù)。本書將有專門的章節(jié)介紹預處理命令。main()函數(shù)C語言程序中最重要的函數(shù)是main。函數(shù),main。函數(shù)也稱為主函數(shù)。所有完整可運行的C程序都必須有一個惟ー的main()函數(shù)。例如,本章前面所舉的4個例子不論其代碼長短、功能如何,都有一個main。函數(shù)。main。是C程序中唯一可以直接運行的函數(shù),其他函數(shù)都直接或間接山main。調(diào)用執(zhí)行。C程序的執(zhí)行開始于main。函數(shù),ー個結(jié)構(gòu)良好的C程序也應結(jié)束于main。函數(shù)。對于一些較小的程序,用ー個main。函數(shù)就夠了,全部的處理語句都放在main。函數(shù)中。例如,上面的【例!-5]和【例1-6】。對于ー些復雜問題,需要進行模塊化設(shè)計,要將一個復雜問題分解成若干個相對簡單的ー些子問題,每個子問題由一個或多個函數(shù)來處理,main。函數(shù)負責總控,并調(diào)用相應的函數(shù)。例如,上面的【例1-7】和【例1-8】。main。是ー個特殊的函數(shù),與其他函數(shù)一樣,該函數(shù)也可以有返回值和參數(shù)表。本書第5章將對main。函數(shù)給出更進ー步說明。下面給出main。函數(shù)的最簡單形式。main() 〃主函數(shù)名{ 〃函數(shù)體起始符局部變量聲明執(zhí)行語句序列} 〃函數(shù)體終止符C程序的基本結(jié)構(gòu)通過【例1-7】和【例1-8】我們可以發(fā)現(xiàn),C程序的完整基本結(jié)構(gòu)如下:預處理命令聲明函數(shù)聲明全局變量main()局部變量聲明語句可執(zhí)行語句序列fio局部變量聲明語句可執(zhí)行語句序列及()局部變量聲明語句可執(zhí)行語句序列}fn()局部變量聲明語句可執(zhí)行語句序列對于C程序基本結(jié)構(gòu)的幾點說明。(1)預處理命令:指示編譯系統(tǒng)進行有關(guān)處理時,要使用預處理命令。例如,預處理命令#include"stdio.h"的作用是讓編譯系統(tǒng)將stdio.h文件內(nèi)容插入到該命令所在的位置。有些程序會用到多個預處理命令,如[例!-7]和【例1-8】。(2)聲明函數(shù):在C語言中,無論變量還是函數(shù),都要先定義,后使用,當main。函數(shù)要調(diào)用自定義函數(shù)時,被調(diào)用的函數(shù)需要聲明。注意,聲明函數(shù)和定義函數(shù)是兩回事。我們使用的系統(tǒng)庫函數(shù)也是要聲明的,其聲明在相應的頭文件中,例如,在【例1-7】中,在子函數(shù)fun中,調(diào)用了一個C系統(tǒng)提供給我們的庫函數(shù)sqrt(),作用是開平方根,它包含在“math.h”這個頭文件中。要在程序中使用這個函數(shù),就要在程序開始進行聲明,就像要使用printf()和scanf()這兩個函數(shù),他們包含在頭文件’'stdio.h”中,所以程序開始也要聲明。聲明的方法就是#include"stdio.h",#include"math.h",他們倆的先后順序無所謂。(3)聲明全局變量:全局變量是在程序中的各個函數(shù)中均可使用的變量,其聲明的位置在所有函數(shù)之外。比如在【例1-8I中也可以在main。函數(shù)定義之前聲明如下全局變量,以代替宏定義。floatPI=3.14159: 〃聲明全局變量PI,并賦初值(4)聲明局部變量:局部變量只有在聲明它的函數(shù)中有效,在其他函數(shù)中無效。例如,在[例1-8]中,main。函數(shù)使用的局部變量聲明語句為:floatrl.s; 〃變量聲明語句(5)其中fl()到fn()代表若干個用戶自定義函數(shù)。從以上結(jié)構(gòu)可以看到,無論是main()函數(shù)還是其他函數(shù),函數(shù)體都由最外層的花括號“{”和“ド標記開始和結(jié)束的。(6)函數(shù)體由一系列語句組成,包括各種聲明語句和可執(zhí)行語句。(7)C程序的基本單元是函數(shù),C語言的函數(shù)可以分為三類:第一類:主函數(shù)。第二類:用戶自定義函數(shù),可有可無(根據(jù)需要),數(shù)目不限,例如在[例1-7]中,fun()是程序編寫者自己定義的函數(shù),又稱子函數(shù),這么稱呼是相對主函數(shù)而言,其功能是計算三角形的面積,在函數(shù)定義時,函數(shù)名前加double表示該函數(shù)返回值類型是雙精度浮點型(實型)。在main函數(shù)中輸入三角形的三個邊長,然后調(diào)用函數(shù)fun計算出三角形的面積,并將所得返回值賦給變量area,程序最后輸出area的值。在[例1-8]中,cir_l()和cir_s()是用戶自定義的兩個函數(shù),用來計算周長和面積。第三類:C語言提供的庫函數(shù),例如最常用的輸出函數(shù)printfO和輸入函數(shù)scanf()?!纠?-7]中還使用了庫函數(shù)中的數(shù)學函數(shù)sqrt()。書后附錄中給出了常用庫函數(shù)及使用方法??傊?使用C語言編寫的程序通常是由包括main()函數(shù)在內(nèi)的ー組函數(shù)組成。每個函數(shù)都有一個由合法標識符所確定的函數(shù)名,而函數(shù)體是由“1’和“}”引起來的一系列語句構(gòu)成。一個C程序總是從主函數(shù)main()開始執(zhí)行,通過main。函數(shù)可以直接或間接調(diào)用其他函數(shù)。因此,ー個完整的C程序必須有主函數(shù)main。。有關(guān)函數(shù)等此處提出的概念,我們將會在本書后面的各章中陸續(xù)給出專門介紹。1.4C程序開發(fā)及運行環(huán)境c程序的開發(fā)及運行環(huán)境并不是唯一的,能夠編譯c代碼的編譯器有很多,最著名的是TurboC。在過去將近20年的時間里,大多數(shù)C語言的學習者和一些開發(fā)者所使用的是TurboC2.0系列(簡稱TC),它是ー個C程序的集成開發(fā)環(huán)境,是美國著名的Borland公司的系列產(chǎn)品之一,Borland公司是一家專門從事軟件開發(fā)和研制的大公司,其著名產(chǎn)品Delphi號稱VB(微軟的VisualBasic)將。TC2.0是該公司1987年推出的,它是一個小巧的(不到1Mb)、純粹的C編譯、開發(fā)、運行環(huán)境,可以運行與目前流行的各類PC機上,軟、硬件要求很低,操作系統(tǒng)為DOS2.0或更高版本,RAM只需448K,操作簡單,編輯功能強大。TC2.0是DOS操作系統(tǒng)下的開發(fā)環(huán)境,所以不支持鼠標,一切操作要通過鍵盤來完成,并且用它編寫的程序也只能在DOS下運行。過去在高校教師一直用TC教C,學生一直用TC學C,幾乎所有教材也都用TC來演示。現(xiàn)今Windows早已大行其道,面向?qū)ο蛟缫扬L靡天下,而且從08年開始全國計算機等級考試的考試大綱又把C語言編輯環(huán)境由TC2.0轉(zhuǎn)變到VisualC++6.0,所以本書簡單介紹VC++6.0并著重講解在VC下編譯C程序的步驟。本書雖然采用VisualC++6.0來編譯C程序,但讀者要知道VisualC++6.0本質(zhì)上是Windows平臺下的IDE(IntegratedDevelopmentEnvironment,集成開發(fā)環(huán)境),是面向?qū)ο蟮?。而TC這類開發(fā)環(huán)境オ是純粹的C程序的集成開發(fā)環(huán)境,是DOS下的,面向過程的。只不過VisualC++6.0支持開發(fā)、編譯、運行C程序而已,雖然VisualC++6.0本身十分復雜,功能強大,但使用它學習C語言是簡單的,需要我們掌握的只是幾個簡單的操作步驟而已。開發(fā)C程序的步驟.幾個基本概念(1)源文件源文件又叫源程序,是用來保存特定編程語言的代碼的文件,源文件中的代碼又叫源代碼。機器硬件不能直接識別和執(zhí)行源程序。源文件可以通過開發(fā)環(huán)境所提供的編輯器創(chuàng)建,也可以通過其他文件編輯器創(chuàng)建。例如,可以利用Turboc2.0柒成環(huán)境或Windows操作系統(tǒng)中的“記事本”可以創(chuàng)建和編輯C源程序。源程序通常以特定擴展名的文本文件形式保存在磁盤上。例如,C語言源程序文件的擴展名為“.C”。(2)目標文件H標文件又叫目標程序,目標程序是語言系統(tǒng)的編譯程序?qū)⒃闯绦蚍g后生成的二進制代碼文件。目標程序的形式是二進制代碼,計算機的硬件能夠識別,但還不具備運行條件。目標程序也是以文件形式保存在磁盤ヒ。例如,C語言目標程序文件的擴展名為“.obj”。(3)可執(zhí)行文件又叫可執(zhí)行程序,可執(zhí)行程序是計算機能直接識別和執(zhí)行的程序,它是將目標文件與所需要的庫文件等信息連接后生成的程序??蓤?zhí)行程序是由語言系統(tǒng)的連接程序?qū)δ繕顺绦蜻M行連接后生成,保存在磁盤上,可供用戶多次執(zhí)行。C語言可執(zhí)行文件的擴展名為”.exe”。(4)編譯程序編譯程序是高級語言系統(tǒng)提供的ー種翻譯程序,其作用是將高級語言編寫的源程序翻譯成二進制代碼程序。例如,C語言和FORTRAN語言為編譯型語言,用它們編寫的程序必須經(jīng)過創(chuàng)建、編輯、編譯、連接和運行等幾個步驟才能完成。在對源程序編譯過程中發(fā)現(xiàn)的錯誤稱為編譯錯誤,而程序在運行時出現(xiàn)的錯誤稱為運行錯誤。(5)連接程序連接程序是ー種裝配程序,起作用是將一個或若干個目標程序(.obj)和指定的庫文件(Jib)連接起來,生成一個可執(zhí)行程序(.exe)。.開發(fā)C程序的步驟無論在何種編譯器下開發(fā)C程序,其原理是相同的,都要經(jīng)過以下幾個步驟:(1)編輯編輯就是編寫源程序的過程,或者說是在源文件中書寫源代碼的過程。C語言的編輯過程就是在“.c”文件中編寫C代碼的過程。(2)編譯編輯好的源文件是以文本形式存儲的,必須翻譯成機器語言才能被計算機識別。完成這ーー翻譯工作的就是編譯程序。源程序經(jīng)過編譯程序翻譯成等價的機器語言程序——目標程序(.obj文件),這?翻譯過程就叫做編譯。(3)連接將一個或若干個目標程序(.obj)和指定的庫文件(.lib)連接起來,生成一個可執(zhí)行程序(,exe)?(4)運行生成的.exe文件就是最終為人們所用的程序,比如一些應用軟件和小游戲。所謂運行ー個程序,或者說執(zhí)行ー個程序,就是把ー個可執(zhí)行文件從外存調(diào)入計算機內(nèi)存,并由計算機完成該程序預定的功能,如完成輸入數(shù)據(jù)、處理數(shù)據(jù)、輸出結(jié)果等任務。用大白話講,當我們用鼠標雙擊.exe文件,就表示開始運行了。(5)調(diào)試源程序中難免會存在錯誤,所以需要進行調(diào)試。錯誤一般可分為四類:(a)編譯錯誤:即語法錯誤。程序不符合C語言語法規(guī)定,在編譯時就會出錯。編譯錯誤包括語法錯誤(error)和警告錯誤(warning)。例如,某ー變量未定義就使用,則會出現(xiàn)語法錯誤。又如,某變量未賦初值就用來求和,則會出現(xiàn)警告錯誤。編輯錯誤屬于“低級錯誤”,打個比方,相當于在寫英語作文時將單詞拼錯。(b)邏輯錯誤:即算法錯誤。ー個程序能夠運行,但是運行后得不到正確的結(jié)果,或者說不能反映源代碼所對應的含義。這是由于在算法的設(shè)計過程或程序的表達式中存在錯誤,如程序控制流程錯誤。邏輯錯誤屬于“高級錯誤”,打個比方,相當于在寫英語作文時將意思表達錯誤。(C)連接錯誤:將目標程序連接成可執(zhí)行程序時出現(xiàn)的錯誤,如找不到庫文件,通常發(fā)生在編譯環(huán)境的配置錯誤時。(d)運行錯誤:程序執(zhí)行時在某些特殊情況下發(fā)生的錯誤??偨Y(jié):如果將開發(fā)C程序的過程比喻成廚師炒菜的話,源文件就相當于菜譜,可執(zhí)行程序就相當于炒出的菜。廚師炒菜的過程就是編譯器通過源程序生成可執(zhí)行程序的過程??梢钥闯?,我們主要耍完成的是編輯工作,也就是寫代碼的過程,這也是本書要教給大家的。編譯和連接都是由后面要介紹的VisualC++6.0這個開發(fā)環(huán)境來完成,只要正確安裝和運行軟件,這兩個步驟一般不會出現(xiàn)問題,需要我們做的只是按幾下鼠標。沒有語法錯誤不等于沒有邏輯錯誤,只要沒有語法錯誤就能夠編譯通過,但是生成的.exe文件不一定能夠執(zhí)行人們預期的功能,這就是算法錯誤。如果出現(xiàn)語法錯誤,編譯器會給我們進行提示,我們根據(jù)提示的信息更改源代碼。對于算法錯誤,我們只能重新分析算法或仔細檢查代碼中的錯誤。最后要說明的是,C的源文件、C++的源文件、JAVA的源文件都屬于文本格式的文件,所以我們可以用任何ー種文本編輯工具來完成編輯的工作。最常見、最方便的就是windows的“記事本”程序。我們可以用它來完成編輯工作,也可以利用它來保存代碼。如果要將它變成C的源文件,將擴展名由.txt改成.c即可。VisualC++6.0集成開發(fā)環(huán)境VisualC++6.0簡介MicrosoftVisualC++,這套功能強大的Windows應用程序開發(fā)系統(tǒng)由MicrosoftC/C++演化而來。從MicrosoftC/C++8.0開始改稱為VisualC++,發(fā)展到今天的VisualC++6.0。由于先天的“血緣”關(guān)系,Visual平臺是當前Windows應用開發(fā)系統(tǒng)中與Windows平臺本身最具親和性的開發(fā)平臺。特別是VisualC++6.0,它包含了支持Windows95、WindowsNT4.0及Windows98的Win32SDK文檔,即人們可以在VisualC++環(huán)境卜.使用WindowsSDK提供的SDK文檔中的AP!來進行Windows應用程序的開發(fā)。VisualC++的最主要特點是:可視化編程和支持面向?qū)ο蟮木幊碳夹g(shù)。VisualC++提供了一系列可視化編程的工具,如AppWizard和ClassWizard等。它們使windows編程更為直觀。VisualC++支持的面向?qū)ο蟮木幊碳夹g(shù)包裝了Windows在內(nèi)的変雜的運行機制,使Windows編程更為簡單易學。此外,VisualC++還具有其他技術(shù)特點:如通過ActiveX技術(shù),支持Internet編程,支持ODBC數(shù)據(jù)庫編程等。軟、硬件要求:
(1)操作系統(tǒng):Windows98,Windows200〇或WindowsXP及更髙版本。(2)內(nèi)存:根據(jù)不同操作系統(tǒng)設(shè)定,最好在128Mb以上。(3)硬盤:最小需要300Mb以上空間。VisualC++6.0的安裝目前市面上流行的VisualC++6.0安裝程序一般包含在MicrosoftVisualStudio6.0中,MicrosoftVisualStudio是開發(fā)包,它包含了VisualC++、MicrosoftJ++,VisualBasic和其他幾個產(chǎn)品的安裝文件。獲取安裝文件后,執(zhí)行“Setup.exe”文件開始安裝,會出現(xiàn)圖1-7所示安裝向?qū)Ы缑?根據(jù)提示,ー步ー步執(zhí)行即可。在安裝過程中,向?qū)崾居脩糨斎氘a(chǎn)品的序列號、安裝位置以及安裝類型,采用系統(tǒng)默認設(shè)置即可。說明一點,在安裝過程中,會出現(xiàn)圖1-8所示的對話框,提示用戶選擇要安裝的程序。該對話框中列出了VisualStudio6.0中所包含的所有應用程序,當然,VisualC++6.0必須選中,其他程序用戶自由選擇。**InstallationVizardforVisualStudio6.0EnterpriseEditionVisualStudio6.0EnterpriseEditionTheVisualStudio60EnterpriseEditionSetupprogramwillwalkyouthrou磔installingtheapplicationsandcomponentsyou,11needtotccoaplishyourprogr&miriingtasksUs*th?N?xtbuttontoproc??dtoth?nextscreenIfyouwanttochangesomethinginapreviousscreen,clicktheBackbuttonYoumaycanceltheinstallationatanytimebyclickingtheExitbutton.IfyouwouldliketoviewtheVisualStudi〇6.0EnterpriseEditionReadmefile,clickhereYiewReadneNext〉jEjtitYiewReadne圖1-7安裝向?qū)Ы缑?/p>
圖1-8選擇安裝程序?qū)υ捒虬惭b完畢,重啟計算機后,會彈出安裝MSDN的對話框,提示用戶是否繼續(xù)安裝MSDN,它是VC應用程序開發(fā)十分有用的幫助,如果安裝的話,需要單獨購買MSDN光盤,它并不包含于VisualStudio中。如果只編譯C語言,我們可以不用安裝。至此,VisualC++6.0安裝完畢。VisualC++6.0開發(fā)環(huán)境完成了VC++6.0的安裝后,單擊任務欄中的“開始按鈕”后,在彈出菜單中選擇“程序,找到MicrosoftVisualStudio6.0文件夾后,單擊其中的MicrosoftVisualVisualC++6.0圖標,則可以啟動VisualC++6.0。VisualC++6.0集成開發(fā)環(huán)境(IDE)的主界面分為標題欄、菜單欄、工具欄、工作區(qū)窗口、輸出窗口和編輯窗口等幾大部分。如圖1-9所示:標題欄工具欄
標題欄工具欄01-licrosoftVisuald-(abc.c]B??Rヒil?£411Ii??X?s?rt Buildエ。。1b{indo*]falp■1。X工作區(qū)窗01-licrosoftVisuald-(abc.c]B??Rヒil?£411Ii??X?s?rt Buildエ。。1b{indo*]falp■1。X工作區(qū)窗口輸出窗口ヨ???ミニCoRpiling...voidnain()▼Jobalm(二!|^maxauc.C,Linking...(Floata.b.c;printチ(“pleaseinput2nuRbers(a(b):M);scanF("%F(V".6a,e.b);c-nax(avb); 〃調(diào)用子函數(shù)printF("tF,tF,themaxistF\n"(a,b,c);對M0lj[Globals]^Workspace-001Wes-」SourceFiles國abc.cIIHeaderFiles(_JResourceFilesRinclude<stdio.h>floatMX(FUatx.floaty)〃テヱ(欽.石西ヤ敗中大的那個返回(floatz;if(x>y)returnz;〃主函數(shù)Win32Debuq編輯區(qū)01.exe-0error(s),0warning(s)[V|\Build卜Debu<ゝFindinFilesI染FindinFiles2スResults|<11Ready圖1-9VisualC++6.0集成開發(fā)環(huán)境(1)工作區(qū)(workspace)VisualC++6.0中的工作區(qū)窗口是瀏覽應用程序組成結(jié)構(gòu)的有效工具。它向用戶提供了三種不同的瀏覽方式:ClassView(類視圖):具有瀏覽、管理C++類的功能。通過它開發(fā)者能夠在C++類的層次上找到并操作源代碼。ResourceView(資源視圖):具有編輯程序中的各種資源的功能。通過它,開發(fā)者能夠在應用程序中找到并編輯各種資源,包括對話框的設(shè)計、圖標和菜單等等。FileView(文件視圖):具有結(jié)構(gòu)化管理程序中的各種文件的功能。通過它,開發(fā)者能夠查看構(gòu)成應用程序的文件并確定它們的位置。(2)輸出窗口輸出窗口默認位置是在開發(fā)環(huán)境窗U的底部,用于顯示當前的編譯、連接狀態(tài)信息、各種警告及出錯信息等。(3)編輯區(qū)編輯區(qū)(EditorArea)用于編輯文件,包括C源程序、C++源程序文件,各種資源文件和文本文件等。(4)菜單和工具欄VisualC++6.0提供了多種工具欄,用戶可以根據(jù)自己的愛好和需要顯示、隱藏這些エ具欄。默認狀態(tài)下,VisualC++6.0顯示下面三種工具欄:標準工具欄:包括絕大多數(shù)標準工具——打開和保存文件、剪切、復制、粘貼以及可能有用的其他各種命令。向?qū)?WizardBar)工具欄:提供快速使用ClassWizard的工具。調(diào)試工具欄:提供開發(fā)和測試程序時經(jīng)常用到的編譯、連接和運行等命令。
1.4.3使用VisualC++6.0開發(fā)C程序首先打開VisualC++6.0編譯環(huán)境,開始——所有程序——MicrosoftVisualStudio6.0MicrosoftVisualC++6.00.建立工程VisualC++6.0是ー種集成開發(fā)環(huán)境,在集成開發(fā)環(huán)境下,通常都是以工程的方式去組織我們的代碼,這就好象承包ー個建筑工程,會有很多人ー起配合來完成這個工程,比如有人負責是負責采購的,有人負責施工,還有人負責裝修。在ー個工程中,除了源文件,可能還會有一些輔助的文件,這些文件記錄了工程的相關(guān)信息,所以在利用集成開發(fā)環(huán)境開發(fā)程序的時候,第一步要做的就是去創(chuàng)建一個工程。在菜單欄中:點擊“文件”(1)選擇工程類別:我們使用VisualC++6.0開發(fā)C程序,首先也要建立一個工程:在菜單欄中:點擊“文件”“新建”后,在“projecい選項卡中,左邊工程類別選擇uWin32consoleapplication",右邊首先在"Location"文本框中輸入工程存放的路徑,比如我們要將工程存放在D盤下的“1302020207李明”這個文件夾下,那么在“Locationg”中就輸入"d:\1302020207李明”;接下來在“Projectname"文本框中輸入工程名,例如當我們輸入工程名01以后,Location文本框中的內(nèi)容就會自動變成d:\1302020207李明、01。表示01這個工程存放在D盤的“13020207李明”這個文件夾中,這時在這個位置會自動產(chǎn)生一個名字為01的文件夾,即工程文件夾。此過程見圖1-10。KevliesProjectsIWorkspaces^wizard向ClusterResourceTypeWizard團CustomAppWizard國DatabaseProject價DevStudioAdd-inWizard國ExtendedStoredProcWizard?ISAPIExtensionWizardBiMakefile金MFCActiveXControlwizard?MFCAppWizard(dll)9MFCAppWizard(exe)t犬NewDatabaseWizardProjectname:kLocation:DA1302020207李明リリッ卩l(xiāng)oject-
X^gWin32Application6CreatenewworkspaceCAddtocurrentworkspace「Dependencyof:?Win32ConsoleApplicationJi]Win32Dynamic-LinkLibraryWin32ゝ“3:[n32StaticLibraryPlatforms:Win32Cancel圖!-10選擇工程類別(2)設(shè)置工程選項:點擊”〇K"(英文版)或“確定”(中文版)按鈕,進入到如圖!-11所示界面,我們保持默認選項,即:Anemptyproject。意思是ー個空的工程。然后點擊下面的“Finish”(英文版)或“完成”(中文版)按鈕,進入到下ー步,打開新建工程信息窗口。
圖1-12信息提示窗口經(jīng)過以上3步,ー個新的空的工程就建立好了,需要注意的是工程類別一定要選擇“Win32consoleapplication",即Win32控圖1-12信息提示窗口經(jīng)過以上3步,ー個新的空的工程就建立好了,需要注意的是工程類別一定要選擇“Win32consoleapplication",即Win32控制臺應用程序,一般指類似DOS環(huán)境出現(xiàn)的命令行樣式,現(xiàn)在叫命令提示符。我們用鍵盤輸入各種命令來使用它。其他的工程類型本書?Emptyconsoleapplication.+Nofileswillbecreatedoraddedtotheproject.CA,?Hello,WorldTapplication.AnapplicationthatsupportsMFC.WhatkindofConsoleApplicationdoyouwanttocreate?f*Anemptyprojecしゝ^Asimpleapplication.^ProjectDirectory:D:\1302020207李明'01圖1-11設(shè)置工程選項(3)完成工程的創(chuàng)建:在新建工程信息窗口中,點擊”〇K”按鈕,完成工程的創(chuàng)建,如圖!-12所示。Win32ConsoleApplicationwillcreateanewskeletonprojectwiththefollowingspecifications:Cancel<RackfinishCancelHevProjectXnfor*a-txonWin32ConsoleApplication-Step1of不做介紹,有興趣的讀者可以參考專門講解VisualC++的書。.添加源文件建立好空的工程之后,接下來要添加源文件。源文件就是包含我們要實現(xiàn)某些算法的代碼。像剛オ創(chuàng)建工程那樣,在菜單欄中點擊“文件”——“新建”后,在“File”選項卡中,在左邊的文件類別列表中選擇“C++SourceFile”或最后面的“TextFiles”選項,再將右邊的“Addtoprojecビ前面的復選框選匕然后在File文本框中為源文件命名,名字可以和工程名相同,但是一定要加上文件擴展名“.c”。例如,命名“abc.c”,過程如圖1-13所示。最后點擊OK按鈕。這時在工程文件夾下就會自動產(chǎn)生一個名字為,,abc.c),的源文件。圖1-13添加源文件在這ー步驟中,要注意兩個問題,ー個問題是,由于VisualC++6.0本質(zhì)上是ー個C++語言的編譯環(huán)境,所以在左邊的文件類別列表框中沒有提供添加C源文件的選項,而只有“C++SourceFile”(C++源文件),我們先選擇它,然后在對話框右邊輸入文件名時,除了填寫文件名,要寫明擴展名“.c”,表示添加的是c語言源程序,不寫的話默認擴展名是“.cpp”,表示添加了一個C++源文件。而VisualC++6.0對C語言和C++語言的編譯方式是不完全相同的。另外一個問題是,“Addtoproject"復選框的作用是設(shè)置是否將新建的文件添加到エ程中,表示是否和工程產(chǎn)生關(guān)聯(lián)。如果在左邊選擇了一種類型的文件,比如一個C++SourceFile,并且沒有將“Addtoprojecい復選框選中的話,那么這個源文件和前面建立的工程沒什么關(guān)系,換句話說,在對工程進行編譯時,它并沒有參與進來,而只是將一個源文件保存在了工程文件夾內(nèi),但是和工程本身并無聯(lián)系?!癆ddtoprojecビ復選框下是組合框,選擇新建的源文件添加到哪個工程下。我們應該知道,通常來講,ー個工程可以添加多種類型的文件,并且一種文件可添加
多個,就像前面所說“有人負責是負責采購的,有人負責施工,還有人負責裝修”,其實稍微帶ー些復雜功能的程序都要這樣完成。但是,在學習本書“文件”這ー章之前,我們只是對單獨ー個文件進行編譯,也就是只編譯単獨的一個源文件。所以請讀者記住,ー個工程中我們只添加一個源文件。VisualC++6.0中可以添加多個源文件,但是編譯時也是將它們ー起編譯的。好多初學者容易犯的錯誤是編完一個小程序或做完了一道題目,再編下ー個小程序的時候不是重新建立一個工程,重新添加源文件,而是直接在原有的工程下添加了一個新的源文件。這時再編譯就會出現(xiàn)錯誤,因為是編譯器是將兩個源文件ー起進行編譯的。.編輯接下來在abc.c這個源文件中完成編輯工作,見圖1-14,比如我們輸入如下代碼:#include<stdio.h>voidmain(){printfC^elloXn");}寫完代碼后要保存源文件,方法是用鼠標點擊ー下工具欄上的保存按鈕或者“文件”菜單下的保存選項。01-licrosoftVisualC++EileEditYiewInsertprojectBuildエ〇olsWindowHelp由ヌqけ電圍つ,二?ロ區(qū)!西聃1f|Globals)▼(Allglobalmembersf|Globals)▼(Allglobalmembers|唱Workspace'01':1唱Workspace'01':1proj日毎01files?コSourceFiles*1abc.c丨PlHeaderFilesロResourceFiles1tinclude<stdio.h>uoidmain。printF(aahello\naa);)圖1?14編輯.編譯由于計算機不能直接執(zhí)行用高級語言所編寫的代碼,所以,要對源文件進行編譯,源文件經(jīng)過編譯后,將生成目標文件(.obj文件),供連接用。執(zhí)行“Build”——“Compile”菜單命令或者單擊微型工具條上的審按鈕或按快捷鍵“Ctrl+F7”,表示對源文件進行編譯。VisualC++6.0工作臺已經(jīng)把當前文件名放在Compile命令后,使得編譯動作更直觀了,如圖1-15。
BuildToolsWindowHelpCompileabc.c Ctrl+F7Build01.exe FT對RebuildAllBatchBuild...CleanStartDebugDebuggerRemoteConnection...!Execute01,exe Ctrl+F5SetActiveConfiguration...Configurations...Profile...圖1-15Build菜單下的編譯選項執(zhí)行上述命令,即對源程序進行了編譯,編譯成功與否的結(jié)果信息,顯示在輸需窗口中。如果程序中沒有任何語法錯誤,輸出窗口將顯示“0error(s),0waming(s)”信息,如圖1-16所示,表示編譯成功,這時會生成目標文件abc.obj,位置在工程文件夾(D:\13020207李明、01)下的Debug文件夾中。Compiling abc.cConfiguration:01--Compiling abc.cabc.obj-0error(s),0warning(s)FKBuildズDebugエFindinFiles1燈<||ReadyLn6,Col1 READReady圖!-16編譯成功輸出窗口.連接編譯生成目標文件后,需要將目標文件(.obj)與系統(tǒng)中的庫函數(shù)連接(Link),生成最終的可執(zhí)行的.exe文件,可執(zhí)行文件也產(chǎn)成在對應工程文件夾下的Debug文件夾中,可執(zhí)行文件的名字叫01.exe,注意它是和工程同名的,而不是和源文件同名。連接操作的方法為:執(zhí)行“Build”——“Build”菜單命令,也可直接點擊微型工具條上的讎按鈕,也可使用快捷鍵F7J群,VisualC++6.0工作臺已經(jīng)把項目名放在“Build”命令后面?!癇uild”命令包含了編譯和連接。即對源程序直接執(zhí)行“Build”操作,系統(tǒng)將首先編譯,編譯如果沒有錯誤則接著進行連接,最后生成,exe文件。在輸出窗口中會顯示提示信息,如圖!-17所示: Configuration:01-Win32DebugLinking...01.exe-0error(s),0warning(s)ThBuild/Debug,廣FindinFiles1ゝFindinFiles2ヌResults/ 4\\1圖1-17連接成功輸出窗口當項目設(shè)置改變或項目中許多文件被修改,可以直接執(zhí)行“Build"——"RebuildAll"菜單命令,該命令將徹底重新編譯連接整個項目。其實,到這里如果能夠保證前面所做的一切都是正確的,或者說符合項目的要求的話,編程工作可以算結(jié)束了,因為已經(jīng)產(chǎn)生了我們想要的可執(zhí)行文件,即.exe文件。因為人們編程的目的就是要產(chǎn)生為人們所用的可執(zhí)行程序。這就是將菜譜轉(zhuǎn)換成了一盤盤的菜了。再打個比方,將一個工程比喻成蓋樓,蓋好的大樓就是.exe。.運行程序編譯并連接成功后,要查看運行結(jié)果,即運行.exe文件。運行文件的方法有很多,最方便的就是在VisualC++6.0中查看結(jié)果,檢査運行效果是否和代碼對應的算法一致,如果有問題,可以立即在VisualC++6.0中修改代碼,然后重新編譯、連接、運行。執(zhí)行“Build”——“Execute”菜單命令或者單擊微型工具條上的!按鈕或按快捷鍵“Ctrl+F5”。此時彈出ー個控制臺程序窗口,程序正確運行,如圖1-18所示。按任意鍵后返回VisualC++6.0集成開發(fā)環(huán)境。圖!-18程序運行結(jié)果“Execute”命令包含了編譯、連接和運行。即對源程序直接執(zhí)行“Execute”操作,系統(tǒng)將首先編譯,編譯如果沒有錯誤則接著進行連接,生成.exe文件,然后再執(zhí)行ー次.exe文件。用C語言編寫的可執(zhí)行程序是DOS操作系統(tǒng)下的程序,所以在windows下用鼠標左
鍵雙擊是運行不了的,耍在C語言的開發(fā)環(huán)境(比如TurboC2.0,VisualC++6.0)或者DOS操作系統(tǒng)下才能運行。在DOS操作系統(tǒng)下執(zhí)行這個文件的操作如下,讀者了解即可:.點擊windows任務欄上的開始按鈕,在菜單中選擇“運行”.在運行對話框中輸入“cmd”來打開DOS窗口,如圖1-19所示。運行包區(qū))打開@):打開@):7語鍵入程序、文件夾、文檔或Internet資源的名//稱,Windows將為您打開它.圖1-19運行對話框3,在DOS窗口下首先耍進入到01.exe所在的文件夾,我們順序輸入以下命令:d:cdd:\1302020207李明、Ol'Debug01.exe這時會出現(xiàn)運行結(jié)果,即顯示一行字符“hello”,如圖1-20所示。cC:\fIND0?S\systeB32\c>d.exe 日電MicrosoftWindowsXP 5.1.2600]<C>版權(quán)所有1985-2001MicrosoftCorp.C:\DocunentsandSettings\epiphone>d:D:\〉cdD:
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智駕未來路演模板
- 2025年度廠房租賃合同范本:高科技產(chǎn)業(yè)園區(qū)4篇
- 2025年高科技研發(fā)中心廠房土地轉(zhuǎn)讓與租約管理合同4篇
- 2025年度場監(jiān)管廉政合同(附供應鏈管理與風險控制)4篇
- 2025年廠區(qū)生態(tài)園林建設(shè)與維護合同范本4篇
- 2025年插班生入學后校園科技活動參與及組織服務合同4篇
- 2025年度智能測試平臺采購合同4篇
- 2025年度拆除工程安全監(jiān)督與事故調(diào)查處理合同3篇
- 2025年度高端化妝品區(qū)域代理銷售及推廣合同4篇
- 臨時工聘用合同:2024年單位版版
- 2025年工程合作協(xié)議書
- 2025年山東省東營市東營區(qū)融媒體中心招聘全媒體采編播專業(yè)技術(shù)人員10人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點提升(共500題)附帶答案詳解
- KAT1-2023井下探放水技術(shù)規(guī)范
- 垃圾處理廠工程施工組織設(shè)計
- 駕駛證學法減分(學法免分)題庫及答案200題完整版
- 2024年四川省瀘州市中考英語試題含解析
- 2025屆河南省九師聯(lián)盟商開大聯(lián)考高一數(shù)學第一學期期末學業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 國網(wǎng)浙江省電力公司住宅工程配電設(shè)計技術(shù)規(guī)定
- 煙花爆竹零售應急預案
- 新加坡SM1向性測試模擬試卷
評論
0/150
提交評論