結(jié)構(gòu)體共用體和用戶定義類型_第1頁(yè)
結(jié)構(gòu)體共用體和用戶定義類型_第2頁(yè)
結(jié)構(gòu)體共用體和用戶定義類型_第3頁(yè)
結(jié)構(gòu)體共用體和用戶定義類型_第4頁(yè)
結(jié)構(gòu)體共用體和用戶定義類型_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、關(guān)于結(jié)構(gòu)體共用體和用戶定義的類型第一張,PPT共四十四頁(yè),創(chuàng)作于2022年6月結(jié)構(gòu)體:是一種自定義 的 構(gòu)造數(shù)據(jù)類型。用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體。struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .;成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識(shí)符可省:無(wú)名結(jié)構(gòu)體14.1 結(jié)構(gòu)體類型定義:第二張,PPT共四十四頁(yè),創(chuàng)作于2022年6月例 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr

2、2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié).結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型的定義第三張,PPT共四十四頁(yè),創(chuàng)作于2022年6月例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2; 14.1.2 結(jié)構(gòu)體變量1、結(jié)構(gòu)體變量的定義(1)、先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式: struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .;struct 結(jié)構(gòu)體名 變量名表列;第四張,PPT共四十四

3、頁(yè),創(chuàng)作于2022年6月(2)、定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量一般形式:struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .變量名表列;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 第五張,PPT共四十四頁(yè),創(chuàng)作于2022年6月(3)、無(wú)名結(jié)構(gòu)體定義一般形式:struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .變量名表列;例 struct int num; char name20; char sex; int age; f

4、loat score; char addr30; stu1,stu2; 用無(wú)名結(jié)構(gòu)體直接定義第六張,PPT共四十四頁(yè),創(chuàng)作于2022年6月幾點(diǎn)說(shuō)明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存; 變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算; 變量:可以結(jié)構(gòu)體成員名與程序中變量名地位相同結(jié)構(gòu)體可嵌套例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例 struct student

5、 int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyear第七張,PPT共四十四頁(yè),創(chuàng)作于2022年6月 2、結(jié)構(gòu)體變量的初始化 和其他類型的變量相同,在定義結(jié)構(gòu)體變量時(shí)賦初值形式一:struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .;struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct student int num; char name20; char sex; int age; char addr30; ;

6、 struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;第八張,PPT共四十四頁(yè),創(chuàng)作于2022年6月形式二:struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第九張,PPT共四十四頁(yè),創(chuàng)作于2022年6月形式三:struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)

7、符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第十張,PPT共四十四頁(yè),創(chuàng)作于2022年6月3 結(jié)構(gòu)體變量的引用引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用成員(分量)運(yùn)算符優(yōu)先級(jí): 1結(jié)合性:從左向右引用方式: 結(jié)構(gòu)體變量名.成員名例 struct student int num; char name20; char

8、sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; ()例 struct stude

9、nt int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例 struct student int num; char name20; char sex; int a

10、ge; float score; char addr30; stu1,stu2; if(stu1=stu2). ()第十一張,PPT共四十四頁(yè),創(chuàng)作于2022年6月指針引用結(jié)構(gòu)體變量中數(shù)據(jù)指針變量名-成員名(*指針變量名).成員名struct student char name12; char sex; struct date birthday; float sc4;std,arr5,*ps; ps=&std; 引用結(jié)構(gòu)體變量std中的sex成員,可寫(xiě)作: std.sex ps-sex (*ps).sex第十二張,PPT共四十四頁(yè),創(chuàng)作于2022年6月14.1.3 結(jié)構(gòu)體數(shù)組1、結(jié)構(gòu)體數(shù)組的定

11、義和初始化 定義:三種形式:形式一: struct student int num; char name20; char sex; int age; ;struct student stu2;形式二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; char sex; int age; stu2;numnamesexagenumnamesexagestu0stu125B第十三張,PPT共四十四頁(yè),創(chuàng)作于2022年6月初始化:與其他類型的數(shù)組賦初值的方法相

12、同例 struct int num; char name20; char sex; int age; stu =,;順序初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 分元素初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Li

13、n”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化時(shí)維數(shù)可省第十四張,PPT共四十四頁(yè),創(chuàng)作于2022年6月2、結(jié)構(gòu)體數(shù)組引用引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名stu1.age+; struct student int num; char name20; char sex; int age; str3;strcpy(,”ZhaoDa”);numnamesexagenumnamesexagestu0stu125B第十五張,PPT共四十四頁(yè),創(chuàng)作于2022年6月14.2 向函數(shù)傳遞結(jié)構(gòu)體型數(shù)據(jù) 1.向函數(shù)傳遞結(jié)構(gòu)體變量的

