C程序設(shè)計(jì)(第二版)_第1頁(yè)
C程序設(shè)計(jì)(第二版)_第2頁(yè)
C程序設(shè)計(jì)(第二版)_第3頁(yè)
C程序設(shè)計(jì)(第二版)_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余140頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1第1章程序設(shè)計(jì)基礎(chǔ)人的思維形式思維,是具有意識(shí)的人腦對(duì)于客觀現(xiàn)實(shí)的本質(zhì)屬性和內(nèi)部規(guī)律做出的自覺(jué)、間接和概括的反映。人的思維通常包括形象思維、抽象思維和靈感思維三種基本的思維形式。形象思維是指主體運(yùn)用表象、直感、想象等形式,對(duì)研究對(duì)象的有關(guān)形象信息,以及貯存在大腦里的形象信息進(jìn)行加工,從而從形象上認(rèn)識(shí)和把握研究對(duì)象的本質(zhì)和規(guī)律,這種思維形式具有形象性、非邏輯性、粗略性和想象性。抽象思維(也稱為邏輯思維)與形象思維不同,它是指人們借助于概念、判斷、推理這些形式所進(jìn)行的思考活動(dòng),是人腦對(duì)客觀事物間接的、概括的反映,它使人對(duì)事物的認(rèn)識(shí)由外部的表面特征深入到內(nèi)在聯(lián)系,由感性的具體進(jìn)入抽象的規(guī)定,形成概念、判斷、推理??梢哉f(shuō)抽象思維是智力的核心部分,在人類的認(rèn)識(shí)活動(dòng)中占有主導(dǎo)地位。至于靈感思維,很難做出明確的界定。靈感實(shí)際上是潛思維,是潛在意識(shí)的表現(xiàn)。潛意識(shí)是如何工作的?采取什么方式?也不外是抽象思維和形象思維。因此,搞清楚形象思維和抽象思維,也就可以體會(huì)靈感思維的內(nèi)涵和規(guī)律了。在具體的思維活動(dòng)中,不可能局限于哪ー種思維形式。解決ー個(gè)問(wèn)題,做ー項(xiàng)工作或某個(gè)思維過(guò)程,往往需要將幾種形式巧妙結(jié)合,協(xié)同使用。人的思維和語(yǔ)言是緊密聯(lián)系的。思維是人腦的功能,思維的進(jìn)行必須借助一定的物質(zhì)基礎(chǔ),這種物質(zhì)基礎(chǔ)就是語(yǔ)言。語(yǔ)言是人和人之間進(jìn)行交流的工具,是思維的外衣。如果沒(méi)有語(yǔ)言,思維的功能也只是潛在的。因此在思維活動(dòng)中語(yǔ)言是非常重要的,思維的過(guò)程是通過(guò)語(yǔ)言進(jìn)行的,思維的結(jié)果也是通過(guò)語(yǔ)言的物質(zhì)表現(xiàn)才能為人們所感受。通常所說(shuō)的語(yǔ)言為人類自然語(yǔ)言,廣義的語(yǔ)言還包括人工語(yǔ)言,人工語(yǔ)言就是在自然語(yǔ)言之外,人工定義的一套符號(hào)系統(tǒng),例如計(jì)算機(jī)語(yǔ)言,計(jì)算機(jī)正是利用這樣的人工語(yǔ)言來(lái)模擬人的思維。計(jì)算機(jī)作為ー套機(jī)器,本身并不具備思維能力,人們?yōu)榱四苁褂?jì)算機(jī)模擬人類的思維,制定了各種符號(hào)和語(yǔ)法規(guī)則,并賦之以相應(yīng)的含義,以此來(lái)刻畫描述思維形式,這種語(yǔ)言稱為計(jì)算機(jī)語(yǔ)言。當(dāng)人們想通過(guò)計(jì)算機(jī)完成人的某些功能時(shí),必須事先把人完成該功能的思維過(guò)程用計(jì)算機(jī)語(yǔ)言表達(dá)出來(lái),輸入計(jì)算機(jī),當(dāng)人們向計(jì)算機(jī)發(fā)出完成該功能的指令時(shí),計(jì)算機(jī)就會(huì)快速、高效的完成,計(jì)算機(jī)也就會(huì)“思維”了。本學(xué)期我們學(xué)習(xí)的C語(yǔ)言就是計(jì)算機(jī)語(yǔ)言中的ー種,所有語(yǔ)言都是有共性的。除了我們的母語(yǔ)漢語(yǔ),我們接觸的其他語(yǔ)言主要是英語(yǔ),它有自己的基本符號(hào)、語(yǔ)句組成形式、語(yǔ)法規(guī)則,我們已經(jīng)有所體會(huì)。C語(yǔ)言也是如此,它之所以稱為ー種語(yǔ)言,也同樣具有語(yǔ)言的特征,它也有自己的基本符號(hào)、數(shù)據(jù)類型、運(yùn)算符、基本結(jié)構(gòu)。程序設(shè)計(jì)基礎(chǔ)計(jì)算機(jī)已進(jìn)入人類生活的各個(gè)領(lǐng)域,人們可以利用計(jì)算機(jī)解決一些實(shí)際的問(wèn)題,例如數(shù)值計(jì)算、數(shù)據(jù)管理、過(guò)程控制等。表面上看計(jì)算機(jī)也有了思維的能力,但就其本質(zhì)上而言,計(jì)算機(jī)的這種“思維”仍然是模擬人類的思維,是人類思維在計(jì)算機(jī)上的一種表現(xiàn)形式。程序設(shè)計(jì)的基本概念.程序程序(Program)就是ー系列的操作步驟,計(jì)算機(jī)程序就是由人事先規(guī)定的計(jì)算機(jī)完成某項(xiàng)工作的操作步驟。每ー步驟的具體內(nèi)容由計(jì)算機(jī)能夠理解的指令來(lái)描述,這些指令告訴計(jì)算機(jī)“做什么”和“怎樣做”。它是用戶依據(jù)某種規(guī)則(程序設(shè)計(jì)語(yǔ)言的語(yǔ)法)編寫而成的。通常一個(gè)程序應(yīng)該包含以下兩個(gè)方面的內(nèi)容:(1)對(duì)數(shù)據(jù)的描述。在程序中,要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。(2)對(duì)數(shù)據(jù)操作的描述。也就是具體的操作步驟,即算法。在ー個(gè)程序中數(shù)據(jù)和對(duì)數(shù)據(jù)的操作二者缺ー不可。沒(méi)有數(shù)據(jù),操作就成了無(wú)源之水,沒(méi)有具體的操作,數(shù)據(jù)也就失去了存在的價(jià)值。.程序設(shè)計(jì)程序設(shè)計(jì)(Programming)是給出解決特定問(wèn)題程序的過(guò)程,是軟件構(gòu)造活動(dòng)中的重要組成部分。程序設(shè)計(jì)往往以某種程序設(shè)計(jì)語(yǔ)言為工具,給出這種語(yǔ)言下的程序。一般的程序設(shè)計(jì)包括下述幾個(gè)階段:(1)分析階段分析階段由用戶和程序開發(fā)人員共同研究確定程序應(yīng)完成的功能,解決“做什么”的問(wèn)題。(2)設(shè)計(jì)階段由程序設(shè)計(jì)人員設(shè)計(jì)軟件的總體結(jié)構(gòu),也就是確定程序的組成模塊,以及各模塊之間的關(guān)系,并設(shè)計(jì)每個(gè)模塊的實(shí)現(xiàn)細(xì)節(jié)及具體算法。(3)編碼階段利用程序設(shè)計(jì)語(yǔ)言編寫各算法的程序代碼。(4)測(cè)試階段由專門的測(cè)試人員對(duì)編寫完成的程序代碼進(jìn)行測(cè)試,盡可能多的發(fā)現(xiàn)其中的錯(cuò)誤。(5)調(diào)試和運(yùn)行階段借助于一定的調(diào)試工具找出程序中錯(cuò)誤的具體位置,并改正錯(cuò)誤,并在運(yùn)行期間進(jìn)行維護(hù)。程序設(shè)計(jì)語(yǔ)言(ProgrammingLanguage)是ー組用來(lái)定義計(jì)算機(jī)程序的語(yǔ)法規(guī)則。它是?種被標(biāo)準(zhǔn)化的交流技巧,用來(lái)向計(jì)算機(jī)發(fā)出指令。程序設(shè)計(jì)語(yǔ)言通??梢苑譃闄C(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言。(1)機(jī)器語(yǔ)言機(jī)器語(yǔ)言是最底層的計(jì)算機(jī)語(yǔ)言,也是唯一能被計(jì)算機(jī)系統(tǒng)識(shí)別而直接使用的程序設(shè)計(jì)語(yǔ)言。機(jī)器語(yǔ)言屬于CPU的指令系統(tǒng),其每一條指令都是由二進(jìn)制數(shù)0和1構(gòu)成的指令碼。機(jī)器語(yǔ)言與特定的機(jī)器有關(guān),計(jì)算機(jī)硬件不同,其機(jī)器語(yǔ)言也會(huì)不同。因此,針對(duì)某一臺(tái)計(jì)算機(jī)編寫的機(jī)器語(yǔ)言程序不能移植到其他計(jì)算機(jī)匕降低了程序的可移植性。(2)匯編語(yǔ)言匯編語(yǔ)言也是ー種面向機(jī)器的程序設(shè)計(jì)語(yǔ)言,它是機(jī)器語(yǔ)言中地址部分符號(hào)化的結(jié)果,因此匯編語(yǔ)言也稱為“符號(hào)語(yǔ)言”。計(jì)算機(jī)能夠識(shí)別的只有機(jī)器語(yǔ)言,用匯編語(yǔ)言編寫的程序不能直接被計(jì)算機(jī)執(zhí)行。因此,匯編語(yǔ)言編寫的程序在執(zhí)行之前必須翻譯成機(jī)器語(yǔ)言程序,這個(gè)過(guò)程稱為匯編過(guò)程。機(jī)器語(yǔ)言和匯編語(yǔ)言同屬于低級(jí)語(yǔ)言。它們與特定的機(jī)器有關(guān)、功效高,但使用復(fù)雜、繁瑣、費(fèi)時(shí)、易出差錯(cuò)。(3)高級(jí)語(yǔ)言初期的計(jì)算機(jī)語(yǔ)言比較繁瑣,與人類自然語(yǔ)言的差距很大,掌握起來(lái)比較艱難,隨著不斷的改進(jìn),計(jì)算機(jī)語(yǔ)言已經(jīng)逐步向人類的自然語(yǔ)言靠攏,出現(xiàn)了結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言及面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言等高級(jí)語(yǔ)言,這些高級(jí)語(yǔ)言其特點(diǎn)是在一定程度上與具體機(jī)器無(wú)關(guān),易學(xué)、易用、易維護(hù)。但是用高級(jí)語(yǔ)言編寫的程序也不能直接被計(jì)算機(jī)識(shí)別,在執(zhí)行之前也要先翻譯成計(jì)算機(jī)能夠識(shí)別的機(jī)器指令。目前用到的高級(jí)語(yǔ)言很多,例如,VisualC++、VisualBasic、Java、Delphi等。圖1-1描述了程序設(shè)計(jì)語(yǔ)言的發(fā)展演變過(guò)程。ハBASIC卜ansi-basicqbasicvisual-basic_FORTRAN: FORTRAN77fFORTRAN90 f面向過(guò)程與面向?qū)ο骳語(yǔ)言是屬于面向過(guò)程的程序設(shè)計(jì)語(yǔ)言,面向過(guò)程程序設(shè)計(jì)又叫結(jié)構(gòu)化程序設(shè)計(jì)?!懊嫦蜻^(guò)程”是一種以事件為中心的編程思想;“面向?qū)ο蟆保∣bjectOriented,簡(jiǎn)稱OOP)是ー種以事物為中心的編程思想。面向過(guò)程是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟ー步ー步實(shí)現(xiàn),使用的時(shí)候依次調(diào)用這些函數(shù)。面向?qū)ο笫前褬?gòu)成問(wèn)題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為。比如:開發(fā)一個(gè)五子棋游戲程序,面向過(guò)程的設(shè)計(jì)思路就是首先分析問(wèn)題的步驟:1、開始游戲;2、黑子先走;3、繪制畫面;4,判斷輸贏;5、輪到白子;6、繪制畫面;7、判斷輸贏;8、返回步驟2;9、輸出最后結(jié)果。把上面每個(gè)步驟用分別的函數(shù)來(lái)實(shí)現(xiàn),程序就開發(fā)出來(lái)了。面向?qū)ο蟮脑O(shè)計(jì)則是從另外的思路來(lái)解決問(wèn)題。整個(gè)五子棋可以分為1、黑白雙方,這兩方的行為是ー模ー樣的,2、棋盤系統(tǒng),負(fù)責(zé)繪制畫面,3、規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。第一類對(duì)象(玩家對(duì)象)負(fù)責(zé)接受用戶輸入,并告知第二類對(duì)象(棋盤對(duì)象)棋子布局的變化,棋盤對(duì)象接收到了棋子的變化就要負(fù)責(zé)在屏幕上面顯示出這種變化,同時(shí)利用第三類對(duì)象(規(guī)則系統(tǒng))來(lái)對(duì)棋局進(jìn)行判定。在進(jìn)行面向過(guò)程的程序開發(fā)時(shí),需要程序的編寫者要十分清楚這個(gè)程序有那些功能,或者說(shuō)有哪些函數(shù),函數(shù)之間是怎樣進(jìn)行調(diào)用的,每ー步的函數(shù)返回值是什么,需要程序開發(fā)者嚴(yán)格控制每ー個(gè)步驟,對(duì)每個(gè)步驟做到心中有數(shù)。而面向?qū)ο蟪绦蛟O(shè)計(jì)方法以數(shù)據(jù)為中心來(lái)描述系統(tǒng),數(shù)據(jù)相對(duì)于功能而言具有較強(qiáng)的穩(wěn)定性,因此更易于維護(hù)。無(wú)疑面向?qū)ο笫歉呒?jí)的。但它是在面向過(guò)程的基礎(chǔ)上發(fā)展起來(lái)的,從某種程度上講,面向過(guò)程是面向?qū)澫蟮囊徊糠?。我們掌握好了面向過(guò)程程序設(shè)計(jì)オ可以更好的掌握面向?qū)ο蟪绦蛟O(shè)計(jì)。本書講的是C語(yǔ)言,是最適合入門者學(xué)習(xí)的程序設(shè)計(jì)語(yǔ)言,無(wú)論對(duì)教學(xué)、實(shí)踐,還是讀者今后后續(xù)的學(xué)習(xí)都是有巨大幫助的,學(xué)好C語(yǔ)言可以從容的學(xué)習(xí)C++、JAVA,當(dāng)然也可學(xué)習(xí)其他語(yǔ)言,因?yàn)橛?jì)算機(jī)語(yǔ)言也是相通的。關(guān)于面向過(guò)程和面向?qū)ο笞x者先有這樣ー個(gè)簡(jiǎn)単的印象,讀者學(xué)完第5章函數(shù)就會(huì)對(duì)面向過(guò)程有著深刻的理解了。數(shù)據(jù)結(jié)構(gòu)概述數(shù)據(jù)結(jié)構(gòu)是指互相之間存在著ー種或多種關(guān)系的數(shù)據(jù)元素的集合。是整個(gè)計(jì)算機(jī)科學(xué)與技術(shù)領(lǐng)域的ー個(gè)重要概念。它用來(lái)反映一個(gè)數(shù)據(jù)的內(nèi)部構(gòu)成,即一個(gè)數(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)反映成分?jǐn)?shù)據(jù)之間的邏輯關(guān)系,而物理上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)在計(jì)算機(jī)內(nèi)部的存儲(chǔ)安排。數(shù)據(jù)結(jié)構(gòu)是信息的ー種組織方式,好的數(shù)據(jù)結(jié)構(gòu)可以提高算法的效率,它通常與一組算法的集合相對(duì)應(yīng),通過(guò)這組算法集合可以對(duì)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行某種操作。.數(shù)據(jù)結(jié)構(gòu)的基本概念

