C語言程序設(shè)計(jì)-01概述_第1頁
C語言程序設(shè)計(jì)-01概述_第2頁
C語言程序設(shè)計(jì)-01概述_第3頁
C語言程序設(shè)計(jì)-01概述_第4頁
C語言程序設(shè)計(jì)-01概述_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章概述

1.1程序設(shè)計(jì)基本知識(shí)

1.2C語言的發(fā)展與特點(diǎn)

1.3C語言程序的基本結(jié)構(gòu)

1.4C語言程序的運(yùn)行

本章小結(jié)1.1程序設(shè)計(jì)基本知識(shí)

1.1.1程序與程序設(shè)計(jì)

程序是用某種計(jì)算機(jī)能理解并執(zhí)行的語言所描述的解決問題的方法和步驟。

一個(gè)計(jì)算機(jī)程序主要描述兩部分內(nèi)容:一是描述問題的每個(gè)對(duì)象和對(duì)象之間的關(guān)系,二是描述對(duì)這些對(duì)象作處理的處理規(guī)則。其中關(guān)于對(duì)象及對(duì)象之間的關(guān)系是數(shù)據(jù)結(jié)構(gòu)(DataStructure)的內(nèi)容,而處理規(guī)則是求解的算法(Algorithm)。

使用計(jì)算機(jī)解決實(shí)際問題,通常是先要對(duì)問題進(jìn)行分析并建立數(shù)學(xué)模型,然后考慮數(shù)據(jù)的組織方式和算法,并用某一種程序設(shè)計(jì)語言編寫程序,最后調(diào)試程序,使之運(yùn)行后能產(chǎn)生預(yù)期的結(jié)果。這個(gè)過程稱為程序設(shè)計(jì)(Programming)。

具體要經(jīng)過以下4個(gè)基本步驟:

(1)分析問題,確定數(shù)學(xué)模型或方法。

(2)設(shè)計(jì)算法,畫出流程圖。

(3)選擇編程工具,按算法編寫程序。

(4)調(diào)試程序,分析輸出結(jié)果。1.1.2算法及其描述

著名的瑞士計(jì)算機(jī)科學(xué)家N.Wirth教授曾提出:

算法+數(shù)據(jù)結(jié)構(gòu)=程序

算法是對(duì)數(shù)據(jù)運(yùn)算的描述,而數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)的組織存儲(chǔ)方式,包括數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)。程序設(shè)計(jì)的實(shí)質(zhì)是對(duì)實(shí)際問題選擇一種好的數(shù)據(jù)結(jié)構(gòu),并設(shè)計(jì)一個(gè)好的算法,而好的算法在很大程度上取決于描述實(shí)際問題的數(shù)據(jù)結(jié)構(gòu)。

1.算法的概念

計(jì)算機(jī)解決問題的方法和步驟,就是計(jì)算機(jī)解題的算法。要編寫解決問題的程序,首先應(yīng)設(shè)計(jì)算法,任何一個(gè)程序都依賴于特定的算法,有了算法,再來編寫程序是容易的事情。

下面舉兩個(gè)簡(jiǎn)單例子,以說明計(jì)算機(jī)解題的算法?!纠?.1】這一題的算法并不難,可寫成:

(1)從鍵盤輸入a,b的值。

(2)如果a<b,則x=a2+b2,y=(a+b)/(a-b),否則x=a2-b2,y=4/(a+b)。

(3)計(jì)算u的值。

(4)輸出u的值。

【例1.2】輸入10個(gè)數(shù),要求找出其中最大的數(shù)。

(1)輸入一個(gè)數(shù),存放在max中。

(2)用i來統(tǒng)計(jì)比較的次數(shù),其初值置1。

(3)若i≤9,執(zhí)行第(4)步,否則執(zhí)行第(8)步。

(4)輸入一個(gè)數(shù),放在x中。

(5)比較max和x中的數(shù),若x>max,則將x的值送給max,否則,max值不變。

(6)i增加1。

(7)返回到第(3)步。

(8)輸出max中的數(shù),此時(shí)max中的數(shù)就是10個(gè)數(shù)中最大的數(shù)。

