freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c程序設(shè)計(jì)實(shí)例教程中ppt(編輯修改稿)

2024-11-15 04:35 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 X39。39。B39。,所以 AXC ABCDE。 “ABC”與“ ABCDE”誰(shuí)大 ? 用圖 比較: 因?yàn)? 39。\039。39。D’ 所以 ABC ABCDE。 39。A39。 39。B39。 39。C39。 39。\039。 39。A39。 39。B39。 39。C39。 39。D39。 39。E39。 39。\039。 圖 逐字符比較字符串 可以看出,兩個(gè)串的對(duì)應(yīng)字符比較,如果相等,則繼續(xù)比較,直到有一個(gè)串結(jié)束。 兩個(gè)串的比較,最后是三個(gè)結(jié)果之一:相等、大于、小于, 用 0、大于 0或小于 0的值表示這三種情況,其值是最后比較的字符值 (ASCII碼 )之差。 如 ABC與 ABCDE比較,結(jié)果是 39。\039。 39。D39。= 68 ,表示 ABC ABCDE。 【 說(shuō)明 】 ① 函數(shù) StrCmp中局部變量 i的初值為 0,因?yàn)閿?shù)組下標(biāo)開(kāi)始為 0。 ② while循環(huán)的關(guān)系式 s1[i] == s2[i]一定放在最后,因?yàn)橹挥袃蓚€(gè)字符串沒(méi)有結(jié)束的情況下才能比較兩個(gè)串的對(duì)應(yīng)字符 (用到邏輯短路,請(qǐng)參看第 2章小結(jié) )。 ③ 循環(huán)條件為 s1[i]!= 39。\039。amp。amp。 s2[i]!=39。\039。 amp。amp。 s1[i] == s2[i],那么,循環(huán)結(jié)束后應(yīng)該是 s1[i]==39。\039。 || s2[i]==39。\039。 || s1[i] != s2[i],意思是其中有一個(gè)串到了結(jié)束標(biāo)志,或者對(duì)應(yīng)字符不相等了。 ④ 函數(shù)完全用指針表達(dá)為 (指針 s1和 s2同步向后移動(dòng) ): int StrCmp(char *s1, char *s2) { while( *s1 amp。amp。 *s2 amp。amp。 *s1==*s2) { ++s1。 ++s2。 } return *s1 *s2。 } 因?yàn)閰?shù) s1和 s2是形式參數(shù),盡管最后 s1,s2已經(jīng)不再指向字符串的開(kāi)頭位置,但函數(shù)執(zhí)行結(jié)束后,參數(shù)都將被釋放。 【 例 410】 數(shù)組處理 《 通信錄 》 。 【 分析 】 通信錄可以看成類(lèi)似表 : 表 通信錄的結(jié)構(gòu) 序號(hào) 姓名 電話號(hào)碼 1 張三 8123456 2 李四 7123456 3 王五 6123456 …… …… …… 盡管也是一個(gè)二維表格,但每列的數(shù)據(jù)類(lèi)型不一樣,如序號(hào)是整數(shù)、姓名是字符串,電話號(hào)碼也用字符串。因此不能用二維數(shù)組 (數(shù)組的每一個(gè)元素?cái)?shù)據(jù)類(lèi)型都相同 )。 用三個(gè)一維數(shù)組 Num, Name, TelNum分別存儲(chǔ)表格的各列。 如果按姓名排序,當(dāng)交換某兩個(gè)姓名的時(shí)候,對(duì)應(yīng)的電話號(hào)碼也必須作相應(yīng)交換 (序號(hào)可以不變 )。 本例實(shí)現(xiàn)通信錄的輸入,然后按姓名進(jìn)行排序,最后顯示通信錄表格。 【 說(shuō)明 】 ① 每個(gè)姓名是一個(gè)字符串 (一維數(shù)組 ), N個(gè)姓名相當(dāng)于二維字符數(shù)組 ,這個(gè)二維數(shù)組的每一行是一個(gè)字符串。因此,程序中定義了Name[N][11],假設(shè)姓名不超過(guò) 10個(gè)字符,加上結(jié)束標(biāo)志,最多需要 11個(gè)字符。 ② 按姓名排序時(shí),比較兩個(gè)姓名實(shí)際上是比較兩個(gè)字符串。交換姓名時(shí),相應(yīng)的其它信息也要交換。 ③ 本程序把輸入、排序、輸出分成子模塊處理,主程序更清晰。 結(jié)構(gòu)體與共用體 ? 例 410處理通信錄時(shí),發(fā)現(xiàn)每個(gè)人的信息需要多種數(shù)據(jù)類(lèi)型,用了三個(gè)數(shù)組。但人們更習(xí)慣把每個(gè)人的信息看成一個(gè)整體,這樣把不同數(shù)據(jù)類(lèi)型的數(shù)據(jù)組織成一個(gè)整體就是結(jié)構(gòu)體。 【 例 411】 結(jié)構(gòu)體處理 《 通信錄 》 【 分析 】 每一個(gè)人的信息定義為: struct { int Num。 // 編號(hào) char Name[11]。 // 姓名 char TelNum[8]。 //電話號(hào)碼 }Table[N]。 這樣一個(gè)結(jié)構(gòu)體保存了一個(gè)人的通信錄全部信息的整體,用一維數(shù)組 Table[N]表示了通信錄的表格, Table[i]就是表格的第 i行 (i從 0開(kāi)始取值 ),第 i個(gè)人的姓名用 Table[i].Name表示。 【 說(shuō)明 】 ① 用以下辦法定義結(jié)構(gòu)體的同時(shí),定義了結(jié)構(gòu)體變量: struct { 類(lèi)型 成員名; …… }變量名; 變量名后需要分號(hào)。 引用結(jié)構(gòu)體成員用: 變量名 .成員名 ② 還可以定義成一種新的類(lèi)型: struct 類(lèi)型名 { 類(lèi)型 成員名; …… }; 然后再用這個(gè)結(jié)構(gòu)類(lèi)型定義變量: struct 類(lèi)型名 變量名; 或者更簡(jiǎn)單的既可定義結(jié)構(gòu)變量,同時(shí)也定義了結(jié)構(gòu)類(lèi)型,如: struct AAA { int Num。 char Name[11]。 char TelNum[8]。 }Table[N]。 ③ 上面定義結(jié)構(gòu)變量時(shí)“ struct 類(lèi)型名 變量名”還要保留字“ struct”。還可以這樣定義類(lèi)型: typedef struct { 類(lèi)型 成員名; …… }類(lèi)型名; 例如: typedef struct { int Num。 char Name[11]。 char TelNum[8]。 }AAA。 同樣定義了結(jié)構(gòu)類(lèi)型 AAA,再定義一維數(shù)組 Table如下: AAA Table[N]。 ④ 象上面定義的類(lèi)型 AAA如同系統(tǒng)定義的類(lèi)型int、 double一樣的使用,可以用結(jié)構(gòu)類(lèi)型再定義變量。但結(jié)構(gòu)體的變量需要引用結(jié)構(gòu)體的成員進(jìn)行存取數(shù)據(jù),如 Table[i].Num。 ⑤ 結(jié)構(gòu)體中的成員稱為域或字段。本例中的結(jié)構(gòu)有三個(gè)成員: Num,Nam和 TelNum。 【 例 412】 復(fù)數(shù)加法運(yùn)算 【 分析 】 復(fù)數(shù)由兩部分組成:實(shí)部和虛部,先定義一個(gè)復(fù)數(shù)類(lèi)型 plex,有兩個(gè)域 real, img: typedef struct { double real, img。 }plex; 構(gòu)造一個(gè)計(jì)算復(fù)數(shù)加法的函數(shù),其參數(shù)是兩個(gè)復(fù)數(shù),返回一個(gè)復(fù)數(shù)。復(fù)數(shù)加法:實(shí)部與實(shí)部相加、虛部與虛部相加。 【 說(shuō)明 】 ① 注意結(jié)構(gòu)類(lèi)型的定義、結(jié)構(gòu)變量的定義、結(jié)構(gòu)變量的成員的引用。 ② 本例還演示了結(jié)構(gòu)體變量的初始化,如 plex a={1,2}。 ③ C語(yǔ)言結(jié)構(gòu)體中的成員是以定義的先后順序連續(xù)存放的。如本例中的結(jié)構(gòu)體 plex有兩個(gè)成員 real和img,如果定義了 plex a,那么變量 a中的 real值在前, img值在后。 ④ 結(jié)構(gòu)體把一個(gè)對(duì)象封裝起來(lái),設(shè)計(jì)和理解更容易。如果把這個(gè)對(duì)象的數(shù)據(jù)的運(yùn)算 (如復(fù)數(shù)的加法 )也封裝在一起,就成了 C++里的“類(lèi)” (class) 。 ⑤ 提醒:結(jié)構(gòu)體類(lèi)型是抽象的,變量才是具體的。類(lèi)型不占空間,只有實(shí)例化成了變量才占用空間。 結(jié)構(gòu)體與指針 ? 程序設(shè)計(jì)經(jīng)常把結(jié)構(gòu)體與指針聯(lián)系在一起,比如第 7章講到的鏈表。 ? 結(jié)構(gòu)體與指針主要有兩個(gè)內(nèi)容:一是結(jié)構(gòu)體變量本身的指針 (地址 ),二是結(jié)構(gòu)體的某些域是指針變量。 ? 每一個(gè)結(jié)構(gòu)體變量的所有域在內(nèi)存中是連續(xù)存放的,這一片連續(xù)內(nèi)存空間有一個(gè)首地址(指針),這個(gè)首地址可以被其它指針變量用到。 結(jié)構(gòu)體的指針域保存了某一片空間的地址,甚至是結(jié)構(gòu)體變量的地址。例如,有下面的定義: struct link { int data。 struct link *next。 }p, q。 變量 p和 q是兩個(gè)結(jié)構(gòu)體變量。 如果有賦值操作 = amp。q, 則 q,如圖 ,此時(shí)可由 p得到 q的數(shù)據(jù): data或者寫(xiě)成(*()).data。 q q p p data amp。q data next data data next 圖 鏈表結(jié)點(diǎn)的結(jié)構(gòu) ? 值得一提的是,在結(jié)構(gòu)體 link的定義還沒(méi)有完成時(shí),它的域 next又用到了結(jié)構(gòu)體 link,這似乎違背了“先定義后使用”的原則,這種用法稱為自引用結(jié)構(gòu),只有指針成員才允許這樣遞歸定義。它的含義是:域 next所指向的空間就是結(jié)構(gòu)體 link。 ? 注意到了,指針是地址,是一片連續(xù)空間的首地址,但如果只知道首地址不知道這片空間的大小,是無(wú)法訪問(wèn)的。因此,應(yīng)該明確指出指針變量指向多大的空間,也就是指針指向的數(shù)據(jù)類(lèi)型 (數(shù)據(jù)類(lèi)型決定了變量占用空間的大小 )。 ? 計(jì)算機(jī)訪問(wèn)內(nèi)存中的數(shù)據(jù)是通過(guò)地址訪問(wèn)的,因此,在訪問(wèn)數(shù)據(jù)之前必須先確定存放數(shù)據(jù)的地址。第 7章用到的動(dòng)態(tài)數(shù)據(jù)組織,是程序運(yùn)行時(shí)主動(dòng)申請(qǐng)空間,分配的空間是由操作系統(tǒng)返回這片空間的首地址,知道了這片空間的首地址又知道這片空間存放數(shù)據(jù)的類(lèi)型 (占用空間的大小 ),訪問(wèn)數(shù)據(jù)就容易了。在本章用到的數(shù)組是在程序設(shè)計(jì)時(shí)就確定了。 共用體 ? 共用體就是多個(gè)成員使用同一片內(nèi)存空間。其定義與結(jié)構(gòu)體類(lèi)似,把結(jié)構(gòu)體的 struct改成union就成了共用體。 【 例 413】 登記表 【 分析 】 本例想示范“共用體”的概念和用法。 在現(xiàn)實(shí)生活中經(jīng)??匆?jiàn)表 : 表 工資級(jí)別登記表 姓名 工資或級(jí)別 張三 1800 李四 三級(jí) 王五 二級(jí) 邱六 2021 …… …… ? 在“工資或級(jí)別”欄中有兩種填法,要么填工資金額,要么填工資級(jí)別。盡管它們的數(shù)據(jù)類(lèi)型不同,但它們?cè)谕桓窭锾顚?xiě),占用“共同的空間”。 ? 上面的表格每一行有兩個(gè)成員,也就是一個(gè)結(jié)構(gòu)有兩個(gè)域。而“工資或級(jí)別”這個(gè)成員中再用兩個(gè)成員 :工資和級(jí)別,與結(jié)構(gòu)不同的是它們占用共同的空間,而這個(gè)空間的大小是由這兩個(gè)成員占用空間最大者決定,如填“級(jí)別”需要更大的空間,則系統(tǒng)按大的要求分配空間。 上面的結(jié)構(gòu)可定義為: struct { char Name[11]。 /* 姓名 */ union { double Pay。 /* 工資 */ char Level[5]。 /* 級(jí)別 */ }Wage。 }; 其中 union的定義和引用方法與 struct類(lèi)似 總體來(lái)看,上面的結(jié)構(gòu)只有兩個(gè)域 Name和 Wage. Wage的 Pay和 Level雖然占用的是同一片空間,但我們?cè)诔绦蛑性趺粗滥承械降状嫒氲氖?Pay還是 Level呢 ? 通常,在結(jié)構(gòu)中再加一個(gè)標(biāo)志域用來(lái)識(shí)別和區(qū)分共用成員 : struct { char Name[11]。 /* 姓名 */ char flag。 /* 標(biāo)志 ,區(qū)分使用 Pay還是 Level */ union { double Pay。 /* 工資 */ char Level[5]。 /* 級(jí)別 */ }Wage。 }; 規(guī)定標(biāo)志域 flag取值為 0時(shí), Wage存入的是工資,否則存入的是級(jí)別。 【 說(shuō)明 】 ① 既然用標(biāo)志區(qū)分了使用共用體的哪一個(gè)成員,在處理共用體的時(shí)候通常需要分情形處理,比如用 switch形成多分支結(jié)構(gòu)。 ② 共用體的目的是為了節(jié)約空間,但往往會(huì)給處理帶來(lái)麻煩,因此,選用共用體的時(shí)候應(yīng)充分考慮時(shí)間和空間的效率。 【 例 414】 用共用體取得整數(shù)的低字節(jié)和高字節(jié)。 【 分析 】 如果用兩字節(jié)表示一個(gè)整數(shù),則這個(gè)整數(shù)先存低字節(jié) Lo再存高字節(jié) Hi。例如,十進(jìn)制整數(shù) x的值為4321,它的二進(jìn)制數(shù)為 00010000 11100001,十六進(jìn)制表示為 0x10E1,在內(nèi)存中存為: Lo和 Hi組成一個(gè)結(jié)構(gòu)體 y, y與 x共用同一片空間,形成共用體 xy。 Lo Hi 11100001(十六進(jìn)制表示為 E1) 00010000(十六進(jìn)制表示為 10) x y 圖 整數(shù) x的低字節(jié)和高字節(jié) 【 說(shuō)明 】 ① 根據(jù)數(shù)據(jù)存儲(chǔ)順序, Lo和 Hi的順序在結(jié)構(gòu)體中不能改變 (低地址存低字節(jié),高地址存高字節(jié) )。 ② 共用體的兩個(gè)成員 x和 y,它們實(shí)際上是同一片空間,修改 x的值也就修改了 y的值,反之也一樣。共用體占用的空間是所有成員占用空間最大者。 本章小結(jié) ? 本章用實(shí)例詳細(xì)介紹了數(shù)據(jù)的幾種主要組織形式:數(shù)組、指針、結(jié)構(gòu)體與共用體。 ? 數(shù)組是相同類(lèi)型數(shù)據(jù)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1