數(shù)據(jù)項(xiàng):數(shù)據(jù)的不可分割的最小単位。數(shù)據(jù)元素:是數(shù)據(jù)的基本單位,數(shù)據(jù)中的一個(gè)“個(gè)體”。它還可以再由不可分割的數(shù)據(jù)項(xiàng)組成。數(shù)據(jù)對(duì)象:是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的ー個(gè)子集。數(shù)據(jù):是ー個(gè)集合的概念,是對(duì)客觀事物的符號(hào)表示,在計(jì)算機(jī)科學(xué)中是指所有能被輸入到計(jì)算機(jī)中,并被計(jì)算機(jī)處理的符號(hào)的總稱。是計(jì)算機(jī)處理的信息的某種特定的符號(hào)表示形式。.數(shù)據(jù)結(jié)構(gòu)的研究對(duì)象數(shù)據(jù)結(jié)構(gòu)作為ー門學(xué)科,主要研究數(shù)據(jù)的各種邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),以及對(duì)數(shù)據(jù)的各種操作。因此,主要有三個(gè)方面的內(nèi)容:(1)數(shù)據(jù)元素之間的邏輯關(guān)系,也稱數(shù)據(jù)的邏輯結(jié)構(gòu)(LogicalStructure);數(shù)據(jù)的邏輯結(jié)構(gòu)是從邏輯關(guān)系上描述數(shù)據(jù),與數(shù)據(jù)的存儲(chǔ)無(wú)關(guān),是獨(dú)立于計(jì)算機(jī)的。數(shù)據(jù)的邏輯結(jié)構(gòu)可以看作是從具體問(wèn)題抽象出來(lái)的數(shù)學(xué)模型。通常,數(shù)據(jù)的邏輯結(jié)構(gòu)簡(jiǎn)稱為數(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ù)元素之間除了“同屬于ー個(gè)集合”的關(guān)系外別無(wú)其他關(guān)系。(b)線性結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在ー個(gè)對(duì)ー個(gè)的前趨后繼關(guān)系,若結(jié)構(gòu)是非空集,則有且僅有一個(gè)開始結(jié)點(diǎn)和一個(gè)終端結(jié)點(diǎn),并且所有結(jié)點(diǎn)都最多只有一個(gè)直接前趨和一個(gè)直接后繼。線性表是ー個(gè)典型的線性結(jié)構(gòu)。棧、隊(duì)列、串等都屬于線性結(jié)構(gòu)。(c)樹形結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在一個(gè)對(duì)多個(gè)的關(guān)系,任何ー個(gè)節(jié)點(diǎn)最多有一個(gè)前趨,可以有多個(gè)后繼,是ー種典型的非線性結(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ù)元素之間存在多個(gè)對(duì)多個(gè)的關(guān)系,這種結(jié)構(gòu)的特征是任何ー個(gè)元素可以有多個(gè)前趨,也可以有多個(gè)后繼,是ー種多對(duì)多的前趨后繼關(guān)系。典型的圖形結(jié)構(gòu)包括有向圖、無(wú)向圖、連通圖等。集合結(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)系在計(jì)算機(jī)存儲(chǔ)器內(nèi)的表示,稱為數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(StorageStructure);數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是邏輯結(jié)構(gòu)用計(jì)算機(jī)語(yǔ)言的實(shí)現(xiàn)(亦稱為映象),它依賴于計(jì)算機(jī)語(yǔ)言。數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)通常包括以下四種基本存儲(chǔ)方法:

(a)順序存儲(chǔ)方法順序存儲(chǔ)方法把邏輯上相鄰的數(shù)據(jù)元素存儲(chǔ)在物理位置上相鄰的存儲(chǔ)單元里,該方法主要應(yīng)用于線性的數(shù)據(jù)結(jié)構(gòu)。由此得到的存儲(chǔ)表示稱為順序存儲(chǔ)結(jié)構(gòu),通常借助于程序語(yǔ)言的數(shù)組類型描述。(b)鏈接存儲(chǔ)方法鏈接存儲(chǔ)方法不要求邏輯上相鄰的結(jié)點(diǎn)在物理位置上亦相鄰,通過(guò)在每ー個(gè)數(shù)據(jù)元素中增加一個(gè)存放地址的指針,用此指針來(lái)表示數(shù)據(jù)元素之間的邏輯關(guān)系。由此得到的存儲(chǔ)表示稱為鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),通常借助于程序設(shè)計(jì)語(yǔ)言的指針類型描述。(c)索引存儲(chǔ)方法索引存儲(chǔ)方法通常在儲(chǔ)存結(jié)點(diǎn)信息的同時(shí),還建立附加的索引表。索引表由若干索引項(xiàng)組成。索引項(xiàng)的一般形式是: (關(guān)鍵字、地址)其中,關(guān)鍵字是能唯一標(biāo)識(shí)ー個(gè)結(jié)點(diǎn)的那些數(shù)據(jù)項(xiàng)。若每個(gè)結(jié)點(diǎn)在索引表中都有一個(gè)索引項(xiàng),則該索引表稱之為稠密索引(DenseIndex)?若一組結(jié)點(diǎn)在索引表中只對(duì)應(yīng)ー個(gè)索引項(xiàng),則該索引表稱為稀疏索引(SpareIndex)。(d)散列存儲(chǔ)方法散列存儲(chǔ)方法根據(jù)結(jié)點(diǎn)的關(guān)鍵字直接計(jì)算出該結(jié)點(diǎn)的存儲(chǔ)地址。(3)數(shù)據(jù)的運(yùn)算對(duì)數(shù)據(jù)施加的操作,即數(shù)據(jù)的運(yùn)算。數(shù)據(jù)的運(yùn)算定義在數(shù)據(jù)的邏輯結(jié)構(gòu)上,每種邏輯結(jié)構(gòu)都有一個(gè)運(yùn)算的集合。最常用的檢索、插入、刪除、更新、排序等運(yùn)算實(shí)際上只是在抽象的數(shù)據(jù)上所施加的一系列抽象的操作。數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)及數(shù)據(jù)的運(yùn)算這三方面是ー個(gè)整體,需要結(jié)合起來(lái)去理解。同一邏輯結(jié)構(gòu)的不同存儲(chǔ)結(jié)構(gòu)可冠以不同的數(shù)據(jù)結(jié)構(gòu)名稱來(lái)標(biāo)識(shí),例如線性表是ー種邏輯結(jié)構(gòu),若采用順序方法的存儲(chǔ)表示,可稱其為順序表;若采用鏈?zhǔn)酱鎯?chǔ)方法,則可稱其為鏈表;若采用散列存儲(chǔ)方法,則可稱為散列表。算法算法是指完成一個(gè)任務(wù)或解決ー個(gè)問(wèn)題所需要的具體步驟和方法。也就是說(shuō)給定初始狀態(tài)或輸入數(shù)據(jù),經(jīng)過(guò)計(jì)算機(jī)程序的有限次運(yùn)算,能夠得出所要求或期望的終止?fàn)顟B(tài)或輸出數(shù)據(jù)。.算法的特征ー個(gè)算法應(yīng)該具有以下五個(gè)重要的特征:(1)有窮性:有窮性是算法的重要特征,不論采用什么算法其目的是解決問(wèn)題。因此,ー個(gè)算法必須在有限的操作步驟內(nèi)完成。如果一個(gè)算法的執(zhí)行時(shí)間是無(wú)限的,或在期望的時(shí)間內(nèi)沒(méi)有完成,那么這種算法就是無(wú)用和徒勞的,我們不能稱其為算法。(2)確切性:算法中的每ー步驟必須有確切的定義,即算法的描述必須無(wú)歧義,以保證算法的執(zhí)行結(jié)果是確定的:(3)輸入:ー個(gè)算法通常有0個(gè)或多個(gè)輸入,以此刻畫運(yùn)算對(duì)象的初始情況:(4)輸出:算法的目的是解決問(wèn)題,ー個(gè)算法通常有一個(gè)或多個(gè)輸出,以便反映算法運(yùn)算的結(jié)果;(5)可行性:又稱有效性,算法中的每一個(gè)步驟原則上都能夠精確地運(yùn)行,算法中描述的操作都可以通過(guò)已經(jīng)實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次來(lái)實(shí)現(xiàn)。.算法的組成要素算法通常由兩種基本要素組成:ー個(gè)是對(duì)數(shù)據(jù)對(duì)象的運(yùn)算和操作;另外一個(gè)是算法的控制結(jié)構(gòu)。(1)算法中對(duì)數(shù)據(jù)的運(yùn)算和操作:對(duì)于所有算法都是按照要求從環(huán)境能夠運(yùn)行的所有操作中選擇合適的操作所組成的ー組指令序列。(2)算法的控制結(jié)構(gòu):算法中各操作之間的執(zhí)行順序。包括順序、選擇、循環(huán)三中結(jié)構(gòu)。.算法的描述方法描述算法的方法多種多樣,有自然語(yǔ)言、偽代碼、流程圖、N-S圖以及PAD圖等。(1)自然語(yǔ)言描述用自然語(yǔ)言描述即用人們?nèi)粘J褂玫恼Z(yǔ)言如漢語(yǔ)、英語(yǔ)或數(shù)學(xué)語(yǔ)言描述算法。【例1-11計(jì)算1到N的累加和,使用自然語(yǔ)言描述該算法如下:stepl:輸入N的值;step2:將變量i的置為1;累加和sum的置為〇;step3:如果i<=N,則執(zhí)行第4步,否則轉(zhuǎn)到第7步執(zhí)行;step4:計(jì)算sum+i,并將結(jié)果賦給sum;step5:計(jì)算i+1,并將結(jié)果賦給i;step6:重新返回到第3步開始執(zhí)行;step7:輸出sum的結(jié)果。以上就是用自然語(yǔ)言配合數(shù)學(xué)語(yǔ)言所描述的算法。用自然語(yǔ)言描述的算法通俗易懂,而且容易掌握,但是其不足是容易出現(xiàn)二義性、難以淸晰表達(dá)出分支、循環(huán)結(jié)構(gòu)、而且算法的描述冗長(zhǎng),與計(jì)算機(jī)的具體高級(jí)語(yǔ)言形式差距較大。(2)用偽代碼(Pseudocode)描述算法:偽代碼是ー種介于自然語(yǔ)言與計(jì)算機(jī)語(yǔ)言之間的算法描述方法,常用自然語(yǔ)言、數(shù)學(xué)語(yǔ)言和符號(hào)來(lái)描述算法的操作步驟。偽代碼結(jié)構(gòu)性較強(qiáng),比較容易書寫和理解,修改起來(lái)也相對(duì)方便。其特點(diǎn)是不拘泥于語(yǔ)言的語(yǔ)法結(jié)構(gòu),而著重以靈活的形式表現(xiàn)被描述對(duì)象。偽代碼沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),可以自己定義,也可以采用與程序設(shè)計(jì)語(yǔ)言類似的形式?!纠?-21計(jì)算1到N的累加和,使用偽代碼描述該算法如下:開始山鍵盤輸入N值置變量i初值為1置累加和變量sum初值為0當(dāng)i<=N時(shí)執(zhí)行以下步驟:

sum=sum+ii=i+l輸出sum的值結(jié)束(3)用流程圖描述算法流程圖也叫框圖,是ー種傳統(tǒng)的算法表示法,它利用幾何圖框來(lái)代表各種不同性質(zhì)的操作,用流程線來(lái)指示算法的執(zhí)行方向。其特點(diǎn)是直觀,設(shè)計(jì)者的思路表達(dá)得清楚易懂,便于檢査修改。利用傳統(tǒng)流程圖描述算法時(shí)常用符號(hào)如下:圖1-3常見的流程圖符號(hào)使用流程圖描述算法時(shí),一-般要注意以下幾點(diǎn):(a)流程圖圖框中的文字要盡量簡(jiǎn)潔,而且應(yīng)根據(jù)解決問(wèn)題的步驟從上至下順序地畫出流程圖:(b)流程線的走向總是從上向下或從左向右,為避免流程圖的圖形顯得過(guò)長(zhǎng),圖中的流程線要盡量短;(c)流程圖對(duì)算法的描述可粗可細(xì),但是根據(jù)實(shí)際問(wèn)題的復(fù)雜性,流程圖達(dá)到的最終效果應(yīng)該是,根據(jù)流程圖就可以用某種程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)相應(yīng)的算法?!纠?-3】計(jì)算1到N的累加和,使用傳統(tǒng)流程圖描述該算法如下:

(d)用N-S圖描述算法N-S圖是由美國(guó)人LNassi和B.Shneiderman共同提出的,其主要特點(diǎn)是取消了流程線,全部算法由一些基本的矩形框圖順序排列組成一個(gè)大矩形表示,即不允許程序任意轉(zhuǎn)移,而只能順序執(zhí)行,因此,N-S圖是?種結(jié)構(gòu)化的算法描述方法。N-S圖有以下流程圖符號(hào)。順序結(jié)構(gòu) 選擇結(jié)構(gòu) While順序結(jié)構(gòu) 選擇結(jié)構(gòu) While循環(huán) Until循環(huán)圖1-51例1N]計(jì)算1到N的累加和,使用N-S圖描述該算法如下:C語(yǔ)言的發(fā)展與特點(diǎn)C語(yǔ)言的發(fā)展?fàn)顩rC語(yǔ)言是!97I年由美國(guó)貝爾實(shí)驗(yàn)室的D.M.Ritchie用了一年的時(shí)間設(shè)計(jì)發(fā)明的,1972年投入使用。從圖6-1中可以看到C語(yǔ)言直接來(lái)源于B語(yǔ)言,但它的根源可以追溯到ALGOL6O0ALGOL60是ー種結(jié)構(gòu)嚴(yán)謹(jǐn),面向過(guò)程的語(yǔ)言,與計(jì)算機(jī)硬件相距甚遠(yuǎn),不適合編寫系統(tǒng)軟件。1963年英國(guó)劍橋大學(xué)在此基礎(chǔ)上推出了CPL語(yǔ)言,雖然接近硬件,但卻太復(fù)雜難以實(shí)現(xiàn)。1967年,劍橋大學(xué)的MatinRinchards對(duì)CPL語(yǔ)言作了簡(jiǎn)化,推出了BCPL語(yǔ)言。1970年貝爾實(shí)驗(yàn)室的Ken.Thompson以BCPL語(yǔ)言為基礎(chǔ)設(shè)計(jì)了更簡(jiǎn)單也更接近硬件的B語(yǔ)言。而D.M.Ritchie又將B語(yǔ)言發(fā)展成C語(yǔ)言。1973年K.Thompson和D.M.Ritchie用C語(yǔ)言重寫UNIX操作系統(tǒng)獲得巨大成功,同時(shí)由B.W.Kernighan和D.M.Ritchit合著了著名的“THECPROGRAMMINGLANGUAGE”ー書。通常簡(jiǎn)稱為《K&R》,也有大稱之為《K&R》標(biāo)準(zhǔn)。但是,在《K&R》中并沒(méi)有定義?個(gè)完整的標(biāo)準(zhǔn)C語(yǔ)言。1983年美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)為C語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn),1987年ANSI公布了87ANSI標(biāo)準(zhǔn)成為現(xiàn)行的C語(yǔ)言標(biāo)準(zhǔn)。早期的C語(yǔ)言主要是用于UNIX系統(tǒng)。由于C語(yǔ)言的強(qiáng)大功能和各方面的優(yōu)點(diǎn)逐漸為人們認(rèn)識(shí),到了八十年代,C開始進(jìn)入其它操作系統(tǒng),并很快在各類大、中、小和微型計(jì)算機(jī)上得到了廣泛的使用。90年代至今,美國(guó)Borland公司陸續(xù)推出了TurboC、TurboC++、BorlandC++以及C++Builder等系列產(chǎn)品,Microsoft公司也推出了MicrosoftC,VisualC等產(chǎn)品。目前這些產(chǎn)品均提供了面向?qū)ο蟮目梢暬_發(fā)環(huán)境,用戶可以快速、方便地建立DOS/Windows應(yīng)用程序。C語(yǔ)言已成為程序員使用最多的編程語(yǔ)言之一。無(wú)論是面向硬件編程,還是面向大型數(shù)據(jù)庫(kù)編程;無(wú)論編寫應(yīng)用軟件,還是編寫操作系統(tǒng);C語(yǔ)言都是首選編程語(yǔ)言。C語(yǔ)言的特點(diǎn).語(yǔ)言簡(jiǎn)潔緊湊、方便靈活C語(yǔ)言中提供了32個(gè)關(guān)鍵字,9種程序結(jié)構(gòu)控制語(yǔ)句,程序書寫格式自由。.運(yùn)算功能豐富C語(yǔ)言提供了34種運(yùn)算符,它把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理。從而使C的運(yùn)算類型極為豐富,表達(dá)式類型多樣化,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其它高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。.數(shù)據(jù)類型豐富C的數(shù)據(jù)類型有:整型、實(shí)型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運(yùn)算。尤其是指針類型數(shù)據(jù),使得C語(yǔ)言的使用更加靈活、多樣。