2.算法的特性

從上面的例子中,可以概括出算法的5個(gè)特性:

(1)有窮性。算法中執(zhí)行的步驟總是有限次數(shù)的,不能無止境地執(zhí)行下去。

(2)確定性。算法中的每一步操作必須具有確切的含義,不能有二義性。

(3)有效性。算法中的每一步操作必須是可執(zhí)行的。

(4)要有數(shù)據(jù)輸入。

(5)要有結(jié)果輸出。

3.算法評(píng)價(jià)標(biāo)準(zhǔn)

目前,評(píng)價(jià)算法質(zhì)量有4個(gè)基本標(biāo)準(zhǔn):

(1)正確性。

(2)可讀性。

(3)通用性。

(4)高效率。

4.算法效率的度量

算法效率的度量分為時(shí)間度量和空間度量。

(1)時(shí)間度量

算法的執(zhí)行時(shí)間需要依據(jù)該算法編制的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間來度量。通常把算法中進(jìn)行簡(jiǎn)單操作的次數(shù)的多少稱為算法的時(shí)間復(fù)雜度,它是一個(gè)算法執(zhí)行時(shí)間的相對(duì)度量。

一般沒必要計(jì)算出算法的精確復(fù)雜度,只要大致計(jì)算出相應(yīng)的數(shù)量級(jí)即可,即隨著問題規(guī)模n的增大,算法的執(zhí)行時(shí)間的增長(zhǎng)率如何,這個(gè)時(shí)間增長(zhǎng)率稱為階。若算法的時(shí)間復(fù)雜度是n階的,記為T(n)=O(n)。

按數(shù)量級(jí)遞增順序,常見的幾種時(shí)間復(fù)雜度有O(1)、O(log2n)、O(n)、O(nlog2n)、O(n2)、O(n3)、O(2n)等。T(n)=O(1)表示算法執(zhí)行時(shí)間與問題規(guī)模無關(guān)。圖1-1給出了各種具有代表性的時(shí)間復(fù)雜度T(n)與問題規(guī)模n的變化關(guān)系。圖1-1時(shí)間復(fù)雜度函數(shù)曲線比較一個(gè)算法的時(shí)間復(fù)雜度除了與問題的規(guī)模有關(guān)外,還與輸入的數(shù)據(jù)的次序有關(guān),輸入的次序不同,算法的復(fù)雜度也不同,所以當(dāng)分析算法的復(fù)雜度時(shí),還要考慮到最好、最壞和平均復(fù)雜度。

(2)空間度量

通常把算法在執(zhí)行過程中臨時(shí)占用的存儲(chǔ)空間定義為算法的空間復(fù)雜度。

5.算法的描述

常用流程圖、結(jié)構(gòu)化流程圖和偽代碼等描述工具來描述算法。

(1)用流程圖描述算法

流程圖也稱為框圖,它是用一些幾何框圖、流程線和文字說明表示各種類型的操作。

【例1.3】用流程圖來描述例1.1和例1.2的算法。

流程圖分別如圖1-2和圖1-3所示。圖1-2用一般流程圖描述例1.1的算法圖1-3用一般流程圖描述例1.2的算法(2)用N-S圖描述算法

①程序的3種基本結(jié)構(gòu)

程序的3種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。

順序結(jié)構(gòu)是最簡(jiǎn)單的一種基本結(jié)構(gòu),依次順序執(zhí)行不同的程序塊,如圖1-4所示。其中A塊和B塊分別代表某些操作,先執(zhí)行A塊然后再執(zhí)行B塊。圖1-4順序結(jié)構(gòu)選擇結(jié)構(gòu)根據(jù)條件滿足或不滿足而去執(zhí)行不同的程序塊。在圖1-5中,當(dāng)條件P滿足時(shí)執(zhí)行A程序塊,否則執(zhí)行B程序塊。 圖1-5

選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)亦稱重復(fù)結(jié)構(gòu),是指重復(fù)執(zhí)行某些操作,重復(fù)執(zhí)行的部分稱為循環(huán)體。循環(huán)結(jié)構(gòu)分當(dāng)型循環(huán)和直到型循環(huán)兩種,分別如圖1-6(a)和圖1-6(b)所示。

