語言程序設計9期末復習課_第1頁
語言程序設計9期末復習課_第2頁
語言程序設計9期末復習課_第3頁
語言程序設計9期末復習課_第4頁
語言程序設計9期末復習課_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、CC語言程序設計語言程序設計中山大學數學與計算科學學院中山大學數學與計算科學學院馮馮 偉偉2013-1-82013-1-8 本課程內容概況本課程內容概況一、程序設計初步一、程序設計初步二、基本數據類型與基本操作二、基本數據類型與基本操作三、結構化的流程設計三、結構化的流程設計四、模塊化的函數設計四、模塊化的函數設計五、復雜數據類型及其操作五、復雜數據類型及其操作六、程序開發(fā)與調試六、程序開發(fā)與調試本課程目的本課程目的1 1、掌握、掌握CC語言的語法、語義、語用。語言的語法、語義、語用。2 2、掌握結構化程序設計的思想、方法。、掌握結構化程序設計的思想、方法。3 3、掌握小規(guī)模程序的設計、編寫、

2、調試。、掌握小規(guī)模程序的設計、編寫、調試。4 4、掌握程序設計中一些常規(guī)算法。、掌握程序設計中一些常規(guī)算法。學好學好CC語言程序設計語言程序設計1 1、記憶力、記憶力( (前提條件前提條件) ): 牢記牢記CC語法規(guī)則及其用法語法規(guī)則及其用法( (語法語法, ,語義語義, ,語語用用) )。2 2、邏輯分析能力、邏輯分析能力( (內在基礎內在基礎) ): 習慣用習慣用CC語言思考和表達解題詳細步驟語言思考和表達解題詳細步驟( (算法算法) )。3 3、上機實踐、上機實踐( (關鍵所在關鍵所在- -實踐出真知實踐出真知) ): 加深理解,熟練掌握并靈活運用加深理解,熟練掌握并靈活運用CC程序程序

3、設計。設計。CC語言源程序的上機建立和運行的基本過程語言源程序的上機建立和運行的基本過程 靜態(tài)檢查靜態(tài)檢查 目標程序目標程序 可執(zhí)行程序可執(zhí)行程序 編輯編輯 編譯編譯 連接連接 執(zhí)行執(zhí)行 結果結果 源程序源程序 動態(tài)檢查動態(tài)檢查 有錯F.cF.objF.exe有錯有錯有錯結構化程序設計的思想和方法結構化程序設計的思想和方法(1).(1).自頂向下:有序性自頂向下:有序性(2).(2).逐步細化:由粗到細的層次性逐步細化:由粗到細的層次性(3).(3).模塊化設計:按功能化分為模模塊化設計:按功能化分為模塊塊函數函數(4).(4).結構化編碼:三種基本結構結構化編碼:三種基本結構基本數據類型與基

4、本操作基本數據類型與基本操作1 1、基本數據類型、基本數據類型2 2、運算符和表達式、運算符和表達式3 3、數據輸入和輸出、數據輸入和輸出CC語言的數據類型語言的數據類型數數據據類類型型基本類型基本類型構造類型構造類型指針類型指針類型空類型空類型字符類型字符類型枚舉類型枚舉類型數組類型數組類型結構體類型結構體類型共同體類型共同體類型文件類型文件類型單精度型單精度型雙精度型雙精度型整型整型實型實型數值類型數值類型基本數據類型的存儲空間長度及取值范圍基本數據類型的存儲空間長度及取值范圍signed charsigned charunsigned charunsigned char -27 -27(

5、27-1)(27-1)0 0(28-1) ASCII(28-1) ASCII碼碼025502558 88 8signed intsigned intunsigned intunsigned int-215-215(215-1)(215-1)0 0(216-1) (216-1) 32323232floatfloatdoubledouble-3.4-3.410-3810-383.43.41038 f F1038 f F-1.7-1.710-30810-3081.71.710308 10308 32326464取值范圍取值范圍長度長度類型類型 注意:注意:1. 1. 長度是比特長度是比特( (位位)

6、 )數,數,8 8個比特是個比特是1 1個字節(jié)。個字節(jié)。 2. 2. 存儲長度和取值范圍可能因具體機器和編譯系統(tǒng)而異,存儲長度和取值范圍可能因具體機器和編譯系統(tǒng)而異, 用運算符用運算符sizeofsizeof求字節(jié)數。求字節(jié)數。強調說明強調說明1 1、在、在CC語言中,在使用變量前必須先對其進語言中,在使用變量前必須先對其進行定義行定義 ( (先定義后使用先定義后使用) ),以申請存儲空間。變量,以申請存儲空間。變量名必須名必須 符合標識符的命名規(guī)則。變量的數據類符合標識符的命名規(guī)則。變量的數據類型決定了型決定了 變量占用的內存空間的大小。變量占用的內存空間的大小。2 2、變量值的改變可由賦值

7、語句、變量值的改變可由賦值語句( (表達式表達式) )、鍵、鍵盤輸入盤輸入 等實現。變量在任一時該只能保存一個等實現。變量在任一時該只能保存一個值,而且值,而且 該值只與最后一次賦值有關該值只與最后一次賦值有關( (當前值當前值) )。3 3、CC語言規(guī)定:在函數體內部,只能在第一語言規(guī)定:在函數體內部,只能在第一個可執(zhí)個可執(zhí) 行語句前定義變量。因此,一般在函數行語句前定義變量。因此,一般在函數開頭聲明開頭聲明 部分進行變量定義。部分進行變量定義。關于變量的其它說明關于變量的其它說明1) 1) 循環(huán)變量用簡單寫法,如循環(huán)變量用簡單寫法,如 i, j, k i, j, k 等等2) 2) 變量名