14、成員 普通變量作函數(shù)的實(shí)參的用法相同,形參與實(shí)參之間仍然是“值傳遞”的方式。2.向函數(shù)傳遞結(jié)構(gòu)體變量 ANSI C允許函數(shù)之間傳遞結(jié)構(gòu)體變量。若實(shí)參是結(jié)構(gòu)體變量,那么形參也應(yīng)是同類型的結(jié)構(gòu)體變量。3.向函數(shù)傳遞結(jié)構(gòu)體數(shù)組名若實(shí)參是結(jié)構(gòu)體數(shù)組名,那么形參也應(yīng)是同類型的結(jié)構(gòu)體變量。第十六張,PPT共四十四頁(yè),創(chuàng)作于2022年6月#include typedef stuct int num; double mark; REC; void sub1(REC x)x.num=23;x.mark=81.5; void sub2(REC y)y0.num=12;y0.mark=77.5;main() REC

15、 a=16,90.0, b=16,90.0; sub1(a); printf(“A)%d,%5.1lfn”,a.num,a.mark); sub2(b); printf(“B)%d,%5.1lfn”,b0.num,b0.mark);結(jié)果: 16, 90.0 12,77.5第十七張,PPT共四十四頁(yè),創(chuàng)作于2022年6月讀入五位用戶的姓名和電話號(hào)碼,按姓名字典順序排序后,輸出用戶的姓名和電話號(hào)碼.#include #include #define N 5typedef struct char name20; char num10; USER;void getdata(USER *sp); voi

16、d getsort(USER *sp); void outdata(USER *sp);第十八張,PPT共四十四頁(yè),創(chuàng)作于2022年6月main() USER spN; getdata(sp); getsort(sp); outdata(sp);void getdata(USER *sp) int i; printf(“Enter name & phone number:n”); for(i=0;iN;i+) gets(); gets(spi.num);void getsort(USER *sp) int i,j,k; USER temp;for(i=0;iN-1;i+) 第十

17、九張,PPT共四十四頁(yè),創(chuàng)作于2022年6月k=i; for(j=i+1;j0) k=j; temp=spk; spk=spi;spi=temp;void outdata(USER *sp) int i; printf(“after sort:n”); for(i=0;i成員名共用體變量名.成員名(*共用體指針名).成員名union data int i; char ch; float f; ; union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p).ch (*p).fd0.i d0.ch d0.f共用體變量中起作用的成員是最后一次

18、存放的成員例 union int i; char ch; float f; a; a=1; () 不能在定義共用體變量時(shí)初始化例 union int i; char ch; float f; a=1,a,1.5; () 可以用一個(gè)共用體變量為另一個(gè)變量賦值例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; ()第二十三張,PPT共四十四頁(yè),創(chuàng)作于2022年6月例 將一個(gè)整數(shù)按字節(jié)輸出01100001 01000001低字節(jié)高字節(jié)0100000101100001ch0ch1運(yùn)行

19、結(jié)果:i=60501ch0=101,ch1=141ch0=A,ch1=amain() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1);第二十四張,PPT共四十四頁(yè),創(chuàng)作于2022年6月結(jié)構(gòu)體與共用體區(qū)別: 存儲(chǔ)方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbchk變量的各成員同時(shí)存在任一時(shí)刻只有一個(gè)成員

20、存在聯(lián)系: 兩者可相互嵌套第二十五張,PPT共四十四頁(yè),創(chuàng)作于2022年6月例: 結(jié)構(gòu)體中嵌套共用體 struct int num; char name10; char sex; char job; union int class; char position10; category;person2;第二十六張,PPT共四十四頁(yè),創(chuàng)作于2022年6月14.4 用typedef 定義已知類型功能:為已有數(shù)據(jù)類型命名類型定義簡(jiǎn)單形式: typedef type name;例 typedef int INTEGER;類型定義語(yǔ)句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例 typedef float RE

21、AL;類型定義后,與已有類型一樣使用例 INTEGER a,b,c; REAL f1,f2; int a,b,c; float f1,f2; 說(shuō)明:1.typedef 沒(méi)有創(chuàng)造新數(shù)據(jù)類型2.typedef 是定義類型,不能定義變量3.typedef 與 define 不同 define typedef預(yù)編譯時(shí)處理 編譯時(shí)處理簡(jiǎn)單字符置換 為已有類型命名 第二十七張,PPT共四十四頁(yè),創(chuàng)作于2022年6月14.5、結(jié)構(gòu)體指針的使用1.鏈表。鏈表的建立、遍歷、查找、插入、刪除操作第二十八張,PPT共四十四頁(yè),創(chuàng)作于2022年6月鏈表 什么是鏈表?鏈表:鏈表中的一個(gè)元素稱為一個(gè)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)由兩部分