(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)

圖1-6循環(huán)結(jié)構(gòu)兩種循環(huán)結(jié)構(gòu)的區(qū)別在于:當(dāng)型循環(huán)結(jié)構(gòu)是先判斷條件,后執(zhí)行循環(huán)體,而直到型循環(huán)結(jié)構(gòu)則是先執(zhí)行循環(huán)體,后判斷條件。直到型循環(huán)至少執(zhí)行一次循環(huán)體,而當(dāng)型循環(huán)有可能一次也不執(zhí)行循環(huán)體。3種基本程序結(jié)構(gòu)具有如下共同特點(diǎn):

只有一個(gè)入口。

只有一個(gè)出口。

結(jié)構(gòu)中無死語句,即結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行。

結(jié)構(gòu)中無死循環(huán)。

②結(jié)構(gòu)化流程圖(N-S圖)

3種基本結(jié)構(gòu)的N-S圖畫法規(guī)定如下:

順序結(jié)構(gòu)由若干個(gè)前后銜接的矩形塊順序組成,如圖1-7所示。先執(zhí)行A塊,然后執(zhí)行B塊。各塊中的內(nèi)容表示一條或若干條需要順序執(zhí)行的操作。圖1-7順序結(jié)構(gòu)的N-S圖

選擇結(jié)構(gòu)如圖1-8所示,在此結(jié)構(gòu)內(nèi)有兩個(gè)分支,它表示當(dāng)給定的條件滿足時(shí)執(zhí)行A塊的操作,條件不滿足時(shí),執(zhí)行B塊的操作。圖1-8選擇結(jié)構(gòu)的N-S圖當(dāng)型循環(huán)結(jié)構(gòu)如圖1-9(a)所示。先判斷條件是否滿足,若滿足就執(zhí)行A塊(循環(huán)體),然后再返回判斷條件是否滿足,如滿足再執(zhí)行A塊,如此循環(huán)下去,直到條件不滿足為止。

直到型循環(huán)結(jié)構(gòu)如圖1-9(b)所示。它先執(zhí)行A塊(循環(huán)體),然后判斷條件是否滿足,如不滿足則返回再執(zhí)行A塊,若滿足則不再繼續(xù)執(zhí)行循環(huán)體了。(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)

圖1-9循環(huán)結(jié)構(gòu)的N-S圖【例1.4】用N-S圖來描述例1.1和例1.2的算法。

N-S圖分別如圖1-10和圖1-11所示。圖1-10用N-S圖描述例1.1的算法圖1-11用N-S圖描述例1.2的算法(3)用偽代碼描述算法

偽代碼是介于自然語言和高級(jí)程序設(shè)計(jì)語言之間的一種文字和符號(hào)描述工具,它是結(jié)合某種高級(jí)語言一行一行、自上而下描述算法,書寫方便,格式緊湊。

【例1.5】計(jì)算2+4+6+…+100的和并輸出,設(shè)計(jì)算法并用C偽代碼描述。

0→sum

1→i

whilei≤100

{

ifi/2的余數(shù)為0則sum+i→sum

i+1→i

}

輸出sum

1.1.3程序設(shè)計(jì)方法

1.結(jié)構(gòu)化程序設(shè)計(jì)

結(jié)構(gòu)化程序設(shè)計(jì)采用自頂向下、逐步求精和模塊化的分析方法,從而有效地將一個(gè)較復(fù)雜的程序分解成許多易于控制和處理的子程序,便于開發(fā)和維護(hù)。

自頂向下是指對(duì)設(shè)計(jì)的系統(tǒng)要有一個(gè)全面的理解,從問題的全局入手,把一個(gè)復(fù)雜問題分解成若干個(gè)相互獨(dú)立的子問題,然后對(duì)每個(gè)子問題再作進(jìn)一步的分解,如此重復(fù),直到每個(gè)問題都容易解決為止。

