版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章C語言與程序概述C語言是現(xiàn)在世界上應(yīng)用最廣泛,最受歡迎的計(jì)算機(jī)語言之一。在本章的學(xué)習(xí)中需要掌握以下知識點(diǎn):數(shù)據(jù)結(jié)構(gòu)的概念和作用;算法的概念和作用;結(jié)構(gòu)化程序設(shè)計(jì)的方法;三種基本結(jié)構(gòu);程序流程圖和N-S流程圖。第1章C語言與程序概述C語言是現(xiàn)在世界上應(yīng)用最廣泛,最受1.1C語言歷史C語言已經(jīng)經(jīng)歷了幾十年的發(fā)展。在學(xué)習(xí)C語言之前,應(yīng)該要先了解C語言是如何誕生的,它的歷史是怎么樣的。本節(jié)將介紹C言語的誕生、C語言的標(biāo)準(zhǔn)化過程及其重要特點(diǎn),最后還將展示一個標(biāo)準(zhǔn)的“Hello,world!”的程序。1.1C語言歷史C語言已經(jīng)經(jīng)歷了幾十年的發(fā)展。在1.1.1C語言的誕生C語言是由著名的計(jì)算機(jī)科學(xué)家DennisRitchie創(chuàng)造的,其歷史可以追溯到ALGOL60。ALGOL60,也稱為A語言,是純粹的面向描述計(jì)算過程的語言。C語言的直接前身B語言就是從BCPL發(fā)展而來的。在1972~1973年間,DenisRitchie改進(jìn)了B語言,為其添加了數(shù)據(jù)類型的概念,并將原來的解釋程序改寫為可以在直接生成機(jī)器代碼的編譯程序,并將其命名為C?,F(xiàn)在,C語言已成為用途最為廣泛的計(jì)算機(jī)高級語言,不僅可以用于編寫系統(tǒng)軟件,還可以用于構(gòu)建各個領(lǐng)域的應(yīng)用軟件。1.1.1C語言的誕生C語言是由著名的計(jì)算機(jī)科學(xué)家Den1.1.2C語言的標(biāo)準(zhǔn)化C語言發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了3個標(biāo)準(zhǔn),分別為K&RC、C89和C99。1.K&RC2.C89或ANSIC3.C991.1.2C語言的標(biāo)準(zhǔn)化C語言發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了3個標(biāo)1.1.3C語言的特點(diǎn)C語言之所以得到如此迅速的發(fā)展,并成為應(yīng)用最廣泛、最受歡迎的計(jì)算機(jī)語言之一,主要是因?yàn)樗Z法靈活、使用方便,并能實(shí)現(xiàn)高效而強(qiáng)大的功能。C語言具有以下特點(diǎn):1.使用方便,功能強(qiáng)大2.便于結(jié)構(gòu)化編程3.C語言是中級語言4.執(zhí)行效率高5.C程序可移植性好1.1.3C語言的特點(diǎn)C語言之所以得到如此迅速的發(fā)展,并1.1.4Hello,world!作為結(jié)構(gòu)性語言,C程序的結(jié)構(gòu)十分嚴(yán)整。下面來認(rèn)識一下第一個C程序,這是十分著名的“Hello,world!”程序。這個程序經(jīng)常被用作介紹各種語言的第一個程序,其功能是向屏幕打印一個字符串“Hello,world!”。1.1.4Hello,world!作為結(jié)構(gòu)性語言,C程1.2數(shù)據(jù)結(jié)構(gòu)與算法一般來說,程序由數(shù)據(jù)結(jié)構(gòu)和算法兩個部分組成。數(shù)據(jù)結(jié)構(gòu)是一個一個的實(shí)體,而算法是將它們聯(lián)系在一起的各種手段。學(xué)習(xí)程序首先要了解數(shù)據(jù)結(jié)構(gòu)和算法的概念,以及它們之間的關(guān)系。由于篇幅有限,本小節(jié)將只是簡要地介紹數(shù)據(jù)結(jié)構(gòu)和算法的一些基本知識,要想深入了解數(shù)據(jù)結(jié)構(gòu)和算法,還需要讀者去學(xué)習(xí)其他專門的材料。1.2數(shù)據(jù)結(jié)構(gòu)與算法一般來說,程序由數(shù)據(jù)結(jié)構(gòu)和算法兩個部1.3程序設(shè)計(jì)如本章1.1.3小結(jié)所述,C語言是一門便于結(jié)構(gòu)化編程的語言。結(jié)構(gòu)化編程,也就是結(jié)構(gòu)化程序設(shè)計(jì)。那么,什么是結(jié)構(gòu)化程序設(shè)計(jì)呢?結(jié)構(gòu)化程序設(shè)計(jì)有什么好處?通過本小節(jié)的學(xué)習(xí),讀者可以得到這些問題的答案,同時會為學(xué)習(xí)以結(jié)構(gòu)化程序設(shè)計(jì)為指導(dǎo)思想的C語言程序設(shè)計(jì)打下一個良好的鋪墊。1.3程序設(shè)計(jì)如本章1.1.3小結(jié)所述,C語言是一門便于1.3.1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)是荷蘭科學(xué)家E.W.Dijikstra在1965年提出的,其主要思想是通過分解復(fù)雜問題為若干簡單問題的方式降低程序的復(fù)雜性。它的主要觀點(diǎn)是采用自頂向下、逐步細(xì)化的程序設(shè)計(jì)方法,同時嚴(yán)格使用三種基本控制結(jié)構(gòu)構(gòu)造程序。三種基本控制結(jié)構(gòu)是指順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。所有的程序結(jié)構(gòu)都可以分解為這三個基本控制結(jié)構(gòu)。1.3.1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)是荷蘭科學(xué)家E.W1.3.2三種基本結(jié)構(gòu)按照操作的執(zhí)行順序,程序可以分為三類基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1996年,計(jì)算機(jī)科學(xué)家Bohm和Jacopini證明:任何簡單或復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種結(jié)構(gòu)組合而成。所以,這三種結(jié)構(gòu)就被稱為程序設(shè)計(jì)的三種基本結(jié)構(gòu),也是結(jié)構(gòu)化程序設(shè)計(jì)建議采用的結(jié)構(gòu)。1.3.2三種基本結(jié)構(gòu)按照操作的執(zhí)行順序,程序可以分為三1.順序結(jié)構(gòu)在順序結(jié)構(gòu)的程序里,各操作是按照它們出現(xiàn)的先后順序執(zhí)行的。如下圖所示,操作1和操作2按自上而下地順序執(zhí)行。這是最簡單的一種基本結(jié)構(gòu)。這個結(jié)構(gòu)里只有一個入口點(diǎn)A和一個出口點(diǎn)B,其特點(diǎn)是從入口點(diǎn)A開始,按順序執(zhí)行所有操作,直至出口點(diǎn)B處。事實(shí)上,所有的程序的總流程總是一個順序結(jié)構(gòu)。1.順序結(jié)構(gòu)在順序結(jié)構(gòu)的程序里,各操作是按照它們出現(xiàn)的先后順2.選擇結(jié)構(gòu)選擇結(jié)構(gòu),也叫分支結(jié)構(gòu)。選擇結(jié)構(gòu)的程序里存在一些分支,程序通過對一些條件的判斷選擇執(zhí)行的分支。按照分支數(shù),選擇結(jié)構(gòu)又可以分為單選擇、雙選擇和多選擇三種形式。2.選擇結(jié)構(gòu)選擇結(jié)構(gòu),也叫分支結(jié)構(gòu)。選擇結(jié)構(gòu)的程序里存在一些
雙選擇結(jié)構(gòu)是最常見的,如下圖所示,結(jié)構(gòu)中有兩個分支,必須要執(zhí)行其中一支;如果滿足條件則執(zhí)行操作1,否則執(zhí)行操作2。2.選擇結(jié)構(gòu)雙選擇結(jié)構(gòu)是最常見的,如下圖所示,結(jié)構(gòu)中有兩2.選擇結(jié)構(gòu)
單選擇結(jié)構(gòu)如下圖所示,當(dāng)雙選擇結(jié)構(gòu)中某個分支為空時,就稱為單選擇結(jié)構(gòu)。2.選擇結(jié)構(gòu)
單選擇結(jié)構(gòu)如下圖所示,當(dāng)雙選擇結(jié)構(gòu)中某個分支為
多選擇結(jié)構(gòu)如下圖所示,有多個分支共存,程序根據(jù)Type值來選擇其中之一執(zhí)行。2.選擇結(jié)構(gòu)
多選擇結(jié)構(gòu)如下圖所示,有多個分支共存,程序根據(jù)Type值3.循環(huán)結(jié)構(gòu)在循環(huán)結(jié)構(gòu)中,是反復(fù)地執(zhí)行一系列操作,直到某條件為假(或?yàn)檎妫r才終止循環(huán)。按照判斷條件出現(xiàn)的位置,可以分為while循環(huán)結(jié)構(gòu)和until循環(huán)結(jié)構(gòu)。3.循環(huán)結(jié)構(gòu)在循環(huán)結(jié)構(gòu)中,是反復(fù)地執(zhí)行一系列操作,直到某條件
while循環(huán)結(jié)構(gòu)中,先判斷條件,如下圖所示。如果A不大于1,則直接退出循環(huán)體到達(dá)流程出口處;如果滿足A大于1,執(zhí)行操作1,并且在操作1結(jié)束后返回到循環(huán)入口,重新判斷條件;如果A還是大于1,再次執(zhí)行操作1,再返回結(jié)構(gòu)入口……,如此反復(fù)。3.循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)中,先判斷條件,如下until型循環(huán)結(jié)構(gòu)中,在結(jié)構(gòu)入口處先執(zhí)行循環(huán)體,然后再判斷條件,如下圖所示。當(dāng)程序執(zhí)行完操作1后,判斷A是否大于1。如果是,則再執(zhí)行操作1;然后再次判斷A是否大于1;如果結(jié)果仍然為是,則再次執(zhí)行操作1……3.循環(huán)結(jié)構(gòu)until型循環(huán)結(jié)構(gòu)中,在結(jié)構(gòu)入口處先執(zhí)行循環(huán)體,然后再判斷3.循環(huán)結(jié)構(gòu)
在這兩種結(jié)構(gòu)中,操作1都可能被反復(fù)執(zhí)行,直到A的值不大于1,才結(jié)束程序。同樣,循環(huán)型結(jié)構(gòu)也只有一個入口點(diǎn)A和一個出口點(diǎn)B。合理地使用這三種基本結(jié)構(gòu),可以組合成復(fù)雜的高級結(jié)構(gòu);而所有的復(fù)雜結(jié)構(gòu)都可以分解為這三種基本結(jié)構(gòu)。3.循環(huán)結(jié)構(gòu)
在這兩種結(jié)構(gòu)中,操作1都可能被反復(fù)執(zhí)行,直到A1.3.3算法描述方法當(dāng)算法過程比較復(fù)雜時,單靠自然語言來描述算法將顯得十分困難,讓人難以準(zhǔn)確理解。此時,需要借助其他的算法描述手段,主要有:算法語言,有偽代碼、各種程序設(shè)計(jì)語言、計(jì)算機(jī)語言等。圖形描述,如流程圖和N-S圖,圖的描述應(yīng)與算法語言的描述對應(yīng);形式語言,用數(shù)學(xué)的方法,可以避免自然語言的二義性。1.3.3算法描述方法當(dāng)算法過程比較復(fù)雜時,單靠自然語言1.偽代碼偽代碼是介于程序語言和自然語言之間的算法描述,即要具有自然語言通俗易懂的特點(diǎn),還要能很容易地被轉(zhuǎn)換為程序語言,這就要求偽代碼具有清晰地邏輯結(jié)構(gòu),并且有準(zhǔn)確的算法步驟。偽代碼的形式有很多種,沒有通用的規(guī)則,根據(jù)需要可以自行決定偽碼的形式。在本書使用的偽代碼一般為類C偽碼,書寫注重可讀性和邏輯性。下面是上一小節(jié)直接排序算法的偽代碼。該段偽代碼已經(jīng)細(xì)化到編程的每一小步,可以很容易使用C語言代替。1.偽代碼偽代碼是介于程序語言和自然語言之間的算法描述,即要1.偽代碼算法開始: 設(shè)i值為0; 當(dāng)i<N–1 { 設(shè)j值為i+1; 設(shè)min等于i; 當(dāng)j<N { 如果stuArray[min]>stuArray[j] { 設(shè)min的值為j; } j自增1; } 交換第i個元素和第min個元素; i自增1; }算法結(jié)束1.偽代碼算法開始:1.偽代碼技巧:在編程時,當(dāng)設(shè)計(jì)好一個算法后,要都先將它們使用偽代碼描述出來,再使用程序語言來實(shí)現(xiàn)。這樣有利于更有條理更有邏輯地書寫程序語言,其作用就像寫文章要先列好提綱一樣。1.偽代碼技巧:在編程時,當(dāng)設(shè)計(jì)好一個算法后,要都先將它們使2.程序流程圖程序流程圖是算法的圖形描述方式。它使用一些簡單的幾何圖形來表示各種不同性質(zhì)的程序操作,使用流程線將各個圖形連接起來,指示算法的執(zhí)行過程。由于流程圖的符號統(tǒng)一,且畫法簡單,結(jié)構(gòu)清晰,邏輯性強(qiáng),便于理解,因此成為描述程序流程的主要方法。下圖中的圖形是流程圖中常用的一些標(biāo)志。2.程序流程圖程序流程圖是算法的圖形描述方式。它使用一些簡單2.程序流程圖2.程序流程圖2.程序流程圖在1.3.1小節(jié)介紹三種基本程序結(jié)構(gòu)時,已經(jīng)接觸了流程圖的部分圖形。將1.2.2小節(jié)中的直接排序算法使用流程圖來表示,如下圖所示。2.程序流程圖在1.3.1小節(jié)介紹三種基本程序結(jié)構(gòu)時,已經(jīng)接2.程序流程圖2.程序流程圖2.程序流程圖由于本書中的程序都較短小,而程序流程圖描述小型程序時,能夠發(fā)揮其簡單靈活的優(yōu)勢,因此本書主要使用程序流程圖來描述算法流程。2.程序流程圖由于本書中的程序都較短小,而程序流程圖描述小型3.N-S流程圖由于程序流程圖使用流程線的導(dǎo)向來引導(dǎo)程序流程。當(dāng)程序流程較復(fù)雜時,框圖中會常常有很多的流程線,導(dǎo)致邏輯雜亂無章,失去了流程圖簡潔清晰的優(yōu)點(diǎn)。后來,當(dāng)結(jié)構(gòu)化程序設(shè)計(jì)方法日益流行后,兩個美國學(xué)者I.Nassi和B.Shneiderman基于結(jié)構(gòu)化思想提出了一種新的流程圖形式,被稱為N-S流程圖,N和S是兩個發(fā)明人名字的首字母。按照結(jié)構(gòu)化設(shè)計(jì)的思想,所有的程序都可以分解成三種基本結(jié)構(gòu)的組合。N-S流程圖為三種基本結(jié)構(gòu)設(shè)計(jì)了特殊的結(jié)構(gòu)圖,并以它們?yōu)榛A(chǔ)來描述其余所有的算法。3.N-S流程圖由于程序流程圖使用流程線的導(dǎo)向來引導(dǎo)程序流程
下圖為順序結(jié)構(gòu)的N-S表示圖。先執(zhí)行操作1,再執(zhí)行操作2;操作1的方框上方為結(jié)構(gòu)入口,操作2的方框下方為結(jié)構(gòu)出口。3.N-S流程圖下3.N-S流程圖
下圖為雙選擇結(jié)構(gòu),省略其中之一即可得單選擇結(jié)構(gòu)。3.N-S流程圖
下圖為雙選擇結(jié)構(gòu),省略其中之一即可得單選擇3.N-S流程圖
下圖中,左圖為while循環(huán)結(jié)構(gòu),右圖為until循環(huán)結(jié)構(gòu)。3.N-S流程圖
下圖中,左圖為while循環(huán)結(jié)構(gòu),右圖為u3.N-S流程圖
N-S使用這幾種圖形的組合便可以得到所有算法的N-S流程圖。所以,在N-S流程圖中去掉了程序流程圖中眼花繚亂的流程線,并將整個程序流程放在一個大方框內(nèi),使程序流程更清楚。下圖是直接排序算法的N-S流程圖。3.N-S流程圖
N-S使用這幾種圖形的組合便可以得到所有算3.N-S流程圖
3.N-S流程圖
1.4綜合練習(xí)1、使用偽碼描述使用冒泡排序法將序列從小到大排序的算法,并畫出其程序流程圖或N-S流程圖。【提示】冒泡排序的基本思想是,對尚未排序的各元素從頭到尾依次比較相鄰的兩個元素是否逆序(與欲排順序相反),若逆序就交換這兩元素。經(jīng)過第一輪比較排序后便可把最大(或最?。┑脑嘏藕茫缓笤儆猛瑯拥姆椒ò咽O碌脑刂饌€進(jìn)行比較,就得到了要求的順序。1.4綜合練習(xí)1、使用偽碼描述使用冒泡排序法將序列從小到1.4綜合練習(xí)算法的偽碼描述如下:算法開始:設(shè)i值為N-1; 當(dāng)i>0 { 設(shè)j值為0; 當(dāng)j<i { 如果array[j]>array[j+1] { 交換第j個元素和第j+1個元素; } j自增1; } i自減1; }算法結(jié)束1.4綜合練習(xí)算法的偽碼描述如下:1.4綜合練習(xí)程序流程圖如右圖所示。1.4綜合練習(xí)程序流程圖如右圖所示。1.4綜合練習(xí)N-S流程圖如右圖所示。1.4綜合練習(xí)N-S流程圖如右圖所示。第1章C語言與程序概述C語言是現(xiàn)在世界上應(yīng)用最廣泛,最受歡迎的計(jì)算機(jī)語言之一。在本章的學(xué)習(xí)中需要掌握以下知識點(diǎn):數(shù)據(jù)結(jié)構(gòu)的概念和作用;算法的概念和作用;結(jié)構(gòu)化程序設(shè)計(jì)的方法;三種基本結(jié)構(gòu);程序流程圖和N-S流程圖。第1章C語言與程序概述C語言是現(xiàn)在世界上應(yīng)用最廣泛,最受1.1C語言歷史C語言已經(jīng)經(jīng)歷了幾十年的發(fā)展。在學(xué)習(xí)C語言之前,應(yīng)該要先了解C語言是如何誕生的,它的歷史是怎么樣的。本節(jié)將介紹C言語的誕生、C語言的標(biāo)準(zhǔn)化過程及其重要特點(diǎn),最后還將展示一個標(biāo)準(zhǔn)的“Hello,world!”的程序。1.1C語言歷史C語言已經(jīng)經(jīng)歷了幾十年的發(fā)展。在1.1.1C語言的誕生C語言是由著名的計(jì)算機(jī)科學(xué)家DennisRitchie創(chuàng)造的,其歷史可以追溯到ALGOL60。ALGOL60,也稱為A語言,是純粹的面向描述計(jì)算過程的語言。C語言的直接前身B語言就是從BCPL發(fā)展而來的。在1972~1973年間,DenisRitchie改進(jìn)了B語言,為其添加了數(shù)據(jù)類型的概念,并將原來的解釋程序改寫為可以在直接生成機(jī)器代碼的編譯程序,并將其命名為C?,F(xiàn)在,C語言已成為用途最為廣泛的計(jì)算機(jī)高級語言,不僅可以用于編寫系統(tǒng)軟件,還可以用于構(gòu)建各個領(lǐng)域的應(yīng)用軟件。1.1.1C語言的誕生C語言是由著名的計(jì)算機(jī)科學(xué)家Den1.1.2C語言的標(biāo)準(zhǔn)化C語言發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了3個標(biāo)準(zhǔn),分別為K&RC、C89和C99。1.K&RC2.C89或ANSIC3.C991.1.2C語言的標(biāo)準(zhǔn)化C語言發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了3個標(biāo)1.1.3C語言的特點(diǎn)C語言之所以得到如此迅速的發(fā)展,并成為應(yīng)用最廣泛、最受歡迎的計(jì)算機(jī)語言之一,主要是因?yàn)樗Z法靈活、使用方便,并能實(shí)現(xiàn)高效而強(qiáng)大的功能。C語言具有以下特點(diǎn):1.使用方便,功能強(qiáng)大2.便于結(jié)構(gòu)化編程3.C語言是中級語言4.執(zhí)行效率高5.C程序可移植性好1.1.3C語言的特點(diǎn)C語言之所以得到如此迅速的發(fā)展,并1.1.4Hello,world!作為結(jié)構(gòu)性語言,C程序的結(jié)構(gòu)十分嚴(yán)整。下面來認(rèn)識一下第一個C程序,這是十分著名的“Hello,world!”程序。這個程序經(jīng)常被用作介紹各種語言的第一個程序,其功能是向屏幕打印一個字符串“Hello,world!”。1.1.4Hello,world!作為結(jié)構(gòu)性語言,C程1.2數(shù)據(jù)結(jié)構(gòu)與算法一般來說,程序由數(shù)據(jù)結(jié)構(gòu)和算法兩個部分組成。數(shù)據(jù)結(jié)構(gòu)是一個一個的實(shí)體,而算法是將它們聯(lián)系在一起的各種手段。學(xué)習(xí)程序首先要了解數(shù)據(jù)結(jié)構(gòu)和算法的概念,以及它們之間的關(guān)系。由于篇幅有限,本小節(jié)將只是簡要地介紹數(shù)據(jù)結(jié)構(gòu)和算法的一些基本知識,要想深入了解數(shù)據(jù)結(jié)構(gòu)和算法,還需要讀者去學(xué)習(xí)其他專門的材料。1.2數(shù)據(jù)結(jié)構(gòu)與算法一般來說,程序由數(shù)據(jù)結(jié)構(gòu)和算法兩個部1.3程序設(shè)計(jì)如本章1.1.3小結(jié)所述,C語言是一門便于結(jié)構(gòu)化編程的語言。結(jié)構(gòu)化編程,也就是結(jié)構(gòu)化程序設(shè)計(jì)。那么,什么是結(jié)構(gòu)化程序設(shè)計(jì)呢?結(jié)構(gòu)化程序設(shè)計(jì)有什么好處?通過本小節(jié)的學(xué)習(xí),讀者可以得到這些問題的答案,同時會為學(xué)習(xí)以結(jié)構(gòu)化程序設(shè)計(jì)為指導(dǎo)思想的C語言程序設(shè)計(jì)打下一個良好的鋪墊。1.3程序設(shè)計(jì)如本章1.1.3小結(jié)所述,C語言是一門便于1.3.1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)是荷蘭科學(xué)家E.W.Dijikstra在1965年提出的,其主要思想是通過分解復(fù)雜問題為若干簡單問題的方式降低程序的復(fù)雜性。它的主要觀點(diǎn)是采用自頂向下、逐步細(xì)化的程序設(shè)計(jì)方法,同時嚴(yán)格使用三種基本控制結(jié)構(gòu)構(gòu)造程序。三種基本控制結(jié)構(gòu)是指順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。所有的程序結(jié)構(gòu)都可以分解為這三個基本控制結(jié)構(gòu)。1.3.1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)是荷蘭科學(xué)家E.W1.3.2三種基本結(jié)構(gòu)按照操作的執(zhí)行順序,程序可以分為三類基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1996年,計(jì)算機(jī)科學(xué)家Bohm和Jacopini證明:任何簡單或復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種結(jié)構(gòu)組合而成。所以,這三種結(jié)構(gòu)就被稱為程序設(shè)計(jì)的三種基本結(jié)構(gòu),也是結(jié)構(gòu)化程序設(shè)計(jì)建議采用的結(jié)構(gòu)。1.3.2三種基本結(jié)構(gòu)按照操作的執(zhí)行順序,程序可以分為三1.順序結(jié)構(gòu)在順序結(jié)構(gòu)的程序里,各操作是按照它們出現(xiàn)的先后順序執(zhí)行的。如下圖所示,操作1和操作2按自上而下地順序執(zhí)行。這是最簡單的一種基本結(jié)構(gòu)。這個結(jié)構(gòu)里只有一個入口點(diǎn)A和一個出口點(diǎn)B,其特點(diǎn)是從入口點(diǎn)A開始,按順序執(zhí)行所有操作,直至出口點(diǎn)B處。事實(shí)上,所有的程序的總流程總是一個順序結(jié)構(gòu)。1.順序結(jié)構(gòu)在順序結(jié)構(gòu)的程序里,各操作是按照它們出現(xiàn)的先后順2.選擇結(jié)構(gòu)選擇結(jié)構(gòu),也叫分支結(jié)構(gòu)。選擇結(jié)構(gòu)的程序里存在一些分支,程序通過對一些條件的判斷選擇執(zhí)行的分支。按照分支數(shù),選擇結(jié)構(gòu)又可以分為單選擇、雙選擇和多選擇三種形式。2.選擇結(jié)構(gòu)選擇結(jié)構(gòu),也叫分支結(jié)構(gòu)。選擇結(jié)構(gòu)的程序里存在一些
雙選擇結(jié)構(gòu)是最常見的,如下圖所示,結(jié)構(gòu)中有兩個分支,必須要執(zhí)行其中一支;如果滿足條件則執(zhí)行操作1,否則執(zhí)行操作2。2.選擇結(jié)構(gòu)雙選擇結(jié)構(gòu)是最常見的,如下圖所示,結(jié)構(gòu)中有兩2.選擇結(jié)構(gòu)
單選擇結(jié)構(gòu)如下圖所示,當(dāng)雙選擇結(jié)構(gòu)中某個分支為空時,就稱為單選擇結(jié)構(gòu)。2.選擇結(jié)構(gòu)
單選擇結(jié)構(gòu)如下圖所示,當(dāng)雙選擇結(jié)構(gòu)中某個分支為
多選擇結(jié)構(gòu)如下圖所示,有多個分支共存,程序根據(jù)Type值來選擇其中之一執(zhí)行。2.選擇結(jié)構(gòu)
多選擇結(jié)構(gòu)如下圖所示,有多個分支共存,程序根據(jù)Type值3.循環(huán)結(jié)構(gòu)在循環(huán)結(jié)構(gòu)中,是反復(fù)地執(zhí)行一系列操作,直到某條件為假(或?yàn)檎妫r才終止循環(huán)。按照判斷條件出現(xiàn)的位置,可以分為while循環(huán)結(jié)構(gòu)和until循環(huán)結(jié)構(gòu)。3.循環(huán)結(jié)構(gòu)在循環(huán)結(jié)構(gòu)中,是反復(fù)地執(zhí)行一系列操作,直到某條件
while循環(huán)結(jié)構(gòu)中,先判斷條件,如下圖所示。如果A不大于1,則直接退出循環(huán)體到達(dá)流程出口處;如果滿足A大于1,執(zhí)行操作1,并且在操作1結(jié)束后返回到循環(huán)入口,重新判斷條件;如果A還是大于1,再次執(zhí)行操作1,再返回結(jié)構(gòu)入口……,如此反復(fù)。3.循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)中,先判斷條件,如下until型循環(huán)結(jié)構(gòu)中,在結(jié)構(gòu)入口處先執(zhí)行循環(huán)體,然后再判斷條件,如下圖所示。當(dāng)程序執(zhí)行完操作1后,判斷A是否大于1。如果是,則再執(zhí)行操作1;然后再次判斷A是否大于1;如果結(jié)果仍然為是,則再次執(zhí)行操作1……3.循環(huán)結(jié)構(gòu)until型循環(huán)結(jié)構(gòu)中,在結(jié)構(gòu)入口處先執(zhí)行循環(huán)體,然后再判斷3.循環(huán)結(jié)構(gòu)
在這兩種結(jié)構(gòu)中,操作1都可能被反復(fù)執(zhí)行,直到A的值不大于1,才結(jié)束程序。同樣,循環(huán)型結(jié)構(gòu)也只有一個入口點(diǎn)A和一個出口點(diǎn)B。合理地使用這三種基本結(jié)構(gòu),可以組合成復(fù)雜的高級結(jié)構(gòu);而所有的復(fù)雜結(jié)構(gòu)都可以分解為這三種基本結(jié)構(gòu)。3.循環(huán)結(jié)構(gòu)
在這兩種結(jié)構(gòu)中,操作1都可能被反復(fù)執(zhí)行,直到A1.3.3算法描述方法當(dāng)算法過程比較復(fù)雜時,單靠自然語言來描述算法將顯得十分困難,讓人難以準(zhǔn)確理解。此時,需要借助其他的算法描述手段,主要有:算法語言,有偽代碼、各種程序設(shè)計(jì)語言、計(jì)算機(jī)語言等。圖形描述,如流程圖和N-S圖,圖的描述應(yīng)與算法語言的描述對應(yīng);形式語言,用數(shù)學(xué)的方法,可以避免自然語言的二義性。1.3.3算法描述方法當(dāng)算法過程比較復(fù)雜時,單靠自然語言1.偽代碼偽代碼是介于程序語言和自然語言之間的算法描述,即要具有自然語言通俗易懂的特點(diǎn),還要能很容易地被轉(zhuǎn)換為程序語言,這就要求偽代碼具有清晰地邏輯結(jié)構(gòu),并且有準(zhǔn)確的算法步驟。偽代碼的形式有很多種,沒有通用的規(guī)則,根據(jù)需要可以自行決定偽碼的形式。在本書使用的偽代碼一般為類C偽碼,書寫注重可讀性和邏輯性。下面是上一小節(jié)直接排序算法的偽代碼。該段偽代碼已經(jīng)細(xì)化到編程的每一小步,可以很容易使用C語言代替。1.偽代碼偽代碼是介于程序語言和自然語言之間的算法描述,即要1.偽代碼算法開始: 設(shè)i值為0; 當(dāng)i<N–1 { 設(shè)j值為i+1; 設(shè)min等于i; 當(dāng)j<N { 如果stuArray[min]>stuArray[j] { 設(shè)min的值為j; } j自增1; } 交換第i個元素和第min個元素; i自增1; }算法結(jié)束1.偽代碼算法開始:1.偽代碼技巧:在編程時,當(dāng)設(shè)計(jì)好一個算法后,要都先將它們使用偽代碼描述出來,再使用程序語言來實(shí)現(xiàn)。這樣有利于更有條理更有邏輯地書寫程序語言,其作用就像寫文章要先列好提綱一樣。1.偽代碼技巧:在編程時,當(dāng)設(shè)計(jì)好一個算法后,要都先將它們使2.程序流程圖程序流程圖是算法的圖形描述方式。它使用一些簡單的幾何圖形來表示各種不同性質(zhì)的程序操作,使用流程線將各個圖形連接起來,指示算法的執(zhí)行過程。由于流程圖的符號統(tǒng)一,且畫法簡單,結(jié)構(gòu)清晰,邏輯性強(qiáng),便于理解,因此成為描述程序流程的主要方法。下圖中的圖形是流程圖中常用的一些標(biāo)志。2.程序流程圖程序流程圖是算法的圖形描述方式。它使用一些簡單2.程序流程圖2.程序流程圖2.程序流程圖在1.3.1小節(jié)介紹三種基本程序結(jié)構(gòu)時,已經(jīng)接觸了流程圖的部分圖形。將1.2.2小節(jié)中的直接排序算法使用流程圖來表示,如下圖所示。2.程序流程圖在1.3.1小節(jié)介紹三種基本程序結(jié)構(gòu)時,已經(jīng)接2.程序流程圖2.程序流程圖2.程序流程圖由于本書中的程序都較短小,而程序流程圖描述小型程序時,能夠發(fā)揮其簡單靈活的優(yōu)勢,因此本書主要使用程序流程圖來描述算法流程。2.程序流程圖由于本書中的程序都較短小,而程序流程圖描述小型3.N-S流程圖由于程序流程圖使用流程線的導(dǎo)向來引導(dǎo)程序流程。當(dāng)程序流程較復(fù)雜時,框圖中會常常有很多的流程線,導(dǎo)致邏輯雜亂無章,失去了流程圖簡潔清晰的優(yōu)點(diǎn)。后來,當(dāng)結(jié)構(gòu)化程序設(shè)計(jì)方法日益流行后,兩個美國學(xué)者I.Nassi和B.Shneiderman基于結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省葫蘆島市2025-2026學(xué)年高一上學(xué)期1月期末考試語文試卷(含答案)
- 湖南省長沙市望城區(qū)第二中學(xué)2025-2026學(xué)年高一上學(xué)期期末考試地理試卷(含答案)
- 安徽省合肥市琥珀中學(xué)2025-2026學(xué)年上學(xué)期期末八年級物理試卷及答案(含答案)
- 2025-2026學(xué)年滬科版八年級數(shù)學(xué)上冊期末測試卷(含答案)
- 飛盤介紹教學(xué)課件
- 飛機(jī)設(shè)計(jì)培訓(xùn)課件
- 2026山東事業(yè)單位統(tǒng)考菏澤市定陶區(qū)招聘初級綜合類崗位人員考試備考題庫及答案解析
- 2026四川廣元市青川縣衛(wèi)生系統(tǒng)部分醫(yī)療衛(wèi)生機(jī)構(gòu)招聘編外專業(yè)技術(shù)人員9人備考考試題庫及答案解析
- 2026河南鄭州地鐵招聘安檢員備考考試試題及答案解析
- 2026臺州市椒江永誠置業(yè)有限公司招聘編外工作人員6人備考考試試題及答案解析
- 江蘇交控集團(tuán)招聘筆試題
- 2026屆浙江省寧波市九校數(shù)學(xué)高一上期末監(jiān)測試題含解析
- 馬年猜猜樂(馬的成語)打印版
- 人教版數(shù)學(xué)八年級上冊《等邊三角形的性質(zhì)和判定》說課稿
- 股骨骨折伴發(fā)糖尿病患者護(hù)理查房
- 家具制造廠家授權(quán)委托書
- 光化學(xué)和光催化反應(yīng)的應(yīng)用
- VDA6.3-2016過程審核主要證據(jù)清單
- 辦公耗材采購 投標(biāo)方案(技術(shù)方案)
- 2020公務(wù)船技術(shù)規(guī)則
- 三片罐空罐檢驗(yàn)作業(yè)指導(dǎo)書
評論
0/150
提交評論