22、組成:數(shù)據(jù)部分、指針。用指針把各個(gè)結(jié)點(diǎn)串聯(lián)起來(lái)構(gòu)成鏈表。分單向、雙向鏈表.第二十九張,PPT共四十四頁(yè),創(chuàng)作于2022年6月鏈表為什么使用鏈表?1)不需要連續(xù)存儲(chǔ)空間,可利用內(nèi)存碎片;2)插入刪除元素不需移動(dòng)其它元素,處理速度快;3)動(dòng)態(tài)分配存儲(chǔ)空間,可以隨意擴(kuò)充表的容量。 鏈表結(jié)構(gòu)體定義如下:void *malloc(unsigned size)函數(shù):如: struct student int num; float score; struct student *next;*p1;p1=(struct student *)malloc(sizeof(struct student);第三十張,P

23、PT共四十四頁(yè),創(chuàng)作于2022年6月建立單鏈表的主要步驟為: 生成只含有頭結(jié)點(diǎn)的空鏈表; 然后讀取數(shù)據(jù)信息,生成新結(jié)點(diǎn),將數(shù)據(jù)存放于新結(jié)點(diǎn)中, 插入新結(jié)點(diǎn)到單鏈表中 重復(fù)第二步,直到輸入結(jié)束。 根據(jù)新結(jié)點(diǎn)插入到鏈表的位置的不同,建立鏈表的方式,分為在表尾插入的方法和在表頭插入的方法。 第三十一張,PPT共四十四頁(yè),創(chuàng)作于2022年6月在鏈表中插入結(jié)點(diǎn) 設(shè)指針變量s指向待插入結(jié)點(diǎn),假設(shè)指定結(jié)點(diǎn)為p。 插入到指定結(jié)點(diǎn)之后: snext=pnext; pnext=s; 插入到指定結(jié)點(diǎn)之前:首先要找到p的前驅(qū)結(jié)點(diǎn)q。 例9.8 s-next=p; q-next=s第三十二張,PPT共四十四頁(yè),創(chuàng)作于2

24、022年6月#include #include struct slist int data; struct slist *next;typedef struct slist SLIST;頭結(jié)點(diǎn)987第三十三張,PPT共四十四頁(yè),創(chuàng)作于2022年6月SLIST *creat_slist() int c; SLIST *head, *s,*r; /* r承上,s啟下 */ head=(SLIST *)malloc(sizeof(SLIST); r=head; scanf(%d,&c); while(c!=-1)s=(SLIST *)malloc(sizeof(SLIST); s-data=c; r

25、-next=s; r=s; scanf(%d,&c);r-next=0;return head;第三十四張,PPT共四十四頁(yè),創(chuàng)作于2022年6月void print(SLIST *head)SLIST *p; p=head-next; while(p!=NULL) printf(%d ,p-data); p=p-next; main() SLIST *head;printf(creat lian biaon); head=creat_slist();print(head); 第三十五張,PPT共四十四頁(yè),創(chuàng)作于2022年6月在鏈表中刪除結(jié)點(diǎn) 在一個(gè)單鏈表中刪除指定結(jié)點(diǎn),首先要找到該結(jié)點(diǎn)的前驅(qū)

26、結(jié)點(diǎn),然后修改前驅(qū)結(jié)點(diǎn)的指針域指向待刪結(jié)點(diǎn)的后繼結(jié)點(diǎn),然后釋放被刪結(jié)點(diǎn)。 q-=next=p-next第三十六張,PPT共四十四頁(yè),創(chuàng)作于2022年6月有以下程序:#include main() struct cmplxint x;int y; cnum2=1,3,2,7; printf(“%dn”,cnum0.y/cnum0.x*cnum1.x);以下程序的輸出結(jié)果:6第三十七張,PPT共四十四頁(yè),創(chuàng)作于2022年6月有以下程序 :struct st int n; struct st *next;struct st a3, *p;a0.n=5;a0.next=&a1;第三十八張,PPT共四十四頁(yè),創(chuàng)作于2022年6月a1.next=&a2; a2.n=9; a2.next=0;p=&a0;則以下表達(dá)式是6的是:A p+-n B p-n+ C +(*p).n D +p-n答案:D記住:+p-n成員值增等價(jià)+(p-n). (+p)-n 指針增(在訪問(wèn)之前)(p+)-

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論