逐步求精是指程序設(shè)計(jì)的過程是一個(gè)漸進(jìn)的過程,先把一個(gè)子問題用一個(gè)程序模塊來描述,再把每個(gè)模塊的功能逐步分解細(xì)化為一系列的具體步驟,以致能用某種程序設(shè)計(jì)語言的基本控制語句來實(shí)現(xiàn)。逐步求精總是和自頂向下結(jié)合使用,一般把逐步求精看作自頂向下設(shè)計(jì)的具體體現(xiàn)。

模塊化是結(jié)構(gòu)化程序設(shè)計(jì)的重要原則。所謂模塊化就是把大程序按照功能分為較小的程序。將一個(gè)龐大的模塊分解為若干個(gè)子模塊分別完成。然后用主控模塊控制和調(diào)用子模塊。這種程序的模塊化結(jié)構(gòu)如圖1-12所示。圖1-12程序的模塊化結(jié)構(gòu)

2.面向?qū)ο蟪绦蛟O(shè)計(jì)

面向?qū)ο蟪绦蛟O(shè)計(jì)則以對(duì)象作為程序的主體。對(duì)象是數(shù)據(jù)和操作的“封裝體”,封裝在對(duì)象內(nèi)的程序通過“消息”來驅(qū)動(dòng)運(yùn)行。在圖形用戶界面上,消息可通過鍵盤或鼠標(biāo)的某種操作(稱為事件)來傳遞。

(1)對(duì)象

對(duì)象(Object)是指現(xiàn)實(shí)世界中客觀存在的實(shí)體。每一個(gè)對(duì)象都有自己的屬性(包括自己特有的屬性和同類對(duì)象的共同屬性)。屬性反映對(duì)象自身狀態(tài)變化,表現(xiàn)為當(dāng)前的屬性值。

方法是用來描述對(duì)象動(dòng)態(tài)特征的一個(gè)操作序列。消息是用來請(qǐng)求對(duì)象執(zhí)行某一操作或回答某些信息的要求,實(shí)際上是一個(gè)對(duì)象對(duì)另一個(gè)對(duì)象的調(diào)用。

(2)類

類(Class)是具有相同屬性和方法的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供了統(tǒng)一的抽象描述。將相似的對(duì)象分組形成一個(gè)類,每個(gè)這樣的對(duì)象被稱為類的一個(gè)實(shí)例,一個(gè)類中的所有對(duì)象共享一個(gè)公共的定義。

(3)封裝

封裝(Encapsulation)是指把對(duì)象屬性和操作結(jié)合在一起,構(gòu)成獨(dú)立的單元,它的內(nèi)部信息對(duì)外界是隱蔽的,不允許外界直接存取對(duì)象的屬性,只能通過有限的接口與對(duì)象發(fā)生聯(lián)系。

(4)繼承

繼承(Inheritance)反映的是類與類之間抽象級(jí)別的不同,根據(jù)繼承與被繼承的關(guān)系,可分為基類和衍類,基類也稱為父類,衍類也稱為子類,正如“繼承”這個(gè)詞的字面含義一樣,子類將從父類那里獲得所有的屬性和方法,并且可以對(duì)這些獲得的屬性和方法加以改造,使之具有自己的特點(diǎn)。一個(gè)父類可以派生出若干子類,每個(gè)子類都可以通過繼承和改造獲得自己的一套屬性和方法,由此,父類表現(xiàn)出的是共性和一般性,子類表現(xiàn)出的是個(gè)性和特性,父類的抽象級(jí)別高于子類。

(5)多態(tài)性

不同的對(duì)象收到相同的消息產(chǎn)生不同的動(dòng)作,這種功能稱為多態(tài)性(Polymorphism)。將多態(tài)的概念應(yīng)用于面向?qū)ο蟪绦蛟O(shè)計(jì),增強(qiáng)了程序?qū)陀^世界的模擬性,使得對(duì)象程序具有了更好的可讀性,更易于理解,而且顯著提高了軟件的可復(fù)用性和可擴(kuò)充性。

1.2C語言的發(fā)展與特點(diǎn)

1.2.1C語言的發(fā)展歷史

