成員表列由若干個(gè)成員組成,每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部分。
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括瀘州網(wǎng)站建設(shè)、瀘州網(wǎng)站制作、瀘州網(wǎng)頁制作以及瀘州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,瀘州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到瀘州省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
對每個(gè)成員也必須做類型聲明。
其形式為:
類型聲明符 成員名;
例如:
注意, 最后括號外面的;分號是不可少的 。
結(jié)構(gòu)定義之后,才可以進(jìn)行變量聲明。
凡聲明為結(jié)構(gòu) stu 的變量都由上述4個(gè)成員組成。
由此可見,結(jié)構(gòu)是一種復(fù)雜的數(shù)據(jù)類型,是數(shù)目固定,類型不同的若干有序變量的集合。
聲明結(jié)構(gòu)變量 有以下三種方法。
使用上面定義的stu為例:
如:
也可以用宏定義使一個(gè)符號常量來表示一個(gè)結(jié)構(gòu)類型。例如:
例如:
這種形式的聲明的一般形式為:
例如:
這種聲明的一般形式為:
第三種方法與第二種方法的區(qū)別在于第三種方法中省去了結(jié)構(gòu)名,而直接給出結(jié)構(gòu)變量。
在程序中使用結(jié)構(gòu)變量時(shí),往往不把她作為一個(gè)整體來使用。
在ANSI C中除了允許有相同類型的結(jié)構(gòu)變量相互賦值以外,一般對結(jié)構(gòu)變量的使用,包括 賦值、輸入、輸出、運(yùn)算 等都是通過結(jié)構(gòu)變量的成員來實(shí)現(xiàn)的。
表示結(jié)構(gòu)變量成員的一般形式為:
結(jié)構(gòu)變量名.成員名
例如: boy1.num boy2.sex
如果成員本身又是一個(gè)結(jié)構(gòu),則必須逐級找到最低級的成員才能使用。如: boy1.birthday.month
結(jié)構(gòu)變量的賦值就是給各成員賦值。
數(shù)組的元素也可以是結(jié)構(gòu)類型的。
因此可以構(gòu)成結(jié)構(gòu)型數(shù)組。
初始化賦值:
當(dāng)然也可以在定義 stu結(jié)構(gòu) 時(shí)同時(shí)聲明 pstu。
賦值是把結(jié)構(gòu)變量的首地址賦予該指針變量,不能把結(jié)構(gòu)名賦予該指針變量。
如果 boy 是被聲明為 stu類型 的結(jié)構(gòu)變量。
則:
有了結(jié)構(gòu)指針變量,就能更方便地訪問結(jié)構(gòu)變量的各個(gè)成員。
其訪問的一般形式為:
(*結(jié)構(gòu)指針變量).成員名
或
結(jié)構(gòu)指針變量-成員名
例如: (*pstu).num 或 pstu-num
例如:
介紹數(shù)組的時(shí)候,曾介紹過數(shù)組的長度是預(yù)先定義好的,在整個(gè)程序中固定不變。
C語言中不允許動態(tài)數(shù)組類型。
例如:
但是又有此需求,為了解決這個(gè)問題,C語言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要動態(tài)地分配內(nèi)存空間,也可把不再使用的空間回收待用,為有效地利用內(nèi)存資源提供了手段。
常用的內(nèi)存管理函數(shù)有3個(gè):
例子:分配一塊區(qū)域,輸入一個(gè)學(xué)生數(shù)據(jù)
上面的例子采用了動態(tài)分配的辦法為一個(gè)結(jié)構(gòu)分配內(nèi)存空間。
每一次分配一塊空間可用來存放一個(gè)學(xué)生的數(shù)據(jù),我們可稱之為一個(gè)節(jié)點(diǎn)。
有多少個(gè)學(xué)生就應(yīng)該申請分配多少塊內(nèi)存空間,也就是說要建立多少個(gè)節(jié)點(diǎn)。
當(dāng)然用結(jié)構(gòu)數(shù)組也可以完成上述工作,但如果預(yù)先不能準(zhǔn)確把握學(xué)生人數(shù),也就無法確定數(shù)組大小。
而且當(dāng)學(xué)生留級、退學(xué)之后也不能把該元素占用的空間從數(shù)組中釋放出來。
用動態(tài)存儲的方法可以很好地解決這些問題。
有一個(gè)學(xué)生就分配一個(gè)節(jié)點(diǎn),無須預(yù)先確定學(xué)生的準(zhǔn)確人數(shù),某學(xué)生退學(xué),可刪去該節(jié)點(diǎn),并釋放該節(jié)點(diǎn)占用的存儲空間,從而節(jié)約了寶貴的內(nèi)存資源。
另一方面,用數(shù)組的方法必須占用一塊連續(xù)的內(nèi)存區(qū)域。
而使用動態(tài)分配時(shí),每個(gè)節(jié)點(diǎn)之間可以是不連續(xù)的(節(jié)點(diǎn)內(nèi)是連續(xù)的)。
節(jié)點(diǎn)之間的關(guān)系可以用指針實(shí)現(xiàn)。
即在節(jié)點(diǎn)結(jié)構(gòu)中定義一個(gè)成員項(xiàng)來存放下一節(jié)點(diǎn)的首地址,這個(gè)用于存放地址的成員,常把他稱為指針域。
可在第一個(gè)節(jié)點(diǎn)的指針域內(nèi) 存入第二個(gè)節(jié)點(diǎn)的首地址,在第二個(gè)節(jié)點(diǎn)的指針域內(nèi) 又存入第三個(gè)節(jié)點(diǎn)的首地址,如此串聯(lián)下去直到最后一個(gè)節(jié)點(diǎn)。
最后一個(gè)節(jié)點(diǎn)因無后續(xù)節(jié)點(diǎn)連接,其指針域可賦值 0
這種連接方式,在數(shù)據(jù)結(jié)構(gòu)中稱為“鏈表”。
鏈表的基本操作主要有以下幾種:
例子:建立一個(gè)三個(gè)節(jié)點(diǎn)的鏈表,存放學(xué)生數(shù)據(jù)。為簡單起見,我們假定學(xué)生數(shù)據(jù)結(jié)構(gòu)中只有學(xué)號和年齡兩項(xiàng)??删帉懸粋€(gè)建立鏈表的函數(shù)create。程序如下:
create函數(shù) 用于建立一個(gè)有 n個(gè)節(jié)點(diǎn) 的鏈表,他是一個(gè)指針函數(shù),他返回的指針指向 stu結(jié)構(gòu)。
在create函數(shù)內(nèi)定義了三個(gè) stu結(jié)構(gòu) 的指針變量。
head為頭指針,pf為指向兩相鄰節(jié)點(diǎn)的前一節(jié)點(diǎn)的指針變量。
pb為后一節(jié)點(diǎn)的指針變量。
枚舉是一種 基本數(shù)據(jù)類型 ,而不是一種 構(gòu)造類型 ,因?yàn)樗荒茉俜纸鉃槿魏位绢愋汀?/p>
enum 枚舉名{ 枚舉值表 };
例如: enum weekday { sun,mou,tue,wed,thu,fri,sat };
enum weeakday a,b,c;
或者為:
enum weekday { sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者為:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
例子:
說明:
只能把枚舉值賦予枚舉變量,不能把元素的數(shù)值直接賦予枚舉變量。如:
a=sun;b=mon; 是正確的
a=0;b=1; 是錯(cuò)誤的。
如果一定要把數(shù)值賦予枚舉變量,則必須使用強(qiáng)制類型轉(zhuǎn)換。
如: a=(enum weekday)2;
還應(yīng)該說明的是枚舉元素不是字符常量也不是字符串常量,使用時(shí)不要加單、雙引號。
例子:
typedef定義的一般形式為:
typedef 原類型名 新類型名
其中原類型名中含有定義部分,新類型名一般用大寫表示,一般用大寫表示,以便于區(qū)別。
有時(shí)也可用 宏定義 來代替 typedef 功能,但是 宏定義 是由 預(yù)處理 完成的,而 typedef 則是 在編譯時(shí) 完成的,后者更為靈活方便。
使用 typedef 定義數(shù)組、指針、結(jié)構(gòu)等類型將帶來很大的方便,不僅使書寫簡單而且使意義更加明確,因而增強(qiáng)了可讀性。
例如:
又如:
C/C++程序設(shè)計(jì)學(xué)習(xí)與實(shí)驗(yàn)系統(tǒng) 2009
本軟件是從事一線教學(xué)的大學(xué)教師根據(jù)C/C++初學(xué)者的特點(diǎn)量身打造的一個(gè)簡單易用的 C/C++學(xué)習(xí)與實(shí)驗(yàn)軟件(支持最新操作系統(tǒng)VISTA,沒有使用日期限制,可以無限期使用)。與軟件配套的《 C/C++程序設(shè)計(jì)教程(配有同步實(shí)驗(yàn)、流程控制語句動畫演示、提供教程中所有程序?qū)嵗蛯?shí)驗(yàn)源代碼(全部重新調(diào)試通過))》融入了作者多年的教學(xué)和學(xué)習(xí)經(jīng)驗(yàn)、編程建議、編程感悟,新增讀書筆記功能有利用戶 記錄教程中的重點(diǎn)、難點(diǎn)、學(xué)習(xí)心得體會,針對用戶學(xué)習(xí)教程中遇到的問題開通了疑難問題解答論壇等,同時(shí),為了便于C語言學(xué)習(xí),加入C語言學(xué)習(xí)指導(dǎo)、入門程序?qū)嵗?、典型源程序、典型的函?shù)算法,課程設(shè)計(jì)指導(dǎo)、課程設(shè)計(jì)源程序、 Visual C++6.0中英文編譯錯(cuò)誤信息同步顯示功能(并配有同步的語法錯(cuò)誤程序?qū)嵗?、修改方法等)?Turbo C2.0 中英文編譯錯(cuò)誤信息同步顯示功能、Turbo C++3.0常見編譯錯(cuò)誤信息、C語言專業(yè)詞匯的中英文對照、二級 C 語言的真題筆試試卷及答案與分析和上機(jī)模擬試題和詳盡的答案與分析等大量的學(xué)習(xí)資...
本人也是剛?cè)腴T的,我現(xiàn)在在看C程序設(shè)計(jì)(譚浩強(qiáng)寫的)這本書非常之好。建議你先看這個(gè)·在各大書店都有賣·
另外給你推薦一些c語言學(xué)習(xí)的資料:
C程序設(shè)計(jì)(譚浩強(qiáng)) :
C語言資料大全1.0 :
21天學(xué)通C語言第六版(PDG) :
C語言初學(xué)者入門講座 :
C程序設(shè)計(jì)習(xí)題參考解答.rar :
C語言學(xué)習(xí)和精華文摘 :
C語言課程設(shè)計(jì)案例精編 :
C專家編程(中文版) :
C語言經(jīng)典實(shí)例 :
C語言圣經(jīng)(英文) :
ANSI C語言標(biāo)準(zhǔn) :
高質(zhì)量C/C++編程指南 :
C語言函數(shù)大全(語法著色版) :
《C程序設(shè)計(jì)》的內(nèi)容很豐富,按照我們現(xiàn)在的教學(xué)大綱,教學(xué)的主要內(nèi)容是基礎(chǔ)知識、四種結(jié)構(gòu)的的程序設(shè)計(jì)、函數(shù)與數(shù)組的應(yīng)用和一些簡單的算法。在學(xué)習(xí)時(shí),同學(xué)們應(yīng)該把主要精力放在這些部分,通過實(shí)踐(練習(xí)和上機(jī)調(diào)試等熟練掌握。當(dāng)然,在初學(xué)C語言時(shí),可能會遇到有些問題理解不透,或者表達(dá)方式與以往數(shù)學(xué)學(xué)習(xí)中不同(如運(yùn)算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進(jìn)行學(xué)習(xí),待學(xué)完后面的章節(jié)知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學(xué)最欠缺,大多學(xué)不好的就是因?yàn)橐婚_始遇到困難就放棄,曾經(jīng)和好多同學(xué)談他的問題,回答是聽不懂、不想聽、放棄這樣三個(gè)過程,我反問,這節(jié)課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎么說自己聽不懂呢?相應(yīng)的根本就沒學(xué)習(xí),又談何學(xué)的好?
學(xué)習(xí)C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學(xué)習(xí)知識的重要方法,就是說,學(xué)習(xí)后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學(xué)生最不易做到的,然而卻又是最重要的。比如:在C語言中最典型的是關(guān)于結(jié)構(gòu)化程序設(shè)計(jì)構(gòu)思,不管是那種教材,一開始就強(qiáng)調(diào)這種方法,這時(shí)也許你不能充分體會,但是學(xué)到函數(shù)時(shí),再回頭來仔細(xì)體會,溫故知新,理解它就沒有那么難了。學(xué)習(xí)C語言就是要經(jīng)過幾個(gè)反復(fù),才能前后貫穿,積累應(yīng)該掌握的C知識。
那么,我們?nèi)绾螌W(xué)好《C程序設(shè)計(jì)》呢?
一.學(xué)好C語言的運(yùn)算符和運(yùn)算順序
這是學(xué)好《C程序設(shè)計(jì)》的基礎(chǔ),C語言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語言。在表達(dá)式方面較其它程序語言更為簡潔,如自加、自減、逗號運(yùn)算和三目運(yùn)算使表達(dá)式更為簡單,但初學(xué)者往往會覺的這種表達(dá)式難讀,關(guān)鍵原因就是對運(yùn)算符和運(yùn)算順序理解不透不全。當(dāng)多種不同運(yùn)算組成一個(gè)運(yùn)算表達(dá)式,即一個(gè)運(yùn)算式中出現(xiàn)多種運(yùn)算符時(shí),運(yùn)算的優(yōu)先順序和結(jié)合規(guī)則顯得十分重要。在學(xué)習(xí)中,只要我們對此合理進(jìn)行分類,找出它們與我們在數(shù)學(xué)中所學(xué)到運(yùn)算之間的不同點(diǎn)之后,記住這些運(yùn)算也就不困難了,有些運(yùn)算符在理解后更會牢記心中,將來用起來得心應(yīng)手,而有些可暫時(shí)放棄不記,等用到時(shí)再記不遲。
先要明確運(yùn)算符按優(yōu)先級不同分類,《C程序設(shè)計(jì)》運(yùn)算符可分為15種優(yōu)先級,從高到低,優(yōu)先級為1 ~ 15,除第2、3級和第14級為從右至左結(jié)合外,其它都是從左至右結(jié)合,它決定同級運(yùn)算符的運(yùn)算順序。下面我們通過幾個(gè)例子來說明:
(1) 5*8/4%10 這個(gè)表達(dá)式中出現(xiàn)3種運(yùn)算符,是同級運(yùn)算符,運(yùn)算順序按從左至右結(jié)合,因此先計(jì)算5 *8=40,然后被4除,結(jié)果為10,最后是%(求余數(shù))運(yùn)算,所以表達(dá)式的最終結(jié)果為10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
對于c=++a*b來說,按表中所列順序,+ +先執(zhí)行,*后執(zhí)行,所以+ + a執(zhí)行后,a的值為4,由于+ +為前置運(yùn)算,所以a的值4參與運(yùn)算,C的值計(jì)算式為4*5=20而不是3*5=15了;而對于d=a++*b來說,由于a + +為后置運(yùn)算,所以a值為4參與運(yùn)算,使得d的值仍為20,而a參與運(yùn)算后其值加1,值為5。 這個(gè)例子執(zhí)行后,a的值為5,b的值為5,c的值為20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b* 5)
例子中的“,”是逗號結(jié)合運(yùn)算,上式稱為逗號表達(dá)式,自左向右結(jié)合,最后一個(gè)表達(dá)式的結(jié)果值就是逗號表達(dá)式的結(jié)果,所以上面的逗號表達(dá)式結(jié)果為40,a的值為3,b的值為8,c的值為40。
(4)a=5;b=6;c=ab?a:b;
例中的ab?a:b是一個(gè)三目運(yùn)算,它的功能是先做關(guān)系運(yùn)算ab部分,若結(jié)果為真,則取問號后a的值,否則取冒號后b的值,因此c的值應(yīng)該為6,這個(gè)運(yùn)算可以用來代替if…else…語句的簡單應(yīng)用。
二.學(xué)好C語言的四種程序結(jié)構(gòu)
(1)順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。
例如;a = 3,b = 5,現(xiàn)交換a,b的值,這個(gè)問題就好象交換兩個(gè)杯子水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋?c = a; a = b; b = c; 執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執(zhí)行結(jié)果就變成a = b = c = 5,不能達(dá)到預(yù)期的目的,初學(xué)者最容易犯這種錯(cuò)誤。 順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡單的完整程序,常見的輸入、計(jì)算,輸出三步曲的程序就是順序結(jié)構(gòu),例如計(jì)算圓的面積,其程序的語句順序就是輸入圓的半徑r,計(jì)算s = 3.14159*r*r,輸出圓的面積s。不過大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。
(2) 分支結(jié)構(gòu)
順序結(jié)構(gòu)的程序雖然能解決計(jì)算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ句。分支結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計(jì)算,設(shè)計(jì)這類程序時(shí)往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計(jì)分析與語言分開,使得問題簡單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。
學(xué)習(xí)分支結(jié)構(gòu)不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的功能,嵌套結(jié)構(gòu)也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結(jié)構(gòu)。
①if(條件)
{
分支體
}
這種分支結(jié)構(gòu)中的分支體可以是一條語句,此時(shí)“{ }”可以省略,也可以是多條語句即復(fù)合語句。它有兩條分支路徑可選,一是當(dāng)條件為真,執(zhí)行分支體,否則跳過分支體,這時(shí)分支體就不會執(zhí)行。如:要計(jì)算x的絕對值,根據(jù)絕對值定義,我們知道,當(dāng)x=0時(shí),其絕對值不變,而x0時(shí)其絕對值是為x的反號,因此程序段為:if(x0) x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語句構(gòu)成。如:求ax^2+bx+c=0的根
分析:因?yàn)楫?dāng)b^2-4ac=0時(shí),方程有兩個(gè)實(shí)根,否則(b^2-4ac0)有兩個(gè)共軛復(fù)根。其程序段如下:
d=b*b-4*a*c;
if(d=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fi\n”r, i);
printf(“x2=%8.4f-%8.4fi\n”r,i)
}
③嵌套分支語句:其語句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語句雖可解決多個(gè)入口和出口的問題,但超過3重嵌套后,語句結(jié)構(gòu)變得非常復(fù)雜,對于程序的閱讀和理解都極為不便,建議嵌套在3重以內(nèi),超過3重可以用下面的語句。
④switch開關(guān)語句:該語句也是多分支選擇語句,到底執(zhí)行哪一塊,取決于開關(guān)設(shè)置,也就是表達(dá)式的值與常量表達(dá)式相匹配的那一路,它不同if…else 語句,它的所有分支都是并列的,程序執(zhí)行時(shí),由第一分支開始查找,如果相匹配,執(zhí)行其后的塊,接著執(zhí)行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個(gè)分支是否匹配。這個(gè)語句在應(yīng)用時(shí)要特別注意開關(guān)條件的合理設(shè)置以及break語句的合理應(yīng)用。
(3)循環(huán)結(jié)構(gòu):
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長的程序結(jié)構(gòu),C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do –while循環(huán)和for循環(huán)。四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會給程序的運(yùn)行帶來不可預(yù)料的錯(cuò)誤,在學(xué)習(xí)中我們主要學(xué)習(xí)while、do…while、for三種循環(huán)。常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會明白如何替換使用,如把while循環(huán)的例題,用for語句重新編寫一個(gè)程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見錯(cuò)誤。
在學(xué)完這三個(gè)循環(huán)后,應(yīng)明確它們的異同點(diǎn):用while和do…while循環(huán)時(shí),循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語句1中進(jìn)行的;while 循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而do…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說do…while的循環(huán)體最少被執(zhí)行一次,而while 循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán),而goto語句與if構(gòu)成的循環(huán),是不能用break和 continue語句進(jìn)行控制的。
順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),其實(shí)不管哪種結(jié)構(gòu),我們均可廣義的把它們看成一個(gè)語句。在實(shí)際編程過程中常將這三種結(jié)構(gòu)相互結(jié)合以實(shí)現(xiàn)各種算法,設(shè)計(jì)出相應(yīng)程序,但是要編程的問題較大,編寫出的程序就往往很長、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個(gè)問題的方法是將C程序設(shè)計(jì)成模塊化結(jié)構(gòu)。
(4)模塊化程序結(jié)構(gòu)
C語言的模塊化程序結(jié)構(gòu)用函數(shù)來實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫成一個(gè)C函數(shù),然后通過主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來實(shí)現(xiàn)一大型問題的C程序編寫,因此常說:C程序=主函數(shù)+子函數(shù)。 因些,對函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過上機(jī)調(diào)試加以鞏固。
三.掌握一些簡單的算法
編程其實(shí)一大部分工作就是分析問題,找到解決問題的方法,再以相應(yīng)的編程語言寫出代碼。這就要求掌握算法,根據(jù)我們的《C程序設(shè)計(jì)》教學(xué)大綱中,只要求我們掌握一些簡單的算法,在掌握這些基本算法后,要完成對問題的分析就容易了。如兩個(gè)數(shù)的交換、三個(gè)數(shù)的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內(nèi)在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過程,對代碼的理解就不難了。如用選擇法對10個(gè)不同整數(shù)排序(從小到大),選擇法排序思路:設(shè)有10個(gè)元素a[1]~a[10],將a[1]與a[2]~a[10]比較,若a[1]比a[2]~a[10]都小,則不進(jìn)行交換,即無任何操作;若a[2]~a[10] 中有一個(gè)比a[1]小,則將其中最大的一個(gè)(假設(shè)為a[i])與a[1]交換,此時(shí)a[1]中存放了10個(gè)中最小的數(shù)。第二輪將a[2]與a[3]~a[10]比較,將剩下9個(gè)數(shù)中的最小者a[i]與a[2]交換,此時(shí)a[2] 中存放的10個(gè)數(shù)中第2小的數(shù);依此類推,共進(jìn)行9輪比較,a[1]到a[10]就已按從小到大的順序存放。即每一輪都找出剩下數(shù)中的最小一個(gè),代碼如下:
for(i=1;i=9;i++)
for(j=i+1;j=10;j++)
if(a[i]a[j]
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}