.結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?便于使用、維護(hù)以及調(diào)試。在結(jié)構(gòu)化程序設(shè)計(jì)中,對(duì)于ー個(gè)復(fù)雜的問(wèn)題,通常是劃分為多個(gè)相對(duì)簡(jiǎn)單的功能模塊,對(duì)于這些小的功能模塊C語(yǔ)言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語(yǔ)句控制程序流向,從而使程序完全結(jié)構(gòu)化。.語(yǔ)法結(jié)構(gòu)松散。為保證編程者有較大的自由度,C語(yǔ)言放寬了語(yǔ)法檢查;例如,C語(yǔ)言對(duì)數(shù)組下標(biāo)越界不作檢查,由程序員自己保證程序的正確。對(duì)變量的類型使用比較靈活,例如整型量與字符型數(shù)據(jù)以及邏輯型數(shù)據(jù)可以通用。因此,要求編程人員謹(jǐn)慎細(xì)心。.C語(yǔ)言允許直接訪問(wèn)物理地址,直接對(duì)硬件進(jìn)行操作。C語(yǔ)言能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作。因此C語(yǔ)言既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,又被稱為“中間語(yǔ)言”,C語(yǔ)言可用來(lái)寫系統(tǒng)軟件。.生成目標(biāo)代碼質(zhì)量高,程序的執(zhí)行效率高。一般只比匯編程序生成的目標(biāo)代碼效率低!0%~20%o.可移植性好。C語(yǔ)言突出的?個(gè)優(yōu)點(diǎn)就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型,可以在不同系統(tǒng)之間方便的進(jìn)行移植。簡(jiǎn)單程序示例為說(shuō)明c程序的特點(diǎn),下面通過(guò)幾個(gè)例子,使讀者對(duì)c語(yǔ)言編寫的程序有個(gè)初步的認(rèn)識(shí)?!纠?-5]在屏幕上顯示一句話:hello!?//包含標(biāo)準(zhǔn)輸入//包含標(biāo)準(zhǔn)輸入輸出頭文件/?定義主函數(shù)?/#include<stdio.h>voidmain()printf("hello!\n");/printf("hello!\n");/?在屏幕上輸出hello,光標(biāo)移到下一行?/運(yùn)行結(jié)果:hello?Pressanykeytocontinue分析:Uun是注釋,用于注釋一行,注釋不影響程序的編譯和運(yùn)行?!?*”和“*/”之間括起來(lái)的內(nèi)容也是注釋,可用于注釋多行。(3)只要程序用到輸入輸出函數(shù),如輸出函數(shù)printf(),就需要在程序中包含stdio.h頭文件,即標(biāo)準(zhǔn)輸入輸出頭文件,寫法為:#include<stdio.h>或#include"stdio.h"o(4)程序由主函數(shù)voidmain()組成,void為main函數(shù)的返回值類型,為空。(5)函數(shù)內(nèi)容用大括號(hào){}括起來(lái),也叫做函數(shù)體,main函數(shù)的函數(shù)體開始于左花括號(hào)“{",結(jié)束于右花括號(hào)mian()函數(shù)中只有一個(gè)函數(shù)調(diào)用語(yǔ)句,用于在屏幕ヒ顯示指定的字符串信息,'作為語(yǔ)句結(jié)束的標(biāo)志。hello后面的\n叫做轉(zhuǎn)義字符,意為回車換行。(8)輸出結(jié)果后面的"Pressanykeytocontinue”是系統(tǒng)自動(dòng)添加的,不算做輸出結(jié)果。【例1-6】從鍵盤上輸入任意ー個(gè)整數(shù),計(jì)算其平方,并在顯示器上輸出結(jié)果。/*progl.06*/#include<stdio.h>voidmain()/?以下聲明變量?/intn; 〃聲明整型變量nunsignedht$ /Z聲明無(wú)符號(hào)整型變量s/?以下是執(zhí)行語(yǔ)句?/printf("n="); /Z顯示字符串,作為提示信息scanf("%d",&n); /Z 鍵盤輸入s=n*n; /Z計(jì)算平方并賦值printf("s=%d",s);/7顯示計(jì)算結(jié)果程序運(yùn)行情況:輸入6,回車,運(yùn)行結(jié)果如下:輸入ー6,回車,運(yùn)行結(jié)果如下:=一6=36Pressanykeytocontinue分析:本程序中聲明了變量n和s。因?yàn)樽兞縩從鍵盤上讀取整數(shù)值,所以聲明其為整型(int)變量;而變量s保存的平方不會(huì)為負(fù),所以聲明其為無(wú)符號(hào)整型(unsignedint)變量。木程序演示了如何聲明變量,如何從鍵盤輸入數(shù)據(jù)給變量,如何利用變量進(jìn)行計(jì)算,以及如何輸出變量的值。【例1-7】由鍵盤輸入三角形的三個(gè)邊長(zhǎng),計(jì)算該三角形的面積。/*progl.07*/#include<stdio.h> 〃包含輸入輸出頭文件include<math.h> 〃包含數(shù)學(xué)函數(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語(yǔ)句將表達(dá)式的值返回主函數(shù)}voidmiin() 〃定義main函數(shù){floatab,c; 〃定義3個(gè)單精度浮點(diǎn)型(實(shí)型)變量a,b,cdoublearea: 〃定義1個(gè)雙精度浮點(diǎn)型變量areaprintf("pleaseinputa,b,c:\n");scanf("%f%f%f&a,&b,&c);〃輸入3個(gè)數(shù)字,用空格或回車分隔area=fun(a,b,c); 〃調(diào)用fun函數(shù)并賦值printf("area=%6.2f\n",area); 〃輸出結(jié)果)程序運(yùn)行情況:輸入345,按回車,運(yùn)行結(jié)果如下:pleaseinput345area=6.00Pressanykeytocontinue輸入,運(yùn)行結(jié)果如下:pleaseinputa,b,c:area=13.10Pressanykeytocontinue分析:本例說(shuō)明如何編寫自定義函數(shù),如何調(diào)用自定義函數(shù),如何使用C系統(tǒng)提供給我們的庫(kù)函數(shù),以及如何聲明和使用局部變量?!纠??8】由鍵盤輸入任意圓的半徑r,計(jì)算其周長(zhǎng)和面積?!ê甓x,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);〃變量聲明語(yǔ)句〃鍵盤輸入,對(duì)r賦值〃計(jì)算圓的周長(zhǎng),賦值給變量1s=cir_s(r); 〃計(jì)算圓的面積,賦值給變量sprintf("l=%f\ns=%f\n",l,s);〃輸出結(jié)果) 〃程序結(jié)束/?定義計(jì)算圓的周長(zhǎng)的函數(shù)?/floatcir_l(floatx) 〃子函數(shù)頭,括號(hào)中的“floatx”為定義形參floatz 〃聲明局部變量if(x>0) 〃如果參數(shù)大于〇,則計(jì)算圓的周長(zhǎng)z=2*PI*x;returnz 〃返回函數(shù)值/?定義計(jì)算圓的面積的函數(shù)?/floatcir_s(floatx)floatz 〃聲明局部變量if(x>0) 〃如果參數(shù)大于〇,則計(jì)算圓的周長(zhǎng)Z=PI*X*X;returnz 〃返回函數(shù)值程序執(zhí)行過(guò)程:程序執(zhí)行后,輸入1.2,按回車,運(yùn)行結(jié)果如下:妙=1?21=7.539816s=4.523890Pressanykeytocontinue分析:本例題中又演示了如何使用簡(jiǎn)單宏定義:#definePI3.14159C程序的書寫格式通過(guò)上面的c程序例子,我們可以發(fā)現(xiàn)c程序的書寫格式有以下特點(diǎn):(1)在C程序中,習(xí)慣于使用小寫英文字母,例如,intfloat代表整數(shù)類型和浮點(diǎn)類型,而大寫字母多用于表示常量或其他特殊用途。例如,例1-8中的宏定義,PI代表3.14159。C語(yǔ)言的大小寫字母敏感,例如cir、Cir、CIR代表不同的標(biāo)識(shí)符。(3)每個(gè)C程序中有必須有一個(gè)名稱為main的函數(shù),并且只能有一個(gè)。通常稱main()函數(shù)為主函數(shù),其第一個(gè)花括號(hào)“ビ和最后ー個(gè)花括號(hào)“ド標(biāo)志函數(shù)體的開始和結(jié)尾。(4)在C程序中,用花括號(hào)“{”和“ド括起的部分表示ー個(gè)獨(dú)立的程序模塊,例如,ー個(gè)函數(shù)體或ー個(gè)由多個(gè)簡(jiǎn)單語(yǔ)句組成的復(fù)合語(yǔ)句。注意,“{”和“ド必須成對(duì)出現(xiàn)。(5)構(gòu)成函數(shù)的基本單位是語(yǔ)句,每個(gè)語(yǔ)句必須以英文格式的分號(hào)結(jié)束。語(yǔ)句的起始位置沒(méi)有特別的要求。程序中可以有空行,也可以在一行中有多個(gè)語(yǔ)句。例如:printf("r="); 〃顯示字符串scanf("%f',&r):〃鍵盤輸入,對(duì)r賦值也可以將這兩句寫在一行:printf("r=");scanf("%f',&r);為了使C程序便于閱讀,編寫程序時(shí)通常采用“縮排方式”,即內(nèi)層語(yǔ)句縮進(jìn)若干列,且同層的語(yǔ)句左對(duì)齊,這也是ー個(gè)程序編寫者應(yīng)具有的基本素質(zhì)。例如:floatcir_s(floatx)floatz 〃聲明局部變量if(x>0) 〃如果參數(shù)大于〇,則計(jì)算圓的周長(zhǎng)z=PI*x*x; 〃內(nèi)層語(yǔ)句進(jìn)行縮排return4 〃返回函數(shù)值(6)程序中可插入注釋。注釋用來(lái)対程序進(jìn)行說(shuō)明,也是程序的重要組成部分,可增強(qiáng)程序的可讀性。注釋在編譯時(shí)不產(chǎn)生代碼,編譯時(shí)編譯器將其作為“空白符”處理,不會(huì)影響程序的運(yùn)行。注釋的內(nèi)容可以是任何字符,包括中文。一般在程序或函數(shù)的開始處用注釋說(shuō)明程序或函數(shù)的功能。我們也可以在調(diào)試程序時(shí)使用注釋,例如程序運(yùn)行出現(xiàn)問(wèn)題,我們可以將這個(gè)問(wèn)題以外的代碼注釋掉,有針對(duì)性的對(duì)問(wèn)題進(jìn)行處理,處理后再將剛オ的注釋去掉。恰當(dāng)?shù)氖褂米⑨屢彩且粋€(gè)C程序編寫者應(yīng)具備的基本素質(zhì)。在VC++6.0中,要掌握兩種注釋的方式。第一種:ウ/”,用于注釋一行,表示從ケ/”開始一直到行尾均為注釋,注釋一行用。第二種:ウ?”和“ウ”之間括起來(lái)的內(nèi)容也是注釋,通常用于注釋多行,當(dāng)然用于注釋單行也可以?!?*”是注釋的開始,“*/”表示注釋的結(jié)束。“/*”和“*/”之間的內(nèi)容均是注釋內(nèi)容。例如:/*ThisismyfirstcprogramOnlyuseonefunction:printf();Nosyntaxerror,rmh甲py */(7)在C程序最開始處通常有預(yù)處理命令,例如上面4個(gè)例子的開始處都有#include<stdio.h>預(yù)處理命令。#include<stdio.h>的作用是把stdio.h這個(gè)頭文件內(nèi)容插入到該命令所在的位置。在C語(yǔ)言系統(tǒng)中,“*.h”形式的文件被稱為頭文件。頭文件中包含了使用系統(tǒng)函數(shù)和常量的有關(guān)信息。例如,在stdio.h頭文件中包含了printf()和scanf()的聲明信息。math.h頭文件包含了sqrt()函數(shù)的信息。除了#includeタト,還有其他ー些預(yù)處理命令,比如,例1-8中的宏定義#definePI3.14159也是預(yù)處命令中的一種,將3.14159賦值給PI,用來(lái)表示圓周率,有了這個(gè)宏定義,在程序中就可以使用這個(gè)標(biāo)識(shí)符P1來(lái)代替3.14159這個(gè)數(shù)。本書將有專門的章節(jié)介紹預(yù)處理命令。main()函數(shù)C語(yǔ)言程序中最重要的函數(shù)是main。函數(shù),main。函數(shù)也稱為主函數(shù)。所有完整可運(yùn)行的C程序都必須有一個(gè)惟ー的main()函數(shù)。例如,本章前面所舉的4個(gè)例子不論其代碼長(zhǎng)短、功能如何,都有一個(gè)main。函數(shù)。main。是C程序中唯一可以直接運(yùn)行的函數(shù),其他函數(shù)都直接或間接山main。調(diào)用執(zhí)行。C程序的執(zhí)行開始于main。函數(shù),ー個(gè)結(jié)構(gòu)良好的C程序也應(yīng)結(jié)束于main。函數(shù)。對(duì)于一些較小的程序,用ー個(gè)main。函數(shù)就夠了,全部的處理語(yǔ)句都放在main。函數(shù)中。例如,上面的【例!-5]和【例1-6】。對(duì)于ー些復(fù)雜問(wèn)題,需要進(jìn)行模塊化設(shè)計(jì),要將一個(gè)復(fù)雜問(wèn)題分解成若干個(gè)相對(duì)簡(jiǎn)單的ー些子問(wèn)題,每個(gè)子問(wèn)題由一個(gè)或多個(gè)函數(shù)來(lái)處理,main。函數(shù)負(fù)責(zé)總控,并調(diào)用相應(yīng)的函數(shù)。例如,上面的【例1-7】和【例1-8】。main。是ー個(gè)特殊的函數(shù),與其他函數(shù)一樣,該函數(shù)也可以有返回值和參數(shù)表。本書第5章將對(duì)main。函數(shù)給出更進(jìn)ー步說(shuō)明。下面給出main。函數(shù)的最簡(jiǎn)單形式。main() 〃主函數(shù)名{ 〃函數(shù)體起始符局部變量聲明執(zhí)行語(yǔ)句序列} 〃函數(shù)體終止符C程序的基本結(jié)構(gòu)通過(guò)【例1-7】和【例1-8】我們可以發(fā)現(xiàn),C程序的完整基本結(jié)構(gòu)如下:預(yù)處理命令聲明函數(shù)聲明全局變量main()局部變量聲明語(yǔ)句可執(zhí)行語(yǔ)句序列fio局部變量聲明語(yǔ)句可執(zhí)行語(yǔ)句序列及()局部變量聲明語(yǔ)句可執(zhí)行語(yǔ)句序列}fn()局部變量聲明語(yǔ)句可執(zhí)行語(yǔ)句序列對(duì)于C程序基本結(jié)構(gòu)的幾點(diǎn)說(shuō)明。(1)預(yù)處理命令:指示編譯系統(tǒng)進(jìn)行有關(guān)處理時(shí),要使用預(yù)處理命令。例如,預(yù)處理命令#include"stdio.h"的作用是讓編譯系統(tǒng)將stdio.h文件內(nèi)容插入到該命令所在的位置。有些程序會(huì)用到多個(gè)預(yù)處理命令,如[例!-7]和【例1-8】。(2)聲明函數(shù):在C語(yǔ)言中,無(wú)論變量還是函數(shù),都要先定義,后使用,當(dāng)main。函數(shù)要調(diào)用自定義函數(shù)時(shí),被調(diào)用的函數(shù)需要聲明。注意,聲明函數(shù)和定義函數(shù)是兩回事。我們使用的系統(tǒng)庫(kù)函數(shù)也是要聲明的,其聲明在相應(yīng)的頭文件中,例如,在【例1-7】中,在子函數(shù)fun中,調(diào)用了一個(gè)C系統(tǒng)提供給我們的庫(kù)函數(shù)sqrt(),作用是開平方根,它包含在“math.h”這個(gè)頭文件中。要在程序中使用這個(gè)函數(shù),就要在程序開始進(jìn)行聲明,就像要使用printf()和scanf()這兩個(gè)函數(shù),他們包含在頭文件’'stdio.h”中,所以程序開始也要聲明。聲明的方法就是#include"stdio.h",#include"math.h",他們倆的先后順序無(wú)所謂。(3)聲明全局變量:全局變量是在程序中的各個(gè)函數(shù)中均可使用的變量,其聲明的位置在所有函數(shù)之外。比如在【例1-8I中也可以在main。函數(shù)定義之前聲明如下全局變量,以代替宏定義。floatPI=3.14159: 〃聲明全局變量PI,并賦初值(4)聲明局部變量:局部變量只有在聲明它的函數(shù)中有效,在其他函數(shù)中無(wú)效。例如,在[例1-8]中,main。函數(shù)使用的局部變量聲明語(yǔ)句為:floatrl.s; 〃變量聲明語(yǔ)句(5)其中fl()到fn()代表若干個(gè)用戶自定義函數(shù)。從以上結(jié)構(gòu)可以看到,無(wú)論是main()函數(shù)還是其他函數(shù),函數(shù)體都由最外層的花括號(hào)“{”和“ド標(biāo)記開始和結(jié)束的。(6)函數(shù)體由一系列語(yǔ)句組成,包括各種聲明語(yǔ)句和可執(zhí)行語(yǔ)句。(7)C程序的基本單元是函數(shù),C語(yǔ)言的函數(shù)可以分為三類:第一類:主函數(shù)。第二類:用戶自定義函數(shù),可有可無(wú)(根據(jù)需要),數(shù)目不限,例如在[例1-7]中,fun()是程序編寫者自己定義的函數(shù),又稱子函數(shù),這么稱呼是相對(duì)主函數(shù)而言,其功能是計(jì)算三角形的面積,在函數(shù)定義時(shí),函數(shù)名前加double表示該函數(shù)返回值類型是雙精度浮點(diǎn)型(實(shí)型)。在main函數(shù)中輸入三角形的三個(gè)邊長(zhǎng),然后調(diào)用函數(shù)fun計(jì)算出三角形的面積,并將所得返回值賦給變量area,程序最后輸出area的值。在[例1-8]中,cir_l()和cir_s()是用戶自定義的兩個(gè)函數(shù),用來(lái)計(jì)算周長(zhǎng)和面積。第三類:C語(yǔ)言提供的庫(kù)函數(shù),例如最常用的輸出函數(shù)printfO和輸入函數(shù)scanf()?!纠?-7]中還使用了庫(kù)函數(shù)中的數(shù)學(xué)函數(shù)sqrt()。書后附錄中給出了常用庫(kù)函數(shù)及使用方法??傊?使用C語(yǔ)言編寫的程序通常是由包括main()函數(shù)在內(nèi)的ー組函數(shù)組成。每個(gè)函數(shù)都有一個(gè)由合法標(biāo)識(shí)符所確定的函數(shù)名,而函數(shù)體是由“1’和“}”引起來(lái)的一系列語(yǔ)句構(gòu)成。一個(gè)C程序總是從主函數(shù)main()開始執(zhí)行,通過(guò)main。函數(shù)可以直接或間接調(diào)用其他函數(shù)。因此,ー個(gè)完整的C程序必須有主函數(shù)main。。有關(guān)函數(shù)等此處提出的概念,我們將會(huì)在本書后面的各章中陸續(xù)給出專門介紹。1.4C程序開發(fā)及運(yùn)行環(huán)境c程序的開發(fā)及運(yùn)行環(huán)境并不是唯一的,能夠編譯c代碼的編譯器有很多,最著名的是TurboC。在過(guò)去將近20年的時(shí)間里,大多數(shù)C語(yǔ)言的學(xué)習(xí)者和一些開發(fā)者所使用的是TurboC2.0系列(簡(jiǎn)稱TC),它是ー個(gè)C程序的集成開發(fā)環(huán)境,是美國(guó)著名的Borland公司的系列產(chǎn)品之一,Borland公司是一家專門從事軟件開發(fā)和研制的大公司,其著名產(chǎn)品Delphi號(hào)稱VB(微軟的VisualBasic)將。TC2.0是該公司1987年推出的,它是一個(gè)小巧的(不到1Mb)、純粹的C編譯、開發(fā)、運(yùn)行環(huán)境,可以運(yùn)行與目前流行的各類PC機(jī)上,軟、硬件要求很低,操作系統(tǒng)為DOS2.0或更高版本,RAM只需448K,操作簡(jiǎn)單,編輯功能強(qiáng)大。TC2.0是DOS操作系統(tǒng)下的開發(fā)環(huán)境,所以不支持鼠標(biāo),一切操作要通過(guò)鍵盤來(lái)完成,并且用它編寫的程序也只能在DOS下運(yùn)行。過(guò)去在高校教師一直用TC教C,學(xué)生一直用TC學(xué)C,幾乎所有教材也都用TC來(lái)演示?,F(xiàn)今Windows早已大行其道,面向?qū)ο蛟缫扬L(fēng)靡天下,而且從08年開始全國(guó)計(jì)算機(jī)等級(jí)考試的考試大綱又把C語(yǔ)言編輯環(huán)境由TC2.0轉(zhuǎn)變到VisualC++6.0,所以本書簡(jiǎn)單介紹VC++6.0并著重講解在VC下編譯C程序的步驟。本書雖然采用VisualC++6.0來(lái)編譯C程序,但讀者要知道VisualC++6.0本質(zhì)上是Windows平臺(tái)下的IDE(IntegratedDevelopmentEnvironment,集成開發(fā)環(huán)境),是面向?qū)ο蟮?。而TC這類開發(fā)環(huán)境オ是純粹的C程序的集成開發(fā)環(huán)境,是DOS下的,面向過(guò)程的。只不過(guò)VisualC++6.0支持開發(fā)、編譯、運(yùn)行C程序而已,雖然VisualC++6.0本身十分復(fù)雜,功能強(qiáng)大,但使用它學(xué)習(xí)C語(yǔ)言是簡(jiǎn)單的,需要我們掌握的只是幾個(gè)簡(jiǎn)單的操作步驟而已。開發(fā)C程序的步驟.幾個(gè)基本概念(1)源文件源文件又叫源程序,是用來(lái)保存特定編程語(yǔ)言的代碼的文件,源文件中的代碼又叫源代碼。機(jī)器硬件不能直接識(shí)別和執(zhí)行源程序。源文件可以通過(guò)開發(fā)環(huán)境所提供的編輯器創(chuàng)建,也可以通過(guò)其他文件編輯器創(chuàng)建。例如,可以利用Turboc2.0柒成環(huán)境或Windows操作系統(tǒng)中的“記事本”可以創(chuàng)建和編輯C源程序。源程序通常以特定擴(kuò)展名的文本文件形式保存在磁盤上。例如,C語(yǔ)言源程序文件的擴(kuò)展名為“.C”。(2)目標(biāo)文件H標(biāo)文件又叫目標(biāo)程序,目標(biāo)程序是語(yǔ)言系統(tǒng)的編譯程序?qū)⒃闯绦蚍g后生成的二進(jìn)制代碼文件。目標(biāo)程序的形式是二進(jìn)制代碼,計(jì)算機(jī)的硬件能夠識(shí)別,但還不具備運(yùn)行條件。目標(biāo)程序也是以文件形式保存在磁盤ヒ。例如,C語(yǔ)言目標(biāo)程序文件的擴(kuò)展名為“.obj”。(3)可執(zhí)行文件又叫可執(zhí)行程序,可執(zhí)行程序是計(jì)算機(jī)能直接識(shí)別和執(zhí)行的程序,它是將目標(biāo)文件與所需要的庫(kù)文件等信息連接后生成的程序。可執(zhí)行程序是由語(yǔ)言系統(tǒng)的連接程序?qū)δ繕?biāo)程序進(jìn)行連接后生成,保存在磁盤上,可供用戶多次執(zhí)行。C語(yǔ)言可執(zhí)行文件的擴(kuò)展名為”.exe”。(4)編譯程序編譯程序是高級(jí)語(yǔ)言系統(tǒng)提供的ー種翻譯程序,其作用是將高級(jí)語(yǔ)言編寫的源程序翻譯成二進(jìn)制代碼程序。例如,C語(yǔ)言和FORTRAN語(yǔ)言為編譯型語(yǔ)言,用它們編寫的程序必須經(jīng)過(guò)創(chuàng)建、編輯、編譯、連接和運(yùn)行等幾個(gè)步驟才能完成。在對(duì)源程序編譯過(guò)程中發(fā)現(xiàn)的錯(cuò)誤稱為編譯錯(cuò)誤,而程序在運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤稱為運(yùn)行錯(cuò)誤。(5)連接程序連接程序是ー種裝配程序,起作用是將一個(gè)或若干個(gè)目標(biāo)程序(.obj)和指定的庫(kù)文件(Jib)連接起來(lái),生成一個(gè)可執(zhí)行程序(.exe)。.開發(fā)C程序的步驟無(wú)論在何種編譯器下開發(fā)C程序,其原理是相同的,都要經(jīng)過(guò)以下幾個(gè)步驟:(1)編輯編輯就是編寫源程序的過(guò)程,或者說(shuō)是在源文件中書寫源代碼的過(guò)程。C語(yǔ)言的編輯過(guò)程就是在“.c”文件中編寫C代碼的過(guò)程。(2)編譯編輯好的源文件是以文本形式存儲(chǔ)的,必須翻譯成機(jī)器語(yǔ)言才能被計(jì)算機(jī)識(shí)別。完成這ーー翻譯工作的就是編譯程序。源程序經(jīng)過(guò)編譯程序翻譯成等價(jià)的機(jī)器語(yǔ)言程序——目標(biāo)程序(.obj文件),這?翻譯過(guò)程就叫做編譯。(3)連接將一個(gè)或若干個(gè)目標(biāo)程序(.obj)和指定的庫(kù)文件(.lib)連接起來(lái),生成一個(gè)可執(zhí)行程序(,exe)?(4)運(yùn)行生成的.exe文件就是最終為人們所用的程序,比如一些應(yīng)用軟件和小游戲。所謂運(yùn)行ー個(gè)程序,或者說(shuō)執(zhí)行ー個(gè)程序,就是把ー個(gè)可執(zhí)行文件從外存調(diào)入計(jì)算機(jī)內(nèi)存,并由計(jì)算機(jī)完成該程序預(yù)定的功能,如完成輸入數(shù)據(jù)、處理數(shù)據(jù)、輸出結(jié)果等任務(wù)。用大白話講,當(dāng)我們用鼠標(biāo)雙擊.exe文件,就表示開始運(yùn)行了。(5)調(diào)試源程序中難免會(huì)存在錯(cuò)誤,所以需要進(jìn)行調(diào)試。錯(cuò)誤一般可分為四類:(a)編譯錯(cuò)誤:即語(yǔ)法錯(cuò)誤。程序不符合C語(yǔ)言語(yǔ)法規(guī)定,在編譯時(shí)就會(huì)出錯(cuò)。編譯錯(cuò)誤包括語(yǔ)法錯(cuò)誤(error)和警告錯(cuò)誤(warning)。例如,某ー變量未定義就使用,則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。又如,某變量未賦初值就用來(lái)求和,則會(huì)出現(xiàn)警告錯(cuò)誤。編輯錯(cuò)誤屬于“低級(jí)錯(cuò)誤”,打個(gè)比方,相當(dāng)于在寫英語(yǔ)作文時(shí)將單詞拼錯(cuò)。(b)邏輯錯(cuò)誤:即算法錯(cuò)誤。ー個(gè)程序能夠運(yùn)行,但是運(yùn)行后得不到正確的結(jié)果,或者說(shuō)不能反映源代碼所對(duì)應(yīng)的含義。這是由于在算法的設(shè)計(jì)過(guò)程或程序的表達(dá)式中存在錯(cuò)誤,如程序控制流程錯(cuò)誤。邏輯錯(cuò)誤屬于“高級(jí)錯(cuò)誤”,打個(gè)比方,相當(dāng)于在寫英語(yǔ)作文時(shí)將意思表達(dá)錯(cuò)誤。(C)連接錯(cuò)誤:將目標(biāo)程序連接成可執(zhí)行程序時(shí)出現(xiàn)的錯(cuò)誤,如找不到庫(kù)文件,通常發(fā)生在編譯環(huán)境的配置錯(cuò)誤時(shí)。(d)運(yùn)行錯(cuò)誤:程序執(zhí)行時(shí)在某些特殊情況下發(fā)生的錯(cuò)誤??偨Y(jié):如果將開發(fā)C程序的過(guò)程比喻成廚師炒菜的話,源文件就相當(dāng)于菜譜,可執(zhí)行程序就相當(dāng)于炒出的菜。廚師炒菜的過(guò)程就是編譯器通過(guò)源程序生成可執(zhí)行程序的過(guò)程??梢钥闯?,我們主要耍完成的是編輯工作,也就是寫代碼的過(guò)程,這也是本書要教給大家的。編譯和連接都是由后面要介紹的VisualC++6.0這個(gè)開發(fā)環(huán)境來(lái)完成,只要正確安裝和運(yùn)行軟件,這兩個(gè)步驟一般不會(huì)出現(xiàn)問(wèn)題,需要我們做的只是按幾下鼠標(biāo)。沒(méi)有語(yǔ)法錯(cuò)誤不等于沒(méi)有邏輯錯(cuò)誤,只要沒(méi)有語(yǔ)法錯(cuò)誤就能夠編譯通過(guò),但是生成的.exe文件不一定能夠執(zhí)行人們預(yù)期的功能,這就是算法錯(cuò)誤。如果出現(xiàn)語(yǔ)法錯(cuò)誤,編譯器會(huì)給我們進(jìn)行提示,我們根據(jù)提示的信息更改源代碼。對(duì)于算法錯(cuò)誤,我們只能重新分析算法或仔細(xì)檢查代碼中的錯(cuò)誤。最后要說(shuō)明的是,C的源文件、C++的源文件、JAVA的源文件都屬于文本格式的文件,所以我們可以用任何ー種文本編輯工具來(lái)完成編輯的工作。最常見、最方便的就是windows的“記事本”程序。我們可以用它來(lái)完成編輯工作,也可以利用它來(lái)保存代碼。如果要將它變成C的源文件,將擴(kuò)展名由.txt改成.c即可。VisualC++6.0集成開發(fā)環(huán)境VisualC++6.0簡(jiǎn)介MicrosoftVisualC++,這套功能強(qiáng)大的Windows應(yīng)用程序開發(fā)系統(tǒng)由MicrosoftC/C++演化而來(lái)。從MicrosoftC/C++8.0開始改稱為VisualC++,發(fā)展到今天的VisualC++6.0。由于先天的“血緣”關(guān)系,Visual平臺(tái)是當(dāng)前Windows應(yīng)用開發(fā)系統(tǒng)中與Windows平臺(tái)本身最具親和性的開發(fā)平臺(tái)。特別是VisualC++6.0,它包含了支持Windows95、WindowsNT4.0及Windows98的Win32SDK文檔,即人們可以在VisualC++環(huán)境卜.使用WindowsSDK提供的SDK文檔中的AP!來(lái)進(jìn)行Windows應(yīng)用程序的開發(fā)。VisualC++的最主要特點(diǎn)是:可視化編程和支持面向?qū)ο蟮木幊碳夹g(shù)。VisualC++提供了一系列可視化編程的工具,如AppWizard和ClassWizard等。它們使windows編程更為直觀。VisualC++支持的面向?qū)ο蟮木幊碳夹g(shù)包裝了Windows在內(nèi)的変雜的運(yùn)行機(jī)制,使Windows編程更為簡(jiǎn)單易學(xué)。此外,VisualC++還具有其他技術(shù)特點(diǎn):如通過(guò)ActiveX技術(shù),支持Internet編程,支持ODBC數(shù)據(jù)庫(kù)編程等。軟、硬件要求:

(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和其他幾個(gè)產(chǎn)品的安裝文件。獲取安裝文件后,執(zhí)行“Setup.exe”文件開始安裝,會(huì)出現(xiàn)圖1-7所示安裝向?qū)Ы缑?根據(jù)提示,ー步ー步執(zhí)行即可。在安裝過(guò)程中,向?qū)?huì)提示用戶輸入產(chǎn)品的序列號(hào)、安裝位置以及安裝類型,采用系統(tǒng)默認(rèn)設(shè)置即可。說(shuō)明一點(diǎn),在安裝過(guò)程中,會(huì)出現(xiàn)圖1-8所示的對(duì)話框,提示用戶選擇要安裝的程序。該對(duì)話框中列出了VisualStudio6.0中所包含的所有應(yīng)用程序,當(dāng)然,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完畢,重啟計(jì)算機(jī)后,會(huì)彈出安裝MSDN的對(duì)話框,提示用戶是否繼續(xù)安裝MSDN,它是VC應(yīng)用程序開發(fā)十分有用的幫助,如果安裝的話,需要單獨(dú)購(gòu)買MSDN光盤,它并不包含于VisualStudio中。如果只編譯C語(yǔ)言,我們可以不用安裝。至此,VisualC++6.0安裝完畢。VisualC++6.0開發(fā)環(huán)境完成了VC++6.0的安裝后,單擊任務(wù)欄中的“開始按鈕”后,在彈出菜單中選擇“程序,找到MicrosoftVisualStudio6.0文件夾后,單擊其中的MicrosoftVisualVisualC++6.0圖標(biāo),則可以啟動(dòng)VisualC++6.0。VisualC++6.0集成開發(fā)環(huán)境(IDE)的主界面分為標(biāo)題欄、菜單欄、工具欄、工作區(qū)窗口、輸出窗口和編輯窗口等幾大部分。如圖1-9所示:標(biāo)題欄工具欄