C語言是在B語言的基礎(chǔ)上發(fā)展起來的,它的根源可以追溯到ALGOL60。

1960年出現(xiàn)的ALGOL60是一種面向問題的高級(jí)語言,它離硬件比較遠(yuǎn),不宜用來編寫系統(tǒng)軟件。

1963年英國(guó)劍橋大學(xué)推出了CPL(CombinedProgrammingLanguage)語言。

1967年英國(guó)劍橋大學(xué)的M.Richards對(duì)CPL語言作了簡(jiǎn)化,推出了BCPL(BasicCombinedProgrammingLanguage)語言。1970年美國(guó)貝爾實(shí)驗(yàn)室的K.Thompson以BCPL語言為基礎(chǔ),又作了進(jìn)一步簡(jiǎn)化,設(shè)計(jì)出了很簡(jiǎn)單而且很接近硬件的B語言(取BCPL的第一個(gè)字母),并用B語言編寫第一個(gè)UNIX操作系統(tǒng),在PDP-7機(jī)上實(shí)現(xiàn)。1971年在PDP-11/20機(jī)上實(shí)現(xiàn)了B語言,并寫了UNIX操作系統(tǒng)。

1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語言的基礎(chǔ)上設(shè)計(jì)出了C語言(取BCPL的第二個(gè)字母)。

1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C語言改寫(UNIX第5版,原來的UNIX操作系統(tǒng)是1969年由K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語言寫的)。

直到1975年UNIX第6版公布后,C語言的突出優(yōu)點(diǎn)才引起人們普遍注意。1977年出現(xiàn)了不依賴于具體機(jī)器的C語言編譯文本《可移植C語言編譯程序》,使C語言移植到其他機(jī)器時(shí)所做的工作大大簡(jiǎn)化了,這也推動(dòng)了UNIX操作系統(tǒng)迅速地在各種機(jī)器上實(shí)現(xiàn)。

現(xiàn)在C語言已風(fēng)靡全世界,成為世界上應(yīng)用最廣泛的程序設(shè)計(jì)語言之一。

以1978年發(fā)表的UNIX第7版中的C編譯程序?yàn)榛A(chǔ),B.W.Kernighan和D.M.Ritchie(合稱K&R)合著了影響深遠(yuǎn)的名著《TheCProgrammingLanguage》,這本書中介紹的C語言成為后來廣泛使用的C語言版本的基礎(chǔ),它被稱為標(biāo)準(zhǔn)C。1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(AmericanNationalStandardInstitute,ANSI)根據(jù)C語言問世以來各種版本對(duì)C的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC。ANSIC比原來的標(biāo)準(zhǔn)C有了很大的發(fā)展。K&R在1988年修改了他們的經(jīng)典著作《TheCProgrammingLanguage》,按照ANSIC的標(biāo)準(zhǔn)重新寫了該書。1987年,ANSIC又公布了新標(biāo)準(zhǔn)——87ANSIC。

1989年,ANSI又公布了一個(gè)新的C語言標(biāo)準(zhǔn)—ANSIX3.159-1989(簡(jiǎn)稱C89)。1990年,國(guó)際標(biāo)準(zhǔn)化組織(InternationalOrganizationforStandardization,ISO)接納C89為ISO國(guó)際標(biāo)準(zhǔn)(ISO/IEC9899:1990),因而有時(shí)也稱為C90。ISOC90與ANSIC89基本上是相同的。

1995年,ISO對(duì)C90作了一些修訂,稱為C95。1999年,ISO又對(duì)C語言標(biāo)準(zhǔn)進(jìn)行修訂,命名為ISO/IEC9899:1999,簡(jiǎn)稱C99規(guī)范。但到目前為止,各種C語言編譯系統(tǒng)還沒有完成對(duì)C99規(guī)范的完全支持?,F(xiàn)在的編譯器一般都支持C89,所以本書基本上以C89為基礎(chǔ)。

1.2.2C語言的特點(diǎn)

(1)語言簡(jiǎn)潔緊湊,使用方便靈活。

(2)運(yùn)算符豐富。

