版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章半導(dǎo)體元件1.1程序設(shè)計(jì)語言
1.2程序設(shè)計(jì)
1.3C語言概述習(xí)題1
本章學(xué)習(xí)要求:
1.了解程序設(shè)計(jì)的語言分類,掌握算法的概念、算法描述方法、流程圖的三種基本結(jié)構(gòu)、結(jié)構(gòu)化流程圖的畫法以及結(jié)構(gòu)化程序設(shè)計(jì)的方法。
2.了解C語言的發(fā)展及應(yīng)用現(xiàn)狀,認(rèn)識(shí)C程序的結(jié)構(gòu),掌握C語言的特點(diǎn)及其編譯,熟練運(yùn)用C程序的上機(jī)步驟。
人們要利用計(jì)算機(jī)解決實(shí)際問題,比如數(shù)值計(jì)算問題就需要人與計(jì)算機(jī)之間的交流,這種交流能使計(jì)算機(jī)按照人的意愿完成一系列的操作,實(shí)現(xiàn)這種交流的一種橋梁就是計(jì)算機(jī)語言,又稱為程序設(shè)計(jì)語言。由程序設(shè)計(jì)語言編寫,用來使計(jì)算機(jī)完成一定操作任務(wù)的“文章”稱為程序,編寫程序的工作稱為程序設(shè)計(jì)。
隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,程序設(shè)計(jì)語言經(jīng)歷了由低級(jí)到高級(jí)的多個(gè)發(fā)展階段,程序設(shè)計(jì)方法也得到了不斷的發(fā)展和提高。
程序設(shè)計(jì)語言是人們根據(jù)計(jì)算機(jī)的特點(diǎn)以及描述問題的需要設(shè)計(jì)出來的。隨著計(jì)算機(jī)技術(shù)的發(fā)展,不同風(fēng)格的語言不斷出現(xiàn),逐步形成了計(jì)算機(jī)語言體系。
計(jì)算機(jī)語言按其發(fā)展過程一般分為機(jī)器語言、匯編語言和高級(jí)語言。1.1程序設(shè)計(jì)語言1.1.1機(jī)器語言
機(jī)器語言是最底層的計(jì)算機(jī)語言。用機(jī)器語言編寫的程序,計(jì)算機(jī)硬件可以直接識(shí)別。在用機(jī)器語言編寫的程序中,每一條機(jī)器指令都是二進(jìn)制形式的指令代碼,即由一連串的二進(jìn)制0和1組合起來的編碼,每一條指令規(guī)定了計(jì)算機(jī)要完成的某個(gè)操作。在指令代碼中,一般包括操作碼和地址碼,其中操作碼告訴計(jì)算機(jī)進(jìn)行何種操作,即“干什么”;地址碼則指出被操作的對(duì)象存放在哪里。機(jī)器語言程序都是由二進(jìn)制0和1組成的系列,程序編寫起來非常繁瑣,可以用“難學(xué)、難記、難寫、難檢查、難調(diào)試”來概括,尤其是用機(jī)器語言編寫的程序完全依賴于機(jī)器,程序的可移植性差。但是,由于用機(jī)器語言編寫的程序直接針對(duì)計(jì)算機(jī)硬件,因此它的執(zhí)行效率比較高,能充分發(fā)揮出計(jì)算機(jī)的速度性能,這也是機(jī)器語言的優(yōu)點(diǎn)。1.1.2匯編語言
為了克服機(jī)器語言的缺點(diǎn),人們對(duì)機(jī)器語言進(jìn)行了改進(jìn),用一些容易記憶和辨別的有意義的符號(hào)代替機(jī)器指令,如:用指令助記符來代替機(jī)器語言指令代碼中的操作碼,用地址符號(hào)來代替地址碼。用這樣一些符號(hào)代替機(jī)器指令所產(chǎn)生的語言就稱為匯編語言,也稱為符號(hào)語言。
例如:為了計(jì)算表達(dá)式“9
+
8”的值,用匯編語言編寫的程序與用機(jī)器語言(8086CPU的指令系統(tǒng))編寫的程序如表1.1所示。
表1.1匯編語言程序與機(jī)器語言程序舉例從表1.1中可以看出,在該匯編語言程序中,以MOV(MOVE的縮寫)代表“數(shù)據(jù)傳送”,ADD代表“加”,HLT
(HALT的縮寫)代表“停止”等。這些符號(hào)含義明確,容易記憶,因而又稱為助記符。由這些助記符編寫的程序,可讀性好,容易查錯(cuò),修改方便;但計(jì)算機(jī)硬件不能直接識(shí)別,必須由一種專門的翻譯程序?qū)R編語言程序翻譯成機(jī)器語言程序后,計(jì)算機(jī)才能識(shí)別并執(zhí)行。這種翻譯的過程稱為“匯編”,負(fù)責(zé)翻譯的程序稱為匯編程序,翻譯出的程序稱為目標(biāo)程序,而翻譯前的程序稱為源程序。匯編程序的作用如圖1.1所示。
圖1.1匯編程序的作用匯編語言也是一種面向機(jī)器的語言,但比機(jī)器語言易讀、易改,執(zhí)行速度與機(jī)器語言相當(dāng),比高級(jí)語言快很多,因此直到現(xiàn)在仍在實(shí)時(shí)控制、實(shí)時(shí)處理領(lǐng)域中廣泛應(yīng)用。1.1.3高級(jí)語言
機(jī)器語言和匯編語言都是面向機(jī)器的語言,一般稱為低級(jí)語言。低級(jí)語言對(duì)機(jī)器的依賴性很大,而且與自然語言相距甚遠(yuǎn),不符合人們的表達(dá)習(xí)慣。
為了從根本上改變語言體系,必須從兩方面入手:一方面是力求接近于自然語言;另一方面是力求脫離具體機(jī)器,使語言與指令系統(tǒng)無關(guān),達(dá)到程序通用的目的,這就要求程序的可移植性好,一個(gè)可移植性好的程序,應(yīng)用在各種計(jì)算機(jī)和操作環(huán)境中都能運(yùn)行,并得到同樣的結(jié)果。因此,從20世紀(jì)50年代中期開始逐步發(fā)展出面向問題的程序設(shè)計(jì)語言,稱為高級(jí)語言。高級(jí)語言與具體的計(jì)算機(jī)硬件無關(guān),其表達(dá)方式接近于被描述的問題,易為人們接受和調(diào)試,使編程效率得到大幅度的提高。高級(jí)語言的顯著特點(diǎn)是獨(dú)立于具體的計(jì)算機(jī)硬件,通用性和可移植性好。例如前面計(jì)算“9
+
8”的問題,如果使用BASIC、C語言或PASCAL語言來編程,就變得十分簡(jiǎn)單,而且易于理解,如表1.2所示。
表1.2高級(jí)語言程序舉例在使用高級(jí)語言設(shè)計(jì)程序時(shí),可以有兩種設(shè)計(jì)方法:一種是面向過程的程序設(shè)計(jì)方法,另一種是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。例如:早期出現(xiàn)的BASIC、PASCAL、FORTRAN、COBOL、C等高級(jí)語言,采用的是面向過程的程序設(shè)計(jì)方法;而較新的VisualBasic、VisualC++、VisualFoxpro、Delphi、Java等采用的是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。
必須指出,用任何一種高級(jí)語言編寫的程序(源程序),都要通過編譯程序翻譯成機(jī)器語言程序(稱為目標(biāo)程序)后計(jì)算機(jī)才能執(zhí)行,如C語言程序;或者通過解釋程序邊解釋邊執(zhí)行,如BASIC語言程序。
從程序設(shè)計(jì)語言的發(fā)展過程和上述的例子可以看出,程序設(shè)計(jì)語言越低級(jí),就越靠近計(jì)算機(jī)硬件,其描述的程序就越復(fù)雜,其中的每一條指令(或語句)也就越難懂。反之,程序設(shè)計(jì)語言越高級(jí),就越靠近人的表達(dá)與思維方式,其描述的程序就越簡(jiǎn)單,其中的每一條語句也就越容易理解,也越接近人的自然語言。
程序是由程序設(shè)計(jì)語言編寫的,用于完成特定的任務(wù)。計(jì)算機(jī)之所以能夠自動(dòng)地、有條不紊地工作,正是因?yàn)橛?jì)算機(jī)能夠按照程序所規(guī)定的步驟一步一步地執(zhí)行相應(yīng)的操作。什么是程序設(shè)計(jì)?對(duì)于初學(xué)計(jì)算機(jī)的人來說,往往簡(jiǎn)單地把它理解為編制一個(gè)程序。其實(shí)不然,至少是不全面的。實(shí)際上,程序設(shè)計(jì)包括多方面的內(nèi)容,而具體編制程序只是其中的一個(gè)方面。著名的計(jì)算機(jī)科學(xué)家沃思(NikiklausWirth)提出:
程序
=
數(shù)據(jù)結(jié)構(gòu)
+
算法1.2程序設(shè)計(jì)
實(shí)際上隨著程序設(shè)計(jì)技術(shù)的發(fā)展,一個(gè)程序除了有以上兩個(gè)主要要素之外,還應(yīng)涉及到程序設(shè)計(jì)方法和語言工具等。因此,可以這樣表示:
程序
=
算法
+
數(shù)據(jù)結(jié)構(gòu)
+
程序設(shè)計(jì)方法
+
語言工具和環(huán)境
也就是說,以上四個(gè)方面是一個(gè)程序設(shè)計(jì)人員所應(yīng)具備的知識(shí)。在設(shè)計(jì)一個(gè)程序時(shí)要綜合運(yùn)用這幾方面的知識(shí)。在這四個(gè)方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對(duì)象,語言是工具,編程需要采用合適的方法。1.2.1算法
算法是解決“做什么”和“怎么做”的問題。算法體現(xiàn)在程序中就是程序操作語句。
1.算法及其特性
1)算法
所謂算法,就是解決某類問題的方法。確切地說,就是對(duì)某一類特定的問題,給出解決該問題的一系列(有窮的)操作,而每一操作都有其確定的意義,并在有限時(shí)間內(nèi)可以計(jì)算出結(jié)果。一個(gè)算法有多個(gè)輸入量,它是問題給出的初始數(shù)據(jù),經(jīng)過算法的實(shí)現(xiàn),它有一個(gè)或多個(gè)輸出量,這就是算法對(duì)輸入運(yùn)算的結(jié)果,即問題的解答。本書中所關(guān)心的只限于計(jì)算機(jī)算法,即計(jì)算機(jī)能執(zhí)行的算法。例如:讓計(jì)算機(jī)計(jì)算1+2+3+4,或?qū)?00個(gè)學(xué)生的C語言成績按高低分排序,這些計(jì)算機(jī)可以做到,而讓計(jì)算機(jī)去執(zhí)行諸如“買一份報(bào)紙”或“炒青菜”,則是做不到的(至少目前還做不到,除非以后人工智能達(dá)到一定程度才行)。
計(jì)算機(jī)算法可分為兩大類:數(shù)值算法和非數(shù)值算法。數(shù)值算法是為了解決求數(shù)值解的問題,例如求方程的根、求方程組的解和求定積分等,數(shù)值算法的研究將在“數(shù)值計(jì)算方法”(或稱“計(jì)算方法”)這門課中解決。非數(shù)值算法能解決的問題非常廣泛,最常見的是用于事務(wù)管理領(lǐng)域,如財(cái)務(wù)管理、人事管理、行車調(diào)度管理等,一部分非數(shù)值算法(如排序、查找等)將在“數(shù)據(jù)結(jié)構(gòu)”這門課中得到體現(xiàn)。
2)算法的特點(diǎn)
算法具有如下特點(diǎn):
(1)確定性。算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。也就是說,每一個(gè)操作步驟都有確切的含義,無二義性。
(2)有窮性。一個(gè)算法必須在有限步驟后結(jié)束,要么計(jì)算出結(jié)果,要么非正常結(jié)束(說明算法有問題)??傊?,算法的步驟不能是無限的。
(3)可執(zhí)行性。算法中的每一個(gè)步驟對(duì)計(jì)算機(jī)來說都應(yīng)當(dāng)是可以有效執(zhí)行的,并得到確定的結(jié)果。
(4)輸入。輸入是執(zhí)行算法時(shí)需要從外界取得必要的信息。一個(gè)算法可以沒有輸入,也可以有一個(gè)或多個(gè)輸入。
(5)輸出。算法是用來解問題的,使用算法就是要得到問題的“解”,即輸出。因此,一個(gè)算法必須得到結(jié)果,也就是算法的輸出。一個(gè)算法必須有一個(gè)或多個(gè)輸出,如果沒有輸出,算法就沒有意義,等于問題沒有得到解決。
3)算法的評(píng)價(jià)
如何評(píng)價(jià)一個(gè)算法呢?對(duì)算法的要求有:必須是正確的,必須能高效率執(zhí)行,即占用內(nèi)存空間少,所需運(yùn)行時(shí)間短。于是,對(duì)算法的評(píng)價(jià)可以從兩個(gè)方面進(jìn)行:①執(zhí)行算法所需的時(shí)間長短;②執(zhí)行算法所需的計(jì)算機(jī)內(nèi)存容量大小。
要想確切評(píng)價(jià)一個(gè)算法,必須采用算法分析方法。算法分析的標(biāo)準(zhǔn)是算法的時(shí)間復(fù)雜度和空間復(fù)雜度。這些概念可以參閱數(shù)據(jù)結(jié)構(gòu)相關(guān)資料,這里不再一一贅述。
2.算法的描述
一個(gè)算法設(shè)計(jì)好后,可以采用不同的表示形式,以便交流和閱讀。常用描述算法的方法有自然語言、偽代碼、流程圖。
1)自然語言
自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語、英語或其他語言。用自然語言描述算法具有通俗易懂的優(yōu)點(diǎn),但缺點(diǎn)也比較多,體現(xiàn)在以下幾個(gè)方面:
(1)比較繁瑣。往往要用一段繁瑣的文字才能說清楚程序所要進(jìn)行的操作。
(2)容易出現(xiàn)“歧義性”。自然語言往往要根據(jù)上下文才能正確判斷出其含義,不太嚴(yán)謹(jǐn)。
(3)用自然語言容易描述順序執(zhí)行的步驟,但如果算法中包含判斷和轉(zhuǎn)移情況時(shí),用自然語言就不那么直觀清晰了。
例1.1
將兩個(gè)變量x和y的值互換。
問題分析:兩個(gè)人交換座位,只要各自去坐對(duì)方的座位就行了,這是直接交換。一瓶酒和一瓶醋互換,就不能直接從一個(gè)瓶子倒入另一個(gè)瓶子,必須借助一個(gè)空瓶子,先把酒倒入空瓶,再把醋倒入已倒空的酒瓶,最后把酒倒入已倒空的醋瓶,這樣才能實(shí)現(xiàn)酒和醋的交換,這是間接交換。
在計(jì)算機(jī)中交換兩個(gè)變量的值不能用兩個(gè)變量直接交換的方法,而必須采用間接交換的方法。因此,這里需設(shè)一個(gè)中間變量z(相當(dāng)于空瓶子)。
用自然語言描述如下:
步驟1,將x值存入中間變量z中:x→z。
步驟2,將y值存入變量x中:y→x。
步驟3,將中間變量z的值存入y中:z→y。
2)偽代碼
偽代碼(pseudocode)一般介于自然語言與程序設(shè)計(jì)語言之間,它具有自然語言靈活的特點(diǎn),同時(shí)又接近于程序設(shè)計(jì)語言的描述。但需指出,用偽代碼所描述的算法,一般不能直接作為程序來執(zhí)行,最后還需轉(zhuǎn)換成用某種程序設(shè)計(jì)語言所描述的程序。偽代碼與程序設(shè)計(jì)語言最大的區(qū)別就在于,偽代碼描述比較自由,不像程序設(shè)計(jì)語言那樣受語法的約束,只要使得人們能理解就行,而不必考慮計(jì)算機(jī)處理時(shí)所要遵循的規(guī)定或其他一些細(xì)節(jié)。例如,在例1.1中,將兩個(gè)變量x和y的值互換,可以用偽代碼描述如下:
BEGIN
xz
yx
zy
END
在偽代碼描述算法中,關(guān)鍵字可以使用英文,也可以用中文,還可以使用一些符號(hào)來表示,并無固定的、嚴(yán)格的語法規(guī)則,只要將意思表達(dá)清楚,并且書寫的格式要清晰易讀就可以了,總之,在偽代碼描述算法時(shí)只需遵循便于書寫和閱讀的原則即可。
3)流程圖
流程圖是用一些圖框、流程線以及文字說明來表示算法。用流程圖來表示算法,更加直觀、形象、容易理解。
(1)傳統(tǒng)流程圖。美國國家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI(AmericanNationalStandardInstitute)規(guī)定了一些常用的流程圖符號(hào),各種流程圖符號(hào)表示如下:
例1.2
判斷一個(gè)數(shù)n是否是素?cái)?shù)的算法用流程圖表示,如圖1.2所示。
這種傳統(tǒng)流程圖雖然形象直觀,但對(duì)流程線的使用沒有限制,流程隨意轉(zhuǎn)移,甚至可能變得毫無規(guī)律,難以閱讀和維護(hù)。
圖1.2判斷n是否是素?cái)?shù)
(2)結(jié)構(gòu)化流程圖。傳統(tǒng)流程圖中流程線的用法不受限制,可能會(huì)導(dǎo)致流程圖毫無規(guī)律。針對(duì)以上問題,1966年,Bohra和Jacopini提出了三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。用這三種基本結(jié)構(gòu)作為表示一個(gè)良好算法的基本單元,可以改進(jìn)傳統(tǒng)流程圖,使傳統(tǒng)流程圖結(jié)構(gòu)化,從而大大提高了流程圖的規(guī)律性,也便于人們閱讀和維護(hù)。
①順序結(jié)構(gòu)。順序結(jié)構(gòu)是最簡(jiǎn)單的一種基本結(jié)構(gòu),計(jì)算機(jī)在執(zhí)行順序結(jié)構(gòu)的程序時(shí),按語句出現(xiàn)的先后次序依次執(zhí)行。如圖1.3(a)所示,計(jì)算機(jī)將先執(zhí)行A操作,再執(zhí)行B操作。
圖1.3順序結(jié)構(gòu)與選擇結(jié)構(gòu)流程圖②選擇結(jié)構(gòu)。當(dāng)程序在執(zhí)行過程中需要根據(jù)某種條件的成立與否有選擇地執(zhí)行一些操作時(shí),就需要使用選擇結(jié)構(gòu)。圖1.3(b)表示了選擇結(jié)構(gòu)的流程圖。這種結(jié)構(gòu)包含一個(gè)判斷框,根據(jù)給定的條件是否滿足,從兩個(gè)分支路徑中選擇執(zhí)行其中的一個(gè)。從圖1.3(b)中可以看出,無論執(zhí)行哪一個(gè)分支路徑都將通過匯合點(diǎn)b,b點(diǎn)是選擇結(jié)構(gòu)的出口點(diǎn)。
③循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)用于規(guī)定重復(fù)執(zhí)行一些相同或相似的操作。要使計(jì)算機(jī)能夠正確地完成循環(huán)操作,就必須使循環(huán)在執(zhí)行有限次數(shù)后退出,因此,循環(huán)的執(zhí)行要在一定的條件下進(jìn)行。根據(jù)對(duì)條件的判斷位置不同,可以有兩類循環(huán)結(jié)構(gòu):當(dāng)型循環(huán)和直到型循環(huán)。當(dāng)型循環(huán)結(jié)構(gòu)如圖1.4(a)所示。當(dāng)程序運(yùn)行到a點(diǎn)時(shí),從a點(diǎn)進(jìn)入當(dāng)型循環(huán)。首先判斷條件是否成立,如果條件成立,則執(zhí)行A操作;執(zhí)行完A操作后,再判斷條件是否成立,若仍然成立,再執(zhí)行A操作。如此反復(fù)執(zhí)行,直到某次條件不成立時(shí)為止,這時(shí)不再執(zhí)行A操作,而是從b點(diǎn)退出循環(huán)。顯然,在進(jìn)入當(dāng)型循環(huán)時(shí),如果一開始條件就不成立,則A操作一次都不執(zhí)行。直到型循環(huán)結(jié)構(gòu)如圖1.4(b)所示。當(dāng)程序運(yùn)行到a點(diǎn)時(shí),從a點(diǎn)進(jìn)入直到型循環(huán)。首先執(zhí)行A操作,然后判斷條件是否成立,如果條件成立,則繼續(xù)執(zhí)行A操作;再判斷條件是否成立,若仍然成立,再執(zhí)行A操作。如此反復(fù)執(zhí)行,直到某次條件不成立時(shí)為止,這時(shí)不再執(zhí)行A操作,而是從b點(diǎn)退出循環(huán)。顯然,在進(jìn)入直到型循環(huán)時(shí),A操作至少執(zhí)行一次。
圖1.4循環(huán)結(jié)構(gòu)流程圖以上三種基本結(jié)構(gòu)有以下共同的特點(diǎn):
●只有一個(gè)入口。
●只有一個(gè)出口。
●每一個(gè)基本結(jié)構(gòu)中的每一部分都有機(jī)會(huì)被執(zhí)行到。也就是說,對(duì)每一個(gè)框來說,都應(yīng)當(dāng)有一條從入口到出口的路徑通過它。
●結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(即無終止的循環(huán))。
已經(jīng)證明,由以上三種基本結(jié)構(gòu)組成的算法,可以解決任何復(fù)雜的問題,并且由基本結(jié)構(gòu)構(gòu)成的算法屬于“結(jié)構(gòu)化”的算法,不存在無規(guī)律的轉(zhuǎn)移。
(3)
N-S流程圖。1973年,美國學(xué)者I.Nassi和B.Shneiderman提出了另一種流程圖形式。在這種流程圖中完全去掉了流程線,全部算法寫在一個(gè)矩形框內(nèi),在框內(nèi)還可以包含其他的框,該流程圖稱為N-S流程圖。這種流程圖用以下三種基本元素框來表示程序設(shè)計(jì)中的三種基本結(jié)構(gòu)。
①順序結(jié)構(gòu)。如圖1.5(a)所示,A和B兩個(gè)框組成一個(gè)順序結(jié)構(gòu)。A框或B框可以是一個(gè)簡(jiǎn)單的操作(如讀入數(shù)據(jù)或輸出等),也可以是三種基本結(jié)構(gòu)之一。
②選擇結(jié)構(gòu)。如圖1.5(b)所示,當(dāng)條件P成立時(shí)執(zhí)行A框操作,P不成立時(shí)則執(zhí)行B框操作。這里A和B不可能同時(shí)都操作,這是兩個(gè)分支的選擇結(jié)構(gòu)。
圖1.5順序結(jié)構(gòu)與選擇結(jié)構(gòu)③循環(huán)結(jié)構(gòu)。當(dāng)型循環(huán)如圖1.6(a)所示,當(dāng)條件P1成立時(shí)反復(fù)執(zhí)行A框中的操作,直到P1條件不成立時(shí)為止。直到型循環(huán)如圖1.6(b)所示,反復(fù)執(zhí)行A框中的操作,直到P1條件不成立時(shí)為止。當(dāng)型循環(huán)與直到型循環(huán)的區(qū)別:當(dāng)型循環(huán)先判斷條件是否成立,再執(zhí)行循環(huán)中的A框;而直到型循環(huán)先執(zhí)行一次A框,再判斷條件是否成立;直到型循環(huán)最少會(huì)執(zhí)行一次A框,而當(dāng)型循環(huán)中如果第一次判斷時(shí)條件就不成立,則A框一次都不執(zhí)行。
例1.1算法的流程可以表示為圖1.7所示的形式。
圖1.6循環(huán)結(jié)構(gòu)
例1.3
求最大公約數(shù)的算法用N-S流程圖描述,如圖1.8所示。
N-S流程圖具有以下明顯的優(yōu)點(diǎn):
●功能明確,即圖中的每個(gè)矩形框所代表的特定作用域可以明確地分辨出來。
●能夠保證程序整體是結(jié)構(gòu)化的,它不允許任意轉(zhuǎn)移和設(shè)置出口,因此可以保證單入口、單出口的程序結(jié)構(gòu)。
●很容易實(shí)現(xiàn)和表示嵌套結(jié)構(gòu),這為較復(fù)雜的程序設(shè)計(jì)提供了方便的途徑。
但由于N-S流程圖僅使用三種基礎(chǔ)結(jié)構(gòu)形成流程,因此在某些程序設(shè)計(jì)時(shí)可能會(huì)比較繁瑣,有一定的困難。
圖1.7交換變量x和y的值
圖1.8求m、n的最大公約數(shù)1.2.2結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)方法要求將程序的結(jié)構(gòu)規(guī)定為順序、選擇和循環(huán)三種基本結(jié)構(gòu)。一個(gè)結(jié)構(gòu)化程序就是用高級(jí)語言表示的結(jié)構(gòu)化算法。用三種基本結(jié)構(gòu)組成的程序必然是結(jié)構(gòu)化的程序,這種程序便于編寫、閱讀、修改和維護(hù),并且會(huì)減少程序出錯(cuò)的機(jī)會(huì),從而提高程序的可靠性,保證程序的質(zhì)量。
結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。怎樣才能得到一個(gè)結(jié)構(gòu)化的程序呢?具體說,采取以下方法可以保證得到結(jié)構(gòu)化的程序。
1.自頂向下、逐步細(xì)化的設(shè)計(jì)過程
自頂向下、逐步細(xì)化的設(shè)計(jì)過程包括以下兩個(gè)方面:
(1)將一個(gè)復(fù)雜問題的解法分解和細(xì)化成由若干模塊組成的層次結(jié)構(gòu)。
(2)將一個(gè)模塊的功能逐步分解細(xì)化為一系列的處理步驟,直到細(xì)化為某種程序設(shè)計(jì)語言的語句或某種機(jī)器指令。自頂向下、逐步細(xì)化的設(shè)計(jì)過程具有以下兩個(gè)優(yōu)點(diǎn):
(1)自頂向下、逐步細(xì)化的方法符合人們解決復(fù)雜問題的普遍規(guī)律,可以顯著提高程序設(shè)計(jì)的效率。
(2)用先全局后局部、先整體后細(xì)節(jié)、先抽象后具體的逐步細(xì)化過程,設(shè)計(jì)出的程序具有清晰的層次結(jié)構(gòu),容易閱讀和理解。
正如我們要寫好一篇文章那樣,首先要訂出總綱,初步擬訂好文章分為哪幾部分,然后考慮每一部分中應(yīng)包括哪幾方面內(nèi)容。這樣一直細(xì)分下去,最后確定出章、節(jié)、段的目錄提綱。這種先確定總綱,再細(xì)分確定詳細(xì)提綱,最后才開始動(dòng)手寫文章的方法同樣適用于程序設(shè)計(jì)。
2.模塊化設(shè)計(jì)
模塊化設(shè)計(jì)是指把一個(gè)大程序按人們能理解的大小規(guī)模進(jìn)行分解。由于經(jīng)過分解后的各模塊比較小,因此容易實(shí)現(xiàn),也容易調(diào)試。
在進(jìn)行模塊化程序設(shè)計(jì)時(shí),應(yīng)重點(diǎn)考慮以下兩個(gè)問題:
(1)按什么原則劃分模塊?
(2)如何組織好各模塊之間的聯(lián)系?
1)按功能劃分模塊
劃分模塊的基本原則是使每個(gè)模塊都易于理解。按照人類思維的特點(diǎn),按功能來劃分模塊最為自然。在按功能劃分模塊時(shí),要求各模塊的功能盡量單一,各模塊之間的聯(lián)系盡量少。滿足這些要求的模塊有以下幾個(gè)優(yōu)點(diǎn):
(1)模塊間的接口關(guān)系比較簡(jiǎn)單,并且每個(gè)模塊都是人的智力所能及的。因此,這種程序的可讀性和可理解性都比較好。
(2)各模塊的功能比較單一,當(dāng)需要修改某一功能時(shí),一般只涉及到一個(gè)模塊,不會(huì)影響到其他模塊。因此,這種程序的可修改性和可維護(hù)性比較好。
(3)人們脫離程序的上下文也能單獨(dú)驗(yàn)證一個(gè)模塊的正確性,便于對(duì)程序進(jìn)行模塊化測(cè)試。因此,這種程序的可驗(yàn)證性比較好。
(4)在擴(kuò)充系統(tǒng)或建立新系統(tǒng)時(shí),可以充分利用已有的一些模塊,用積木式的方法進(jìn)行開發(fā)。因此,這種程序的可重組性比較好。
在C程序設(shè)計(jì)語言中,函數(shù)是實(shí)現(xiàn)程序模塊化的有力工具。
2)按層次組織模塊
結(jié)構(gòu)化程序設(shè)計(jì)方法要求在設(shè)計(jì)程序時(shí)按層次結(jié)構(gòu)組織各模塊。
在按層次組織模塊時(shí),一般上層模塊只指出“做什么”,只有在最底層的模塊中才精確地描述“怎么做”。例如,在圖1.9所示的層次結(jié)構(gòu)中,主模塊只需要指出總?cè)蝿?wù)就可以了,而子模塊1、子模塊2與子模塊3分別指出各自的子任務(wù),子模塊4、子模塊5與子模塊6才精確描述“怎么做”。
圖1.9按層次組織的模塊調(diào)用結(jié)構(gòu)圖
3.結(jié)構(gòu)化編碼
結(jié)構(gòu)化編碼是指在設(shè)計(jì)好一個(gè)結(jié)構(gòu)化的算法之后,用高級(jí)語言正確地實(shí)現(xiàn)三種基本結(jié)構(gòu)。如果所用的語言是結(jié)構(gòu)化的語言(如C、PASCAL等),則直接用與三種基本結(jié)構(gòu)對(duì)應(yīng)的語句,進(jìn)行結(jié)構(gòu)化編程就不困難了。1.2.3程序設(shè)計(jì)的步驟
1.編程概念
編程,又稱程序設(shè)計(jì),就是為了借助于計(jì)算機(jī)來達(dá)到某一目的或解決某個(gè)問題,而使用某種程序設(shè)計(jì)語言編寫程序代碼,并最終得到結(jié)果的過程。
計(jì)算機(jī)雖然功能十分強(qiáng)大,可以用于上網(wǎng)、娛樂、數(shù)據(jù)管理等等,但是沒有程序,它就等于是一堆廢鐵,不會(huì)理會(huì)我們對(duì)它下達(dá)的“命令”。于是,只有通過一種方式——程序,我們才能和計(jì)算機(jī)之間進(jìn)行溝通。程序就是指令的集合,它告訴計(jì)算機(jī)如何執(zhí)行特殊的任務(wù)。我們要通過程序的方式來讓計(jì)算機(jī)為我們“效勞”,而這個(gè)過程就是我們“編”出來的。編程可以使用某一種程序設(shè)計(jì)語言來實(shí)現(xiàn),按照這種語言的語法來描述計(jì)算機(jī)需要做的事情。C語言就是眾多編程語言中的一種。
2.程序設(shè)計(jì)的步驟
程序設(shè)計(jì)是一種解決問題的方式。一般來說,解決問題的過程可分為三步:第一步是分析問題,設(shè)計(jì)一種解決方案;第二步是用程序語言嚴(yán)格描述這個(gè)解決方案;第三步是在計(jì)算機(jī)上調(diào)試這個(gè)程序,運(yùn)行它,看它能否解決問題。如果在第三步發(fā)現(xiàn)錯(cuò)誤,那么就需要仔細(xì)分析錯(cuò)誤原因,弄清問題后退到前面的步驟去糾正錯(cuò)誤。如果發(fā)現(xiàn)程序有問題,就要修改它,然后重新在計(jì)算機(jī)上調(diào)試運(yùn)行;如果發(fā)現(xiàn)求解方案有誤,就要修改方案,重新編寫程序。程序設(shè)計(jì)過程見圖1.10。
圖1.10程序設(shè)計(jì)過程
(1)分析問題:對(duì)任務(wù)的要求、要給出什么結(jié)果、提供什么資源、有無解決的可能等進(jìn)行分析。
(2)編寫程序:選擇一種計(jì)算機(jī)語言,根據(jù)前一步的算法編寫程序。
(3)運(yùn)行、調(diào)試程序:上機(jī)運(yùn)行程序,用各種不同的數(shù)據(jù)測(cè)試在不同的情況下能否得到正確的結(jié)果。
(4)整理文檔:寫出一份技術(shù)報(bào)告或程序說明書,其中應(yīng)包括題目、任務(wù)要求、原始數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、算法、程序清單、運(yùn)行結(jié)果、所用計(jì)算機(jī)系統(tǒng)配置、使用的編程方法及工具、操作說明等,以便作為資料交流或保存。程序設(shè)計(jì)是計(jì)算機(jī)應(yīng)用人員的基本功。一個(gè)有一定經(jīng)驗(yàn)和水平的計(jì)算機(jī)應(yīng)用人員不應(yīng)當(dāng)只滿足于能使用某些現(xiàn)成的軟件,利用菜單和鼠標(biāo)去選擇現(xiàn)成的方案,還應(yīng)當(dāng)具備能夠根據(jù)工作的需要進(jìn)行必要的開發(fā)工作的能力。C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,是學(xué)習(xí)程序設(shè)計(jì)的計(jì)算機(jī)入門語言,它能很好地訓(xùn)練計(jì)算機(jī)應(yīng)用人員關(guān)于程序設(shè)計(jì)的思想。在后面的章節(jié)中將詳細(xì)介紹C語言的使用。
1.3.1C語言的發(fā)展與應(yīng)用現(xiàn)狀
C語言是國際上廣泛流行的一種計(jì)算機(jī)高級(jí)語言,它自從20世紀(jì)70年代誕生以來已經(jīng)使用了30多年,它既可以用來編寫系統(tǒng)軟件,也可以用來編寫應(yīng)用軟件。1.3C?語?言?概?述
1.C語言的發(fā)展史
C語言可以說是伴隨著對(duì)操作系統(tǒng)的改寫而產(chǎn)生的,早期的操作系統(tǒng)等系統(tǒng)軟件主要是用匯編語言編寫的(特別是當(dāng)時(shí)使用較多的UNIX操作系統(tǒng))。因?yàn)閰R編語言過分依賴計(jì)算機(jī)硬件,而且程序的可讀性和可移植性比較差,所以人們就想找到既具有匯編語言某些特性(如直接對(duì)硬件地址進(jìn)行操作),又有一般高級(jí)語言特性(如可讀性和可移植性好)的語言,C語言就是在這種情況下產(chǎn)生的。
1)
C語言是從B語言發(fā)展來的
(1)
ALGOL60語言:1960年出現(xiàn)的ALGOL60語言是一種面向問題的高級(jí)語言,它距硬件比較遠(yuǎn),不宜用來編寫系統(tǒng)軟件。
(2)
CPL語言:1963年英國的劍橋大學(xué)推出了CPL(CombinedProgrammingLanguage)語言。CPL語言在ALGOL60的基礎(chǔ)上更接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)。
(3)
BCPL語言:1967年英國劍橋大學(xué)的MatinRichards對(duì)CPL語言進(jìn)行簡(jiǎn)化得到BCPL(BasicCombinedProgrammingLanguage)語言。
(4)
B語言:1970年美國貝爾實(shí)驗(yàn)室的KenThompson以BCPL語言為基礎(chǔ),進(jìn)一步簡(jiǎn)化,設(shè)計(jì)出簡(jiǎn)單而又接近硬件的B語言(取BCPL的第一個(gè)字母)。但B語言過于簡(jiǎn)單,功能有限。
(5)
C語言:1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語言的基礎(chǔ)上設(shè)計(jì)出C語言(取BCPL的第二個(gè)字母)。C語言保持了BCPL和B語言的優(yōu)點(diǎn)(如接近硬件、精練),又克服了它們的缺點(diǎn)(如過于簡(jiǎn)單、數(shù)據(jù)無類型等)。1973年,K.Thompson和D.M.Richie兩人合作把UNIX的90%以上用C改寫,即UNIX第5版。
2)
C語言的使用及其標(biāo)準(zhǔn)化
1978年以UNIX第7版中的C編譯程序?yàn)榛A(chǔ),BrianW.kernighan和DennisM.Ritchie(合稱K&R)合著了影響深遠(yuǎn)的名著《TheCProgrammingLanguage》,這本書介紹的C語言成為了以后各種版本的基礎(chǔ),稱為標(biāo)準(zhǔn)C。
1983年,美國國家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C的發(fā)展變化和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC。1988年K&R按ANSIC標(biāo)準(zhǔn)重新修改了《TheCProgrammingLanguage》一書(這本書國內(nèi)可以買到影印版和中譯版,有興趣的讀者可以查閱一下)。
1987年,ANSI又公布了新標(biāo)準(zhǔn)——87ANSIC。這個(gè)標(biāo)準(zhǔn)在1990年時(shí)被國際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)所接受,成為以后流行的C語言的基礎(chǔ)。
2.?C語言的應(yīng)用現(xiàn)狀
C語言作為一門結(jié)構(gòu)化程序設(shè)計(jì)語言,在許多方面得到應(yīng)用,主要有:
(1)
C語言在底層編程中的應(yīng)用。C語言由于比較貼近硬件,因此,在單片機(jī)編程、通信接口編程、自動(dòng)化控制方面的編程、手機(jī)/POS機(jī)/銀行自動(dòng)存取款機(jī)等方面的編程中使用較多。包括現(xiàn)在比較流行的嵌入式程序開發(fā)(如DSP)也更多地使用的是C語言。
(2)C語言在圖形編程中的應(yīng)用。C語言應(yīng)用中很大部分是在圖形編程上,如圖形化的游戲開發(fā)、圖形界面的設(shè)計(jì)等。
(3)
C語言在普通信息系統(tǒng)方面的應(yīng)用。在數(shù)據(jù)庫技術(shù)普及之前,使用C語言編寫信息系統(tǒng)比比皆是,因?yàn)镃語言是一種很好的結(jié)構(gòu)化程序設(shè)計(jì)語言,并且C語言中有豐富的數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)體類型等,為數(shù)據(jù)的處理提供了很好的工具。
以上列出了C語言的幾個(gè)主要應(yīng)用方面,當(dāng)然,C語言在其他很多方面都有應(yīng)用。1.3.2C語言的特點(diǎn)
C語言從產(chǎn)生到現(xiàn)在已經(jīng)30多年了,如今還在使用,它之所以具有如此強(qiáng)大的生命力,是因?yàn)樗胁煌?或優(yōu)于)其他語言的特點(diǎn),C語言的特點(diǎn)如下:
(1)
C語言能實(shí)現(xiàn)匯編語言的大部分功能。C語言可以直接對(duì)硬件進(jìn)行操作,能進(jìn)行位(bit)操作。因此,C語言既有高級(jí)語言的功能,又有低級(jí)語言的許多功能,可以用來編寫系統(tǒng)軟件,又可以用來編寫應(yīng)用軟件。
(2)用C語言編寫的程序可移植性好。當(dāng)然,C程序可移植性好主要是和匯編語言相比較而言的。用標(biāo)準(zhǔn)C語言編寫的程序幾乎不做修改就能用于各種型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)。
(3)
C程序生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。與其他高級(jí)語言相比(如PASCAL、BASIC等),C程序的代碼效率和質(zhì)量更高,但仍比匯編程序生成的目標(biāo)代碼效率低10%~20%。
(4)
C語言具有結(jié)構(gòu)化的控制語句,是一種結(jié)構(gòu)化程序設(shè)計(jì)語言。C語言中有三種基本結(jié)構(gòu)的語句,如if…else語句、while語句、switch語句、for語句,并且用函數(shù)作為程序的模塊單位,實(shí)現(xiàn)模塊化程序設(shè)計(jì)。
(5)語言簡(jiǎn)潔、緊湊,使用方便、靈活。C語言中一共只有32個(gè)關(guān)鍵字,9種控制語句,程序書寫形式自由(如一行可以寫多個(gè)語句,一個(gè)語句也可以分成幾行寫),壓縮了一切不必要的成分,減少了代碼中關(guān)鍵字所占用的存儲(chǔ)空間。
(6)運(yùn)算符豐富。C語言中的運(yùn)算符共有34種,包括算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、位運(yùn)算符、自增自減運(yùn)算符等,并且將括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理,從而使C的運(yùn)算類型極其豐富,表達(dá)式類型多樣化。
(7)數(shù)據(jù)結(jié)構(gòu)豐富。C語言中數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、枚舉類型等,還可以自定義類型??梢杂脕韺?shí)現(xiàn)各種復(fù)雜數(shù)據(jù)結(jié)構(gòu),如鏈表、樹、棧等的運(yùn)算。
(8)
C語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。這一特點(diǎn)對(duì)于一個(gè)不熟練的程序員來說,不是一個(gè)好事。比如:在C語言中對(duì)數(shù)組下標(biāo)越界不做檢查(因數(shù)組下標(biāo)從0開始,經(jīng)常造成錯(cuò)誤),而是由程序編寫者自己保證程序的正確。再如:在C語言中整型數(shù)據(jù)與字符型數(shù)據(jù)可以通用。1.3.3C語言程序的組成
C程序到底是什么樣子的呢?下面我們通過例子來認(rèn)識(shí)C程序的特性以及基本組成。
例1.4
編寫一個(gè)程序,其功能是顯示字符串“WelcometoCworld!”。其C程序如下:
#include<stdio.h>/*將標(biāo)準(zhǔn)輸入輸出頭文件包含 到程 序中來*/
main()
{
printf(“WelcometoCworld!”); /*輸出字符串 "WelcometoC world!"*/
}
這是一個(gè)最簡(jiǎn)單而完整的C語言程序,如果輸入計(jì)算機(jī),并經(jīng)過編譯和連接后,運(yùn)行結(jié)果是在屏幕上顯示如下字符串:
WelcometoCworld!
例1.5
將變量x與y的值互換。
#include<stdio.h> /*將標(biāo)準(zhǔn)輸入輸出頭文件包含到程序中來*/
main()
{
intx,y,z; /*定義三個(gè)整型變量*/
scanf(“%d,%d”,&x,&y); /*從鍵盤輸入x和y的值*/
z=x; /*將變量x的值放到變量z中*/
x=y; /*將變量y的值放到x中*/
y=z; /*再將臨時(shí)存放在z中的原x的值放 到y(tǒng)中*/
printf(“x=%d,y=%d\n”,x,y); /*將交換后x和y的值分別 輸出*/
}
程序運(yùn)行情況如下:
8,5↙(輸入8和5分別給變量x和y)
x=5,y=8(輸出交換后的結(jié)果)
當(dāng)輸入8和5時(shí),程序輸出:x=5,y=8,將x與y的值交換了。
例1.6
求a、b兩個(gè)實(shí)數(shù)中的最大數(shù),并輸出。
#include<stdio.h> /*將標(biāo)準(zhǔn)輸入輸出頭文件包含到程 序中來*/
floatmax(floatx,floaty) /*max函數(shù)的頭部,最前面的float表 示返回值的類型,x和y是形參,類 型都為float*/
{
floatm; /*定義變量m*/
if(x>y)m=x; /*如果x大于y,則將x的值賦給m*/
elsem=y; /*如果x小于等于y,則將y的值賦給m*/
return(m); /*將m的值返回(即帶回主函數(shù))*/
}
main() /*主函數(shù)*/
{floata,b,c; /*定義三個(gè)實(shí)型變量*/
scanf(“%f,%f”,&a,&b); /*輸入變量a和b的值*/
c=max(a,b); /*調(diào)用max函數(shù),并將返回的值賦 給變量c*/
printf("Max=%f",c); /*輸出變量c的值*/
}
本例子包括兩個(gè)函數(shù):主函數(shù)main和自定義函數(shù)max。max函數(shù)完成的功能:將x和y中較大者的值賦給變量m,并將m的值作為返回值返回調(diào)用函數(shù)main。main函數(shù)主要是輸入兩個(gè)實(shí)數(shù),并調(diào)用max函數(shù),同時(shí)將max函數(shù)返回的值賦給變量c,最后輸出變量c的值。
程序運(yùn)行情況如下:
71.5,62.9↙ (輸入71.5和62.9分別給變量a和b)
Max=71.500000(輸出變量c的值)
通過以上幾個(gè)例子,我們可以看出:
(1)一個(gè)完整的C程序可以由多個(gè)函數(shù)組成,但必須包含一個(gè)且只能包含一個(gè)名為main的函數(shù)(主函數(shù)),可以有若干個(gè)(零個(gè)或多個(gè))其他函數(shù)。程序在執(zhí)行時(shí)總是從main函數(shù)開始,并且到main函數(shù)結(jié)束。main函數(shù)可以放在程序中的不同位置,但不能放到其他函數(shù)體內(nèi)。
C語言程序是以函數(shù)作為模塊單位的。在上述例子中main和max都是函數(shù)名,函數(shù)名后的括號(hào)中可以指出一些與外界交換的參數(shù)(形參),如例1.6中自定義函數(shù)max的參數(shù)x和y。
在函數(shù)中輸入用到的是scanf(),輸出用到的是printf(),這兩個(gè)也是函數(shù),分別是用來輸入/輸出的函數(shù)。它們是C語言的庫函數(shù)(標(biāo)準(zhǔn)函數(shù)),這類函數(shù)在頭文件中已經(jīng)定義,即在程序最前面的#include<stdio.h>就是將標(biāo)準(zhǔn)輸入/輸出庫函數(shù)的定義部分包含到C程序中來。
(2)在一個(gè)C函數(shù)模塊中,由左右花括號(hào){}括起來的部分是函數(shù)體,其中的語句系統(tǒng)實(shí)現(xiàn)函數(shù)的預(yù)定功能。在C語言中用{}括起來的還有復(fù)合語句。
floatmax(floatx,floaty)
返回值類型函數(shù)名形參定義
{
floatm;
if(x>y)m=x;
elsem=y;
return(m);
}函數(shù)頭函數(shù)體
(3)
C語言中的每個(gè)語句必須以“;”(分號(hào))結(jié)束,可以說分號(hào)是C語言語句的標(biāo)志。C語言書寫比較自由,一行可以寫多個(gè)語句(每個(gè)語句以“;”結(jié)束),一個(gè)C語句也可以寫在多行上(注意:作為一個(gè)獨(dú)立參數(shù)不能拆開成幾行,如例1.4的pritnf()函數(shù)中的字符串“WelcometoCworld!”就是一個(gè)獨(dú)立參數(shù))。
(4)
C程序中的“/*……*/”是用作注釋的。注釋是用來給讀程序的人看的,在程序編譯中并不編譯。注釋可以在一行(如例1.3和例1.4中的注釋),也可以分成多行(如例1.6中的第二個(gè)注釋),但必須“/*”和“*/”成對(duì)使用,在它們之間的內(nèi)容是注釋內(nèi)容。C程序中的注釋可以提高程序的可讀性,編程中每三行語句有一行注釋是一個(gè)很好的習(xí)慣。
(5)
C語言中沒有輸入/輸出語句。C程序中的輸入/輸出是由標(biāo)準(zhǔn)函數(shù)來完成的,如:scanf()函數(shù)是用來輸入的,而printf()函數(shù)是用來輸出的。1.3.4C語言的編譯
1.?C程序上機(jī)調(diào)試過程
C語言是一種編譯型的高級(jí)程序設(shè)計(jì)語言(BASIC是解釋型的),開發(fā)一個(gè)C程序要經(jīng)過編輯、編譯、連接和運(yùn)行四個(gè)步驟,才能得到運(yùn)行結(jié)果。
1)編輯
編輯是指使用文本編輯工具軟件輸入和修改C語言的源程序,最后以文本文件的形式存放在磁盤上,文件名由用戶自己選定,擴(kuò)展名一般為“.c”,例如:sample1.c,sort.c等。
2)編譯
編譯是將C源程序翻譯成二進(jìn)制目標(biāo)程序。編譯是由編譯程序來完成的,編譯程序?qū)υ闯绦蜃詣?dòng)進(jìn)行句法和語法檢查,當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),就將錯(cuò)誤的類型和程序中出錯(cuò)的位置顯示出來,以幫助用戶修改源程序。如果未發(fā)現(xiàn)句法和語法錯(cuò)誤,就自動(dòng)形成目標(biāo)代碼并對(duì)目標(biāo)代碼進(jìn)行優(yōu)化后生成目標(biāo)文件。在TurboC2.0環(huán)境下,目標(biāo)文件的擴(kuò)展名為“.obj”;其他編譯環(huán)境下,目標(biāo)文件的擴(kuò)展名由系統(tǒng)自動(dòng)確定。
3)連接
連接是用連接程序?qū)⒕幾g過的目標(biāo)程序和程序中用到的庫函數(shù)連接裝配在一起,形成可執(zhí)行的程序代碼(二進(jìn)制代碼)。可執(zhí)行文件的擴(kuò)展名一般為“.exe”。
4)運(yùn)行
運(yùn)行是將可執(zhí)行文件調(diào)入內(nèi)存執(zhí)行,以獲得程序的執(zhí)行結(jié)果。通常,在DOS操作系統(tǒng)提示符下直接鍵入可執(zhí)行文件名,或在Windows操作系統(tǒng)下用鼠標(biāo)雙擊可執(zhí)行文件圖標(biāo)即可。
上面的四個(gè)步驟見圖1.11,帶箭頭的實(shí)線表示操作流程,帶箭頭的虛線表示操作所需要的條件和產(chǎn)生的結(jié)果。
圖1.11C程序上機(jī)調(diào)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉儲(chǔ)培訓(xùn)管理制度
- 強(qiáng)化崗前培訓(xùn)制度
- 宣傳委員培訓(xùn)制度
- 培訓(xùn)中心黨支部制度
- 2025湖南長沙融發(fā)集團(tuán)招聘8人筆試參考題庫附帶答案詳解(3卷)
- 2025湖北荊州市興質(zhì)市政園林有限公司招聘綜合及考察筆試歷年參考題庫附帶答案詳解
- 外科培訓(xùn)管理制度
- 外出培訓(xùn)服務(wù)管理制度
- 2025浙江臺(tái)州市經(jīng)濟(jì)建設(shè)規(guī)劃院有限公司招聘6人筆試歷年參考題庫附帶答案詳解
- 院前急救崗前培訓(xùn)制度
- 甲狀腺的中醫(yī)護(hù)理
- 商住樓項(xiàng)目總體規(guī)劃方案
- 2022儲(chǔ)能系統(tǒng)在電網(wǎng)中典型應(yīng)用
- 互聯(lián)網(wǎng)+物流平臺(tái)項(xiàng)目創(chuàng)辦商業(yè)計(jì)劃書(完整版)
- 家庭學(xué)校社會(huì)協(xié)同育人課件
- IABP主動(dòng)脈球囊反搏課件
- 基于python-的車牌識(shí)別
- 《LTCC生產(chǎn)流程》課件
- 7KW交流交流充電樁說明書
- 喪假國家規(guī)定
- 唯物史觀指導(dǎo)初中歷史教學(xué)
評(píng)論
0/150
提交評(píng)論