![第9章用戶自己建立數(shù)據(jù)類型_第1頁](http://file4.renrendoc.com/view/74cf07e66fa20474c629eaf9761d3650/74cf07e66fa20474c629eaf9761d36501.gif)
![第9章用戶自己建立數(shù)據(jù)類型_第2頁](http://file4.renrendoc.com/view/74cf07e66fa20474c629eaf9761d3650/74cf07e66fa20474c629eaf9761d36502.gif)
![第9章用戶自己建立數(shù)據(jù)類型_第3頁](http://file4.renrendoc.com/view/74cf07e66fa20474c629eaf9761d3650/74cf07e66fa20474c629eaf9761d36503.gif)
![第9章用戶自己建立數(shù)據(jù)類型_第4頁](http://file4.renrendoc.com/view/74cf07e66fa20474c629eaf9761d3650/74cf07e66fa20474c629eaf9761d36504.gif)
![第9章用戶自己建立數(shù)據(jù)類型_第5頁](http://file4.renrendoc.com/view/74cf07e66fa20474c629eaf9761d3650/74cf07e66fa20474c629eaf9761d36505.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章用戶自己建立數(shù)據(jù)類型9.1定義和使用結(jié)構(gòu)體變量9.2使用結(jié)構(gòu)體數(shù)組9.3結(jié)構(gòu)體指針9.4用指針處理鏈表9.5共用體類型9.6使用枚舉類型9.7用typedef聲明新類型名9.1定義和使用結(jié)構(gòu)體變量9.1.1自己建立結(jié)構(gòu)體類型9.1.2定義結(jié)構(gòu)體類型變量9.1.3結(jié)構(gòu)體變量的初始化和引用9.1.1自己建立結(jié)構(gòu)體類型用戶自己建立由不同類型數(shù)據(jù)組成的組合型的數(shù)據(jù)結(jié)構(gòu),它稱為結(jié)構(gòu)體例如,一個學(xué)生的學(xué)號、姓名、性別、年齡、成績、家庭地址等項(xiàng),是屬于同一個學(xué)生的,因此組成一個組合數(shù)據(jù),如student_1的變量,反映它們之間的內(nèi)在聯(lián)系9.1.1自己建立結(jié)構(gòu)體類型structStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};由程序設(shè)計者指定了一個結(jié)構(gòu)體類型structStudent它包括num,name,sex,age,score,addr等不同類型的成員9.1.1自己建立結(jié)構(gòu)體類型聲明一個結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體名{成員表列};
類型名
成員名;9.1.1自己建立結(jié)構(gòu)體類型說明:(1)結(jié)構(gòu)體類型并非只有一種,而是可以設(shè)計出許多種結(jié)構(gòu)體類型,例如structTeacherstructWorkerstructDate等結(jié)構(gòu)體類型各自包含不同的成員9.1.1自己建立結(jié)構(gòu)體類型說明:(2)成員可以屬于另一個結(jié)構(gòu)體類型。
structDate
{intmonth;
intday;intyear;
};
structStu
{intnum;charname[20];charsex;intage;
structDatebirthday;
charaddr[30];
};9.1.1自己建立結(jié)構(gòu)體類型說明:(2)成員可以屬于另一個結(jié)構(gòu)體類型。
numnamesexagebirthdayaddrmonthdayyear9.1.2定義結(jié)構(gòu)體類型變量前面只是建立了一個結(jié)構(gòu)體類型,它相當(dāng)于一個模型,并沒有定義變量,其中并無具體數(shù)據(jù),系統(tǒng)對之也不分配存儲單元。相當(dāng)于設(shè)計好了圖紙,但并未建成具體的房屋。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量,并在其中存放具體的數(shù)據(jù)。9.1.2定義結(jié)構(gòu)體類型變量1.先聲明結(jié)構(gòu)體類型,再定義該類型變量聲明結(jié)構(gòu)體類型structStudent,可以用它來定義變量structStudentstudent1,student2;結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名
9.1.2定義結(jié)構(gòu)體類型變量1.先聲明結(jié)構(gòu)體類型,再定義該類型變量聲明結(jié)構(gòu)體類型structStudent,可以用它來定義變量structStudentstudent1,student2;10001ZhangXinM1990.5Shanghaistudent110002WangLiF2098Beijingstudent29.1.2定義結(jié)構(gòu)體類型變量2.在聲明類型的同時定義變量structStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;9.1.2定義結(jié)構(gòu)體類型變量3.不指定類型名而直接定義結(jié)構(gòu)體類型變量其一般形式為:struct{成員表列}變量名表列;
指定了一個無名的結(jié)構(gòu)體類型。9.1.2定義結(jié)構(gòu)體類型變量4.在聲明類型時,定義變量同時賦初值
structStudent{longintnum;charname[20];charsex;charaddr[20];}a={10101,“LiLin”,‘M’,“123BeijingRoad”};9.1.2定義結(jié)構(gòu)體類型變量5.定義結(jié)構(gòu)體數(shù)組structPerson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,“Sun”,0};namecountleader[0]Li0Zhang0Sun0說明:(1)定義結(jié)構(gòu)體數(shù)組一般形式是①struct結(jié)構(gòu)體名{成員表列}數(shù)組名[數(shù)組長度];②先聲明一個結(jié)構(gòu)體類型,然后再用此類型定義結(jié)構(gòu)體數(shù)組:
結(jié)構(gòu)體類型
數(shù)組名[數(shù)組長度];
如:structPersonleader[3];說明:(2)對結(jié)構(gòu)體數(shù)組初始化的形式是在定義數(shù)組的后面加上:={初值表列};
如:structPersonleader[3]={"Li",0,"Zhang",0,"Fun",0};9.1.2定義結(jié)構(gòu)體類型變量(1)結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概念,不要混同。只能對變量賦值、存取或運(yùn)算,而不能對一個類型賦值、存取或運(yùn)算。在編譯時,對類型是不分配空間的,只對變量分配空間。9.1.2定義結(jié)構(gòu)體類型變量(2)結(jié)構(gòu)體類型中的成員名可以與程序中的變量名相同,但二者不代表同一對象。(3)對結(jié)構(gòu)體變量中的成員(即“域”),可以單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。結(jié)構(gòu)體變量名.域名9.1.3結(jié)構(gòu)體變量的初始化和引用
例9.1把一個學(xué)生的信息(包括學(xué)號、姓名、性別、住址)放在一個結(jié)構(gòu)體變量中,然后輸出這個學(xué)生的信息。解題思路:自己建立一個結(jié)構(gòu)體類型,包括有關(guān)學(xué)生信息的各成員用它定義結(jié)構(gòu)體變量,同時賦以初值輸出該結(jié)構(gòu)體變量的各成員9.1.3結(jié)構(gòu)體變量的初始化和引用#include<stdio.h>intmain(){structStudent{longintnum;charname[20];charsex;charaddr[20];}a={10101,“LiLin”,‘M’,“123BeijingRoad”};printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,,a.sex,a.addr);return0;}#include<stdio.h>intmain(){structStudent{longintnum;charname[20];charsex;charaddr[20];}a={10101,“LiLin”,‘M’,“123BeijingRoad”};printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,,a.sex,a.addr);return0;}{}#include<stdio.h>intmain(){structStudent{longintnum;charname[20];charsex;charaddr[20];}a={10101,“LiLin”,‘M’,“123BeijingRoad”};……}a.num=10010;對printf(“%s\n”,a);不對#include<stdio.h>intmain(){structStudent{longintnum;charname[20];charsex;charaddr[20];}a={10101,“LiLin”,‘M’,“123BeijingRoad”};……}b=a;對structStudentb;b.num++;對#include<stdio.h>intmain(){structStudent{longintnum;charname[20];charsex;charaddr[20];}a={10101,“LiLin”,‘M’,“123BeijingRoad”};……}scanf(″%ld″,&a.num);對scanf(“%ld,%s,%c,%s\n”,&a);錯#include<stdio.h>intmain(){structDate
{intmonth;
intday;intyear;
};
structStu
{intnum;charname[20];charsex;intage;
structDatebirthday;
charaddr[30];
}a,b;a.birthday.month=12;對a.age=10;b.age=9;對sum=a.age+b.age;對
例9.2輸入兩個學(xué)生的學(xué)號、姓名和成績,輸出成績較高學(xué)生的學(xué)號、姓名和成績解題思路:(1)定義兩個結(jié)構(gòu)相同的結(jié)構(gòu)體變量student1和student2;(2)分別輸入兩個學(xué)生的學(xué)號、姓名和成績;(3)比較兩個學(xué)生的成績,如果學(xué)生1的成績高于學(xué)生2,就輸出學(xué)生1的全部信息,如果學(xué)生2的成績高于學(xué)生1,就輸出學(xué)生2的全部信息。如果二者相等,輸出2個學(xué)生的全部信息#include<stdio.h>intmain(){structStudent{intnum;charname[20];floatscore;}student1,student2;scanf("%d%s%f",&student1.num,
,&student1.score);scanf(“%d%s%f”,&student2.num,
,&student2.score);不能加&9.3結(jié)構(gòu)體指針9.3.1指向結(jié)構(gòu)體變量的指針9.3.2指向結(jié)構(gòu)體數(shù)組的指針9.3.3用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)9.3.1指向結(jié)構(gòu)體變量的指針指向結(jié)構(gòu)體對象的指針變量既可以指向結(jié)構(gòu)體變量,也可以用來指向結(jié)構(gòu)體數(shù)組中的元素。指針變量的基類型必須與結(jié)構(gòu)體變量的類型相同。例如:structStudent*pt;9.3.1指向結(jié)構(gòu)體變量的指針
例9.5通過指向結(jié)構(gòu)體變量的指針變量輸出結(jié)構(gòu)體變量中成員的信息。解題思路:在已有的基礎(chǔ)上,本題要解決兩個問題:怎樣對結(jié)構(gòu)體變量成員賦值;怎樣通過指向結(jié)構(gòu)體變量的指針訪問結(jié)構(gòu)體變量中成員。#include<stdio.h>#include<string.h>intmain(){structStudent{longnum;charname[20];charsex;floatscore;};……
structStudentstu_1;
structStudent*p;
p=&stu_1;
stu_1.num=10101;strcpy(stu_1.name,“LiLin”);stu_1.sex='M‘;stu_1.score=89.5;printf("No.:%ld\n”,stu_1.num);printf("name:%s\n",stu_1.name);printf("sex:%c\n”,stu_1.sex);printf(”score:%5.1f\n”,stu_1.score);return0;}stu_110101LiLinM89.5pstructStudentstu_1;structStudent*p;p=&stu_1;stu_1.num=10101;strcpy(stu_1.name,“LiLin”);stu_1.sex='M‘;stu_1.score=89.5;printf("No.:%ld\n”,stu_1.num);printf("name:%s\n",stu_1.name);printf("sex:%c\n”,stu_1.sex);printf(”score:%5.1f\n”,stu_1.score);return0;}stu_110101LiLinM89.5p(*p).num(*p).name(*p).sex(*p).score說明:為了使用方便和直觀,C語言允許把(*p).num用p->num來代替(*p).name等價于p->name如果p指向一個結(jié)構(gòu)體變量stu,以下等價:①stu.成員名(如stu.num)②(*p).成員名(如(*p).num)p->成員名(如p->num)9.5.1什么是共用體類型有時想用同一段內(nèi)存單元存放不同類型的變量。使幾個不同的變量共享同一段內(nèi)存的結(jié)構(gòu),稱為“共用體”類型的結(jié)構(gòu)。1000100110021003字符ch整型變量i實(shí)型變量f定義共用體類型變量的一般形式為:union共用體名{成員表列}變量表列;例如:unionData{inti;charch;floatf;}a,b,c;unionData{inti;charch;floatf;};unionDataa,b,c;“共用體”與“結(jié)構(gòu)體”的定義形式相似,但它們的含義是不同的。結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和,每個成員分別占有其自己的內(nèi)存單元。而共用體變量所占的內(nèi)存長度等于最長的成員的長度。9.5.2引用共用體變量的方式只有先定義了共用體變量才能引用它,但應(yīng)注意,不能引用共用體變量,而只能引用共用體變量中的成員。例如,前面定義了a,b,c為共用體變量,下面的引用方式是正確的:a.ia.cha.f9.5.3共用體類型數(shù)據(jù)的特點(diǎn)在使用共用體類型數(shù)據(jù)時要注意以下一些特點(diǎn):(1)同一個內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬時只能存放其中一個成員,而不是同時存放幾個。9.5.3共用體類型數(shù)據(jù)的特點(diǎn)在使用共用體類型數(shù)據(jù)時要注意以下一些特點(diǎn):(2)可以對共用體變量初始化,但初始化表中只能有一個常量。9.5.3共用體類型數(shù)據(jù)的特點(diǎn)在使用共用體類型數(shù)據(jù)時要注意以下一些特點(diǎn):(3)共用體變量中起作用的成員是最后一次被賦值的成員,在對共用體變量中的一個成員賦值后,原有變量存儲單元中的值就取代。9.5.3共用體類型數(shù)據(jù)的特點(diǎn)在使用共用體類型數(shù)據(jù)時要注意以下一些特點(diǎn):(4)共用體變量的地址和它的各成員的地址都是同一地址。(5)不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值。9.6使用枚舉類型如果一個變量只有幾種可能的值,則可以定義為枚舉類型所謂“枚舉”就是指把可能的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)9.6使用枚舉類型聲明枚舉類型用enum開頭。例如:enumWeekday{sun,mon,tue,wed,thu,fri,sat};聲明了一個枚舉類型enumWeekday然后可以用此類型來定義變量enumWeekdayworkday,weekend;枚舉元素枚舉變量9.6使用枚舉類型workday=mon;正確weekend=sun;正確weekday=monday;不正確說明:(1)C編譯對枚舉類型的枚舉元素按常量處理,故稱枚舉常量。不要因?yàn)樗鼈兪菢?biāo)識符(有名字)而把它們看作變量,不能對它們賦值。例如:sun=0;mon=1;錯誤說明:(2)每一個枚舉元素都代表一個整數(shù),C語言編譯按定義時的順序默認(rèn)它們的值為0,1,2,3,4,5…在上面定義中,sun的值為0,mon的值為1,…sat的值為6如果有賦值語句:workday=mon;
相當(dāng)于workday=1;說明:(2)每一個枚舉元素都代表一個整數(shù),C語言編譯按定義時的順序默認(rèn)它們的值為0,1,2,3,4,5…也可以人為地指定枚舉元素的數(shù)值,例如:enumWeekday{sun=7,mon=1,tue,wed,thu,fri,sat}workday,week_end;指定枚舉常量sun的值為7,mon為1,以后順序加1,sat為6。說明:(3)枚舉元素可以用來作判斷比較。例如:
if(workday==mon)…if(workday>sun)…
枚舉元素的比較規(guī)則是按其在初始化時指定的整數(shù)來進(jìn)行比較的。如果定義時未人為指定,則按上面的默認(rèn)規(guī)則處理,即第一個枚舉元素的值為0,故mon>sun,sat>fri9.7用typedef聲明新類型名1.簡單地用一個新的類型名代替原有的類型名typedefintInteger;typedeffloatReal;inti,j;floata,b;
與Integeri,j;Reala,b;等價9.7用typedef聲明新類型名2.命名一個簡單的類型名代替復(fù)雜的類型表示方法(1)命名一個新的類型名代表結(jié)構(gòu)體類型:
typedefstruct{intmonth;intday;intyear;}Date;Datebirthday;Date*p;9.7用typedef聲明新類型名2.命名一個簡單的類型名代替復(fù)雜的類型表示方法(2)命名一個新的類型名代表數(shù)組類型typedefintNum[100];Numa;9.7用typedef聲明新類型名2.命名一個簡單的類型名代替復(fù)雜的類型表示方法(3)命名一個新的類型名代表一個指針類型typedefchar*String;Stringp,s[10];9.7用typedef聲明新類型名歸納起來,聲明一個新的類型名的方法是①先按定義變量的方法寫出定義體(inti;)②將變量名換成新類型名(將int換成Count)③在最前面加typedef
(typedefintCount)④用新類型名去定義變量9.7用typedef聲明新類型名以定義上述的數(shù)組類型為例來說明:①先按定義數(shù)組變量形式書寫:inta[100];②將變量名a換成自己命名的類型名:intNum[100];③在前面加上typedef,得到typedefintNum[100];用來定義變量:Numa;相當(dāng)于定義了:inta[100];9.7用typedef聲明新類型名對字符指針類型,也是:char*p;
char*String;typedefchar*String;Stringp;9.7用typedef聲明新類型名說明:(1)以上的方法實(shí)際上是為特定的類型指定了一個同義字(synonyms)。例如①typedefintNum[100];Numa;Num是int[100]的同義詞②typedefint(*Pointer)();Pointerp1;Pointer是int(*)()的同義詞9.7用typedef聲明新類型名說明:(2)用typedef只是對已經(jīng)存在的類型指定一個新的類型名,而沒有創(chuàng)造新的類型。(3)用tyoedef聲明數(shù)組類型、指針類型,結(jié)構(gòu)體類型、共用體類型、枚舉類型等,使得編程更加方便。(4)typedef與#define表面上有相似之處1、有以下程序#include<studio.h>#include<string.h>structA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,”Zh
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國工商銀行補(bǔ)償貿(mào)易借款合同(6篇)
- 2024酒店客房領(lǐng)班年終總結(jié)(7篇)
- 聘用合同模板(30篇)
- 2024年學(xué)校開展防災(zāi)減災(zāi)工作總結(jié)(9篇)
- 2024-2025學(xué)年第2課西方國家古代和近代政治制度的演變-勤徑學(xué)升高中歷史選擇性必修1同步練測(統(tǒng)編版2019)
- 2025年專利申請出售協(xié)議
- 2025年化工市場代理購銷居間協(xié)議書
- 2025年醫(yī)療機(jī)構(gòu)內(nèi)科承包業(yè)務(wù)協(xié)議
- 2025年授權(quán)代理合作合同標(biāo)準(zhǔn)版本
- 2025年電子線圈設(shè)備項(xiàng)目申請報告模板
- 2025年電力鐵塔市場分析現(xiàn)狀
- GB 12158-2024防止靜電事故通用要求
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》全文
- 山東省濱州市2024-2025學(xué)年高二上學(xué)期期末地理試題( 含答案)
- 體育老師籃球說課
- 化學(xué)-江蘇省蘇州市2024-2025學(xué)年2025屆高三第一學(xué)期學(xué)業(yè)期末質(zhì)量陽光指標(biāo)調(diào)研卷試題和答案
- 蛋雞生產(chǎn)飼養(yǎng)養(yǎng)殖培訓(xùn)課件
- 運(yùn)用PDCA降低住院患者跌倒-墜床發(fā)生率
- 海底撈員工手冊
- 2024CSCO小細(xì)胞肺癌診療指南解讀
- 立春氣象與生活影響模板
評論
0/150
提交評論