標(biāo)題欄工具欄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);對(duì)M0lj[Globals]^Workspace-001Wes-」SourceFiles國(guó)abc.cIIHeaderFiles(_JResourceFilesRinclude<stdio.h>floatMX(FUatx.floaty)〃テヱ(欽.石西ヤ敗中大的那個(gè)返回(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ū)窗口是瀏覽應(yīng)用程序組成結(jié)構(gòu)的有效工具。它向用戶提供了三種不同的瀏覽方式:ClassView(類視圖):具有瀏覽、管理C++類的功能。通過(guò)它開發(fā)者能夠在C++類的層次上找到并操作源代碼。ResourceView(資源視圖):具有編輯程序中的各種資源的功能。通過(guò)它,開發(fā)者能夠在應(yīng)用程序中找到并編輯各種資源,包括對(duì)話框的設(shè)計(jì)、圖標(biāo)和菜單等等。FileView(文件視圖):具有結(jié)構(gòu)化管理程序中的各種文件的功能。通過(guò)它,開發(fā)者能夠查看構(gòu)成應(yīng)用程序的文件并確定它們的位置。(2)輸出窗口輸出窗口默認(rèn)位置是在開發(fā)環(huán)境窗U的底部,用于顯示當(dāng)前的編譯、連接狀態(tài)信息、各種警告及出錯(cuò)信息等。(3)編輯區(qū)編輯區(qū)(EditorArea)用于編輯文件,包括C源程序、C++源程序文件,各種資源文件和文本文件等。(4)菜單和工具欄VisualC++6.0提供了多種工具欄,用戶可以根據(jù)自己的愛好和需要顯示、隱藏這些エ具欄。默認(rèn)狀態(tài)下,VisualC++6.0顯示下面三種工具欄:標(biāo)準(zhǔn)工具欄:包括絕大多數(shù)標(biāo)準(zhǔn)工具——打開和保存文件、剪切、復(fù)制、粘貼以及可能有用的其他各種命令。向?qū)?WizardBar)工具欄:提供快速使用ClassWizard的工具。調(diào)試工具欄:提供開發(fā)和測(cè)試程序時(shí)經(jīng)常用到的編譯、連接和運(yùn)行等命令。

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)境下,通常都是以工程的方式去組織我們的代碼,這就好象承包ー個(gè)建筑工程,會(huì)有很多人ー起配合來(lái)完成這個(gè)工程,比如有人負(fù)責(zé)是負(fù)責(zé)采購(gòu)的,有人負(fù)責(zé)施工,還有人負(fù)責(zé)裝修。在ー個(gè)工程中,除了源文件,可能還會(huì)有一些輔助的文件,這些文件記錄了工程的相關(guān)信息,所以在利用集成開發(fā)環(huán)境開發(fā)程序的時(shí)候,第一步要做的就是去創(chuàng)建一個(gè)工程。在菜單欄中:點(diǎn)擊“文件”(1)選擇工程類別:我們使用VisualC++6.0開發(fā)C程序,首先也要建立一個(gè)工程:在菜單欄中:點(diǎn)擊“文件”“新建”后,在“projecい選項(xiàng)卡中,左邊工程類別選擇uWin32consoleapplication",右邊首先在"Location"文本框中輸入工程存放的路徑,比如我們要將工程存放在D盤下的“1302020207李明”這個(gè)文件夾下,那么在“Locationg”中就輸入"d:\1302020207李明”;接下來(lái)在“Projectname"文本框中輸入工程名,例如當(dāng)我們輸入工程名01以后,Location文本框中的內(nèi)容就會(huì)自動(dòng)變成d:\1302020207李明、01。表示01這個(gè)工程存放在D盤的“13020207李明”這個(gè)文件夾中,這時(shí)在這個(gè)位置會(huì)自動(dòng)產(chǎn)生一個(gè)名字為01的文件夾,即工程文件夾。此過(guò)程見圖1-10。KevliesProjectsIWorkspaces^wizard向ClusterResourceTypeWizard團(tuán)CustomAppWizard國(guó)DatabaseProject價(jià)DevStudioAdd-inWizard國(guó)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è)置工程選項(xiàng):點(diǎn)擊”〇K"(英文版)或“確定”(中文版)按鈕,進(jìn)入到如圖!-11所示界面,我們保持默認(rèn)選項(xiàng),即:Anemptyproject。意思是ー個(gè)空的工程。然后點(diǎn)擊下面的“Finish”(英文版)或“完成”(中文版)按鈕,進(jìn)入到下ー步,打開新建工程信息窗口。