8、要有意義,見名知意:變量名要有意義,見名知意:scorescore分數,分數,ageage年齡年齡3) 3) 變量名不要太長,書寫麻煩,記憶麻煩變量名不要太長,書寫麻煩,記憶麻煩4) 4) 不允許兩個全局變量同名,否則編譯程序時不允許兩個全局變量同名,否則編譯程序時出錯出錯5) 5) 同一個函數內不能定義兩個同名的局部變量,同一個函數內不能定義兩個同名的局部變量,但不同函數內的局部變量可以重名但不同函數內的局部變量可以重名 普通常量與符號常量普通常量與符號常量1) 1) 常量可以是任何的基本數據類型,表示方法由其常量可以是任何的基本數據類型,表示方法由其類型決定。類型決定。2) 2) 普通普通

9、( (直接、字面直接、字面) )常量常量: : 一般的常量。一般的常量。 如整數、實數、字符、轉義字符、字符串等。如整數、實數、字符、轉義字符、字符串等。3) 3) 符號常量:在程序中指定用標識符名字代表的常符號常量:在程序中指定用標識符名字代表的常量。量。 符號常量有兩種定義方法:符號常量有兩種定義方法: a. a.宏常量,在程序文件首部定義:宏常量,在程序文件首部定義:# define PI # define PI 3.14593.1459 b. b.變量常量,按變量說明定義:變量常量,按變量說明定義:const float const float PI=3.14159f;PI=3.141

10、59f; 使用符號常量含義清楚,見名知意,且易修改,使用符號常量含義清楚,見名知意,且易修改,一改全一改全 改。習慣上,符號常量名用大寫改。習慣上,符號常量名用大寫( (區(qū)別變量名用區(qū)別變量名用小寫小寫) )。1 1字符常量:用一對單撇號括起來的一個字符字符常量:用一對單撇號括起來的一個字符 注意注意: : 不能用雙撇號代替單撇號。不能用雙撇號代替單撇號。2 2轉義字符:將反斜杠后面字符轉成別的意思轉義字符:將反斜杠后面字符轉成別的意思 (1) (1) 用反斜杠開頭后面跟一個字母代表一個特殊字符用反斜杠開頭后面跟一個字母代表一個特殊字符 (2) (2) 用用代表字符代表字符“”“”,用,用 和

11、和”代表字符單和雙撇代表字符單和雙撇號號 (3) (3) 用用 后跟后跟1 1到到3 3個八進制數代表相應的個八進制數代表相應的ASCIIASCII的字符的字符 (4) (4) 用用xx后跟后跟1 1到到2 2個十六進制數代表相應的個十六進制數代表相應的ASCIIASCII的字符的字符3 3字符串常量:用一對雙撇號括起來的字符序列字符串常量:用一對雙撇號括起來的字符序列 注意注意: : 存儲時多占存儲時多占1 1個字節(jié),以存儲結束標志個字節(jié),以存儲結束標志0(0(空字空字符符) )0101算術運算符算術運算符 (+ - + - * * / % + - / % + -)0202關系運算符關系運算

12、符 ( = = = !=)0303邏輯運算符邏輯運算符 (?。?! & | & |)0404位運算符位運算符 ( | & | &)0505賦值運算符賦值運算符 (= = 復合賦值運算符)復合賦值運算符)0606條件運算符條件運算符 (?(?: :)0707逗號運算符逗號運算符 (,)(,)0808指針運算符指針運算符 (* *)0909地址和引用運算符地址和引用運算符 (& &)1010求字節(jié)數運算符求字節(jié)數運算符 (sizeofsizeof)1111強制類型轉換運算符強制類型轉換運算符 ( ( (類型類型) ) 或類型或類型( ) ( ) )12

13、12分量運算符分量運算符 (成員運算符指向成員運算賦(成員運算符指向成員運算賦 )1313下標運算符下標運算符 ( )1414其它其它 (如函數調用運算符(如函數調用運算符() ())運算符運算符( (優(yōu)先級和結合性優(yōu)先級和結合性) )printfprintf函數函數該函數是最常用的有格式的輸出函數。用法如下:該函數是最常用的有格式的輸出函數。用法如下: printf(“ printf(“格式控制字符串格式控制字符串”,”,輸出表列輸出表列); );注意:注意: 1) “ 1) “格式控制字符串格式控制字符串”是用雙撇號括起來的字符是用雙撇號括起來的字符串,包括串,包括格式說明和普通字符。格式

14、說明和普通字符。 2) 2) 格式說明由格式說明由“%”“%”和格式字符組成,作用是將和格式字符組成,作用是將輸出數據轉輸出數據轉換為指定的格式輸出換為指定的格式輸出( (提倡類型匹配一致提倡類型匹配一致, ,避免隱式避免隱式轉換轉換) ),即,即說明對應輸出項在輸出時的位置寬度及相應的數據說明對應輸出項在輸出時的位置寬度及相應的數據類型。類型。 3) 3) 普通字符是需要原樣輸出的字符,目的是提示普通字符是需要原樣輸出的字符,目的是提示說明,說明,增加輸出數據的可讀性。增加輸出數據的可讀性。 4) “ 4) “輸出表列輸出表列”可以是表達式、變量、常量等列可以是表達式、變量、常量等列表表(

15、(建議輸建議輸出表列不要實現計算功能出表列不要實現計算功能) ),每項之間用逗號,每項之間用逗號“,”“,”隔開。隔開。 5) 5) 在使用時,建議嚴格按照格式要求,提倡個數在使用時,建議嚴格按照格式要求,提倡個數對應、對應、類型匹配,即格式符的個數應該與輸出項的個數相類型匹配,即格式符的個數應該與輸出項的個數相同,并且同,并且對應的數據類型應該一致。對應的數據類型應該一致。格式符格式符1 1、格式符的標準寫法:、格式符的標準寫法: %-m.n %-m.n字母字母 關于附加格式字符或修飾符的說明:關于附加格式字符或修飾符的說明: a) a) 正負號:用以指定輸出項左右對齊方式,正負號:用以指定

