版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計第8章結構體和共用體脈絡導圖C語言程序設計技能目標C語言程序設計(1)具備使用結構體處理信息的能力。(2)具備使用共用體處理信息的能力。素質目標C語言程序設計(1)通過結構體的學習,讓同學們明白每一個集體都需要每個成員遵守相應的規(guī)則。(2)通過結構體的學習,培養(yǎng)同學們細致鉆研的學風、求真務實的品德。(3)通過共用體的學習,增強同學們之間互幫互助,常懷感恩之心。8.1結構體C語言程序設計“結構體”是用同一個名字引用的相關變量的集合。結構體中可包含多種不同類型數(shù)據(jù)的變量,這些不同類型數(shù)據(jù)的變量稱為結構體的“成員”,每一個成員可以是一個基本數(shù)據(jù)類型或者又是一個構造類型。每個結構體有一個名字,稱為結構體名。結構體類型的定義的一般格式如下:struct結構體名稱{數(shù)據(jù)類型成員1的名字;數(shù)據(jù)類型成員2的名字;數(shù)據(jù)類型成員3的名字;……};結構體類型變量的定義與引用8.1結構體C語言程序設計結構體類型定義好后,只定義了一個變量的類型,系統(tǒng)并沒有給變量分配存儲空間,還需要給結構體定義變量,結構體變量的定義方法有以下3種方式:(1)間接定義。此方法中,需要先定義結構體類型,再定義結構體變量。例如,要定義日期結構體變量,需要先定義好一個名為date的結構體類型,再定義兩個名為date1,date2的結構體變量。(2)直接定義。此方法中,定義結構體類型的同時定義結構體類型變量。(3)直接定義結構體變量。結構體變量的定義8.1結構體C語言程序設計定義了結構體變量后,可以引用該變量。要對結構體變量進行賦值、存取或運算,實質上是對結構體成員的操作。訪問結構體變量的成員,需要使用“成員運算符”(也稱為“圓點運算符”),其一般形式如下:結構體類型變量名.成員名例如,已定義了date為struct類型的結構體變量,則date.year表示date變量中year成員,在程序中可以用date.year=2022;對變量的成員賦值。結構體類型變量的引用8.1結構體C語言程序設計在定義結構體變量的同時,可以對其進行賦值,即對其初始化。結構體類型變量的初始化一般格式如下:struct結構體名結構體變量名={初始數(shù)據(jù)};其中,數(shù)據(jù)與數(shù)據(jù)之間用逗號隔開;數(shù)據(jù)的個數(shù)要與被賦值的結構體成員的個數(shù)相等;數(shù)據(jù)類型要與相應結構體成員的數(shù)據(jù)類型一致。結構體類型變量的初始化C語言程序設計【例8-1】結構體變量的初始化。運行結果語句編寫
8.1結構體程序說明:對結構體變量date作了初始化賦值。在main()函數(shù)中,用printf()函數(shù)語句輸出date中各成員的值。源代碼見教材日期為:2022.7.6C語言程序設計【例8-2】結構體變量成員的賦值、輸入和輸出。運行結果語句編寫
8.1結構體程序說明:用賦值語句給year成員賦值,用scanf()函數(shù)動態(tài)輸入month和day成員值,然后把date1的所有成員的值整體賦給date2,最后分別輸出date2的各個成員值。源代碼見教材inputmonthandday:76日期為:2022.7.68.1結構體C語言程序設計結構體數(shù)組必須先定義,后引用。其定義形式與定義結構體變量的方法類似,只需說明其為數(shù)組即可。structstu{ intnum; charname[30]; charsex; intage; floatscore;}s[30]; 定義了一個結構體數(shù)組s,共有30個元素,s[0]~s[29],每個元素都具有structstu的結構形式。結構體數(shù)組定義8.1結構體C語言程序設計結構體數(shù)組也可在定義的同時進行賦值,即對其進行初始化。例如,structstus[30]={{202101,"Wangyan",'M',18,89},{202102,"Lishan",'M',18,95},{202101,"Zhanghai",'F',18,78}};表示對結構體數(shù)組s[30]的前3個元素進行初始化,其他未被指定初始化的數(shù)值型數(shù)組元素成員被系統(tǒng)初始化為0,字符型數(shù)組元素成員被系統(tǒng)初始化為'\0'。結構體數(shù)組的初始化C語言程序設計【例8-3】利用結構體數(shù)組計算3位同學的平均成績。運行結果語句編寫
8.1結構體程序說明:本程序中定義了一個外部結構體數(shù)組s,共5個元素,在main()函數(shù)中用for語句將每位同學score成員的值進行累加,除以3輸出即可。源代碼見教材平均分為:87.3C語言程序設計【例8-4】建立同學通訊錄。運行結果語句編寫
8.1結構體程序說明:本程序中定義了一個結構體mem,它有兩個成員name和phone,用來表示姓名和電話號碼。在main()函數(shù)中,定義man為具有mem類型的結構體數(shù)組。在for語句中,用gets()函數(shù)分別輸入各個元素中兩個成員的值,然后又在for語句中printf語句輸出各元素中的兩個成員值。源代碼見教材王麗 剛 峰 189693500038.1結構體C語言程序設計指向結構體變量的指針變量的基類型必須與結構體變量的類型相同。例如,structstu*p;,定義指針變量p,指向structstu類型的變量。p并沒有指向一個確定的存儲單元,其值是一個隨機值。為使p指向一個確定的存儲單元,需要對指針變量進行初始化。例如,structstu*p=&s1;,定義指針p,指向結構體變量s1。C語言規(guī)定了兩種用于訪問結構體成員的運算符,一種是成員運算符,也稱圓點運算符;另一種是指向運算符,也稱箭頭運算符,其一般格式如下:指向結構體的指針變量名->成員名例如,p->202207;使用指針p訪問結構體成員。指向結構體變量的指針C語言程序設計【例8-5】通過指向結構體變量的指針變量輸出結構體變量中成員的信息。運行結果語句編寫
8.1結構體程序說明:程序定義了一個structstu類型的變量s1,又定義了一個指針變量p,它指向一個structstu類型的數(shù)據(jù)。在函數(shù)的執(zhí)行部分將結構體變量s1的起始地址賦給指針變量p,也就是p指向s1,然后對s1的各成員進行賦值。使用printf()函數(shù)輸出s1的各個數(shù)據(jù)成員的值??梢钥吹?,兩個輸出的結果是相同的。源代碼見教材學號:202207姓名:wangli性別:M年齡:18成績:85.0學號:202207姓名:wangli性別:M年齡:18成績:85.08.1結構體C語言程序設計指向結構體對象的指針變量既可指向結構體變量,也可指向結構體數(shù)組中的元素。例如,定義一個結構體數(shù)組s[3],語句structstus[3],*p;p=s;可使結構體指針p指向該結構體數(shù)組的首地址。指向結構體數(shù)組的指針C語言程序設計【例8-6】有3名學生信息放在結構體數(shù)組中,要求輸出全部學生的信息。運行結果語句編寫
8.1結構體程序說明:指針變量p是指向structstu結構體類型數(shù)據(jù)。在第1次循環(huán)中輸出s[0]的各個成員值,然后指向p++,使p自加1,p加1意味著p所增加的值為結構體數(shù)組s的一個元素所占的字節(jié)數(shù),即執(zhí)行p++后p的值等于s+1,也就是指向s[1]。在第2次循環(huán)中輸出s[1]的各成員值,再執(zhí)行p++,p的值等于s+2,也就是指向s[2],再執(zhí)行p++后,p的值變?yōu)閟+3,跳出循環(huán)。源代碼見教材學號:202201 姓名:Wangyan 性別:M年齡:18 成績:89.0學號:202202 姓名:Lishan 性別:M年齡:18 成績:95.0學號:202203 姓名:Zhanghai 性別:F年齡:18 成績:78.0C語言程序設計【例8-7】輸出所有學生的全部信息運行結果語句編寫
8.1結構體程序說明:由于學生成績表包括學號、姓名和成績,而成績又包括平時成績、期中成績、期末成績和總成績,因此,可使用嵌套的結構體聲明來實現(xiàn)。用cal()函數(shù)實現(xiàn)計算總成績的功能,main()函數(shù)中實現(xiàn)初始化數(shù)據(jù),調用cal()函數(shù)和輸出所有學生的信息。源代碼見教材學號:202201姓名:Wangyan平時成績:85.0期中成績:90.0期末成績:84.0總成績:84.9學號:202202姓名:Lishan平時成績:86.0期中成績:80.0期末成績:78.0總成績:80.6學號:202203姓名:Zhangha平時成績:75.0期中成績:72.0期末成績:70.0總成績:71.78.2共用體、枚舉typedef類型定義C語言程序設計union共用體名{
數(shù)據(jù)類型 成員1的名字;
數(shù)據(jù)類型 成員2的名字;
數(shù)據(jù)類型 成員3的名字;……};共用體類型的定義8.2共用體、枚舉typedef類型定義C語言程序設計(1)先定義共用體類型后定義共用體變量。uniondata{ chara; intb; floatc;};uniondatax;共用體變量的定義8.2共用體、枚舉typedef類型定義C語言程序設計(2)在定義共用體類型的同時定義結構變量。這種定義方法是在定義出共用體類型的同時直接定義所需變量,好處是可以簡化語句。uniondata{ chara; intb; floatc;}x;共用體變量的定義8.2共用體、枚舉typedef類型定義C語言程序設計(3)直接定義共用體變量??梢允÷越Y構體類型名來定義一個結構體類型。union{ chara; intb; floatc;}x;共用體變量的定義8.2共用體、枚舉typedef類型定義C語言程序設計在使用共用體類型數(shù)據(jù)時應注意以下4個特點。(1)共用體變量與結構體變量不同的是,不能在定義的同時初始化,但可對第一個成員賦初值。例如,uniondatax={'A'};只為第一個成員賦初值,是合法的。uniondatax={'A',10,23.5};為全部成員賦值是錯誤的,因為各成員共用同一空間。(2)對于一個共用體變量來說,每次只能給一個成員賦值,不能同時給多個成員賦值。共用體變量的所有成員的首地址都相同,并且等于共用體變量的地址。(3)對共用體任何一個成員賦值都會導致共享區(qū)域數(shù)據(jù)發(fā)生變化,所以共用體只能保證有一個成員的值是有效的。(4)在共用體中,同一個內存段可用來存放幾種不同類型的成員,但每一次只能存放其中一種,而不是同時存放所有的類型。也就是說,共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就會失去作用。共用體變量的定義C語言程序設計【例8-8】輸入一個教師或學生信息,然后顯示出來。運行結果語句編寫
8.2共用體、枚舉typedef類型定義程序說明:因為教師和學生信息有共同的三個信息,只有最后一項不同,所以設計一個共用體depart,包含Class和office兩個成員,分別表示學生的班級和教師所屬的教研室。再設一個結構體類型person,包含name(姓名)、age(年齡)、job(職業(yè))和depa(部門,教師為教研室,學生為班級)。在main()函數(shù)中通過職業(yè)的值為“教師”或“學生”來決定最后一項的值為學生的“班級”還是教師的“教研室”。最后通過循環(huán)輸出相關信息。源代碼見教材運行結果詳見教材8.2共用體、枚舉typedef類型定義C語言程序設計枚舉類型定義的一般格式如下:enum枚舉類型名{枚舉元素列表};其中,enum為關鍵字,表示定義一個枚舉類型。枚舉類型名必須為C語言合法的標識符。花括號內的標識符稱為枚舉元素或枚舉常量,各枚舉常量之間用逗號隔開,注意右大括號后的分號不能省略。枚舉類型的定義8.2共用體、枚舉typedef類型定義C語言程序設計(1)先定義枚舉類型后定義枚舉變量。與結構體或共用體類型變量定義的基本方法相似,這種方法先定義枚舉類型,然后使用“enum枚舉類型名”來定義這種類型的變量。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}; /*定義week類型*/enumweekday; /*定義week類型的枚舉變量day*/(2)在定義枚舉類型的同時定義枚舉變量。這種方法是在定義枚舉類型的后面直接定義出該類型的變量,可以簡化程序。enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}day; /*定義week類型同時定義變量day*/(3)直接定義枚舉類型的變量。這種定義方法可以省略枚舉類型名,直接定義出枚舉變量。但不能在其他位置再定義這種枚舉類型的變量。枚舉類型變量的定義8.2共用體、枚舉typedef類型定義C語言程序設計枚舉變量只能取相應枚舉類型列表中的各值。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}day;day=WED;枚舉變量的應用8.2共用體、枚舉typedef類型定義C語言程序設計名師點睛(1)C編譯器對枚舉元素按常量處理,在定義時使它們的值從0開始依次遞增。例如,enumweek{SUN=0,MON,TUE,WED,THU,FRI,SAT}day;SUN的值被定義為0,那么MON的值便遞推為1,以此類推。 (2)枚舉常量可以進行比較運算,由它們對應的整數(shù)參加比較。(3)枚舉常量不是字符常量也不是字符串常量,使用時不能加單、雙引號。C語言程序設計【例8-9】從鍵盤中輸入1~7的整數(shù),并把它轉換為星期一到星期日顯示。運行結果語句編寫
8.2共用體、枚舉typedef類型定義程序說明:因為只有數(shù)字1~7是有效的,所以定義一個枚舉類型為week的變量day,從鍵盤輸入一個整數(shù),將其轉換成enumweek類型后賦值給變量day,再使用switch語句對day進行判斷,并輸出對應的星期值。若不是這7個正確的值,則輸出錯誤提示信息。源代碼見教材請輸入一個整數(shù):7輸入的是數(shù)字7,對應的是星期日。8.2共用體、枚舉typedef類型定義C語言程序設計關鍵字typedef用于為系統(tǒng)固有的或自定義數(shù)據(jù)類型定義一個別名。數(shù)據(jù)類型的別名通常使用首字母大寫的方式表示,以便與系統(tǒng)提供的標準類型標識符相區(qū)別。聲明一個新類型名的一般格式為:typedef原類型名新類型名;其中,typedef為關鍵字,表示重定義。原類型名是C語言提供的任一種數(shù)據(jù)類型,可以是簡單數(shù)據(jù)類型,也可以是構造數(shù)據(jù)類型;新類型名是代表原類型名的一個別名。typedef聲明新類型名8.2共用體、枚舉typedef類型定義C語言程序設計名師點睛明一個新的類型名的方法有4種。(1)先按定義變量的方法寫出定義體。例如,inta[10];。(2)將變量名換成新類型名。例如,intNum[10];。(3)在前面加上typedef。例如,typedefintNum[10];。(4)可以用新類型名取定義變量。例如,Numa;。8.3常見錯誤分析C語言程序設計結構體類型聲明時漏掉分號#include<stdio.h>structnode{ intnum; intscore1; intscore2;}structnoden;intmain(){ n.num=1; printf("%d",n.num); return0;}8.3常見錯誤分析C語言程序設計混淆結構體數(shù)據(jù)類型和結構體變量structstudent{ intsID=100; /*學號*/ charsSex='F'; /*性別*/ intsMath=90; /*高數(shù)成績*/ intsEng=80; /*英
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 纏繞成型課程設計
- 國際象棋的課程設計
- 游戲人物鑒賞課程設計
- 中考生物考前必背知識手冊(含習題詳解)
- 美化文字微課程設計
- 統(tǒng)計軟件課程設計預測
- 自然主題幼兒園課程設計
- 中風護理工作總結
- 電機順序啟動課程設計
- 2024年設備監(jiān)理師考試題庫含答案(基礎題)
- 和父親斷絕聯(lián)系協(xié)議書范本
- 2024時事政治考試題庫(100題)
- 2024地理知識競賽試題
- 《城市軌道交通工程盾構吊裝技術規(guī)程》(征求意見稿)
- 【新教材】統(tǒng)編版(2024)七年級上冊語文期末復習課件129張
- 欽州市浦北縣2022-2023學年七年級上學期期末語文試題
- 古典時期鋼琴演奏傳統(tǒng)智慧樹知到期末考試答案章節(jié)答案2024年星海音樂學院
- 樂山市市中區(qū)2022-2023學年七年級上學期期末地理試題【帶答案】
- 兩人合伙人合作協(xié)議合同
- 蘇教版一年級上冊數(shù)學期末測試卷含答案(完整版)
- 2024年中考歷史復習-中國古代史專項試題
評論
0/150
提交評論