(3)數(shù)據(jù)類型豐富,具有現(xiàn)代語言的各種數(shù)據(jù)類型。

(4)具有結(jié)構(gòu)化的控制語句。

(5)語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。

(6)C語言兼有高級(jí)語言和低級(jí)語言的特點(diǎn)。

(7)生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。

(8)與匯編語言比,用C語言寫的程序可移植性好。

1.3C語言程序的基本結(jié)構(gòu)

1.3.1初識(shí)C語言程序

【例1.6】在屏幕上顯示一行文字“OneWorld,OneDream.”。

程序如下:

#include<stdio.h>

voidmain()

{

printf("OneWorld,OneDream.\n");

}

【例1.7】從鍵盤輸入一個(gè)數(shù)x,求x的平方根,然后輸出結(jié)果。

程序如下:

#include<stdio.h>

#include<math.h>

voidmain()

{

doublex,s;

printf("inputnumber:");

scanf("%lf",&x);

s=sqrt(x);

printf("Squarerootof%lfis%lf.\n",x,s);

}

【例1.8】由用戶輸入兩個(gè)整數(shù),程序執(zhí)行后輸出其中較大的數(shù)。

程序如下:

#include<stdio.h>

intmax(inta,intb);

/*函數(shù)聲明*/

voidmain()

/*主函數(shù)*/

{

intx,y,z;

/*變量定義*/

printf("inputtwonumbers:\n");

scanf("%d%d",&x,&y);

/*輸入x和y的值*/

z=max(x,y);

/*調(diào)用max函數(shù)*/

printf("maxima=%d\n",z);

/*輸出z的值*/

}

intmax(inta,intb)

/*定義max函數(shù)*/

{

if(a>b)returna;

elsereturnb; /*把結(jié)果返回主調(diào)函數(shù)*/

}1.3.2C語言程序的結(jié)構(gòu)特點(diǎn)與書寫規(guī)則

1.C語言程序的結(jié)構(gòu)特點(diǎn)

(1)一個(gè)C語言程序可以由一個(gè)或多個(gè)函數(shù)組成,且任何一個(gè)完整的C語言程序,都必須包含一個(gè)且只能包含一個(gè)名為main的函數(shù),程序總是從main函數(shù)開始執(zhí)行,而不管main函數(shù)處于程序的什么位置。因此函數(shù)是C語言程序的基本單位。

(2)函數(shù)體應(yīng)由花括號(hào)“{}”括起來,函數(shù)體一般包括變量定義部分和執(zhí)行部分,并且所有的變量定義語句應(yīng)放在一起,且位于函數(shù)體的開始。

(3)可以用“/*”和“*/”對(duì)C語言程序中的任何部分作注釋。注釋除了能對(duì)程序作解釋說明,以提高程序的可讀性外,還能用于程序調(diào)試。

(4)一個(gè)C語言程序通常由帶#號(hào)的編譯預(yù)處理命令開始,其作用是將由雙引號(hào)或尖括號(hào)括起來的文件名的內(nèi)容插入到該命令所在的位置處。

(5)每個(gè)語句和變量定義的后面都要有一個(gè)分號(hào),但在#include等預(yù)編譯命令后面不要加分號(hào),這一點(diǎn)初學(xué)者尤其要注意。

2.C語言程序的書寫規(guī)則

(1)一個(gè)語句占一行。從語法上講,C語言程序不存在程序行的概念。只要每個(gè)語句用分號(hào)作為結(jié)尾即可,多個(gè)語句可以寫在一行。但為了層次清楚,一般情況下,一行只寫一個(gè)語句。

(2)用花括號(hào)“{}”括起來的部分,通常表示了程序的某一層次結(jié)構(gòu)。同一層次結(jié)構(gòu)的語句上下對(duì)齊。

(3)低一層次的語句或說明可比高一層次的語句或說明縮進(jìn)若干格后書寫,以便使程序更加清晰,增加程序的可讀性。

1.4C語言程序的運(yùn)行

1.4.1C語言程序的運(yùn)行步驟與調(diào)試

1.C語言程序的運(yùn)行步驟