16、輸出項左右對齊方式,負號是左負號是左對齊,缺省正號()為右對齊,剩余位置補對齊,缺省正號()為右對齊,剩余位置補空格。空格。 b) b) 域寬及精度描述符域寬及精度描述符m.nm.n:mm是最小域寬,是最小域寬,即輸出數即輸出數據所占最小位數據所占最小位數( (包括可能的小數點所占的一包括可能的小數點所占的一位位) ),若超,若超出該位數,則按實際位數輸出;出該位數,則按實際位數輸出;n n是精度,輸出是精度,輸出實數時實數時是小數位數,輸出字符串時是自左端截取的字是小數位數,輸出字符串時是自左端截取的字符個數。符個數。2 2、常用格式符:、常用格式符:符號符號數據類型數據類型符號符號數據類型

17、數據類型符號符號數據類型數據類型%dint%cchar%o8進制數進制數%ldlong %s字符串字符串%號號%ffloat%u無符號無符號%e指數指數%lfdouble%x16進制進制 注意:輸出實數時,若不指定精度,默認輸出注意:輸出實數時,若不指定精度,默認輸出6 6位小數,但輸出的數字并非都是有效數字,位小數,但輸出的數字并非都是有效數字,floatfloat和和doubledouble型實數的有效位數分別是型實數的有效位數分別是7 7位和位和1616位,最后位,最后一位都采取一位都采取4 4舍舍5 5入。規(guī)范化指數形式輸出位數規(guī)定。入。規(guī)范化指數形式輸出位數規(guī)定。scanfscanf

18、函數函數該函數是標準輸入函數,用法如下:該函數是標準輸入函數,用法如下: scanf(“ scanf(“格式控制字符串格式控制字符串”,”,內存地址表列內存地址表列); );注意:注意:1) “1) “格式串格式串”中中“格式符格式符”的含義與的含義與printfprintf說明說明基本一致。基本一致。 格式符的標準寫法:格式符的標準寫法:%* *mm格式字符格式字符2) “2) “內存地址表列內存地址表列”指的是用逗號分隔的內存地指的是用逗號分隔的內存地址,可以址,可以 是變量地址或字符串的首地址,是變量地址或字符串的首地址,& &是取變量地址符。是取變量地址符。3) 3)

19、格式串中的格式符與內存地址列表個數必須相格式串中的格式符與內存地址列表個數必須相同,對應的數據類型必須一致,類型匹配,一同,對應的數據類型必須一致,類型匹配,一一對應。一對應。4) 4) 在鍵盤上讀入一個字符串,可利用在鍵盤上讀入一個字符串,可利用scanfscanf函數函數的的“%s” “%s” 格式,但遇空格或回車時結束。若格式,但遇空格或回車時結束。若輸入帶空格字符串,可以使用輸入帶空格字符串,可以使用string.hstring.h中的函中的函數數gets(str)gets(str),遇回車時結束。,遇回車時結束。應用中應該強調的問題應用中應該強調的問題1) 1) 建議建議“格式串格式

20、串”中只出現中只出現“格式符格式符”,除非必要的提示,除非必要的提示說明,其它符號最多只出現逗號說明,其它符號最多只出現逗號“,”“,”或空格。如:或空格。如: scanf(“%d,%d,%f”,&a,&b,&c); / scanf(“%d,%d,%f”,&a,&b,&c); / 逗號分隔逗號分隔 scanf(“%d%d%f”,&a,&b,&c); / scanf(“%d%d%f”,&a,&b,&c); / 空格回車跳格分隔空格回車跳格分隔 2) 2) 如果如果“格式串格式串%”%”中出現其它非中出

21、現其它非“格式符格式符”,則從鍵盤,則從鍵盤上上 輸入數據時,必須按順序原樣輸入相應字符。如:輸入數據時,必須按順序原樣輸入相應字符。如: scanf(a=%d,b=%d,%f,&a,&b,&c); scanf(a=%d,b=%d,%f,&a,&b,&c); 3) 3) 輸入數據時不能規(guī)定精度,這與輸入數據時不能規(guī)定精度,這與printf()printf()函數不同。函數不同。4) “4) “域寬域寬”指定輸入數據所占列數,系統(tǒng)按照域寬截取相指定輸入數據所占列數,系統(tǒng)按照域寬截取相 應位數;抑制字符應位數;抑制字符“* *”表示本輸入項在按格式說

22、明讀入表示本輸入項在按格式說明讀入數據后不賦給任何變量,即跳過該輸入項。數據后不賦給任何變量,即跳過該輸入項。結構化的流程設計結構化的流程設計3.1 3.1 順序結構順序結構3.2 3.2 選擇結構選擇結構3.3 3.3 循環(huán)結構循環(huán)結構3.4 3.4 限定轉向限定轉向CC語言語句概括語言語句概括 C C語言基本語句語言基本語句表表達達式式語語句句控控制制語語句句復合表達式語句復合表達式語句簡單表達式語句簡單表達式語句函數調用語句函數調用語句( (數據聲明數據聲明& &執(zhí)行語句執(zhí)行語句) )賦值語句賦值語句空語句空語句流程控制語句流程控制語句限定轉向語句限定轉向語句限定轉向限定

23、轉向(break;continue;return)(break;continue;return)無限定轉向和退出無限定轉向和退出(goto;exit()(goto;exit()選擇結構選擇結構循環(huán)結構循環(huán)結構while;dowhilewhile;dowhileforfor多分支多分支二分支二分支(ifelse)(ifelse)else ifelse ifswitchswitchif if 選擇結構選擇結構1 1)選擇基本結構雙分支選擇結構)選擇基本結構雙分支選擇結構 if( if(表達式表達式) ) 語句塊語句塊1;1; else else 語句塊語句塊2; 2; 2 2)缺?。┤笔lsee

