版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
關(guān)于結(jié)構(gòu)體共用體和用戶定義的類型結(jié)構(gòu)體:是一種自定義的構(gòu)造數(shù)據(jù)類型。用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體。struct
[結(jié)構(gòu)體名]{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識符可省:無名結(jié)構(gòu)體14.1
結(jié)構(gòu)體類型定義:第2頁,共44頁,2024年2月25日,星期天例
struct
student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型的定義第3頁,共44頁,2024年2月25日,星期天例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
structstudentstu1,stu2;14.1.2
結(jié)構(gòu)體變量1、結(jié)構(gòu)體變量的定義(1)、先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct
結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};struct
結(jié)構(gòu)體名變量名表列;第4頁,共44頁,2024年2月25日,星期天(2)、定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量一般形式:struct
結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;第5頁,共44頁,2024年2月25日,星期天(3)、無名結(jié)構(gòu)體定義一般形式:struct{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體直接定義第6頁,共44頁,2024年2月25日,星期天幾點(diǎn)說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算;變量:可以結(jié)構(gòu)體成員名與程序中變量名地位相同結(jié)構(gòu)體可嵌套例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear第7頁,共44頁,2024年2月25日,星期天2、結(jié)構(gòu)體變量的初始化和其他類型的變量相同,在定義結(jié)構(gòu)體變量時(shí)賦初值形式一:struct
結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};struct
結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};第8頁,共44頁,2024年2月25日,星期天形式二:struct結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};第9頁,共44頁,2024年2月25日,星期天形式三:struct{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};第10頁,共44頁,2024年2月25日,星期天3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級引用成員(分量)運(yùn)算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);(
)stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};(
)例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;()例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;if(stu1==stu2)……..(
)第11頁,共44頁,2024年2月25日,星期天指針引用結(jié)構(gòu)體變量中數(shù)據(jù)指針變量名->成員名(*指針變量名).成員名structstudent{charname[12];charsex;structdatebirthday;floatsc[4];}std,arr[5],*ps;ps=&std;
引用結(jié)構(gòu)體變量std中的sex成員,可寫作:std.sexps->sex(*ps).sex第12頁,共44頁,2024年2月25日,星期天14.1.3結(jié)構(gòu)體數(shù)組1、結(jié)構(gòu)體數(shù)組的定義和初始化定義:三種形式:形式一:
structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B第13頁,共44頁,2024年2月25日,星期天初始化:與其他類型的數(shù)組賦初值的方法相同例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};順序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};分元素初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時(shí)維數(shù)可省第14頁,共44頁,2024年2月25日,星期天2、結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名stu[1].age++;structstudent{intnum;charname[20];charsex;intage;}str[3];strcpy(stu[0].name,”ZhaoDa”);numnamesexagenumnamesexagestu[0]stu[1]25B第15頁,共44頁,2024年2月25日,星期天14.2向函數(shù)傳遞結(jié)構(gòu)體型數(shù)據(jù)
1.向函數(shù)傳遞結(jié)構(gòu)體變量的成員
普通變量作函數(shù)的實(shí)參的用法相同,形參與實(shí)參之間仍然是“值傳遞”的方式。2.向函數(shù)傳遞結(jié)構(gòu)體變量
ANSIC允許函數(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)體變量。第16頁,共44頁,2024年2月25日,星期天#include<stdio.h>typedefstuct{intnum;doublemark;}REC;voidsub1(RECx){x.num=23;x.mark=81.5;}voidsub2(RECy[]){y[0].num=12;y[0].mark=77.5;}main(){RECa={16,90.0},b[]=16,90.0};sub1(a);printf(“A)%d,%5.1lf\n”,a.num,a.mark);sub2(b);printf(“B)%d,%5.1lf\n”,b[0].num,b[0].mark);}結(jié)果:16,90.012,77.5第17頁,共44頁,2024年2月25日,星期天讀入五位用戶的姓名和電話號碼,按姓名字典順序排序后,輸出用戶的姓名和電話號碼.#include<stdio.h>#include<string.h>#defineN5typedefstruct
{charname[20];charnum[10];}USER;voidgetdata(USER*sp);voidgetsort(USER*sp);voidoutdata(USER*sp);第18頁,共44頁,2024年2月25日,星期天main(){USERsp[N];getdata(sp);getsort(sp);outdata(sp);}voidgetdata(USER*sp){inti;printf(“Entername&phonenumber:\n”);for(i=0;i<N;i++){gets(sp[i].name);gets(sp[i].num);}}voidgetsort(USER*sp){inti,j,k;USERtemp;for(i=0;i<N-1;i++)
第19頁,共44頁,2024年2月25日,星期天{k=i;for(j=i+1;j<N;j++)if(strcmp(sp[k].name,sp[j].name)>0)k=j;temp=sp[k];sp[k]=sp[i];sp[i]=temp;}}voidoutdata(USER*sp){inti;printf(“aftersort:\n”);for(i=0;i<N;i++)printf(“%s,%s\n”,sp[i].name,sp[i].num);}第20頁,共44頁,2024年2月25日,星期天14.3共用體有時(shí)需要將幾個(gè)不同時(shí)出現(xiàn)的變量共享一個(gè)內(nèi)存單元.如:將一個(gè)整型變量、實(shí)型變量、字符型變量共同放入同一個(gè)地址空間(當(dāng)然這幾個(gè)變量不能同時(shí)用),怎么辦?C提供了共用體(聯(lián)合體)類型支持。
14.3.1共用體類型union
共用體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};例uniondata{inti;charch;floatf;};類型定義不分配內(nèi)存fchi100地址開始定義形式:第21頁,共44頁,2024年2月25日,星期天形式二:uniondata{inti;charch;floatf;}a,b;形式一:uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:union{inti;charch;floatf;}a,b,c;14.3.2共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時(shí)刻只有一個(gè)成員存在1、共用體變量的定義第22頁,共44頁,2024年2月25日,星期天2共用體變量引用引用方式:例a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;printf(“%d”,a.i);(
編譯通過,運(yùn)行結(jié)果不對)
引用規(guī)則不能引用共用體變量,只能引用其成員共用體指針名->成員名共用體變量名.成員名(*共用體指針名).成員名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用體變量中起作用的成員是最后一次存放的成員例union{inti;charch;floatf;}a;a=1;(
)
不能在定義共用體變量時(shí)初始化例union{inti;charch;floatf;}a={1,’a’,1.5};(
)
可以用一個(gè)共用體變量為另一個(gè)變量賦值例floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;(
)x=a.f;(
)第23頁,共44頁,2024年2月25日,星期天例將一個(gè)整數(shù)按字節(jié)輸出0110000101000001低字節(jié)高字節(jié)0100000101100001ch[0]ch[1]運(yùn)行結(jié)果:i=60501ch0=101,ch1=141ch0=A,ch1=amain(){unionint_char{inti;charch[2];}x;x.i=24897;printf("i=%o\n",x.i);printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]);}第24頁,共44頁,2024年2月25日,星期天結(jié)構(gòu)體與共用體區(qū)別:存儲(chǔ)方式不同structnode{charch[2];intk;}a;unionnode{charch[2];intk;}b;achkbchk變量的各成員同時(shí)存在任一時(shí)刻只有一個(gè)成員存在聯(lián)系:兩者可相互嵌套第25頁,共44頁,2024年2月25日,星期天例:結(jié)構(gòu)體中嵌套共用體struct{intnum;charname[10];charsex;charjob;
union{intclass;charposition[10];}category;}person[2];第26頁,共44頁,2024年2月25日,星期天14.4
用typedef定義已知類型功能:為已有數(shù)據(jù)類型命名類型定義簡單形式:typedef
typename;例typedefintINTEGER;類型定義語句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例typedeffloatREAL;類型定義后,與已有類型一樣使用例INTEGERa,b,c;REALf1,f2;inta,b,c;floatf1,f2;說明:1.typedef沒有創(chuàng)造新數(shù)據(jù)類型2.typedef是定義類型,不能定義變量3.typedef與
define
不同
definetypedef預(yù)編譯時(shí)處理編譯時(shí)處理簡單字符置換為已有類型命名
第27頁,共44頁,2024年2月25日,星期天14.5、結(jié)構(gòu)體指針的使用
1.鏈表。
鏈表的建立、遍歷、查找、插入、刪除操作第28頁,共44頁,2024年2月25日,星期天鏈表什么是鏈表?鏈表:鏈表中的一個(gè)元素稱為一個(gè)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)由兩部分組成:數(shù)據(jù)部分、指針。用指針把各個(gè)結(jié)點(diǎn)串聯(lián)起來構(gòu)成鏈表。分單向、雙向鏈表.第29頁,共44頁,2024年2月25日,星期天鏈表為什么使用鏈表?1)不需要連續(xù)存儲(chǔ)空間,可利用內(nèi)存碎片;2)插入刪除元素不需移動(dòng)其它元素,處理速度快;3)動(dòng)態(tài)分配存儲(chǔ)空間,可以隨意擴(kuò)充表的容量。
鏈表結(jié)構(gòu)體定義如下:void*malloc(unsignedsize)函數(shù):如:structstudent{intnum;floatscore;structstudent*next;}*p1;p1=(structstudent*)malloc(sizeof(structstudent));第30頁,共44頁,2024年2月25日,星期天建立單鏈表的主要步驟為:
生成只含有頭結(jié)點(diǎn)的空鏈表;然后讀取數(shù)據(jù)信息,生成新結(jié)點(diǎn),將數(shù)據(jù)存放于新結(jié)點(diǎn)中,插入新結(jié)點(diǎn)到單鏈表中重復(fù)第二步,直到輸入結(jié)束。根據(jù)新結(jié)點(diǎn)插入到鏈表的位置的不同,建立鏈表的方式,分為在表尾插入的方法和在表頭插入的方法。
第31頁,共44頁,2024年2月25日,星期天在鏈表中插入結(jié)點(diǎn)設(shè)指針變量s指向待插入結(jié)點(diǎn),假設(shè)指定結(jié)點(diǎn)為p。插入到指定結(jié)點(diǎn)之后:①s
next=p
next;②p
next=s;
插入到指定結(jié)點(diǎn)之前:首先要找到p的前驅(qū)結(jié)點(diǎn)q。
例9.8
s->next=p;q->next=s第32頁,共44頁,2024年2月25日,星期天#include<stdio.h>#include<stdlib.h>structslist{intdata;structslist*next;};typedefstructslistSLIST;頭結(jié)點(diǎn)987第33頁,共44頁,2024年2月25日,星期天SLIST*creat_slist(){intc;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->next=s;r=s;scanf("%d",&c);}r->next='\0';returnhead;}第34頁,共44頁,2024年2月25日,星期天voidprint(SLIST*head){SLIST*p;p=head->next;while(p!=NULL){printf("%d",p->data);p=p->next;}}main(){SLIST*head; printf("creatlianbiao\n");head=creat_slist(); print(head);
}第35頁,共44頁,2024年2月25日,星期天在鏈表中刪除結(jié)點(diǎn)
在一個(gè)單鏈表中刪除指定結(jié)點(diǎn),首先要找到該結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),然后修改前驅(qū)結(jié)點(diǎn)的指針域指向待刪結(jié)點(diǎn)的后繼結(jié)點(diǎn),然后釋放被刪結(jié)點(diǎn)。
q->=next=p->next第36頁,共44頁,2024年2月25日,星期天有以下程序:#include<stdio.h>main(){
structcmplx{intx;inty;}cnum[2]={1,3,2,7};printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);}以下程序的輸出結(jié)果:6第37頁,共44頁,20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年外派勞務(wù)人員健康管理與合同規(guī)范
- 2025年度建筑基礎(chǔ)工程地基基礎(chǔ)檢測與施工合同3篇
- 二手車個(gè)人買賣合同范本二
- 沈陽韓語bpo合同
- 酒店熱水系統(tǒng)合同能源管理
- 解除房屋合同銀行流程
- 2025年度特色小鎮(zhèn)墻繪創(chuàng)意設(shè)計(jì)與應(yīng)用合同3篇
- 2024幼兒園園長任用與薪酬福利聘用協(xié)議6篇
- 2025年度旅游線路開發(fā)與合作合同3篇
- 2024民辦幼兒園教職工勞動(dòng)合同與幼兒園特色發(fā)展3篇
- 影視后期制作團(tuán)隊(duì)薪酬激勵(lì)方案
- 污水管網(wǎng)技術(shù)標(biāo)
- 2023年河南省公務(wù)員錄用考試《行測》真題及答案解析
- 《輸液港的護(hù)理》課件
- 新修訂反洗錢法律知識培訓(xùn)課件
- 精彩的儲(chǔ)運(yùn)部年終總結(jié)
- 山西省太原市重點(diǎn)中學(xué)2025屆物理高一第一學(xué)期期末統(tǒng)考試題含解析
- Python開發(fā)工程師招聘筆試題及解答(某大型國企)
- 2024年農(nóng)民職業(yè)農(nóng)業(yè)素質(zhì)技能考試題庫(附含答案)
- 妊娠期高血糖診治指南
- 2024壓鑄機(jī)安全技術(shù)規(guī)范
評論
0/150
提交評論