C語言程序在計(jì)算機(jī)上運(yùn)行時(shí)一般要經(jīng)過編輯、編譯、連接和運(yùn)行4個(gè)步驟,如圖1-13所示

圖1-13C語言程序的運(yùn)行步驟2.程序調(diào)試

程序中的錯(cuò)誤大致可分為3類:

(1)程序編譯時(shí)檢查出來的語法錯(cuò)誤。

(2)連接時(shí)出現(xiàn)的錯(cuò)誤。

(3)程序運(yùn)行過程中出現(xiàn)的錯(cuò)誤。

1.4.2VisualC++6.0集成開發(fā)環(huán)境

1.VisualC++6.0的安裝

將VisualC++6.0系統(tǒng)安裝盤放入光驅(qū),一般情況下系統(tǒng)能自動(dòng)運(yùn)行安裝程序,否則運(yùn)行安裝盤中的setup.exe文件。啟動(dòng)安裝程序后,根據(jù)屏幕提示依次回答有關(guān)內(nèi)容,便可完成系統(tǒng)安裝。

2.啟動(dòng)VisualC++6.0

啟動(dòng)VisualC++6.0的過程十分簡(jiǎn)單。常用的方法是,在Windows桌面選擇“開始”|“程序”|“MicrosoftVisualStudio6.0”|“MicrosoftVisualC++6.0”,即可啟動(dòng)VisualC++6.0,屏幕上將顯示如圖1-14所示的VisualC++6.0主窗口。

圖1-14VisualC++6.0主窗口VisualC++6.0主窗口有標(biāo)題欄、菜單欄和工具欄。標(biāo)題欄的內(nèi)容是MicrosoftVisualC++。菜單欄提供了編輯、運(yùn)行和調(diào)試VisualC++程序所需要的菜單命令。VisualC++6.0共有9個(gè)菜單項(xiàng),每個(gè)菜單項(xiàng)都有下拉菜單,單擊菜單項(xiàng)將彈出其下拉菜單,下拉菜單中的每個(gè)菜單命令實(shí)現(xiàn)不同的功能。工具欄是一些菜單命令的快捷按鈕。單擊工具欄上的按鈕,即可執(zhí)行該按鈕所代表的操作。

在VisualC++6.0主窗口的左側(cè)是項(xiàng)目工作區(qū)(Workspace)窗口、右側(cè)是程序編輯窗口、下方是輸出(Output)窗口。項(xiàng)目工作區(qū)窗口用于顯示所設(shè)定的工作區(qū)的信息,程序編輯窗口用于輸入和修改源程序,輸出窗口用于顯示程序編譯、運(yùn)行和調(diào)試過程中出現(xiàn)的狀態(tài)信息。

3.新建或打開C程序文件

在VisualC++6.0主窗口的菜單欄中選擇File菜單的New菜單項(xiàng),這時(shí)屏幕出現(xiàn)一個(gè)New對(duì)話框,如圖1-15所示。單擊對(duì)話框中的Files標(biāo)簽,選中C++SourceFile項(xiàng),表示要建立新的源程序。在對(duì)話框右半部分的Location文本框中輸入源程序文件的存儲(chǔ)路徑(如E:\cp),在File文本框中輸入源程序文件名(如test.c)。

圖1-15New對(duì)話框注意:

(1)源程序文件的存儲(chǔ)路徑一定要事先建好。即先要在E盤建立文件夾cp,才能輸入上面的存儲(chǔ)路徑E:\cp。

(2)輸入文件名時(shí),一定要指定擴(kuò)展名.c,否則系統(tǒng)將按C++擴(kuò)展名.cpp保存。

在單擊OK按鈕后,回到VisualC++6.0主窗口,可以在編輯窗口中輸入或修改源程序。由于完全是Windows界面,可以使用鼠標(biāo)操作,輸入和修改都十分方便。

如果源程序文件已經(jīng)存在,可選擇File菜單的Open菜單項(xiàng),并在查找范圍中找到正確的文件路徑,打開指定的程序文件。

文件修改后要進(jìn)行存盤操作。

4.程序的編譯