24、lse的選擇型結構單分支選擇結構的選擇型結構單分支選擇結構 if( if(表達式表達式) ) 語句塊語句塊; ; 3 3) if if條件語句的嵌套復合分支選擇結構條件語句的嵌套復合分支選擇結構 if( if(表達式表達式1) 1) if( if(表達式表達式2)2) 語句塊語句塊1;1; else else 語句塊語句塊2 2; else else 語句語句3; 3; 4 4) if-else-if if-else-if結構多分支選擇結構結構多分支選擇結構 if( if(表達式表達式1) 1) 語句塊語句塊1; 1; else if( else if(表達式表達式2)2) 語句塊語句塊2;

25、2; else else 語句塊語句塊3 3; switchswitch選擇結構多分支選擇結構選擇結構多分支選擇結構 switch ( switch (表達式表達式) ) case case 常量表達式常量表達式1: 1: 語句塊語句塊1; break;1; break; case case 常量表達式常量表達式n: n: 語句塊語句塊n; break;n; break; default: default: 語句塊語句塊n+1n+1; 1) switch1) switch后的表達式只能是整型、字符型或枚舉型表達式后的表達式只能是整型、字符型或枚舉型表達式;casecase后的常量表達式結果只能

26、是常量值;而語句塊后的常量表達式結果只能是常量值;而語句塊ii可以簡單語句、空語句、復合語句塊,也可以省略??梢院唵握Z句、空語句、復合語句塊,也可以省略。2) 2) 先計算表達式的值,若值等于某個常量表達式值,則選先計算表達式的值,若值等于某個常量表達式值,則選擇執(zhí)行其對應語句塊擇執(zhí)行其對應語句塊ii;否則,執(zhí)行;否則,執(zhí)行defaultdefault對應語句塊對應語句塊n+1n+1。對表達式和常量表達式是否值一致只作一次判斷。對表達式和常量表達式是否值一致只作一次判斷,當選擇執(zhí)行語句塊,當選擇執(zhí)行語句塊ii后,如果未碰到語句后,如果未碰到語句breakbreak,則會,則會繼續(xù)順序執(zhí)行語句塊

27、繼續(xù)順序執(zhí)行語句塊ii后面的語句,直到碰到后面的語句,直到碰到breakbreak或到或到switchswitch最后語句為止。最后語句為止。whilewhile循環(huán)循環(huán)( (先判斷后執(zhí)行的當型循環(huán)先判斷后執(zhí)行的當型循環(huán)) )while(while(條件表達式條件表達式) / “) / “真真”為循環(huán)執(zhí)行條件為循環(huán)執(zhí)行條件 循環(huán)體語句循環(huán)體語句; ; 當條件為真時執(zhí)行語句,直到條件為假才結束循環(huán)。當條件為真時執(zhí)行語句,直到條件為假才結束循環(huán)。 首先要對條件表達式進行計算和判斷,若其值為真,首先要對條件表達式進行計算和判斷,若其值為真, 則執(zhí)行循環(huán)體中的語句,并進行下一次的條件判斷;則執(zhí)行循環(huán)體

28、中的語句,并進行下一次的條件判斷; 否則立即跳過循環(huán)體,即一次也不執(zhí)行循環(huán)。否則立即跳過循環(huán)體,即一次也不執(zhí)行循環(huán)。 do-whiledo-while循環(huán)循環(huán)( (先執(zhí)行后判斷的當型循環(huán)先執(zhí)行后判斷的當型循環(huán)) ) do do 循環(huán)體語句循環(huán)體語句; ; while( while(條件表達式條件表達式); / “); / “真真”為循環(huán)執(zhí)行條件為循環(huán)執(zhí)行條件 1) 1) 先執(zhí)行循環(huán)體語句,直到條件為假時結束循環(huán)。先執(zhí)行循環(huán)體語句,直到條件為假時結束循環(huán)。 2) 2) 首先要執(zhí)行一次循環(huán),然后才對條件表達式進行首先要執(zhí)行一次循環(huán),然后才對條件表達式進行計算和判斷,若其值為真,則執(zhí)行下一次循環(huán)體中

29、的語計算和判斷,若其值為真,則執(zhí)行下一次循環(huán)體中的語句,并進行隨后的條件判斷;否則立即退出循環(huán)體,即句,并進行隨后的條件判斷;否則立即退出循環(huán)體,即僅僅執(zhí)行一次循環(huán)。僅僅執(zhí)行一次循環(huán)。 3) while 3) while循環(huán)和循環(huán)和do-whiledo-while循環(huán)都是當型循環(huán),因此循環(huán)都是當型循環(huán),因此兩者的條件表達式的涵義是一致的,真則執(zhí)行循環(huán),假兩者的條件表達式的涵義是一致的,真則執(zhí)行循環(huán),假則退出循環(huán)。但由于后者至少執(zhí)行一次,因此前者可以則退出循環(huán)。但由于后者至少執(zhí)行一次,因此前者可以涵蓋后者,應用更廣。除此外,兩者等價。涵蓋后者,應用更廣。除此外,兩者等價。forfor循環(huán)循環(huán)(

30、(先判斷后執(zhí)行的當型循環(huán)先判斷后執(zhí)行的當型循環(huán)) )for(for(表達式表達式1;1;表達式表達式2;2;表達式表達式3)3) 循環(huán)體語句循環(huán)體語句; ; forfor循環(huán)的簡單理解:循環(huán)的簡單理解:for(for(初始化表達式初始化表達式; ;條件表達式條件表達式; ;修正表達式修正表達式) ) 循環(huán)體語句循環(huán)體語句; ; 當條件為真時執(zhí)行語句;直到條件為假才結束循環(huán)。當條件為真時執(zhí)行語句;直到條件為假才結束循環(huán)。 forfor循環(huán)的真正涵義循環(huán)的真正涵義表達式表達式1;1;for(;for(;表達式表達式2;) / while(2;) / while(表達式表達式2)2) 循環(huán)體語句循環(huán)

