版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
21世紀(jì)高等院校規(guī)劃教材實(shí)用C語言程序設(shè)計(jì)教程中國水利水電出版社
本章首先介紹算法和程序的概念以及程序設(shè)計(jì)的一般過程,然后介紹C語言的特點(diǎn)、C語言程序的結(jié)構(gòu),其次介紹TurboC2.0集成環(huán)境下的上機(jī)操作過程,最后介紹算法流程圖和N-S盒圖以及結(jié)構(gòu)化程序設(shè)計(jì)的概念。學(xué)習(xí)本章的目的是使讀者對C語言和程序設(shè)計(jì)有一個(gè)概略的了解,并掌握上機(jī)運(yùn)行簡單程序的操作步驟。第1章程序設(shè)計(jì)及C語言概述第1章程序設(shè)計(jì)及C語言概述
1.1算法與程序設(shè)計(jì)1.2C語言的特點(diǎn)
1.3C語言程序的結(jié)構(gòu)
1.4TURBOC上機(jī)操作
1.5流程圖及N-S盒圖1.6結(jié)構(gòu)化程序設(shè)計(jì)概要
1.1算法與程序設(shè)計(jì)1.1.1算法1.1.2程序1.1.3程序設(shè)計(jì)語言1.1.4程序設(shè)計(jì)的一般過程
1.1.1算法
計(jì)算機(jī)解決問題所依據(jù)的步驟稱為計(jì)算機(jī)算法,或簡稱算法。請看下面幾個(gè)例子。【例1-1】計(jì)算1+2+3+…+100,可采取以下兩種算法中的一種。算法一。可以設(shè)兩個(gè)變量(變量是指其值可以改變的量),一個(gè)變量代表和(s),一個(gè)變量代表加數(shù)(i),用循環(huán)算法表示如下:第一步:0?s,1?i。第二步:s+i?s。第三步:i+1?i。第四步:如果i≤100,轉(zhuǎn)第二步;否則,轉(zhuǎn)第五步。第五步:輸出結(jié)果s,結(jié)束。算法二只有兩步:第一步:100×101/2?s。第二步:輸出s,結(jié)束?!纠?-2】判斷一個(gè)大于等于3的正整數(shù)是不是素?cái)?shù)。所謂素?cái)?shù)是指除了1和該數(shù)本身之外,不能被其他任何整數(shù)整除的數(shù),例如23是素?cái)?shù),因?yàn)樗荒鼙?,3,4,……,21,22整除。判斷素?cái)?shù)的方法很簡單,例如判斷n(n≥3)是不是素?cái)?shù),只需將n作為被除數(shù),將2到(n-1)各個(gè)整數(shù)輪流作除數(shù),作除法運(yùn)算,如果都不能被整除(余數(shù)不為0),則n是素?cái)?shù)。算法表示如下:
第一步:輸入n的值。第二步:i作除數(shù),2?i。第三步:n除以i,得余數(shù)r。第四步:如果r=0,表示n能被i整除,則打印n不是素?cái)?shù),轉(zhuǎn)第七步;否則執(zhí)行第五步。第五步:i+1?i。第六步:如果i≤n-1,返回第三步;否則打印n是素?cái)?shù),轉(zhuǎn)第七步。第七步:結(jié)束。算法的屬性:1.有窮性有窮性是指一個(gè)算法的操作步驟必須是有限的和合理的,即在合理的范圍之內(nèi)結(jié)束算法。例如求整數(shù)累加和的算法,由于整數(shù)本身是個(gè)無限集合,如果不限定其范圍,會導(dǎo)致求解步驟是無限的。又例如,計(jì)算機(jī)執(zhí)行某個(gè)算法需要幾千年,雖然是有限的,但卻是不合理的。當(dāng)然,究竟什么算“合理”,并沒有嚴(yán)格標(biāo)準(zhǔn),由人們的常識和需要而定。2.確定性算法中每個(gè)操作步驟都應(yīng)當(dāng)是明確的,而不應(yīng)是含糊的、模棱兩可的。在計(jì)算機(jī)算法中最忌諱的是歧義性,所謂“歧義性”是指可以被理解為兩種或多種可能的含義。因?yàn)橛?jì)算機(jī)至今還沒有主動思維的能力,如果給定的條件不確定,計(jì)算機(jī)就無法執(zhí)行。例如,“計(jì)算3月1日是一年中的第幾天”,這個(gè)問題是不確定的,因?yàn)闆]有指明哪一年,不知道是不是閏年,閏年和平年2月份的天數(shù)不一樣,所以無法執(zhí)行。3.有零個(gè)或多個(gè)輸入執(zhí)行算法時(shí)需要從外界獲得必要信息的操作稱為輸入。輸入的數(shù)據(jù)個(gè)數(shù)根據(jù)算法確定。例如計(jì)算1~100累加和的算法不需要輸入;計(jì)算n!的算法需要輸入n的值;計(jì)算m和n的最大公約數(shù)和最小公倍數(shù)則需要輸入m和n兩個(gè)數(shù)的值。4.有一個(gè)或多個(gè)輸出執(zhí)行算法得到的結(jié)果就是算法的輸出,沒有輸出的算法是沒有意義的。最常見的輸出形式是屏幕顯示或打印機(jī)輸出,但并非惟一的形式。執(zhí)行算法的目的就是為了求解,“解”就是輸出。5.有效性算法中的每一個(gè)步驟都應(yīng)當(dāng)有效地執(zhí)行,并得到確定的結(jié)果。例如當(dāng)b=0時(shí),a/b是不能有效執(zhí)行的。又例如,在C語言中,“a%b”中的a和b都必須是整型數(shù)據(jù),否則也不能有效執(zhí)行。算法有優(yōu)劣之分,一般希望用簡單的和運(yùn)算步驟少的算法。因此,為了有效地進(jìn)行解題,不僅要保證算法正確,還要考慮算法的質(zhì)量,選擇合適的算法。
1.1.2程序用計(jì)算機(jī)語言描述的算法稱為計(jì)算機(jī)程序,或簡稱程序。只有用計(jì)算機(jī)語言描述的算法才能在計(jì)算機(jī)上執(zhí)行。換言之,只有計(jì)算機(jī)程序才能在計(jì)算機(jī)上執(zhí)行。人們編寫程序之前,為了直觀或符合人類思維方式,常常先用其他方式描述算法,然后再翻譯成計(jì)算機(jī)程序。1.1.3程序設(shè)計(jì)語言人類社會中有多種語言交流工具,每種語言又都有它的語法規(guī)則。人和計(jì)算機(jī)通信需要通過計(jì)算機(jī)語言。計(jì)算機(jī)語言是面向計(jì)算機(jī)的人造語言,是進(jìn)行程序設(shè)計(jì)的工具,因此也稱程序設(shè)計(jì)語言。程序設(shè)計(jì)語言可以分為機(jī)器語言、匯編語言、高級語言。高級語言種類繁多(據(jù)統(tǒng)計(jì)有上千種),曾經(jīng)引起廣泛關(guān)注和使用的高級語言有FORTRAN、BASIC、Pascal和C等命令式語言(或稱過程式語言);有LISP、PROLOG等陳述式語言;還有當(dāng)前流行的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,例如C++、Java、VisualC++、VisualBasic、Delphi、PowerBuilder等。計(jì)算機(jī)硬件能直接執(zhí)行的是機(jī)器語言程序。匯編語言也稱符號語言,用匯編語言編寫的程序稱匯編語言程序。計(jì)算機(jī)硬件不能識別和直接運(yùn)行匯編語言程序,必須由“匯編程序”將其翻譯成機(jī)器語言程序后才能識別和運(yùn)行。同樣,高級語言程序也不能被計(jì)算機(jī)硬件直接識別和執(zhí)行,必須把高級語言程序翻譯成機(jī)器語言程序才能執(zhí)行。語言處理程序就是完成這個(gè)翻譯過程的,按照處理方式的不同,可以分為解釋型程序和編譯型程序兩大類。C語言采用編譯程序,即把用C語言寫的“源程序”編譯成“目標(biāo)程序”,再通過連接程序的連接,生成“可執(zhí)行程序”才能運(yùn)行。具體過程將在1.4節(jié)中詳細(xì)說明。1.1.4程序設(shè)計(jì)的一般過程
1.建立數(shù)學(xué)模型2.算法描述
3.編寫程序4.程序測試1.2C語言的特點(diǎn)C語言是一種高級語言,和其他高級語言相比,具有以下特點(diǎn)。1.兼有低級語言的功能2.結(jié)構(gòu)化的程序設(shè)計(jì)語言3.語言比較簡潔緊湊4.運(yùn)算符豐富5.?dāng)?shù)據(jù)結(jié)構(gòu)豐富6.語法限制不太嚴(yán)格,書寫格式比較自由7.目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高1.3C語言程序的結(jié)構(gòu)1.3.1C語言程序的一般形式
【例1-4】下面程序的功能是:首先在屏幕上輸出英文提示“Pleaseenteranumber:”,然后等待用戶輸入一個(gè)數(shù),當(dāng)用戶輸入一個(gè)數(shù)并按回車鍵后,計(jì)算機(jī)計(jì)算出以此數(shù)為半徑的圓的面積,并在屏幕上輸出Theareais×××。“×××”表示對應(yīng)的圓面積值。#definePI3.1416
area(floatr) /*求面積的函數(shù)開始*/{floata; /*定義實(shí)型變量a*/a=PI*r*r; /*計(jì)算面積并賦給變量a*/
printf("Theareais%f",a); /*輸出結(jié)果*/}
main()/*主函數(shù)開始*/{floatr;/*定義實(shí)型變量r*/
printf("Pleaseenteranumber:"); /*輸出提示信息*/
scanf("%f",&r);/*等待輸入數(shù)給r*/
area(r); /*調(diào)用函數(shù)area()*/}
任何一個(gè)C程序都是由一個(gè)或多個(gè)函數(shù)構(gòu)成的,一個(gè)C程序中至少必須存在一個(gè)主函數(shù)main()。它是程序運(yùn)行開始時(shí)被調(diào)用的一個(gè)函數(shù)。C語言程序的一般形式如圖1-1的矩形框中所示。其中f1至fN代表用戶定義的函數(shù)。預(yù)處理命令和全局性的聲明main(){局部變量聲明語句序列}f1(){局部變量聲明語句序列}f2(){局部變量聲明語句序列}
fn(){局部變量聲明語句序列}…圖1-1C程序的一般形式1.3.2C程序中的主要成分1.3.2.1預(yù)處理命令預(yù)處理命令是程序中那些以符號#開頭的命令。C語言中常用的預(yù)處理命令有三類:文件包含、宏定義和條件編譯。例1-4的程序中#definePI3.1416就是宏定義命令,它的作用是為字符串“3.1416”起了一個(gè)名字,后邊凡是用到3.1416時(shí)都可以用PI去代替。1.3.2.2函數(shù)函數(shù)通常用于描述相對獨(dú)立的功能,每個(gè)函數(shù)都具有嚴(yán)格定義的格式,可以有參數(shù)和返回值。一個(gè)程序中除了一個(gè)必須取名為main的主函數(shù),其余函數(shù)可以取任何有意義的名字。一個(gè)函數(shù)在執(zhí)行過程中可以調(diào)用其他函數(shù),也可以調(diào)用自己(稱為遞歸,詳見5.4節(jié))。任何函數(shù)(包括主函數(shù)main)都由函數(shù)首部和函數(shù)體兩部分組成。(1)函數(shù)的首部,即函數(shù)的第一行,對函數(shù)進(jìn)行說明,包括函數(shù)類型(可默認(rèn))、函數(shù)名、函數(shù)參數(shù)表(形參表)。
(2)函數(shù)體。函數(shù)首部之后的第一個(gè)大括號和與之配對的大括號之間的部分為函數(shù)體(大括號必須配對使用,如果一個(gè)函數(shù)內(nèi)有多對大括號,則最外面的一對大括號是函數(shù)體的范圍)。函數(shù)體一般由說明部分和可執(zhí)行語句構(gòu)成。
1.3.2.3輸入與輸出輸入輸出是指程序與用戶進(jìn)行的數(shù)據(jù)或信息的交換,程序離不開輸入和輸出功能,用戶通過輸入為程序提供初始數(shù)據(jù),程序通過輸出產(chǎn)生運(yùn)行結(jié)果。C語言中沒有定義輸入、輸出方法,但在程序中可以調(diào)用實(shí)現(xiàn)輸入輸出功能的庫函數(shù)。例1-3中的scanf()就是調(diào)用輸入函數(shù),等待用戶從標(biāo)準(zhǔn)輸入設(shè)備上輸入數(shù)據(jù)同時(shí)賦給相應(yīng)的變量。例1-3和例1-4中的printf()都是調(diào)用輸出函數(shù),從標(biāo)準(zhǔn)設(shè)備(顯示器)上輸出運(yùn)行結(jié)果。
1.3.2.4語句語句由單詞按照一定的語法規(guī)則構(gòu)成。例1-4中函數(shù)內(nèi)部的每一行都是一條語句。C語言中有多種類型的語句,由這些語句構(gòu)成函數(shù),再由函數(shù)構(gòu)成程序。在1.2節(jié)“C語言的特點(diǎn)”中已提到,C語言程序的書寫格式比較自由,稱為無格式語言,但要注意以下幾點(diǎn):(1)程序中每個(gè)語句都必須以分號“;”結(jié)束,分號是語句的一部分。(2)允許一行內(nèi)寫幾條語句,也允許一條語句寫在幾行上。為了便于閱讀程序,最好一條語句占一行。如果一條語句很長,可以寫成幾行。1.3.2.5注釋程序中提倡使用注釋。一個(gè)高質(zhì)量的程序,源程序中都應(yīng)該加上必要的注釋,以增強(qiáng)程序的可讀性,這對程序員和用戶都有很大的幫助。C語言的注釋格式為:/*……*/在例1-3和例1-4中凡是以“/*”和“*/”括起來的文字都是注釋。使用注釋時(shí)需要注意以下幾點(diǎn):(1)注釋可以單獨(dú)占一行,也可以跟在語句后面。(2)“/*”和“*/”必須成對使用,并且“/”和“*”以及“*”和“/”之間不能有空格,否則會出錯(cuò)。(3)如果注釋內(nèi)容在一行寫不下,可以另起一行繼續(xù)寫。(4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程序運(yùn)行。
因?yàn)橛?jì)算機(jī)不能識別和執(zhí)行C語言源程序,必須先用“編譯程序”把源程序翻譯成計(jì)算機(jī)能識別和執(zhí)行的二進(jìn)制指令形式的“目標(biāo)程序”;第三步把目標(biāo)程序與系統(tǒng)的函數(shù)庫以及其他目標(biāo)程序連接起來,形成可執(zhí)行的目標(biāo)程序;最后運(yùn)行“可執(zhí)行程序”得到結(jié)果。結(jié)果是否正確需要經(jīng)過驗(yàn)證,如果結(jié)果不正確則需要進(jìn)行調(diào)試。調(diào)試程序往往比編寫程序更困難、更費(fèi)時(shí)間。圖1-2表示了C程序編輯、編譯、連接和運(yùn)行的全過程。1.4TurboC上機(jī)操作C源程序目標(biāo)程序可執(zhí)行程序結(jié)果編輯(利用編輯程序)編譯(利用C編譯程序)連接(利用連接程序)運(yùn)行圖1-2C程序編輯、編譯、連接、運(yùn)行全過程
1.4.1安裝TurboC為了使用TurboC,需要先將其裝入磁盤的某一目錄下,例如放在C盤的根目錄下一級TC子目錄中。1.4.2啟動
、退出TurboC在MS-DOS方式下,如果用戶已進(jìn)入TurboC所在的子目錄,例如C盤根目錄下的TC子目錄,則只需從鍵盤輸入“tc”并按回車鍵。即C:\TC>tc退出TurboC有兩種方法:菜單法:先選File主項(xiàng),再選Quit子項(xiàng)并按回車鍵??旖萱I法:Alt+X(按住Alt鍵,再按X鍵,之后同時(shí)放開)。1.4.3編輯、編譯、連接、運(yùn)行的基本操作有關(guān)C程序的編輯、編譯、連接和運(yùn)行的操作需要熟練掌握,因?yàn)榫帉懙某绦蚴欠裾_只能通過上機(jī)檢驗(yàn),這就要求多編程序、多上機(jī),在編寫和調(diào)試程序的實(shí)踐中積累經(jīng)驗(yàn)。這里1.4.3.1建立新的C源程序并運(yùn)行進(jìn)入TurboC環(huán)境時(shí),F(xiàn)ile為當(dāng)前項(xiàng),其他情況下按功能鍵F10激活主菜單,選中File主項(xiàng)。此時(shí)按回車鍵打開下拉子菜單,選擇New并按回車鍵,自動轉(zhuǎn)換為編輯(Edit)狀態(tài),便可輸入源程序。例如:main(){int
a,b;a=2;b=3;
printf("d\n",a+b);}輸入完檢查無誤后進(jìn)行編譯、連接、運(yùn)行,有兩種方法:程序執(zhí)行結(jié)果:5
1.分步完成
按F9鍵或選擇執(zhí)行菜單中Compile主項(xiàng)的MakeEXEFile項(xiàng),如果沒有錯(cuò)誤,則TurboC自動完成當(dāng)前編輯的源程序文件的編譯、連接,生成可執(zhí)行文件;如果源程序有語法錯(cuò)誤,系統(tǒng)將在屏幕中央的Compiling(編譯)窗口底部提示:“Error:Pressanykey”(錯(cuò)誤:按任意鍵)。
按一下空格鍵,屏幕下端的Message(消息)窗口被激活,顯示錯(cuò)誤或警告信息,光帶停在第一條信息上,同時(shí)Edit(編輯)窗口中也有一條光帶,它總是停在源代碼中編譯錯(cuò)誤的相應(yīng)位置。在消息窗口中用上下鍵移動光帶時(shí),編輯窗口中的光帶也隨之移動,始終跟蹤源代碼中的錯(cuò)誤位置。
2.一次完成編輯好源程序文件檢查無誤后,使用快捷鍵^F9(Ctrl+F9),便可一次完成編譯、連接、運(yùn)行。當(dāng)然,如果源程序有錯(cuò)誤,也會提示錯(cuò)誤信息,等待修改。程序能夠運(yùn)行并不一定是正確的,因?yàn)橛?jì)算機(jī)對程序中的邏輯錯(cuò)誤無法判斷,例如把加號(+)寫成減號(-),大于號(>)寫成小于號(<),語法上沒有錯(cuò)誤,可以運(yùn)行,但結(jié)果不正確。如何查看結(jié)果呢?選擇并執(zhí)行Run主項(xiàng)中的UserScreen項(xiàng)或使用快捷鍵Alt+F5即可顯示運(yùn)行結(jié)果。按任意鍵返回編輯窗口。如果結(jié)果與預(yù)期的不一樣,則可能有邏輯錯(cuò)誤,需要仔細(xì)分析、檢查、修改,每次修改之后都要重新編譯、連接、運(yùn)行,直至結(jié)果正確為止。1.4.3.2編輯、修改已有C源程序選擇并執(zhí)行File主項(xiàng)中的Load項(xiàng)(或F3鍵),屏幕上出現(xiàn)一個(gè)對話框,如圖1-5所示。圖1-5TurboC打開文件
如果知道文件名,直接輸入文件名,若該文件存在,系統(tǒng)就將它調(diào)入內(nèi)存并顯示在屏幕上,自動轉(zhuǎn)為編輯狀態(tài),便可對它進(jìn)行修改。如果指定的文件不存在,則給出一個(gè)空白編輯窗口,以供輸入新的源程序。
如果忘記了已有程序的文件名,可以按回車鍵,打開當(dāng)前目錄下后綴為.C的所有文件的文件名窗口,用方向鍵選定需要的文件名,按回車鍵,則該文件被調(diào)入內(nèi)存并顯示在屏幕上,在編輯狀態(tài)下對它進(jìn)行修改、編譯、連接和運(yùn)行。1.5流程圖及N-S盒圖
1.5.1用流程圖表示算法流程圖是用一組框圖符號表示各種操作,也稱框圖。用流程圖表示算法直觀形象,易于理解。美國國家標(biāo)準(zhǔn)化協(xié)會ANSI(AmericanNationalStandardInstitute)規(guī)定的一些常用流程圖符號,已為各國程序工作者普遍采用,如圖1-6所示。
圖1-6常用流程圖符號起止框輸入輸出框判斷框處理框流程線連接點(diǎn)【例1-5】計(jì)算1+2+3+4+……+100的流程圖見圖1-7?!纠?-6】判斷一個(gè)大于等于3的數(shù)是不是素?cái)?shù)的流程圖見圖1-8。打印n不是素?cái)?shù)開始i=2輸入n令r為n除以i的余數(shù)r=0?i=i+1i<n/2打印n是素?cái)?shù)結(jié)束YNYN開始s=0i=1i=i+1s=s+i輸出si≤100結(jié)束NY圖1-7求1~100累加和的流程圖
圖1-8判斷素?cái)?shù)的流程圖1.5.2用N-S盒圖表示算法N-S圖是美國學(xué)者I.Nassi和B.Shneiderman提出的一種新的流程圖形式(N和S是兩位學(xué)者的英文姓名的首字母)。在N-S圖中完全去掉了流程線,全部算法寫在一個(gè)矩形框內(nèi),在該框內(nèi)還可以包含其他的從屬于它的框,即由一些基本框組成一個(gè)大框。N-S圖用圖1-9所示的符號表示三種基本結(jié)構(gòu)。(a)順序結(jié)構(gòu)(b)選擇結(jié)構(gòu)(c)當(dāng)型循環(huán)結(jié)構(gòu)(d)直到型循環(huán)結(jié)構(gòu)
圖1-9三種基本結(jié)構(gòu)的N-S圖符號AB條件成立不成立
AB當(dāng)條件成立直到條件不成立AA直到條件不成立除上述雙分支選擇結(jié)構(gòu)以外,還有多分支的選擇結(jié)構(gòu),如圖1-10所示,當(dāng)表示條件的值等于“值i”時(shí)執(zhí)行Ai框。雖然這種結(jié)構(gòu)可以利用雙分支的嵌套來實(shí)現(xiàn),但C語言以及多數(shù)高級語言都提供了直接實(shí)現(xiàn)這種結(jié)構(gòu)的語句。條件值1值2…值nA1A2…An圖1-10多分支選擇結(jié)構(gòu)
前面的例1-5計(jì)算1到100累加和、例1-6判斷是否素?cái)?shù)的算法如圖1-12、圖1-13所示。i=1,n=0當(dāng)i≤50
輸入scorescore≥60NY
n=n+1i=i+1i=1,s=0當(dāng)i≤100
輸出ss=s+Ii=i+1圖1-11統(tǒng)計(jì)及格人數(shù)
圖1-12計(jì)算累加和
輸入ni=2r=(n除以i的余數(shù))Yr=0N
輸出“n不是素?cái)?shù)”i=i+1r≠0并且i<n/2Yr≠0N輸出“n是素?cái)?shù)”圖1-13判別n是否素?cái)?shù)1.6結(jié)構(gòu)化程序設(shè)計(jì)概要
一個(gè)結(jié)構(gòu)化程序應(yīng)符合以下標(biāo)準(zhǔn):(1)程序僅由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等三種基本結(jié)構(gòu)組成,基本結(jié)構(gòu)可以嵌套。(2)每種基本結(jié)構(gòu)都只有一個(gè)入口和一個(gè)出口,即一端進(jìn),一端出。這樣的結(jié)構(gòu)置于其他結(jié)構(gòu)之間時(shí),程序的執(zhí)行順序必然是從前一結(jié)構(gòu)的出口到本結(jié)構(gòu)的入口,經(jīng)本結(jié)構(gòu)內(nèi)部的操作,到達(dá)本結(jié)構(gòu)的惟一出口。(3)程序中沒有死循環(huán)(不能結(jié)束的循環(huán)叫死循環(huán))和死語句(程序中永遠(yuǎn)執(zhí)行不到的語句叫死語句)。
C語言規(guī)定函數(shù)不允許嵌套定義,但可以嵌套調(diào)用。在定義函數(shù)時(shí)調(diào)用了另一個(gè)函數(shù),在執(zhí)行程序時(shí)如果1.6.2結(jié)構(gòu)化程序設(shè)計(jì)方法遵循的原則結(jié)構(gòu)化程序設(shè)計(jì)方法遵循的原則是:自頂向下,逐步求精;模塊化設(shè)計(jì);結(jié)構(gòu)化編程。下面分別說明。1.6.2.1自頂向下,逐步求精把一個(gè)較大的復(fù)雜問題分解成若干相對獨(dú)立而又簡單的小問題,只要解決了這些小問題,整個(gè)問題也就解決了。如圖1-14所示。主(功能)模塊模塊a模塊b模塊a2模塊b1模塊c模塊c1模塊a1模塊a3模塊b2模塊c2模塊c3圖1-14自頂向下逐步求精示例
1.6.2.2模塊化設(shè)計(jì)模塊化程序設(shè)計(jì)早在低級語言時(shí)期就已經(jīng)出現(xiàn)。但卻在結(jié)構(gòu)化程序設(shè)計(jì)的發(fā)展中得到充實(shí)、提高和完善。因此,它也是結(jié)構(gòu)化程序設(shè)計(jì)的組成部分。一般而言,模塊化設(shè)計(jì)是把復(fù)雜的算法或程序,分解成若干相對獨(dú)立、功能單一、甚至可供其他程序調(diào)用的模塊。在引入結(jié)構(gòu)化程序設(shè)計(jì)之后,這些模塊不僅與通常所說的子算法、子程序或子過程有著相似的概念,是一種可供調(diào)用、相對獨(dú)立的程序段,而且必須是由三種基本結(jié)構(gòu)組成。整個(gè)系統(tǒng)猶如積木一般,由各個(gè)模塊組合而成。如圖1-15所示,各功能模塊用矩形框表示,實(shí)線箭頭表示模塊之間的調(diào)用關(guān)系,虛線箭頭表示返回。
mainABCD圖1-15模塊化結(jié)構(gòu)示意圖
進(jìn)行模塊化設(shè)計(jì)時(shí),注意在不同模塊中提取功能相同的部分,作為一個(gè)獨(dú)立的子模塊。這樣可以縮短程序,提高模塊的復(fù)用率。設(shè)計(jì)模塊時(shí)要盡量減小模塊間的耦合度(模塊間的相互依賴性),增大內(nèi)聚度(模塊內(nèi)各成分的相互依賴性)。耦合度越小,模塊相互間的獨(dú)立性就越大。內(nèi)聚度越大,模塊內(nèi)部各成分間的聯(lián)系就越緊密,其功能也就越強(qiáng)。
程序中的子模塊,在C語言中通常用函數(shù)實(shí)現(xiàn),每個(gè)函數(shù)完成一個(gè)特定功能。根據(jù)經(jīng)驗(yàn)每個(gè)函數(shù)一般以50行以下為宜(打印時(shí)不超過一頁),這樣的規(guī)模便于組織,也便于閱讀。
1.6.2.3結(jié)構(gòu)化編程
所謂結(jié)構(gòu)化編程是指利用高級語言提供的相關(guān)語句實(shí)現(xiàn)三種基本結(jié)構(gòu),每個(gè)基本結(jié)構(gòu)具有惟一的出口和入口,整個(gè)程序由三種基本結(jié)構(gòu)組成,程序中不用goto之類的語句。goto語句也稱轉(zhuǎn)移語句,用它可以改變程序中語句的執(zhí)行次序。1.6.3結(jié)構(gòu)化程序設(shè)計(jì)舉例下面以一個(gè)具體實(shí)例說明自頂向下,逐步求精的應(yīng)用?!纠?-7】試從所有3位數(shù)的自然數(shù)中,選出滿足下列條件中一個(gè)或兩個(gè)的數(shù):(1)素?cái)?shù)。(2)“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一個(gè)水仙花數(shù),因?yàn)?53=13+53+33。解:所有三位數(shù)的自然數(shù)為100~999間的數(shù),在其中尋找滿足條件的數(shù)。各種可能的條件為:1)素?cái)?shù)。2)水仙花數(shù)。3)素?cái)?shù)水仙花數(shù)。采用模塊化設(shè)計(jì)方法,系統(tǒng)結(jié)構(gòu)如圖1-16所示。主模塊找出素?cái)?shù)模塊找出水仙花數(shù)模塊找出水仙花素?cái)?shù)模塊素?cái)?shù)判定模塊水仙花數(shù)判定模塊圖1-16模塊化設(shè)計(jì)示意圖
1.6.3.1主模塊算法設(shè)計(jì)主模塊可謂一級求精模塊,用算法結(jié)構(gòu)化流程圖表示,如圖1-17所示。開始顯示菜單1.找素?cái)?shù);
2.找水仙花數(shù);
3.找水仙花素?cái)?shù)輸入類型代號(1~3)123在100~999中
找所有的素?cái)?shù)在100~999中找所有的水仙花數(shù)在100~999中找所有的水仙花素?cái)?shù)圖1-17主模塊一級求精N-S圖
在圖1-17中,可對最下面的三個(gè)框進(jìn)一步求精,從左到右的二級求精分別如圖1-18、圖1-19和圖1-20所示。
用圖1-18、圖1-19、圖1-20代替圖1-17的相應(yīng)部分,可得到主模塊的二級求精N-S圖。這時(shí),二級求精已經(jīng)到了實(shí)現(xiàn)級,不再需要進(jìn)一步求精。下面討論子模塊“素?cái)?shù)判定”和“水仙花數(shù)判定”的設(shè)計(jì)。1.6.3.2子模塊的設(shè)計(jì)1.素?cái)?shù)判定模塊的設(shè)計(jì)素?cái)?shù)判定模塊的N-S圖如圖1-21所示。輸出標(biāo)題“primebetween100and999”n=100,10
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 33290.29-2024文物出境審核規(guī)范第29部分:車具馬具
- 5G+智慧教育項(xiàng)目背景與目標(biāo)
- 和聲課的心得體會(5篇)
- 唯美晚安感言150句
- 高爐煉鐵工練習(xí)復(fù)習(xí)測試有答案
- 持證上崗信貸初級復(fù)習(xí)測試有答案
- 蝦類專業(yè)基礎(chǔ)知識題庫單選題100道及答案解析
- 國有企業(yè)專項(xiàng)合規(guī)計(jì)劃的制定與執(zhí)行精講課件
- 《學(xué)前兒童衛(wèi)生保健》 教案 8 模塊三學(xué)前兒童的營養(yǎng)衛(wèi)生
- 第1章 醫(yī)藥國際貿(mào)易導(dǎo)論課件
- 2024年云南省大數(shù)據(jù)有限公司招聘筆試參考題庫附帶答案詳解
- 《外科護(hù)理》課件-13.3.1食管癌病人的護(hù)理
- 《養(yǎng)老護(hù)理員》-課件:自然災(zāi)害的應(yīng)對處理知識
- 法理學(xué)(第五版)課件第二十章法的價(jià)值概述
- 數(shù)據(jù)真實(shí)性承諾書
- 國家能源集團(tuán)歷年筆試題
- (2024版)如何引導(dǎo)小學(xué)生進(jìn)行高效的語文復(fù)習(xí)
- 機(jī)電進(jìn)度控制表
- 信息科技課評分標(biāo)準(zhǔn)
- 化療后骨髓抑制的護(hù)理查房
- 外科護(hù)士進(jìn)修匯報(bào)課件
評論
0/150
提交評論