圖1-12信息提示窗口經(jīng)過(guò)以上3步,ー個(gè)新的空的工程就建立好了,需要注意的是工程類別一定要選擇“Win32consoleapplication",即Win32控圖1-12信息提示窗口經(jīng)過(guò)以上3步,ー個(gè)新的空的工程就建立好了,需要注意的是工程類別一定要選擇“Win32consoleapplication",即Win32控制臺(tái)應(yīng)用程序,一般指類似DOS環(huán)境出現(xiàn)的命令行樣式,現(xiàn)在叫命令提示符。我們用鍵盤輸入各種命令來(lái)使用它。其他的工程類型本書?Emptyconsoleapplication.+Nofileswillbecreatedoraddedtotheproject.CA,?Hello,WorldTapplication.AnapplicationthatsupportsMFC.WhatkindofConsoleApplicationdoyouwanttocreate?f*Anemptyprojecしゝ^Asimpleapplication.^ProjectDirectory:D:\1302020207李明'01圖1-11設(shè)置工程選項(xiàng)(3)完成工程的創(chuàng)建:在新建工程信息窗口中,點(diǎn)擊”〇K”按鈕,完成工程的創(chuàng)建,如圖!-12所示。Win32ConsoleApplicationwillcreateanewskeletonprojectwiththefollowingspecifications:Cancel<RackfinishCancelHevProjectXnfor*a-txonWin32ConsoleApplication-Step1of不做介紹,有興趣的讀者可以參考專門講解VisualC++的書。.添加源文件建立好空的工程之后,接下來(lái)要添加源文件。源文件就是包含我們要實(shí)現(xiàn)某些算法的代碼。像剛オ?jiǎng)?chuàng)建工程那樣,在菜單欄中點(diǎn)擊“文件”——“新建”后,在“File”選項(xiàng)卡中,在左邊的文件類別列表中選擇“C++SourceFile”或最后面的“TextFiles”選項(xiàng),再將右邊的“Addtoprojecビ前面的復(fù)選框選匕然后在File文本框中為源文件命名,名字可以和工程名相同,但是一定要加上文件擴(kuò)展名“.c”。例如,命名“abc.c”,過(guò)程如圖1-13所示。最后點(diǎn)擊OK按鈕。這時(shí)在工程文件夾下就會(huì)自動(dòng)產(chǎn)生一個(gè)名字為,,abc.c),的源文件。圖1-13添加源文件在這ー步驟中,要注意兩個(gè)問(wèn)題,ー個(gè)問(wèn)題是,由于VisualC++6.0本質(zhì)上是ー個(gè)C++語(yǔ)言的編譯環(huán)境,所以在左邊的文件類別列表框中沒(méi)有提供添加C源文件的選項(xiàng),而只有“C++SourceFile”(C++源文件),我們先選擇它,然后在對(duì)話框右邊輸入文件名時(shí),除了填寫文件名,要寫明擴(kuò)展名“.c”,表示添加的是c語(yǔ)言源程序,不寫的話默認(rèn)擴(kuò)展名是“.cpp”,表示添加了一個(gè)C++源文件。而VisualC++6.0對(duì)C語(yǔ)言和C++語(yǔ)言的編譯方式是不完全相同的。另外一個(gè)問(wèn)題是,“Addtoproject"復(fù)選框的作用是設(shè)置是否將新建的文件添加到エ程中,表示是否和工程產(chǎn)生關(guān)聯(lián)。如果在左邊選擇了一種類型的文件,比如一個(gè)C++SourceFile,并且沒(méi)有將“Addtoprojecい復(fù)選框選中的話,那么這個(gè)源文件和前面建立的工程沒(méi)什么關(guān)系,換句話說(shuō),在對(duì)工程進(jìn)行編譯時(shí),它并沒(méi)有參與進(jìn)來(lái),而只是將一個(gè)源文件保存在了工程文件夾內(nèi),但是和工程本身并無(wú)聯(lián)系?!癆ddtoprojecビ復(fù)選框下是組合框,選擇新建的源文件添加到哪個(gè)工程下。我們應(yīng)該知道,通常來(lái)講,ー個(gè)工程可以添加多種類型的文件,并且一種文件可添加