31、體語句; ; 表達式表達式3;3; 表達式表達式1 1執(zhí)行且執(zhí)行一次。執(zhí)行且執(zhí)行一次。表達式表達式2 2是條件或邏輯表達式,值只能是邏輯真或假。是條件或邏輯表達式,值只能是邏輯真或假。循環(huán)體語句和表達式循環(huán)體語句和表達式3 3共同構成共同構成forfor循環(huán)的循環(huán)體語句。循環(huán)的循環(huán)體語句。注意:如果缺少注意:如果缺少e2e2,循環(huán)條件恒為真,切忌死循環(huán)!,循環(huán)條件恒為真,切忌死循環(huán)!一、一、breakbreak語句語句: : 在在switchswitch語句中中止執(zhí)行選擇;語句中中止執(zhí)行選擇; 在循環(huán)語句中直接退出所在層循環(huán)。在循環(huán)語句中直接退出所在層循環(huán)。二、二、continuecontin

32、ue語句:在循環(huán)語句中,不執(zhí)行該語句后的語句,語句:在循環(huán)語句中,不執(zhí)行該語句后的語句, 但繼續(xù)下次是否執(zhí)行循環(huán)的判定。但繼續(xù)下次是否執(zhí)行循環(huán)的判定。限定轉向語句限定轉向語句1 1、把結構作為一個整體(一塊)、把結構作為一個整體(一塊) 用用 開始開始, ,用用 結束。結束。 如:如: 2 2、結構之前或之后空一行,如:、結構之前或之后空一行,如: / / for(i=0;in;i+) for(i=0;in;i+) / /3 3、若結構有嵌套,則內層結構、若結構有嵌套,則內層結構 一定要縮進,編輯器有標準一定要縮進,編輯器有標準 縮進,邏輯層次清晰。如:縮進,邏輯層次清晰。如: for() f

33、or() for() for() 4 4、當有多層嵌套時,最好每層、當有多層嵌套時,最好每層 開始和結束作適當注釋,以開始和結束作適當注釋,以 便知道結構開始點和結束點。便知道結構開始點和結束點。作作 業(yè)業(yè) 題題( (用結構化流程設計寫用結構化流程設計寫CC程序程序) )(1). (1). 打印出打印出1 120122012中的閏年,并統(tǒng)計閏年中的閏年,并統(tǒng)計閏年的個數。的個數。 (2). (2). 打印出打印出1 120122012中的素數,并統(tǒng)計素數中的素數,并統(tǒng)計素數的個數。的個數。(3). (3). 輸入兩個正整數輸入兩個正整數mm和和n n,求最大公約數,求最大公約數和最小公倍數。和

34、最小公倍數。(4). (4). 打印出所有的水仙花數。打印出所有的水仙花數。(5). (5). 求方程求方程 a a* *x x* *x+bx+b* *x+c=0 x+c=0 的根。的根。(6). (6). 輸入輸入3 3個二維點的坐標,求它們圍成的個二維點的坐標,求它們圍成的面積。面積。復雜數據類型復雜數據類型1 1 數組數組2 2 指針指針3 3 結構體與共同體結構體與共同體4 4 文件文件數組數組定義:數組是指一組相同類型數據組成的定義:數組是指一組相同類型數據組成的序列。序列。 表示:表示: 1) 1) 用一個統(tǒng)一的數組名稱來標識這一用一個統(tǒng)一的數組名稱來標識這一組數據;組數據; 2)

35、 2) 用下標來指示數組中元素的序號。用下標來指示數組中元素的序號。 概括:把一批相同數據類型的變量,概括:把一批相同數據類型的變量,用一個相同用一個相同名字來表示,這就是數組。當要用其中某名字來表示,這就是數組。當要用其中某個變量時,個變量時,只需用該名字與相應變量在數組中序號表只需用該名字與相應變量在數組中序號表示即可。示即可。 注意:同一數組中所有元素必須屬于注意:同一數組中所有元素必須屬于同一數據類同一數據類型。在實際程序設計中,很少不用數組的型。在實際程序設計中,很少不用數組的程序。將數程序。將數組與循環(huán)結合起來,可方便和高效處理大組與循環(huán)結合起來,可方便和高效處理大批量數據。批量數

36、據。一維數組一維數組1 1、數組定義:、數組定義: 數據類型數據類型 數組名數組名 正整數常量表達正整數常量表達式式 ; 數組的定義與普通變量的定義類似,數組的定義與普通變量的定義類似,只需在數只需在數組名后加上一對方括號和正整數常量表達組名后加上一對方括號和正整數常量表達式式( (包括包括符號常量符號常量) )以表示元素個數或數組長度以表示元素個數或數組長度( (大大小小) )即可。即可。2 2、數組元素的表示、數組元素的表示 數組名數組名 元素序號元素序號 / /數組元素等同數組元素等同于變量于變量括號括號 及其中的值又稱為下標。及其中的值又稱為下標。1)1)若若N N為數組長度,則下標從

37、為數組長度,則下標從0 0 開始,最開始,最大為大為N-1N-1。2) C2) C語言不允許數組的大小為變量。語言不允許數組的大小為變量。3) C3) C編譯不檢查下標是否編譯不檢查下標是否“越界越界”。數組初始化方法數組初始化方法1 1: 數據類型數據類型 數組名數組名 數組元素數組元素=常量數據列表常量數據列表; ;數組初始化方法數組初始化方法2:2: 數據類型數據類型 數組名數組名 = =常量數據列表常量數據列表; ; 方法方法2 2中,數組的中,數組的“元素個數元素個數”可以省略,此時,可以省略,此時,數組元素的個數數組元素的個數=“=“常量數據列表常量數據列表”中常量的個數。中常量的

