版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第第10講講 結(jié)構(gòu)結(jié)構(gòu)為將不同數(shù)據(jù)類型、但相互關(guān)聯(lián)的一組數(shù)據(jù),組合為將不同數(shù)據(jù)類型、但相互關(guān)聯(lián)的一組數(shù)據(jù),組合成一個(gè)有機(jī)整體使用,成一個(gè)有機(jī)整體使用,C語言提供一種稱為語言提供一種稱為“結(jié)構(gòu)結(jié)構(gòu)”的的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)。10.1 結(jié)構(gòu)類型與結(jié)構(gòu)變量的定義結(jié)構(gòu)類型與結(jié)構(gòu)變量的定義 10.2 結(jié)構(gòu)變量的引用與初始化結(jié)構(gòu)變量的引用與初始化 10.3 結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組10.4 指向結(jié)構(gòu)類型數(shù)據(jù)的指針指向結(jié)構(gòu)類型數(shù)據(jù)的指針10.5 共用型和枚舉型共用型和枚舉型10.6 定義已有類型的別名定義已有類型的別名210.1 結(jié)構(gòu)類型與結(jié)構(gòu)變量的定義結(jié)構(gòu)類型與結(jié)構(gòu)變量的定義C語言中的結(jié)構(gòu)類型,相當(dāng)于其它高級語言中
2、的語言中的結(jié)構(gòu)類型,相當(dāng)于其它高級語言中的“記錄記錄”類型。類型。10.1.1 結(jié)構(gòu)類型定義結(jié)構(gòu)類型定義struct 結(jié)構(gòu)類型名結(jié)構(gòu)類型名 /* struct是結(jié)構(gòu)類型關(guān)鍵字是結(jié)構(gòu)類型關(guān)鍵字*/ 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)1; 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)2; 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng); ;/* 此行分號不能少!此行分號不能少!*/ 案例案例10.1 定義一個(gè)反映學(xué)生基本情況的結(jié)構(gòu)類型,用以存儲學(xué)生定義一個(gè)反映學(xué)生基本情況的結(jié)構(gòu)類型,用以存儲學(xué)生的相關(guān)信息。的相關(guān)信息。/*案例代碼文件名:案例代碼文件名:AL10_1.C。*/*功能:定義一個(gè)反映學(xué)生基本情況的結(jié)構(gòu)類型功能:定義一個(gè)
3、反映學(xué)生基本情況的結(jié)構(gòu)類型*/3struct date /*日期結(jié)構(gòu)類型:由年、月、日三項(xiàng)組成日期結(jié)構(gòu)類型:由年、月、日三項(xiàng)組成*/ int year; int month; int day; ;struct std_info/*學(xué)生信息結(jié)構(gòu)類型:由學(xué)號、姓名、性別和生日共學(xué)生信息結(jié)構(gòu)類型:由學(xué)號、姓名、性別和生日共4項(xiàng)組成項(xiàng)組成*/ char no7; char name9; char sex3; struct date birthday; ; struct score/*成績結(jié)構(gòu)類型:由學(xué)號和三門成績共成績結(jié)構(gòu)類型:由學(xué)號和三門成績共4項(xiàng)組成項(xiàng)組成*/ char no7; int scor
4、e1; int score2; int score3; ; 4(1)“結(jié)構(gòu)類型名結(jié)構(gòu)類型名”和和“數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)”的命名規(guī)則,與變量名相同。的命名規(guī)則,與變量名相同。(2)數(shù)據(jù)類型相同的數(shù)據(jù)項(xiàng),既可逐個(gè)、逐行分別定義,也可)數(shù)據(jù)類型相同的數(shù)據(jù)項(xiàng),既可逐個(gè)、逐行分別定義,也可合并成一行定義。合并成一行定義。 例如,本案例代碼中的日期結(jié)構(gòu)類型,也可改為如下形式:例如,本案例代碼中的日期結(jié)構(gòu)類型,也可改為如下形式: struct date int year, month, day; ;(3)結(jié)構(gòu)類型中的數(shù)據(jù)項(xiàng),既可以是基本數(shù)據(jù)類型,也允許是)結(jié)構(gòu)類型中的數(shù)據(jù)項(xiàng),既可以是基本數(shù)據(jù)類型,也允許是另一個(gè)已經(jīng)
5、定義的結(jié)構(gòu)類型。另一個(gè)已經(jīng)定義的結(jié)構(gòu)類型。 例如,本案例代碼中的結(jié)構(gòu)類型例如,本案例代碼中的結(jié)構(gòu)類型std_info,其數(shù)據(jù)項(xiàng),其數(shù)據(jù)項(xiàng)“birthday”就是一個(gè)已經(jīng)定義的日期結(jié)構(gòu)類型就是一個(gè)已經(jīng)定義的日期結(jié)構(gòu)類型date。(4)本書將個(gè))本書將個(gè)數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)稱為結(jié)構(gòu)類型的個(gè)稱為結(jié)構(gòu)類型的個(gè)成員成員(或(或分量分量)。)。510.1.2 結(jié)構(gòu)變量定義結(jié)構(gòu)變量定義用戶自己定義的結(jié)構(gòu)類型,與系統(tǒng)定義的標(biāo)準(zhǔn)類型(用戶自己定義的結(jié)構(gòu)類型,與系統(tǒng)定義的標(biāo)準(zhǔn)類型(int、char等)一樣,可用來定義結(jié)構(gòu)變量的類型。等)一樣,可用來定義結(jié)構(gòu)變量的類型。 1.定義結(jié)構(gòu)變量的方法,可概括為兩種:定義結(jié)構(gòu)變量的
6、方法,可概括為兩種:(1) 間接定義法間接定義法先定義結(jié)構(gòu)類型、再定義結(jié)構(gòu)變量先定義結(jié)構(gòu)類型、再定義結(jié)構(gòu)變量例如,利用例如,利用案例案例10.1中定義的學(xué)生信息結(jié)構(gòu)類型中定義的學(xué)生信息結(jié)構(gòu)類型std_info,定,定義了一個(gè)相應(yīng)的結(jié)構(gòu)變量義了一個(gè)相應(yīng)的結(jié)構(gòu)變量student: struct std_info student;結(jié)構(gòu)變量結(jié)構(gòu)變量student:擁有結(jié)構(gòu)類型的全部成員,其中:擁有結(jié)構(gòu)類型的全部成員,其中birthday成成員是一個(gè)日期結(jié)構(gòu)類型,它又由員是一個(gè)日期結(jié)構(gòu)類型,它又由3個(gè)成員構(gòu)成。個(gè)成員構(gòu)成。注意:使用間接定義法定義結(jié)構(gòu)變量時(shí),必須同時(shí)指定結(jié)構(gòu)類注意:使用間接定義法定義結(jié)構(gòu)
7、變量時(shí),必須同時(shí)指定結(jié)構(gòu)類型名。型名。6(2) 直接定義法直接定義法在定義結(jié)構(gòu)類型的同時(shí),定義結(jié)構(gòu)變量在定義結(jié)構(gòu)類型的同時(shí),定義結(jié)構(gòu)變量例如,結(jié)構(gòu)變量例如,結(jié)構(gòu)變量student的定義可以改為如下形式:的定義可以改為如下形式:struct std_info student;同時(shí)定義結(jié)構(gòu)類型及其結(jié)構(gòu)變量的一般格式如下:同時(shí)定義結(jié)構(gòu)類型及其結(jié)構(gòu)變量的一般格式如下: struct 結(jié)構(gòu)類型名結(jié)構(gòu)類型名 結(jié)構(gòu)變量表;結(jié)構(gòu)變量表;2.說明說明(1)結(jié)構(gòu)類型與結(jié)構(gòu)變量是兩個(gè)不同的概念,其區(qū)別如同)結(jié)構(gòu)類型與結(jié)構(gòu)變量是兩個(gè)不同的概念,其區(qū)別如同int類類型與型與int型變量的區(qū)別一樣。型變量的區(qū)別一樣。(2
8、)結(jié)構(gòu)類型中的成員名,可以與程序中的變量同名,它們代)結(jié)構(gòu)類型中的成員名,可以與程序中的變量同名,它們代表不同的對象,互不干擾。表不同的對象,互不干擾。Return710.2 結(jié)構(gòu)變量的引用與初始化結(jié)構(gòu)變量的引用與初始化案例案例10.2 利用利用案例案例10.1中定義的結(jié)構(gòu)類型中定義的結(jié)構(gòu)類型struct std_info,定義,定義一個(gè)結(jié)構(gòu)變量一個(gè)結(jié)構(gòu)變量student,用于存儲和顯示一個(gè)學(xué)生的基本情況。,用于存儲和顯示一個(gè)學(xué)生的基本情況。#include #include struct.h/*定義并初始化一個(gè)外部結(jié)構(gòu)變量定義并初始化一個(gè)外部結(jié)構(gòu)變量student */struct std_
9、info student=000102,張三張三,男男,1980,9,20;main() printf(No: %sn,student.no); printf(Name: %sn,); printf(Sex: %sn,student.sex); printf(Birthday: %d-%d-%dn,student.birthday.year, student.birthday.month, student.birthday.day);8程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:No: 000102Name: 張三張三Sex: 男男Birthday:1980-9-20 1.結(jié)構(gòu)變量的引
10、用規(guī)則結(jié)構(gòu)變量的引用規(guī)則對于結(jié)構(gòu)變量,要通過對于結(jié)構(gòu)變量,要通過成員運(yùn)算符成員運(yùn)算符“.”,逐個(gè)訪問其成員,且,逐個(gè)訪問其成員,且訪問的格式為:訪問的格式為:結(jié)構(gòu)變量結(jié)構(gòu)變量.成員成員 /*其中的其中的“.”是成員運(yùn)算符是成員運(yùn)算符*/例如,案例中的例如,案例中的student.no,引用結(jié)構(gòu)變量,引用結(jié)構(gòu)變量student中的中的no成員;成員;引用結(jié)構(gòu)變量引用結(jié)構(gòu)變量student中的中的name成員,等等。成員,等等。9如果某成員本身又是一個(gè)結(jié)構(gòu)類型,則只能通過多級的分量運(yùn)算,如果某成員本身又是一個(gè)結(jié)構(gòu)類型,則只能通過多級的分量運(yùn)算,對最低一級的成員進(jìn)行引用。對最
11、低一級的成員進(jìn)行引用。此時(shí)的引用格式擴(kuò)展為:此時(shí)的引用格式擴(kuò)展為: 結(jié)構(gòu)變量結(jié)構(gòu)變量.成員成員.子成員子成員.最低最低1級子成員級子成員例如,引用結(jié)構(gòu)變量例如,引用結(jié)構(gòu)變量student中的中的birthday成員的格式分別為:成員的格式分別為:student.birthday.yearstudent.birthday.monthstudent.birthday.day(1) 對最低一級成員,可像同類型的普通變量一樣,進(jìn)行相應(yīng)的各對最低一級成員,可像同類型的普通變量一樣,進(jìn)行相應(yīng)的各種運(yùn)算。種運(yùn)算。(2) 既可引用結(jié)構(gòu)變量成員的地址,也可引用結(jié)構(gòu)變量的地址。既可引用結(jié)構(gòu)變量成員的地址,也可引用
12、結(jié)構(gòu)變量的地址。例如,例如,& student.birthday.year ,&student 。102.結(jié)構(gòu)變量的初始化結(jié)構(gòu)變量的初始化結(jié)構(gòu)變量初始化的格式,與一維數(shù)組相似:結(jié)構(gòu)變量初始化的格式,與一維數(shù)組相似: 結(jié)構(gòu)類型結(jié)構(gòu)類型 結(jié)構(gòu)變量結(jié)構(gòu)變量=初值表初值表不同的是:如果某成員本身又是結(jié)構(gòu)類型,則該成員的初值為一個(gè)不同的是:如果某成員本身又是結(jié)構(gòu)類型,則該成員的初值為一個(gè)初值表。初值表。例如,例如,案例案例10.2中的中的struct std_info student=000102, 張三張三, 男男, 1980,9,20;注意:注意:初值的數(shù)據(jù)類型,應(yīng)與結(jié)構(gòu)變量中相應(yīng)成
13、員所要求的一致,初值的數(shù)據(jù)類型,應(yīng)與結(jié)構(gòu)變量中相應(yīng)成員所要求的一致,否則會出錯(cuò)。否則會出錯(cuò)。Return1110.3 結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組 結(jié)構(gòu)數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)類型數(shù)據(jù),均包含結(jié)構(gòu)類型結(jié)構(gòu)數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)類型數(shù)據(jù),均包含結(jié)構(gòu)類型的所有成員。的所有成員。案例案例10.3 利用利用案例案例10.1中定義的結(jié)構(gòu)類型中定義的結(jié)構(gòu)類型struct std_info,定義,定義一個(gè)結(jié)構(gòu)數(shù)組一個(gè)結(jié)構(gòu)數(shù)組student,用于存儲和顯示三個(gè)學(xué)生的基本情況。,用于存儲和顯示三個(gè)學(xué)生的基本情況。/*案例代碼文件名:案例代碼文件名:AL10_3.C*/#include #include struct.
14、h/*定義并初始化一個(gè)外部結(jié)構(gòu)數(shù)組定義并初始化一個(gè)外部結(jié)構(gòu)數(shù)組student3 */struct std_info student3=“000102”,“張三張三”,“男男”,1980,9,20, “000105”,“李四李四”,“男男”,1980,8,15, “000112”,“王五王五”,“女女”,1980,3,10 ;12/*主函數(shù)主函數(shù)main()*/main() int i; /*打印表頭打印表頭: 表示表示1個(gè)空格字符個(gè)空格字符*/ printf(No.NameSexBirthdayn); /*輸出三個(gè)學(xué)生的基本情況輸出三個(gè)學(xué)生的基本情況*/ for(i=0; ino); prin
15、tf(Name: %sn, p_std-name); printf(Sex: %sn, p_std-sex); printf(Birthday: %d-%d-%dn, p_std-birthday.year, p_std-birthday.month, p_std-birthday.day); 15通過指向結(jié)構(gòu)變量的指針來訪問結(jié)構(gòu)變量的成員,與直接使用通過指向結(jié)構(gòu)變量的指針來訪問結(jié)構(gòu)變量的成員,與直接使用結(jié)構(gòu)變量的效果一樣。一般地說,結(jié)構(gòu)變量的效果一樣。一般地說,如果指針變量如果指針變量pointer已指向結(jié)構(gòu)已指向結(jié)構(gòu)變量變量var(即(即pointer=&var),則以下三種形式等
16、價(jià):),則以下三種形式等價(jià):(1)var.成員成員(2)pointer-成員成員(3)(*pointer).成員成員 /* “*pointer”外面的括號不能??!外面的括號不能?。?/注意:在格式(注意:在格式(1)中,分量運(yùn)算符左側(cè)的運(yùn)算對象,只能是)中,分量運(yùn)算符左側(cè)的運(yùn)算對象,只能是結(jié)構(gòu)變量,;而在格式(結(jié)構(gòu)變量,;而在格式(2)中,指向運(yùn)算符左側(cè)的運(yùn)算對象,只能)中,指向運(yùn)算符左側(cè)的運(yùn)算對象,只能是指向結(jié)構(gòu)變量(或結(jié)構(gòu)數(shù)組)的指針變量,否則都出錯(cuò)。是指向結(jié)構(gòu)變量(或結(jié)構(gòu)數(shù)組)的指針變量,否則都出錯(cuò)。思考題:如果要求從鍵盤上輸入結(jié)構(gòu)變量思考題:如果要求從鍵盤上輸入結(jié)構(gòu)變量student的
17、各成員數(shù)據(jù),的各成員數(shù)據(jù),如何修改程序?如何修改程序? AL10_4A.C1610.4.2 指向結(jié)構(gòu)數(shù)組的指針指向結(jié)構(gòu)數(shù)組的指針案例案例10.5 使用指向結(jié)構(gòu)數(shù)組的指針來訪問結(jié)構(gòu)數(shù)組。使用指向結(jié)構(gòu)數(shù)組的指針來訪問結(jié)構(gòu)數(shù)組。/*案例代碼文件名:案例代碼文件名:AL10_5.C*/#includestruct.h/*定義并初始化一個(gè)外部結(jié)構(gòu)數(shù)組定義并初始化一個(gè)外部結(jié)構(gòu)數(shù)組student */struct std_info student3=000102,張三張三,男男,1980,5,20, 000105,李四李四,男男,1980,8,15, “000112”,“王五王五”,“女女”,1980,3,
18、10 ;main() struct std_info *p_std=student; int i=0; /*打印表頭打印表頭*/ printf(No.NameSexBirthdayn);17/*輸出結(jié)構(gòu)數(shù)組內(nèi)容輸出結(jié)構(gòu)數(shù)組內(nèi)容*/for( ; ino, p_std-name, p_std-sex); printf(%4d-%2d-%2dn, p_std-birthday.year, p_std-birthday.month, p_std-birthday.day); 程序演示程序演示如果指針變量如果指針變量p已指向某結(jié)構(gòu)數(shù)組,則已指向某結(jié)構(gòu)數(shù)組,則p+1指向結(jié)構(gòu)數(shù)組的下一指向結(jié)構(gòu)數(shù)組的下一個(gè)元
19、素,而不是當(dāng)前元素的下一個(gè)成員。個(gè)元素,而不是當(dāng)前元素的下一個(gè)成員。1810.4.3 指向結(jié)構(gòu)數(shù)據(jù)的指針作函數(shù)參數(shù)指向結(jié)構(gòu)數(shù)據(jù)的指針作函數(shù)參數(shù)案例案例10.6 用函數(shù)調(diào)用方式,改寫用函數(shù)調(diào)用方式,改寫案例案例10.5:編寫一個(gè)專門的:編寫一個(gè)專門的顯示函數(shù)顯示函數(shù)display(),通過主函數(shù)調(diào)用來實(shí)現(xiàn)顯示。,通過主函數(shù)調(diào)用來實(shí)現(xiàn)顯示。/*案例代碼文件名:案例代碼文件名:AL10_6.C*/#includestruct.h/*定義并初始化一個(gè)外部結(jié)構(gòu)數(shù)組定義并初始化一個(gè)外部結(jié)構(gòu)數(shù)組student */struct std_info student3=000102,張三張三,男男,1980,5,
20、20, 000105,李四李四,男男,1980,8,15, “000112”,“王王五五”,“女女”,1980,3,10 ;/*主函數(shù)主函數(shù)main()*/main() void display();/*函數(shù)說明函數(shù)說明*/ int i=0; /*打印表頭打印表頭*/ printf(No.NameSexBirthdayn);19 /*打印內(nèi)容打印內(nèi)容*/ for( ; ino, p_std-name, p_std-sex); printf(%4d-%2d-%2dn, p_std-birthday.year, p_std-birthday.month, p_std-birthday.day);程
21、序演示程序演示Return2010.5 共用型簡介共用型簡介共用型共用型 1概念概念 使幾個(gè)不同的變量占用同一段內(nèi)存空間的結(jié)構(gòu)稱為共用型。使幾個(gè)不同的變量占用同一段內(nèi)存空間的結(jié)構(gòu)稱為共用型。 2共用類型的定義共用類型的定義與結(jié)構(gòu)類型的定義類似與結(jié)構(gòu)類型的定義類似 union 共用類型名共用類型名 成員列表成員列表; 3共用變量的定義共用變量的定義與結(jié)構(gòu)變量的定義類似與結(jié)構(gòu)變量的定義類似(1) 間接定義間接定義先定義類型、再定義變量先定義類型、再定義變量例如,定義例如,定義data共用類型變量共用類型變量un1,un2,un3的語句如下:的語句如下: union data un1,un2,un3
22、;21(2) 直接定義直接定義定義類型的同時(shí)定義變量定義類型的同時(shí)定義變量例如,例如,union data int i; char ch; float f; un1, un2, un3; 共用變量占用的內(nèi)存空間,等于最長成員的長度,而不是各共用變量占用的內(nèi)存空間,等于最長成員的長度,而不是各成員長度之和。成員長度之和。例如,共用變量例如,共用變量un1、un2和和un3,在,在16位操作系統(tǒng)中,占用的位操作系統(tǒng)中,占用的內(nèi)存空間均為字節(jié)(不是內(nèi)存空間均為字節(jié)(不是2+1+4=7字節(jié))。字節(jié))。共用變量的引用共用變量的引用與結(jié)構(gòu)變量一樣,也只能逐個(gè)引用共與結(jié)構(gòu)變量一樣,也只能逐個(gè)引用共用變量的成
23、員用變量的成員例如,訪問共用變量例如,訪問共用變量un1各成員的格式為:各成員的格式為:un1.i、un1.ch、un1.f。案例案例10.9共用體變量的引用共用體變量的引用(AL10_9.C)225特點(diǎn)特點(diǎn)(1) 系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所以以在某一時(shí)刻,存放的和起作用的是最后一次存入的成員值。在某一時(shí)刻,存放的和起作用的是最后一次存入的成員值。例如,執(zhí)行例如,執(zhí)行un1.i=1, un1.ch=c, un1.f=3.14后,后,un1.f才是有效才是有效的成員。的成員。(2) 由于所有成員共享同一內(nèi)存空間,故共用變量
24、與其各成員由于所有成員共享同一內(nèi)存空間,故共用變量與其各成員的地址相同。的地址相同。例如,例如,un1un1.iun1.chun1.f。(3) 不能對共用變量進(jìn)行初始化(注意:結(jié)構(gòu)變量可以);也不能對共用變量進(jìn)行初始化(注意:結(jié)構(gòu)變量可以);也不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個(gè)共用數(shù)據(jù),但不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個(gè)共用數(shù)據(jù),但可以使用指向共用變量的指針??梢允褂弥赶蚬灿米兞康闹羔?。(4) 共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。2310.6 定義已有類型的別名定義已有類型的別名除可直接使用提供的除可直接使用提供的標(biāo)
25、準(zhǔn)類型標(biāo)準(zhǔn)類型和和自定義的類型自定義的類型(結(jié)構(gòu)、共用、(結(jié)構(gòu)、共用、枚舉)外,也可使用枚舉)外,也可使用typedef定義已有類型的別名定義已有類型的別名。該別名與標(biāo)準(zhǔn)類型。該別名與標(biāo)準(zhǔn)類型名一樣,可用來定義相應(yīng)的變量。名一樣,可用來定義相應(yīng)的變量。 定義已有類型別名的方法如下:定義已有類型別名的方法如下: (1)按定義變量的方法,寫出定義體;)按定義變量的方法,寫出定義體; (2)將變量名換成別名;)將變量名換成別名; (3)在定義體最前面加上)在定義體最前面加上typedef。 案例案例10.10 給實(shí)型給實(shí)型float定義定義1個(gè)別名個(gè)別名REAL。 (1)按定義實(shí)型變量的方法,寫出定
26、義體:)按定義實(shí)型變量的方法,寫出定義體:float f; (2)將變量名換成別名:)將變量名換成別名: float REAL; (3)在定義體最前面加上)在定義體最前面加上typedef:typedef float REAL;24案例案例10.10 給如下所示的結(jié)構(gòu)類型給如下所示的結(jié)構(gòu)類型struct date定義定義1個(gè)別名個(gè)別名DATE。struct date int year, month, day; ;(1) 按定義結(jié)構(gòu)變量的方法,寫出定義體:按定義結(jié)構(gòu)變量的方法,寫出定義體:struct date d;(2) 將變量名換成別名:將變量名換成別名: struct date DATE;
27、(3) 在定義體最前面加上在定義體最前面加上typedef: typedef struct date DATE;說明:說明:(1)用)用typedef只是給已有類型增加個(gè)別名,并不能創(chuàng)造個(gè)新只是給已有類型增加個(gè)別名,并不能創(chuàng)造個(gè)新的類型。就如同人一樣,除學(xué)名外,可以再取一個(gè)小名(或雅號),但的類型。就如同人一樣,除學(xué)名外,可以再取一個(gè)小名(或雅號),但并不能創(chuàng)造出另一個(gè)人來。并不能創(chuàng)造出另一個(gè)人來。(2)typedef與與#define有相似之處,但二者是不同的:前者是由編有相似之處,但二者是不同的:前者是由編譯器在編譯時(shí)處理的;后者是由編譯預(yù)處理器在編譯預(yù)處理時(shí)處理的,譯器在編譯時(shí)處理的;后
28、者是由編譯預(yù)處理器在編譯預(yù)處理時(shí)處理的,而且只能作簡單的字符串替換。而且只能作簡單的字符串替換。Return252007年4月1、有以下程序typedef structint b,p;A; void f(A c) /*注意:c是結(jié)構(gòu)變量名 */ int j; c.b+=1; c.p+=2;main()int i; A a=1,2; f(a); printf(“%d,%dn”,a.b,a.p);程序運(yùn)行后的輸出結(jié)果是( ) A)2,3 B)2,4 C)1,4 D)1,2262007年4月2、有以下程序、有以下程序struct S int n; int a20;void f(struct S *p
29、)int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(p-aip-aj) t=p-ai; p-ai=p-aj; p-aj=t; main()int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(&s); for (i=0;i s.n; i+) printf(“%d”,s.ai);程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果是( )A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)2,3,1,6,8,7,5,4,10,9, D)10,9,8,7,6,1,2,3,
30、4,5,272007年4月3、有以下程序、有以下程序struct S int n; int a20; ;void f(int *a, int n)int i; for(i=0;in-1;i+) ai+=i;main()int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a, s.n); for(i=0;is.n; i+) printf(“%d”,s.ai);程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果是( )A)2,4,3,9,12,12,11,11,18,9, B)3,4,2,7,9,8,6,5,11,10, C)2,3,1,6,8,7,5,4,10,
31、9, D)1,2,3,6,8,7,5,4,10,9,282007年4月4、設(shè)有說明、設(shè)有說明struct DATEint year;int month; int day;請寫出一條定義語句,該語句定義請寫出一條定義語句,該語句定義d為上述結(jié)構(gòu)體變量,并同時(shí)為其為上述結(jié)構(gòu)體變量,并同時(shí)為其成員成員year、month、day 依次賦初值依次賦初值2006、10、1:_struct DATA d=2006,10,1; 292007年9月1、以下關(guān)于、以下關(guān)于typedef的敘述錯(cuò)誤的是的敘述錯(cuò)誤的是A)用用typedef可以增加新類型可以增加新類型B)typedef只是將已存在的類型用一個(gè)新的名字
32、來代表只是將已存在的類型用一個(gè)新的名字來代表C)用用typedef可以為各種類型說明一個(gè)新名可以為各種類型說明一個(gè)新名,但不能用來為變量說明但不能用來為變量說明一個(gè)新名一個(gè)新名D)用用typedef為類型說明一個(gè)新名為類型說明一個(gè)新名,通??梢栽黾映绦虻目勺x性通常可以增加程序的可讀性302007年9月2、有以下程序、有以下程序#includestructttintx; structtt*y; *p;structtta4=20,a+1,15,a+2,30,a+3,17,a;main( ) inti; p=a; for(i=1;ix);p=p-y;程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是A)20,30,B
33、)30,17C)15,30,D)20,15,312007年9月3、有以下程序、有以下程序#include#includetypedefstructcharname9; charsex;floatscore2; STU;STUf(STUa)STUb=Zhao, m, 85.0, 90.0;inti; strcpy(,);a.sex=b.sex; for(i=0;i2;i+)a.scorei=b.scorei; returna;main( )STUc=Qian, f, 95.0, 92.0, d; d=f(c);printf(%s,%c,%2.0f,%2.0fn,d.nam
34、e, d.sex, d.score0, d.score1);程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,m,85,90D)Zhao,f,95,92322007年9月4、設(shè)有以下定義、設(shè)有以下定義uniondataintd1;floatd2; demo;則下面敘述中錯(cuò)誤的是則下面敘述中錯(cuò)誤的是A)變量變量demo與成員與成員d2所占的內(nèi)存字節(jié)數(shù)相同所占的內(nèi)存字節(jié)數(shù)相同B)變量變量demo中各成員的地址相同中各成員的地址相同C)變量變量demo和各成員的地址相同和各成員的地址相同D)若給若給demo.d1賦賦99后后,demo.d2中的值是
35、中的值是99.0332008年4月1、以下結(jié)構(gòu)體類型說明和變量定義中正確的是、以下結(jié)構(gòu)體類型說明和變量定義中正確的是A)typedefstructB)structREC;intn;charc; REC; intn;charc;REC t1, t2; REC t1, t2;C)typedefstructREC;D)structintn=0; char c=A;t1, t2; intn;charc;REC; RECt1,t2;342008年4月2、有以下程序、有以下程序#include#includetypedefstructcharname9;charsex;floatscore2;STU;vo
36、idf(STUa)STUb=Zhao, m, 85.0, 90.0;int i;strcpy(, );a.sex=b.sex;for(i=0;i2;i+) a.scorei=b.scorei;main()STUc=Qian, f, 95.0, 92.0; f(c);printf(%s,%c,%2.0f,%2.0fn,, c.sex, c.score0, c.score1);程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90352008年4月3、以下程序中函數(shù)、以下程
37、序中函數(shù)fun的功能是:統(tǒng)計(jì)的功能是:統(tǒng)計(jì)person所指結(jié)構(gòu)體數(shù)組中所有性別所指結(jié)構(gòu)體數(shù)組中所有性別(sex)為為M的記錄的個(gè)數(shù),存入變量的記錄的個(gè)數(shù),存入變量n中,并作為函數(shù)值返回。請?zhí)羁铡V?,并作為函?shù)值返回。請?zhí)羁铡?include#defineN3typedefstructintnum;charnam10;charsex; SS;intfun(SSperson )inti, n=0; for(i=0; iN; i+) if(【14】=M)n+; returnn;main()SSWN=1,AA,F,2,BB,M,3,CC,M;intn; n=fun(W);printf(n=%dn,n)
38、;personi.sex362008年9月1、有以下程序、有以下程序#includestructst intx, y;data2=1,10,2,20;main()structst*p=data; printf(%d,p-y);printf(%dn,(+p)-x);程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是A)10,1B)20,1C)10,2D)20,2372008年9月2、 #include main( ) struct STU charname9;char sex; double score2; ; struct STUa=Zhao,m,85.0,90.0, b=Qian,f,95.0,92.0; b=a; printf(%s,%c,%2.0f,%2.0fn,,b.sex,b.score0,b.score1);程序的運(yùn)行結(jié)果是程序的運(yùn)行結(jié)果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 招標(biāo)文件評審記錄跟蹤查詢
- 九年級道德與法治上冊 第二單元 感受祖國的心跳 第四課 城鄉(xiāng)直通車 第3框 城鄉(xiāng)統(tǒng)籌教案 人民版
- 2024-2025學(xué)年新教材高中生物 第1章 遺傳因子的發(fā)現(xiàn) 第1節(jié) 第1課時(shí) 一對相對性狀的雜交實(shí)驗(yàn)過程和解釋教案 新人教版必修第二冊
- 安徽省滁州二中高中信息技術(shù)《5.1認(rèn)識信息資源的管理》教案 新人教版必修
- 廣東省2024-2025年高中物理 學(xué)業(yè)水平測試沖A 第6章 機(jī)械能和能源教案(含解析)
- 2023七年級英語下冊 Unit 3 How do you get to school Section B 第5課時(shí)(3a-3b)教案 (新版)人教新目標(biāo)版
- 2023六年級數(shù)學(xué)下冊 第四單元 圓柱和圓錐4.8 估算小麥堆的質(zhì)量教案 冀教版
- 自建房修建及安全合同(2篇)
- 人教版血管課件
- 第六講 變換句型寫一寫(看圖寫話教學(xué))-一年級語文上冊(統(tǒng)編版·2024秋)
- 《羅生門》讀書分享交流
- 我的大學(xué)生涯發(fā)展展示
- 項(xiàng)目交付管理作業(yè)指引課件
- 大連某項(xiàng)目鋼結(jié)構(gòu)深化設(shè)計(jì)與施工工程招標(biāo)文件
- 生涯規(guī)劃展示
- 《銀河帝國-基地》閱讀試卷及答案
- 機(jī)器學(xué)習(xí)復(fù)習(xí)題附有答案
- 《俗世奇人》(讀書指導(dǎo))課件
- 風(fēng)機(jī)行業(yè)報(bào)告
- 如何引領(lǐng)教師專業(yè)成長
- 肺占位性病變查房
評論
0/150
提交評論