多個(gè),就像前面所說(shuō)“有人負(fù)責(zé)是負(fù)責(zé)采購(gòu)的,有人負(fù)責(zé)施工,還有人負(fù)責(zé)裝修”,其實(shí)稍微帶ー些復(fù)雜功能的程序都要這樣完成。但是,在學(xué)習(xí)本書“文件”這ー章之前,我們只是對(duì)單獨(dú)ー個(gè)文件進(jìn)行編譯,也就是只編譯単獨(dú)的一個(gè)源文件。所以請(qǐng)讀者記住,ー個(gè)工程中我們只添加一個(gè)源文件。VisualC++6.0中可以添加多個(gè)源文件,但是編譯時(shí)也是將它們ー起編譯的。好多初學(xué)者容易犯的錯(cuò)誤是編完一個(gè)小程序或做完了一道題目,再編下ー個(gè)小程序的時(shí)候不是重新建立一個(gè)工程,重新添加源文件,而是直接在原有的工程下添加了一個(gè)新的源文件。這時(shí)再編譯就會(huì)出現(xiàn)錯(cuò)誤,因?yàn)槭蔷幾g器是將兩個(gè)源文件ー起進(jìn)行編譯的。.編輯接下來(lái)在abc.c這個(gè)源文件中完成編輯工作,見圖1-14,比如我們輸入如下代碼:#include<stdio.h>voidmain(){printfC^elloXn");}寫完代碼后要保存源文件,方法是用鼠標(biāo)點(diǎn)擊ー下工具欄上的保存按鈕或者“文件”菜單下的保存選項(xiàng)。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編輯.編譯由于計(jì)算機(jī)不能直接執(zhí)行用高級(jí)語(yǔ)言所編寫的代碼,所以,要對(duì)源文件進(jìn)行編譯,源文件經(jīng)過(guò)編譯后,將生成目標(biāo)文件(.obj文件),供連接用。執(zhí)行“Build”——“Compile”菜單命令或者單擊微型工具條上的審按鈕或按快捷鍵“Ctrl+F7”,表示對(duì)源文件進(jìn)行編譯。VisualC++6.0工作臺(tái)已經(jīng)把當(dāng)前文件名放在Compile命令后,使得編譯動(dòng)作更直觀了,如圖1-15。

BuildToolsWindowHelpCompileabc.c Ctrl+F7Build01.exe FT對(duì)RebuildAllBatchBuild...CleanStartDebugDebuggerRemoteConnection...!Execute01,exe Ctrl+F5SetActiveConfiguration...Configurations...Profile...圖1-15Build菜單下的編譯選項(xiàng)執(zhí)行上述命令,即對(duì)源程序進(jìn)行了編譯,編譯成功與否的結(jié)果信息,顯示在輸需窗口中。如果程序中沒(méi)有任何語(yǔ)法錯(cuò)誤,輸出窗口將顯示“0error(s),0waming(s)”信息,如圖1-16所示,表示編譯成功,這時(shí)會(huì)生成目標(biāo)文件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編譯成功輸出窗口.連接編譯生成目標(biāo)文件后,需要將目標(biāo)文件(.obj)與系統(tǒng)中的庫(kù)函數(shù)連接(Link),生成最終的可執(zhí)行的.exe文件,可執(zhí)行文件也產(chǎn)成在對(duì)應(yīng)工程文件夾下的Debug文件夾中,可執(zhí)行文件的名字叫01.exe,注意它是和工程同名的,而不是和源文件同名。連接操作的方法為:執(zhí)行“Build”——“Build”菜單命令,也可直接點(diǎn)擊微型工具條上的讎按鈕,也可使用快捷鍵F7J群,VisualC++6.0工作臺(tái)已經(jīng)把項(xiàng)目名放在“Build”命令后面。“Build”命令包含了編譯和連接。即對(duì)源程序直接執(zhí)行“Build”操作,系統(tǒng)將首先編譯,編譯如果沒(méi)有錯(cuò)誤則接著進(jìn)行連接,最后生成,exe文件。在輸出窗口中會(huì)顯示提示信息,如圖!-17所示: Configuration:01-Win32DebugLinking...01.exe-0error(s),0warning(s)ThBuild/Debug,廣FindinFiles1ゝFindinFiles2ヌResults/ 4\\1圖1-17連接成功輸出窗口當(dāng)項(xiàng)目設(shè)置改變或項(xiàng)目中許多文件被修改,可以直接執(zhí)行“Build"——"RebuildAll"菜單命令,該命令將徹底重新編譯連接整個(gè)項(xiàng)目。其實(shí),到這里如果能夠保證前面所做的一切都是正確的,或者說(shuō)符合項(xiàng)目的要求的話,編程工作可以算結(jié)束了,因?yàn)橐呀?jīng)產(chǎn)生了我們想要的可執(zhí)行文件,即.exe文件。因?yàn)槿藗兙幊痰哪康木褪且a(chǎn)生為人們所用的可執(zhí)行程序。這就是將菜譜轉(zhuǎn)換成了一盤盤的菜了。再打個(gè)比方,將一個(gè)工程比喻成蓋樓,蓋好的大樓就是.exe。.運(yùn)行程序編譯并連接成功后,要查看運(yùn)行結(jié)果,即運(yùn)行.exe文件。運(yùn)行文件的方法有很多,最方便的就是在VisualC++6.0中查看結(jié)果,檢査運(yùn)行效果是否和代碼對(duì)應(yīng)的算法一致,如果有問(wèn)題,可以立即在VisualC++6.0中修改代碼,然后重新編譯、連接、運(yùn)行。執(zhí)行“Build”——“Execute”菜單命令或者單擊微型工具條上的!按鈕或按快捷鍵“Ctrl+F5”。此時(shí)彈出ー個(gè)控制臺(tái)程序窗口,程序正確運(yùn)行,如圖1-18所示。按任意鍵后返回VisualC++6.0集成開發(fā)環(huán)境。圖!-18程序運(yùn)行結(jié)果“Execute”命令包含了編譯、連接和運(yùn)行。即對(duì)源程序直接執(zhí)行“Execute”操作,系統(tǒng)將首先編譯,編譯如果沒(méi)有錯(cuò)誤則接著進(jìn)行連接,生成.exe文件,然后再執(zhí)行ー次.exe文件。用C語(yǔ)言編寫的可執(zhí)行程序是DOS操作系統(tǒng)下的程序,所以在windows下用鼠標(biāo)左

鍵雙擊是運(yùn)行不了的,耍在C語(yǔ)言的開發(fā)環(huán)境(比如TurboC2.0,VisualC++6.0)或者DOS操作系統(tǒng)下才能運(yùn)行。在DOS操作系統(tǒng)下執(zhí)行這個(gè)文件的操作如下,讀者了解即可:.點(diǎn)擊windows任務(wù)欄上的開始按鈕,在菜單中選擇“運(yùn)行”.在運(yùn)行對(duì)話框中輸入“cmd”來(lái)打開DOS窗口,如圖1-19所示。運(yùn)行包區(qū))打開@):打開@):7語(yǔ)鍵入程序、文件夾、文檔或Internet資源的名//稱,Windows將為您打開它.圖1-19運(yùn)行對(duì)話框3,在DOS窗口下首先耍進(jìn)入到01.exe所在的文件夾,我們順序輸入以下命令:d:cdd:\1302020207李明、Ol'Debug01.exe這時(shí)會(huì)出現(xiàn)運(yù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. 本站所有資源如無(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)論