38、個數。但若元素個數與初值表中數據個數不相同時,則必須但若元素個數與初值表中數據個數不相同時,則必須在數組名后給出元素個數。在數組名后給出元素個數。/花括弧中初值個數不能大于數組長度花括弧中初值個數不能大于數組長度, ,否則語法錯誤否則語法錯誤int a10=1,2,3,4,5,6,7,8,9,10;int a10=1,2,3,4,5,6,7,8,9,10;int b =1,2,3,4; /bint b =1,2,3,4; /b中的元素個數為中的元素個數為4 4int c20=1,2,3; int c20=1,2,3; /把把1,2,31,2,3分別賦給分別賦給c c前前3 3個元素個元素,c,

39、c其余元素被賦其余元素被賦0 0值值二維數組二維數組1 1、定義、定義( (兩對方括號內都是正整數常量表達式兩對方括號內都是正整數常量表達式) ) 數據類型數據類型 數組名數組名 行數行數 每行元素個數或列數每行元素個數或列數 2 2、元素的下標表示法:、元素的下標表示法: 數組名數組名 行下標行下標 列下標列下標 其中:行下標其中:行下標( (慢維慢維) )表示該元素所在的行,表示該元素所在的行, 列下標列下標( (快維快維) )表示該數組元素所在的列。表示該數組元素所在的列。CC語言規(guī)定:二維數組在內存中存儲是按行存儲,語言規(guī)定:二維數組在內存中存儲是按行存儲,即先行后列:先存儲第即先行后

40、列:先存儲第0 0行,再存第行,再存第1 1行,行,二維數組的初始化二維數組的初始化int a33=1,2,3,1,2,5;int b33=1,2,3,1,2,5;int c3=1,2,3,4,5,5,6,7; /列數不能省列數不能省在定義二維數組時也可以給數組初始化或賦初值:在定義二維數組時也可以給數組初始化或賦初值:數組初始化方法數組初始化方法1(1(提倡按行賦初值提倡按行賦初值, , 界限清楚界限清楚) ): 數據類型數據類型 數組名數組名 行數行數 每行元素個數每行元素個數= 第第0 0行常量列表行常量列表,第第1 1行常量列表行常量列表 ,.;.;數組初始化方法數組初始化方法2 2:

41、 數據類型數據類型 數組名數組名 行數行數 每行元素個數每行元素個數= 常量列表常量列表 ;字符數組與字符串字符數組與字符串1) 1) 字符串是數據處理中重要的數據類型,但字符串是數據處理中重要的數據類型,但CC語言中語言中沒有專門的字符串類型。字符串是指若干有效字符的序沒有專門的字符串類型。字符串是指若干有效字符的序列,而有效字符是指系統(tǒng)允許使用的字符,包括字母、列,而有效字符是指系統(tǒng)允許使用的字符,包括字母、數字、專用字符、轉義字符等。在數字、專用字符、轉義字符等。在CC語言中字符串用定界語言中字符串用定界符雙撇號來表示,如:符雙撇號來表示,如:“China”, “a+b=c”, “Chi

42、na”, “a+b=c”, “%dn” “%dn” 。 2) 2) 在在CC語言中,字符串是存放在一個字符型數組中。語言中,字符串是存放在一個字符型數組中。字符數組就是用來存放字符數據的數組。字符數組就是用來存放字符數據的數組。CC語言中字符串語言中字符串使用字符數組來表示和存儲。使用字符數組來表示和存儲。 3) 3) 字符串中的每個字符按次序順序存儲在內存中,每字符串中的每個字符按次序順序存儲在內存中,每個字符串都以個字符串都以00結束,該字符的結束,該字符的ASCIIASCII值為值為0 0。注意:字符串一定是字符數組,字符數組不一定字符串注意:字符串一定是字符數組,字符數組不一定字符串!

43、 !字符串的初始化字符串的初始化char a=“I like C programming”; / 推薦的初始化方法推薦的初始化方法char a30=I, ,l,i,k,e, ,C,p,r,o,g,r,a,m,m, i,n,g,0; 初始化:可逐個地為數組中各元素指定初值字符初始化:可逐個地為數組中各元素指定初值字符(繁瑣繁瑣),也可用字符串整體賦初值也可用字符串整體賦初值(方便方便),即指定一個字符串初值。,即指定一個字符串初值。 注意:賦值語句不支持字符數組或字符串的整體賦值,注意:賦值語句不支持字符數組或字符串的整體賦值,而只能逐個賦值。而只能逐個賦值。 char a30; a=I lik

44、e C programming; / Error數組名表示一個地址常量,而賦值運算符左邊必須是變量。數組名表示一個地址常量,而賦值運算符左邊必須是變量。 char Name230=Zhang San , Li Si;字符串的輸入與輸出字符串的輸入與輸出 1 1、scanfscanf函數格式輸入函數格式輸入 char a30; char a30; scanf(%c, &a0); / scanf(%c, &a0); /逐個輸入各元素值逐個輸入各元素值 scanf(%s,a); / scanf(%s,a); /一次輸入字符串一次輸入字符串 注意:注意:1) 1) 數組名本身就代表首元

45、素地址。數組名本身就代表首元素地址。 2) 2) 系統(tǒng)會自動加一個結束符系統(tǒng)會自動加一個結束符00。 3) scanf 3) scanf遇到空格或回車為結束。遇到空格或回車為結束。2 2、getsgets函數字符串輸入函數字符串輸入 char a30; char a30; gets(a); / gets(a); /輸入時以回車為結束標記輸入時以回車為結束標記注意:注意: scanf scanf和和getsgets整體輸入字符串的時候整體輸入字符串的時候, 參數必須是一維數組名參數必須是一維數組名( (存儲首地址存儲首地址) )。3 3、printfprintf函數格式輸出函數格式輸出 char

