版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、42 聯(lián)合類型 本段任務 通過一個學校人員記錄的程序,學會聯(lián)合類型的定義和使用,體會使用聯(lián)合類型的優(yōu)點?!疽?_4_5 有一個學校若干人員的數(shù)據(jù),其中有教師和學生。教師的信息包括:編號、姓名、性別、職業(yè)、部門。學生的信息包括:編號、姓名、性別、職業(yè)、班級。要求輸入若干個人員的信息并輸出。 421 構(gòu)造符合要求的數(shù)據(jù) 通過上面關(guān)于結(jié)構(gòu)類型的講解,同學們已經(jīng)想到,可以將教師和學生的記錄定義為兩個結(jié)構(gòu)類型,因為教師和學生結(jié)構(gòu)的成員并不完全相同。但是教師與學生之間只有一個成員不同,教師的“部門”成員,應該是字符串類型,學生的“班級”成員,應該是整型。顯然,如果使用兩個結(jié)構(gòu),有大部分的代碼是重復的。
2、對于這種情況C語言又提供了一種新的結(jié)構(gòu)類型聯(lián)合類型,正好可以解決這個問題。我們可以做如下定義:struct PERSON /*結(jié)構(gòu)類型定義*/ int iNumber; /*定義結(jié)構(gòu)的編號成員*/ char cName20,cSex,cJob; /*定義結(jié)構(gòu)的姓名、性別、職業(yè)成員*/ union /*定義聯(lián)合類型*/ char cBranch20; /*聯(lián)合類型的成員cBranch*/ int iClass; /*聯(lián)合類型的成員iClass*/ category; /*聯(lián)合類型變量category作為結(jié)構(gòu)類型成員*/; 聯(lián)合類型的變量定義的一般形式是:union 聯(lián)合類型名 類型名1 成員名組
3、1; 類型名2 成員名組2; 類型名n 成員名組n;聯(lián)合變量表列;與結(jié)構(gòu)變量定義的情況一樣,上面第一行的聯(lián)合類型名可以省略,成為無類型名聯(lián)合變量。與結(jié)構(gòu)類型一樣,聯(lián)合的類型和聯(lián)合類型的變量可以如上混合定義也可以分開定義,上述一般形式的最后一行不寫聯(lián)合變量表列,剩下的就是聯(lián)合的類型定義;再加上如下一行:union 聯(lián)合類型名 聯(lián)合變量表列; 422 使用聯(lián)合類型數(shù)據(jù)解決實際問題 下面看【引例】4_4_5的解法struct PERSON /*結(jié)構(gòu)類型定義*/ int iNumber; char cName20 , cSex , cJob; union /*定義聯(lián)合類型*/ char cBranch
4、20; /*聯(lián)合類型的成員cBranch*/ int iClass; /*聯(lián)合類型的成員iClass*/ category; /*聯(lián)合類型變量category作為結(jié)構(gòu)類型成員*/;main() struct PERSON p2; /*定義結(jié)構(gòu)類型數(shù)組*/ int i; for(i=0;i2;i+) /*讀入結(jié)構(gòu)變量的前4個成員值,職業(yè)成員以t表教師、以s表學生*/scanf(“%d%s%c%c”,&pi.iNumber,pi.cName,&pi.cSex,&pi.cJob); if(pi.cJob= =t) /*如果成員“職業(yè)”是t就表示是教師*/ scanf(“%s”,pi.category
5、.cBranch); /*那么就輸入部門成員的部門名稱*/ if(pi.cJob= =s) /*如果成員“職業(yè)”是s就表示是學生*/ scanf(“%d”,pi.category.iClass); /*那么就輸入班級成員的班級名稱*/ for(i=0;i2;i+) /*根據(jù)成員“職業(yè)”的不同,進行不同項目的輸出*/ if(pi.cJob= =t) printf(“%dt%st%ct%ct%sn”,pi.iNumber,pi.cName,pi.cSex,pi.cJob, pi.category.cBranch); if(pi.cJob= =s) printf(“%dt%st%ct%ct%dn”,
6、pi.iNumber,pi.cName,pi.cSex,pi.cJob, pi.category.iClass); 例4_4_6 對某班級的30名學生進行考試。低于60分的輸出成績,6069分的為D級,7079分的為C級,8089分的為B級,90100分的A級。輸入全體學生的姓名、成績,給出每名學生的成績或等級并輸出所有學生信息。分析:定義結(jié)構(gòu)類型,包含3個成員:字符數(shù)組姓名;整型成員成績;評價應定義成聯(lián)合,包含字符數(shù)組和字符兩個成員。 /* 4_4L6.C */struct STUDENT char cName20; int iScore; union int iS; char cD; de
7、gree;main() struct STUDENT stud30; int i; for(i=0;i30;i+)scanf(“%s%d”,studi.cName,&studi.iScore); if(studi.iScore60) studi.degree.iS=studi.iSocre;else if(studi .iScore =69) studi.degree.cD=D; else if(studi .iScore =79) studi.degree.cD=C; else if(studi .iScore =89) studi.degree.cD=B;else studi.degree.cD=A;for(i=0;i30;i+) if(studi.iScore60) printf(“%st%dt%dn”,studi.cName,studi.iScore,studi.degree.iS); else printf(“%st%dt%cn”,studi.cName,studi.iScore,studi.degree.cD); 作業(yè)與練習: 3、下面關(guān)于聯(lián)合類型數(shù)據(jù)正確的描述是:(A)一個聯(lián)合變量中可以同時存放其所有成員 (B)一個聯(lián)合變量中不能同時存放其所有成員(C)聯(lián)合變量定義后,可以引用該變量和該變量的所有成員(D)聯(lián)合變量可以作為結(jié)構(gòu)的成員,而結(jié)構(gòu)不能作為聯(lián)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《知識產(chǎn)權(quán)培訓》課件
- 《種釀酒白葡萄》課件
- 《診斷原則》課件
- 單位管理制度集合大全【人員管理】
- 單位管理制度合并選集員工管理篇
- 單位管理制度分享合集【員工管理篇】十篇
- 單位管理制度分享大合集【員工管理篇】
- 單位管理制度范例匯編【員工管理】十篇
- 七年級英語SpringFestival課件
- 單位管理制度呈現(xiàn)大全【員工管理篇】
- 承德市承德縣2022-2023學年七年級上學期期末歷史試題【帶答案】
- CJT511-2017 鑄鐵檢查井蓋
- 轉(zhuǎn)科患者交接記錄單
- 現(xiàn)代漢語智慧樹知到期末考試答案章節(jié)答案2024年昆明學院
- 人教版六年級數(shù)學(上冊)期末調(diào)研題及答案
- 舞蹈療法在減少壓力和焦慮中的作用
- 計算機應用專業(yè)大學生職業(yè)生涯規(guī)劃
- 設備的故障管理
- 女性婦科保健知識講座
- 《電力系統(tǒng)治安反恐防范要求 第3部分:水力發(fā)電企業(yè)》
- 2024年小學教師聽課、評課制度
評論
0/150
提交評論