




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章模塊化程序設(shè)計(jì)教學(xué)目的:模塊程序設(shè)計(jì)是C程序合作編程序的方法,通過這一章的學(xué)習(xí)使學(xué)生能自己編C程序中的函數(shù),正確地調(diào)用函數(shù),熟悉函數(shù)調(diào)用時(shí)形式參數(shù)和實(shí)在參數(shù)的關(guān)系。通過變量的存儲類型,能正確使用各種不同存儲類型的變量編程序。重點(diǎn)難點(diǎn):函數(shù)的嵌套調(diào)用及函數(shù)的遞歸調(diào)用。前面各幾章的學(xué)習(xí),大家已有了編制小程序的經(jīng)驗(yàn)。如果想編制大程序,在C語言下就得用模塊化程序設(shè)計(jì),其基本思想是將一個(gè)大的程序按功能分割成一些模塊,使每一個(gè)模塊都成為功能單一、結(jié)構(gòu)清晰、接口簡單、容易理解的小程序。C語言提供了支持模塊化軟件開發(fā)的功能:1函數(shù)式的程序結(jié)構(gòu)。程序由一個(gè)或多個(gè)函數(shù)組成,每個(gè)函數(shù)都有各自獨(dú)立的功能和界面。2允許通過使用不同的存儲類別的變量,控制模塊內(nèi)部和外部的信息交換。3具有預(yù)編譯處理功能,為程序的調(diào)試、移植提供方便,支持模塊化程序設(shè)計(jì)。本章介紹這些功能及進(jìn)行程序開發(fā)的基本方法。4.1函數(shù)C程序結(jié)構(gòu)無論涉及的問題是復(fù)雜還是簡單,規(guī)模是大還是小,用C語言設(shè)計(jì)程序,任務(wù)只有一種,就是編寫函數(shù),至少要編寫一個(gè)主函數(shù)main(),C程序的執(zhí)行就是執(zhí)行相應(yīng)的main()函數(shù)。即從它的main()函數(shù)的第一個(gè)花括號開始,依次執(zhí)行后面的語句,直到最后的花括號為止。其它函數(shù)只有在執(zhí)行了main()函數(shù)的過程中被調(diào)用時(shí)才執(zhí)行。高級語言中“函數(shù)”的概念和數(shù)學(xué)中“函數(shù)”的概念不完全相同。英語單詞function有“函數(shù)”和“功能”兩種介紹,高級語言中的函數(shù)實(shí)際上是功能的意思。當(dāng)要完成某一個(gè)功能時(shí),就用一個(gè)函數(shù)去實(shí)現(xiàn)它。在程序設(shè)計(jì)時(shí)首先要考慮main()函數(shù)中的算法,當(dāng)main()中需要使用某一功能時(shí),就用一個(gè)具有該功能的函數(shù)表達(dá)式表示。這時(shí)的函數(shù),我們只知道它具有什么功能,其它先不作處理。設(shè)計(jì)完main()的算法并檢驗(yàn)無誤后,這時(shí)開始考慮它所調(diào)用的函數(shù)。如果在庫函數(shù)中能找到,就可直接使用,否則再動手設(shè)計(jì)這些函數(shù)。這種設(shè)計(jì)方法稱為自頂向下、逐步細(xì)化的程序設(shè)計(jì)方法。這種方法設(shè)計(jì)出來的程序在功率高,程序?qū)哟畏置?、結(jié)構(gòu)清晰。復(fù)雜程序的層次可從以下圖形中看出:許多大型軟件系統(tǒng)包含了相當(dāng)豐富的,可供從事某一領(lǐng)域工作人員選用,如一個(gè)高等學(xué)校的信息管理系統(tǒng)就包含了教務(wù)、科研、人事、財(cái)務(wù),設(shè)備、圖書、后勤、辦公室等子系統(tǒng)。每一個(gè)子系統(tǒng)以可分為許多子子系統(tǒng)。這種軟件為了方便用戶大都采用菜單(menu)方式,這種形式的軟件,大家都用過。用戶只需按一些簡單的鍵,就能調(diào)用該功能,就像在飯店點(diǎn)菜一樣那么方便。高等院校事務(wù)管理系統(tǒng)的模塊結(jié)構(gòu)如下:(程序menu.c)函數(shù)的定義與函數(shù)聲明(一)函數(shù)就是在程序中設(shè)定的一個(gè)函數(shù)模塊。一個(gè)函數(shù)是由變量聲明部分與可執(zhí)行語句組的成獨(dú)立實(shí)體,用來完成一指定功能。除了系統(tǒng)提供的函數(shù)外,用戶編制函數(shù)才是一種正確的選擇。(一).函數(shù)定義:(函數(shù)類型、函數(shù)名、形參、函數(shù)體內(nèi)容)函數(shù)返回值的類型說明函數(shù)名(類型名形式參數(shù)1,類型名形式參數(shù)2,…){函數(shù)首部說明部分函數(shù)體語句部分}函數(shù)類型:函數(shù)計(jì)算后的值是什么類型。函數(shù)名:用戶命名的標(biāo)識符,在主函數(shù)中調(diào)用的名字。形式參數(shù):函數(shù)中處理的變量,通過它接收主函數(shù)傳過來的具體值。函數(shù)體:函數(shù)計(jì)算時(shí)的具體方法和函數(shù)的表達(dá)式。由變量定義部分和語句組成。函數(shù)的返回:由函數(shù)返回調(diào)用它的函數(shù),可由以下返回形式:return表達(dá)式;return;可沒有return語句,也可有多個(gè)return語句。函數(shù)的定義與函數(shù)聲明(二)函數(shù)名(類型名形式參數(shù)1,類型名形式參數(shù)2,…)省略類型說明,C語言默認(rèn)返回值為int型。例:求兩個(gè)雙精度數(shù)這和的函數(shù)。doubleadd(doublea,doubleb){doubles;s=a+b;returns;}函數(shù)返回值的類型可以是整型、實(shí)型、字符型和指針類型。以上函數(shù)的返回值是double型??捎胐oubleadd(a,b)doublea,b來寫函數(shù)首部。定義函數(shù)可以沒有參數(shù),但一對括號不省略,如:dummy(),函數(shù)體也可是空的,這樣的函數(shù)什么也不做。編程時(shí)可作為一個(gè)虛設(shè)的部分。函數(shù)舉例:編一個(gè)求兩個(gè)數(shù)中最小數(shù)的函數(shù),用循環(huán)語句多次調(diào)用該函數(shù),找出十個(gè)數(shù)中的最小數(shù)。(ec711.c)函數(shù)聲明(三)在C語言中,除了主函數(shù)外,對于用定義的函數(shù)要遵循“先定義,后使用”的規(guī)則。凡是未在調(diào)用前定義函數(shù),C編譯程序都默認(rèn)函數(shù)的返回值為int類型。對于返回值為其它類型的函數(shù),若把函的定義放在調(diào)用之后,應(yīng)該在調(diào)用之前對函進(jìn)行說明。即只有函數(shù)的首部,一般形式為:類型名函數(shù)名(參數(shù)類型1,參數(shù)類型2,…)如:doubleadd(double,double)或類型名函數(shù)名(參數(shù)類型1參數(shù)名1,參數(shù)類型2,參數(shù)名2,…)如:doubleadd(doublep,doubleq)這里的參數(shù)是虛設(shè)的,實(shí)際上參數(shù)名常常省略。函數(shù)說明語句中的類型名必須與函數(shù)返回值的類型一致。函數(shù)說明既可以作為一條單獨(dú)的語句如:doubleadd(double,double)也可以與普通變量的說明在一起如:doublex,y,add(double,double)變量的存儲屬性變量是對程序中數(shù)據(jù)的存儲空間的抽象。前面介紹的數(shù)據(jù)類型是變量的操作屬性。除此之外,影響變量使用的還有變量的存儲屬性。⒈變量的存儲類型:計(jì)算機(jī)中的存儲器分為內(nèi)存和外存,除此這外不有一個(gè)稱為寄存器的臨時(shí)存儲器,用來存儲一些反復(fù)被加工的數(shù)據(jù),存取速度比內(nèi)存和外存要快得多。⒉變量的生存期:C語言中的變量可用兩種方法建立:在編譯時(shí)分配存儲單元,程序開始執(zhí)行變量被創(chuàng)建,結(jié)束被撤銷。這種變量生存期為程序執(zhí)行的整個(gè)過程,在該過程中占有固定存儲空間,稱為永久存儲;另一種是在某一段時(shí)間內(nèi)存在,函數(shù)的形參和在函數(shù)體中的定義的變量,在程序進(jìn)入該函數(shù),才分配存儲空間,函數(shù)結(jié)束,存儲空間又被撤銷,稱為動態(tài)存儲。⒊變量的可用域:分為兩種:局部可用和全局可用,即局部變量與全局變量。用存儲屬性可表示這三個(gè)方面的屬性;分為四種存儲類別說明auto(自動);register(寄存器);static(靜態(tài))和extern(外部)。以上屬性說明,放在類型說明符的左邊,也可以放在類型說明符的右邊。autointk,l;intautok,l;4.2.1動態(tài)變量4.2.2靜態(tài)變量4.2.3外部變量動態(tài)變量(一)(一)自動(auto)變量:在變量定義時(shí)使用auto和不使用auto定義都是自動變量,這類變量的使用和前面所用變量一樣。在主函數(shù)和子函數(shù)中變量名一樣的變量分析程序時(shí)要特別注意。1.自動變量是局部變量自動變量只有在它定義的那個(gè)局部才能使用。(ec72.c)(ec712.c)2.在對自動變量賦值之前,它值是不確定。在編制累加和累乘的程序時(shí),為什么要給和單元及積單元賦初值,原理就在這里。(ec713.c)程序計(jì)算的結(jié)果不確定。(ec714.c)變量x沒有賦初值,執(zhí)行的結(jié)果不可預(yù)測。動態(tài)變量(二)二寄存器(register)變量:它的值保留的CPU的寄存器中,不占用內(nèi)存單元,存取時(shí)間快,用它可提高程序的運(yùn)行速度。通常把使用頻率較高的變量定義為寄存器變量。定義與自動變量一樣。由于現(xiàn)在的計(jì)算機(jī)運(yùn)算速度快,定義寄存器變量,很難分辨出它執(zhí)行的情況。打印乘法九九表的程序:(ec715.c)由循環(huán)控制變量i,j經(jīng)常用,所以定義為寄存器變量。由于各種計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目不同,寄存器的長度也不同,因此程序中定義寄存器變量的數(shù)量受限制。靜態(tài)變量靜態(tài)static變量:它中的值和其它類型變量不一樣在于:1.在整個(gè)程序運(yùn)行期間,靜態(tài)局部變量在內(nèi)存中占有永久性的存儲單元,即使退出函數(shù)以后,再進(jìn)入函數(shù)時(shí),靜態(tài)局部變量仍使用原來的存儲單元。由于不釋放原來的值,它的值可以使用到程序結(jié)束。2.它的初值是在編譯時(shí)賦予的,在執(zhí)行時(shí)不再賦初值,末賦初值時(shí)系統(tǒng)自動賦初值0。⒊在函數(shù)多次被調(diào)用過程中靜態(tài)局部變量的值具有可繼承性。(ec716.c)(ec716a.c)⒋靜態(tài)局部變量的值只能在本函數(shù)中使用。外部變量一、外部變量(extern)是全局變量定義在所有函數(shù)之外的變量稱為外部變量。(ec717.c)(ec717a.c)(ec718.c)二、外部變量使用的幾種情況產(chǎn)生隨機(jī)數(shù)(ec719.c)在不同的編譯單位內(nèi)用extern說明符來擴(kuò)展全局變量的作用域同一編譯單位是在同一C的源程序中。不同的編譯單位是在兩個(gè)以上不同的C源程序內(nèi)。通過頭文件來進(jìn)行互相訪問的。三、外部變量的副作用主函數(shù)和子函數(shù)用同名外部變量產(chǎn)生的錯(cuò)誤。(ec720.c)編譯預(yù)處理“編譯預(yù)處理”就是在C編譯程序?qū)源程序進(jìn)行編譯前,由編譯預(yù)處理程序?qū)@些編譯預(yù)處理命令處理的過程。C語言的預(yù)處理均以#include#define開頭不加分號。編譯預(yù)處理是C語言的一個(gè)重要特點(diǎn),它能改善程序設(shè)計(jì)環(huán)境,有助于編寫易移植、易處理的程序,也是模塊化程序設(shè)計(jì)的一個(gè)重要工具。4.3.1宏替換4.3.2文件包含編譯預(yù)處理(一)宏替換是用預(yù)處理命令#define指定的預(yù)處理。一、不帶參數(shù)的宏:#define宏名替換文本#defineSIZE1000這種使用在前面的程序中已用到,如果替換文本還用到已定義的宏時(shí),分析時(shí)要注意。替換文本中包含已定義過的宏:#definePI3.14#defineADDPI(PI+1)#defineTWO_ADDPI(2*ADDPI)如果有表達(dá)式:x=TWO_ADDPI/2,則替換后為:x=(2*(3.14+1))/2若寫成“PI+1”和“2*ADDPI”不加括號,替換后為x=2*3.14+1/2;因?yàn)槭蔷幾g預(yù)處理,不計(jì)算后再用,就是先替換再計(jì)算。編譯預(yù)處理(二)二、帶參數(shù)的宏替換:(ec721.c)類似于函數(shù),但要根據(jù)宏定義時(shí)的表達(dá)式,要先替換,再計(jì)算。例:#defineMU(X,Y)((X)*(Y))a=MU(5,6)替換為a=((5)*(6))=30#defineMU(X,Y)X*Ya=MU(5,6)a=5*6=30a=MU(2+3,6)a=2+3*6=20分析以下程序執(zhí)行的結(jié)果:#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;/*沒加括號,替換結(jié)果為*/a/=SQR(k+m)/SQR(k+m);/*k+m*k+m/k+m*k+m*/printf(“%d\n”,a);}文件包含文件包含:在C語言程序開發(fā)時(shí),可以用文件包含的方法使得按照一定功能編制的存在文件中的某類宏被當(dāng)前文件調(diào)用,而不需再去編制。只需在頭文件中包含這些文件即可。所謂文件包含,是在一個(gè)文件中,去包含另一個(gè)文件的全部內(nèi)容。在以前的程序編制時(shí)已用過。#include"文件名"或#include<文件名>在預(yù)編譯時(shí),預(yù)編譯程序?qū)?/p>
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分期房產(chǎn)合同范本
- 收款付款合同范本
- 京東送包車合同范本
- 單位門頭安裝合同范本
- 醫(yī)用氧氣購銷合同范本
- 助理就業(yè)合同范本
- 包裝材料銷毀合同范本
- 傳媒剪輯合同范本
- 醫(yī)生參加培訓(xùn)合同范本
- 勞務(wù)配送合同范本
- 2024年重慶客運(yùn)駕駛員考試卷及答案
- API設(shè)計(jì)與文檔規(guī)范
- 民兵知識小常識
- 圖形的平移與旋轉(zhuǎn)壓軸題(7個(gè)類型55題)-【??級狠S題】2023-2024學(xué)年八年級數(shù)學(xué)下冊壓軸題攻略(解析版)
- TDALN 033-2024 學(xué)生飲用奶安全規(guī)范入校管理標(biāo)準(zhǔn)
- 各地分布式光伏項(xiàng)目電價(jià)對比
- JT-T-775-2016大跨度斜拉橋平行鋼絲拉索
- 醫(yī)學(xué)檢驗(yàn)技術(shù)專業(yè)《血液學(xué)檢驗(yàn)》課程標(biāo)準(zhǔn)
- 2024年江蘇食品藥品職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫有完整答案
- 員工服務(wù)意識提升提高服務(wù)意識培訓(xùn)課件
- 2024年黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫1套
評論
0/150
提交評論