46、 a30; char a30; printf(%c,a0) / printf(%c,a0) /逐個輸出各元素值逐個輸出各元素值 printf(“%sn”,a); / printf(“%sn”,a); /一次輸出字符串,并回車換一次輸出字符串,并回車換行行 注意:注意:1) 1) 輸出元素時輸出元素時(%c)(%c),要帶下標。,要帶下標。 2) 2) 輸出串時輸出串時(%s)(%s)只用數組名只用數組名( (首地址首地址) )即可。即可。 3) 3) 輸出時不包括輸出時不包括0(0(字符串結束符字符串結束符) )。 4) 4) 字符數組或串中首個字符數組或串中首個00后字符不予輸后字符不予輸出

47、。出。4 4、putsputs函數字符串輸出函數字符串輸出( (一次輸出字符串一次輸出字符串, ,并自動換行并自動換行) ) char a20=I love China!; char a20=I love China!; puts(I love China!); puts(a); puts(I love China!); puts(a); 注意:注意: printf printf和和putsputs整體輸出字符串的時候,參數必須整體輸出字符串的時候,參數必須 是一維數組名或字符串是一維數組名或字符串( (一維數組存儲首地址一維數組存儲首地址) )。函數庫函數庫中的字符串函數中的字符串函數1 1

48、、strlen strlen 求字符串長度求字符串長度 strlen(1 strlen(1維字符數組名或串維字符數組名或串) ) 注意:返回值為第注意:返回值為第1 1個結束符個結束符00之前的實際長度。之前的實際長度。2 2、strcmp strcmp 比較兩個字符串的大小比較兩個字符串的大小(ASCII(ASCII碼值碼值) ) strcmp(1 strcmp(1維字符數組名或串維字符數組名或串1, 11, 1維字符數組名或串維字符數組名或串2)2) 注意:前者大于注意:前者大于, , 等于等于, , 小于后者返回值分別為小于后者返回值分別為1, 0, -11, 0, -1。3 3、str

49、cpy strcpy 字符串復制字符串復制( (覆蓋覆蓋) strncpy() strncpy(設定要復制的數目設定要復制的數目) ) strcpy(1 strcpy(1維字符數組維字符數組1 1名名, 1, 1維字符數組維字符數組2 2名或串名或串) ) 注意:字符數組注意:字符數組1 1必須足夠容納字符數組或串必須足夠容納字符數組或串2 2。用數組進行程序設計用數組進行程序設計(1). (1). 由鍵盤輸入由鍵盤輸入MM行行MM列的方陣,作矩陣轉置,最后輸出。列的方陣,作矩陣轉置,最后輸出。 要求轉置前后只用同一個二維數組實現程序。要求轉置前后只用同一個二維數組實現程序。(2). (2).

50、 由鍵盤輸入由鍵盤輸入MM個最大長度為個最大長度為N N的無空格的字符串,存入的無空格的字符串,存入 二維字符數組中,按二維字符數組中,按ASCIIASCII碼由小到大排序,最后輸出。碼由小到大排序,最后輸出。(3). P153(3). P153習題習題7.97.9對已排序數組,實現折半查找。對已排序數組,實現折半查找。模塊化的函數設計模塊化的函數設計1 1 函數定義及使用函數定義及使用2 2 函數的參數傳遞函數的參數傳遞3 3 數組作為函數參數數組作為函數參數4 4 函數的復雜調用函數的復雜調用5 5 全局變量與局部變量全局變量與局部變量6 6 變量和函數的存儲類別變量和函數的存儲類別7 7

51、 編譯預處理編譯預處理 函數的定義函數的定義數據類型數據類型 函數名函數名( (形參定義形參定義) ) 說明部分說明部分 語句部分語句部分 1 1、“數據類型數據類型”可以是簡單類型、可以是簡單類型、構造類型等。構造類型等。2 2、“說明部分說明部分”指的是變量的說明指的是變量的說明或函數說明?;蚝瘮嫡f明。3 3、“語句部分語句部分”,即可執(zhí)行語句。注即可執(zhí)行語句。注意:意:CC語言中語言中“說說明部分明部分”與與“語句語句部分部分”不能交叉。不能交叉。4 4、“形參定義形參定義”中的形參是一中的形參是一些變量,這些變量必須單獨定義。些變量,這些變量必須單獨定義。如:如:int x,int y

52、,float zint x,int y,float z,不能簡,不能簡寫為寫為int x,y,long zint x,y,long z函數調用的規(guī)則函數調用的規(guī)則 如果在函數如果在函數A A中使用函數中使用函數B B,則稱:函數,則稱:函數A A為主調用為主調用函數,函數函數,函數B B為被調用函數。函數調用過程的規(guī)則是:為被調用函數。函數調用過程的規(guī)則是:1. 1. 函數必須先定義后才能使用。即被調用函數應該在函數必須先定義后才能使用。即被調用函數應該在 主調用函數之前定義,或者先說明后定義。主調用函數之前定義,或者先說明后定義。2. 2. 函數定義和說明函數定義和說明( (聲明聲明) )不

53、同,后者又稱函數原型聲明,不同,后者又稱函數原型聲明,使編譯階段能對調用函數的合法性進行全面檢查。使編譯階段能對調用函數的合法性進行全面檢查。3. 3. 在使用函數時,實際參數與形式參數的個數必須相同,在使用函數時,實際參數與形式參數的個數必須相同,并且對應的數據類型必須相同。并且對應的數據類型必須相同。( (個數、順序、類型個數、順序、類型) )4. 4. 若函數定義前調用函數,則函數說明是必須的,函數若函數定義前調用函數,則函數說明是必須的,函數原型聲明的方法與變量定義類似,但可以省略形參名。原型聲明的方法與變量定義類似,但可以省略形參名。函數的使用函數的使用( (調用調用) )自定義函數