在主窗口菜單欄中選擇Build菜單的Compiletest.c菜單項(xiàng),如果是首次編譯,則屏幕出現(xiàn)一個(gè)對(duì)話框,如圖1-16所示。編譯命令要求建立一個(gè)項(xiàng)目工作區(qū),詢問用戶是否同意建立一個(gè)默認(rèn)的項(xiàng)目工作區(qū)。單擊“是”按鈕,表示同意由系統(tǒng)建立默認(rèn)的項(xiàng)目工作區(qū),然后開始編譯。

圖1-16編譯過程中屏幕出現(xiàn)的一個(gè)對(duì)話框

也可以不用菜單操作,而直接按【Ctrl+F7】快捷鍵來完成編譯。

在編譯過程中,編譯系統(tǒng)檢查源程序中有無語法錯(cuò),然后在輸出窗口顯示編譯信息。如果程序沒有語法錯(cuò)誤,則生成目標(biāo)文件test.obj,并將在輸出窗口中顯示(見圖1-17)如下信息:

圖1-17編譯正確提示信息

TEST.OBJ-0error(s),0warning(s)

表示沒有任何錯(cuò)誤。有時(shí)出現(xiàn)幾個(gè)警告性信息(warning),不影響程序執(zhí)行。假如有致命性錯(cuò)誤(error),則會(huì)指出錯(cuò)誤的位置和信息,雙擊某行出錯(cuò)信息,程序窗口中會(huì)指示對(duì)應(yīng)出錯(cuò)位置,根據(jù)信息窗口的提示分別予以修改。例如,將上面test.c中printf函數(shù)調(diào)用語句后面的分號(hào)去掉,重新編譯,錯(cuò)誤提示如圖1-18所示。此時(shí)要根據(jù)錯(cuò)誤信息分析提示錯(cuò)誤原因并找到位置,對(duì)源程序進(jìn)行修改。

圖1-18編譯出錯(cuò)提示信息

5.程序的連接

在主窗口菜單欄選擇Build菜單中的Buildtest.exe菜單項(xiàng),表示要求連接并生成一個(gè)可執(zhí)行文件test.exe。同樣,在輸出窗口會(huì)顯示連接信息,如果有錯(cuò),則要返回去修改源程序。

以上介紹的是分別進(jìn)行程序的編譯和連接,也可以在主窗口菜單欄選擇Build菜單中的Build菜單項(xiàng)(或按【F7】鍵)一次完成編譯與連接。

6.程序的執(zhí)行

在主窗口菜單欄選擇Build菜單中的Executetest.exe菜單項(xiàng)(或按【Ctrl+F5】快捷鍵)執(zhí)行程序。當(dāng)程序執(zhí)行后,VisualC++6.0將自動(dòng)彈出數(shù)據(jù)輸入輸出窗口,如圖1-19所示。第1行是執(zhí)行scanf函數(shù)時(shí),用戶從鍵盤輸入的r值,以回車鍵結(jié)束,第2行是printf函數(shù)的輸出結(jié)果,按任意鍵將關(guān)閉該窗口圖1-19數(shù)據(jù)輸入輸出窗口

7.關(guān)閉程序工作區(qū)

若要執(zhí)行第2個(gè)程序,則必須關(guān)閉前一個(gè)程序的工作區(qū),然后通過新的編譯連接,產(chǎn)生第2個(gè)程序的工作區(qū),否則運(yùn)行的將一直是前一個(gè)程序。File菜單提供關(guān)閉程序工作區(qū)功能。執(zhí)行CloseWorkspace菜單功能,然后在如圖1-20所示的對(duì)話框中單擊“否”按鈕,將關(guān)閉程序工作區(qū)。如果單擊“是”按鈕將同時(shí)關(guān)閉源程序編輯窗口。

圖1-20關(guān)閉程序工作區(qū)提示對(duì)話框

本章小結(jié)

1.程序設(shè)計(jì)反映了利用計(jì)算機(jī)解決實(shí)際問題的全過程,具體要經(jīng)過以下4個(gè)基本步驟:分析問題,確定數(shù)學(xué)模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論