54、的使用與標準函數的使用是一樣的。用法如下:自定義函數的使用與標準函數的使用是一樣的。用法如下:函數名函數名( (實際參數列表實際參數列表) )函數名函數名( (實際參數列表實際參數列表); );或或用在表達式中用在表達式中用作程序語句用作程序語句(1) (1) 實際參數可以是:變量、常量、表達式、函數等。實際參數可以是:變量、常量、表達式、函數等。 (2) (2) 函數的參數傳遞就是把實參傳遞給形參的過程。函數的參數傳遞就是把實參傳遞給形參的過程。 若形參是非數組的變量,則為單向值傳遞;若形參是非數組的變量,則為單向值傳遞; 若形參為數組,則實參和形參共享地址。若形參為數組,則實參和形參共享地

55、址。(3) (3) 函數定義在調用之后,則必須進行函數原型聲明。函數定義在調用之后,則必須進行函數原型聲明。 原型中形參的變量名可以省略。數組特別規(guī)定!原型中形參的變量名可以省略。數組特別規(guī)定!變量的作用域與生存期變量的作用域與生存期1. 1. 變量在什么地方有效變量在什么地方有效( (可用可用) ):作用域:作用域( (空間可見性空間可見性) ) 變量按有效范圍,分為全局變量與局部變量。變量按有效范圍,分為全局變量與局部變量。2. 2. 變量在什么時候有效變量在什么時候有效( (可用可用) ):生存期:生存期( (時間存在性時間存在性) ) a a 靜態(tài)存儲:在編譯時分配的存儲單元;靜態(tài)存儲

56、:在編譯時分配的存儲單元; b b 動態(tài)存儲:只在程序執(zhí)行的某一段時間存在。動態(tài)存儲:只在程序執(zhí)行的某一段時間存在。 注意:變量是對程序中數據的存儲空間的抽象,有注意:變量是對程序中數據的存儲空間的抽象,有兩種兩種屬性:操作屬性屬性:操作屬性( (數據類型數據類型) )和存儲屬性和存儲屬性( (動態(tài)變量、動態(tài)變量、靜態(tài)靜態(tài)變量、外部變量變量、外部變量) )。 I. 全局變量全局變量(文件作用域文件作用域)定義:在所有函數之外定義的變量,稱為全局變量。定義:在所有函數之外定義的變量,稱為全局變量。有效范圍:從定義之處開始,對隨后所有函數都有有效范圍:從定義之處開始,對隨后所有函數都有效。效。II

57、. 局部變量局部變量(塊作用域塊作用域)定義:在某個函數內部定義的變量。定義:在某個函數內部定義的變量。有效范圍:局部變量只在定義它的函數內部有效。有效范圍:局部變量只在定義它的函數內部有效。 相同變量名在不同函數內部是互不相同相同變量名在不同函數內部是互不相同的。的。注意:當全局變量與局部變量名字相同時,它們是注意:當全局變量與局部變量名字相同時,它們是不同的變不同的變 量,此時局部變量的使用優(yōu)先于全局變量。量,此時局部變量的使用優(yōu)先于全局變量。(函數原型作用域:函數原型聲明時形參的作用范圍函數原型作用域:函數原型聲明時形參的作用范圍)標識符作用域可見性的一般規(guī)則標識符作用域可見性的一般規(guī)則

58、1. 1. 標識符要聲明在前,引用標識符要聲明在前,引用( (使用使用) )在后。在后。2. 2. 在同一作用域中,不能聲明同名的標識符。在同一作用域中,不能聲明同名的標識符。3. 3. 在沒有互相包含關系的不同的作用域中聲在沒有互相包含關系的不同的作用域中聲明的明的 同名標識符,互不影響。同名標識符,互不影響。4. 4. 如果在兩個或多個具有包含關系的作用域如果在兩個或多個具有包含關系的作用域中聲中聲 明了同名標識符,則外層標識符在內層不可明了同名標識符,則外層標識符在內層不可見。見。變量的存儲類別及特點變量的存儲類別及特點 動態(tài)變量:在程序執(zhí)行的某一時刻被動態(tài)地建立,并動態(tài)變量:在程序執(zhí)行

59、的某一時刻被動態(tài)地建立,并在另一時刻被動態(tài)撤銷的一種變量。動態(tài)變量包括:自動在另一時刻被動態(tài)撤銷的一種變量。動態(tài)變量包括:自動變量和寄存器變量。變量和寄存器變量。 1. 1. 自動變量自動變量( (缺省的存儲類別缺省的存儲類別) ) auto auto 數據類型數據類型 變量名列表;變量名列表; 自動變量用自動變量用autoauto定義,是局部變量,在對其賦值之前,定義,是局部變量,在對其賦值之前,它的值是不確定的,存儲在內存的動態(tài)存儲區(qū)。當程序進它的值是不確定的,存儲在內存的動態(tài)存儲區(qū)。當程序進入到函數時,入到函數時,autoauto定義的變量自動建立,當退出函數時,定義的變量自動建立,當退

60、出函數時,自動釋放。若沒有指出變量存儲類別,則默認是自動釋放。若沒有指出變量存儲類別,則默認是autoauto變量。變量。 2. 2. 寄存變量寄存變量 register register 數據類型數據類型 變量名列表;變量名列表; 具有與自動變量完全相同的性質,保存在具有與自動變量完全相同的性質,保存在CPUCPU的寄存的寄存器里,存取速度快,但不能定義太多這樣的變量。器里,存取速度快,但不能定義太多這樣的變量。 3. 3. 靜態(tài)變量靜態(tài)變量 static static 數據類型數據類型 變量名列表變量名列表=初始化初始化 ; static static變量保存在靜態(tài)存儲區(qū)。變量保存在靜態(tài)存儲區(qū)。staticstatic變量有全局靜態(tài)變量有全局靜態(tài)變量與局部靜態(tài)變量。變量與局部靜態(tài)變量。staticstatic變量在整個程序中只定義變量在整個程序中只定義1 1次。次。在函數中定義的在函數中定義的stat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論