九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

《C語言程序設(shè)計》第8章結(jié)構(gòu)體、共用體與枚舉類型.ppt

  • 資源ID:11498711       資源大?。?span id="24d9guoke414" class="font-tahoma">531KB        全文頁數(shù):45頁
  • 資源格式: PPT        下載積分:9.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

《C語言程序設(shè)計》第8章結(jié)構(gòu)體、共用體與枚舉類型.ppt

第8章結(jié)構(gòu)體、共用體與枚舉類型,本章要求:理解結(jié)構(gòu)體類型的概念,掌握結(jié)構(gòu)體變量的定義和使用掌握結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針的定義和使用理解共用體的概念,掌握共用體變量的定義和使用了解枚舉數(shù)據(jù)類型及自定義數(shù)據(jù)類型的使用理解鏈表的概念,初步掌握動態(tài)鏈表的常見操作本章重點:結(jié)構(gòu)體變量的定義和使用鏈表的概念本章難點:動態(tài)鏈表的常見操作,8.1結(jié)構(gòu)體類型與結(jié)構(gòu)體變量,8.1.1結(jié)構(gòu)體概述數(shù)組是一種簡單構(gòu)造類型數(shù)據(jù),數(shù)組中的各元素是屬于同一個類型的。但在實際問題中,常會遇到這樣一類數(shù)據(jù),它由多個類型不相同的數(shù)據(jù)項組成。學生基本情況:學號、姓名、性別、年齡、成績結(jié)構(gòu)體(structure)是一種數(shù)據(jù)類型。C語言本身沒有提供具體的結(jié)構(gòu)體類型,但提供了說明結(jié)構(gòu)體類型的方法。,8.1.2結(jié)構(gòu)體的聲明,聲明結(jié)構(gòu)體類型的一般形式:struct結(jié)構(gòu)體名類型標識符成員名;類型標識符成員名;.;,成員類型可以是基本型或構(gòu)造型,struct關(guān)鍵字,不能省略,合法標識符可省:無名結(jié)構(gòu)體,structstudentintnum;charname20;charsex;intage;,8.1.3結(jié)構(gòu)體變量的定義,定義好一個結(jié)構(gòu)體類型后,我們可以將其看作是和int、char、float等數(shù)據(jù)類型一樣的一個新的數(shù)據(jù)類型。1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量,struct結(jié)構(gòu)體名類型標識符成員名;類型標識符成員名;.;struct結(jié)構(gòu)體名變量名表列;,structstudentintnum;charname20;charsex;intage;structstudenta,b;,intx;,a,structstudentt;,可多次使用structstudent來定義變量,2.定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量,struct結(jié)構(gòu)體名類型標識符成員名;類型標識符成員名;.變量名表列;,structstudentintnum;charname20;charsex;intage;a,b;,3.直接定義結(jié)構(gòu)體變量,structstudentt;,用無名結(jié)構(gòu)體直接定義變量只能一次,8.1.4結(jié)構(gòu)體變量的引用格式,引用規(guī)則:結(jié)構(gòu)體變量不能整體引用,只能引用變量成員引用方式:結(jié)構(gòu)體變量名.成員名,structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;,stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;,printf(“%d,%s,%c,%d,%f,%sn”,stu1);stu1=101,“WanLin”,M,19,87.5,“DaLian”;,結(jié)構(gòu)體嵌套,structdateintmonth;intday;intyear;,structpersoncharname20;charsex;structdatebirthday;,若有定義:structpersonperson1;,合法:person1.sex=F;person1.birthday.day=35;,同類型結(jié)構(gòu)體變量間的整體賦值,及變量的初始化,structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;,stu1=101,“WanLin”,M,19,87.5,“DaLian”;,stu1=stu2;,初始化:structstudentstua=101,“WanLin”,M,19,87.5,“DaLian”;,=111,“Tom”,M,19,60,“USA”;,8.1.6指向結(jié)構(gòu)體的指針,指向結(jié)構(gòu)體變量的指針的值是該結(jié)構(gòu)體變量所分配的存儲區(qū)域的首地址。結(jié)構(gòu)指針變量的定義,structstudentintnum;charname20;charsex;intage;stu;structstudent*p=,stu,通過指針訪問結(jié)構(gòu)體變量的成員,結(jié)構(gòu)變量名.成員名(名字引用);結(jié)構(gòu)指針->成員名(指針引用);(*結(jié)構(gòu)指針).成員名(將指針轉(zhuǎn)化為名字引用);,structstudentintnum;charname20;charsex;intage;stu;structstudent*p=,stu.age=8;p->age=8;(*p).age=8;,stu,8.2結(jié)構(gòu)體數(shù)組,8.2.1結(jié)構(gòu)體數(shù)組的定義(三種形式),structstudentintnum;charname20;charsex;intage;structstudentstu2;,stu2;,8.2.2結(jié)構(gòu)體數(shù)組的初始化,例如:structstudentintnum;charname20;charsex;intage;structstudentstu=100,“HeLin”,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;,引用方式:結(jié)構(gòu)體數(shù)組名下標.成員名,stu0.age=8;printf(“%s”,stu1.name);,8.2.3指向結(jié)構(gòu)體數(shù)組的指針,structstudentintnum;charname20;charsex;intage;structstudentstu9;structstudent*p=stu;,改寫數(shù)組輸出例子,8.3結(jié)構(gòu)體與函數(shù),已知:structstudentstu1,stu10,*p=stu;用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞函數(shù)聲明:voidfunc(intx);函數(shù)調(diào)用:func(stu1.age);用指向結(jié)構(gòu)體指針變量或數(shù)組的指針作參數(shù)-地址傳遞或st函數(shù)聲明:voidfunc(structstudent*st);函數(shù)調(diào)用:func(stu);或func(p);用結(jié)構(gòu)體變量作參數(shù)-多值傳遞(效率低)函數(shù)聲明:voidfunc(structstudentz);函數(shù)調(diào)用:func(stu1);,編寫:已知5個學生的信息表,包括學號、姓名、性別、年齡。編寫函數(shù)find1,找制定學號的學生姓名。在主函數(shù)中輸入學生學號,調(diào)用find1函數(shù)查找學生信息。編寫函數(shù)find2,找制定姓名的學生信息。在主函數(shù)中輸入學生姓名,調(diào)用find2函數(shù)查找學生信息。,用一個結(jié)構(gòu)體的指針作為find2函數(shù)的返回值,8.4共用體,共用體(也叫聯(lián)合體)是構(gòu)造數(shù)據(jù)類型,使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)1.聲明結(jié)構(gòu)體類型的一般形式:union共用體名類型標識符成員名;類型標識符成員名;.;,uniondatainti;charch;floatf;,uniondatainti;charch;floatf;uniondataa;,a,1B,2B,4B,i,ch,f,共用體變量任何時刻-只有一個成員存在共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量的定義形式有三種(類似結(jié)構(gòu)體變量的定義),2.共用體變量引用(類似結(jié)構(gòu)體變量),uniondatainti;charch;floatf;a,b,d5,*p=d;,a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd0.id0.chd0.f,結(jié)構(gòu)體與共用體,區(qū)別:存儲方式不同聯(lián)系:兩者可相互嵌套,變量的各成員同時存在,任一時刻只有一個成員存在,例,8.5枚舉類型,枚舉類型就是將變量可能出現(xiàn)的值放在一起而形成的一個整型常量的集合類型。限制在此集合內(nèi),變量只能取這個集合中的某個值。1枚舉類型的定義:enum枚舉類型名取值表;例enumweekdaysSun,Mon,Tue,Wed,Thu,Fri,Sat;2枚舉變量的定義與結(jié)構(gòu)變量類似(1)間接定義例如,enumweekdaysworkday;(2)直接定義例如,enumSun,Mon,Tue,Wed,Thu,Fri,Satworkday;,3說明,(1)枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。(2)取值表中的值稱為枚舉元素,枚舉元素是常量。在編譯器中,按定義的順序取值0、1、2、.。所以枚舉元素可以進行比較,比較規(guī)則是:序號大者為大。例如,上例中的Sun=0、Mon=1、Sat=6,所以Mon>Sun、Sat最大。(3)枚舉元素的值也是可以人為改變的:定義時由程序指定。例如,如果enumweekdaysSun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;則Sun=,Mon=,從Tue=2開始,依次增。,例,8.6typedef的使用,功能:用自定義名字為已有數(shù)據(jù)類型命名簡單形式:typedeftypenewname;,類型定義語句關(guān)鍵字,已有數(shù)據(jù)類型名,用戶定義的類型名,例typedefintINTEGER;typedeffloatREAL;,typedef沒有創(chuàng)造新數(shù)據(jù)類型。typedef是編譯時處理為已有類型命名,#define是預(yù)編譯時處理時簡單字符置換。,typedef定義類型步驟:,按定義變量方法先寫出定義體,如inti;將變量名換成新類型名,如intINTEGER;他最前面加typedef,如typedefintINTEGER;用新類型名定義變量,如INTEGERi,j;,例:,inta100;intARRAY100;,typedefintARRAY100;,ARRAYa,8.7動態(tài)數(shù)據(jù)結(jié)構(gòu)鏈表,8.7.1鏈表的提出數(shù)組:在內(nèi)存中占用連續(xù)存儲的空間。插入,刪除操作需要移動多個元素。鏈表是動態(tài)的進行存儲分配,鏈表的各個結(jié)點在邏輯上是連續(xù)的,但是在內(nèi)存中存儲時不占用連續(xù)的空間。鏈表的使用能有效的避免存儲空間的浪費和數(shù)據(jù)移動的問題。,8.7.2鏈表的基本結(jié)構(gòu),鏈表是一種常用的、能夠?qū)崿F(xiàn)動態(tài)存儲分配的數(shù)據(jù)結(jié)構(gòu)。頭指針變量head指向鏈表的首結(jié)點。每個結(jié)點一般由2個域組成:數(shù)據(jù)域存儲結(jié)點本身的信息。指針域指向后繼結(jié)點的指針。尾結(jié)點的指針域置為“NULL(空)”,作為鏈表結(jié)束標志,8.7.3鏈表結(jié)點的定義,structstudentintnum;floatscore;structstudent*next;,一個結(jié)點,單向鏈表,8.7.4單向鏈表的訪問,1.輸出鏈表各個結(jié)點的數(shù)據(jù),voidprint_link(structstudent*head)structstudent*p;p=head;while(p!=NULL)printf(“%d,%6.1fn”,p->num,p->score);p=p->next;,2.統(tǒng)計鏈表的長度,voidlen_link(structstudent*head)intn=0;structstudent*p=head;while(p!=NULL)n+;p=p->next;return(n);,8.7.5動態(tài)存儲空間的建立和釋放,1動態(tài)存儲空間的建立malloc函數(shù),其函數(shù)原型為:void*malloc(unsignedintsize);其作用是在內(nèi)存的動態(tài)存儲區(qū)中分配一個長度為size的連續(xù)空間。sizeof(type)運算符計算所給數(shù)據(jù)類型type的字節(jié)數(shù),主要用來計算鏈表中結(jié)點所占動態(tài)存儲空間的字節(jié)數(shù)。,p=(structstudent*)malloc(sizeof(structstudent);,calloc函數(shù),其函數(shù)原型為:void*calloc(unsignedn,unsignedsize);其作用是在內(nèi)存的動態(tài)區(qū)存儲中分配n個長度為size的連續(xù)空間。2.動態(tài)存儲空間的釋放free函數(shù),其函數(shù)原型為:voidfree(void*p);其作用是釋放由p指向的內(nèi)存區(qū),使這部分內(nèi)存區(qū)能被其他變量使用。p是調(diào)用calloc或malloc函數(shù)時返回的值。,p=(structstudent*)malloc(sizeof(structstudent);,free(p);,8.7.6動態(tài)鏈表的建立,建立鏈表主要步驟:先設(shè)三個指針變量:head、p1、p2,它們都是用來指向structstudent類型數(shù)據(jù)的。structstudent*head=NULL,*p1,*p2;head:頭指針變量,指向鏈表第一個結(jié)點,作函數(shù)返回值。p1:指向新申請的結(jié)點。p2:指向鏈表的尾結(jié)點,在將新結(jié)點連接到鏈表末尾時需要。,結(jié)點,2.malloc函數(shù)開辟第一個結(jié)點,并使head和p2都指向它。head=p2=(structstudent*)malloc(sizeof(structstudent);scanf("%d%f",3.再用malloc函數(shù)開辟另一個結(jié)點并使p1指向它,接著輸入該結(jié)點的數(shù)據(jù),并與上一結(jié)點相連,且使p2指向新建立的結(jié)點。建立新結(jié)點:p1=(structstudent*)malloc(sizeof(structstudent);scanf("%d%f",p1,使新結(jié)點與上一結(jié)點連接:p2->next=p1;使p2指向新鏈結(jié)點:p2=p1;,p2,p2,重復第3步的,建立更多結(jié)點:p1=(structstudent*)malloc(sizeof(structstudent);scanf("%d%f",head,1002,87,p1,p2,p1,p1,p2,p2,4.給末結(jié)點的指針域賦值NULLp2->next=NULL;,NULL,structstudent*create(intn)inti;structstudent*head=NULL,*p1,*p2;head=p2=(structstudent*)malloc(LEN);scanf("%d%f",#defineLENsizeof(structstudent),1.,2.,3.,4.,8.7.7鏈表的刪除操作,刪除首結(jié)點使p1指向第一個結(jié)點,用以下語句實現(xiàn)刪除首結(jié)點操作。p1=head;head=p1->next;free(p1);,p1,刪除其它結(jié)點刪除鏈表的中間結(jié)點通過將下一結(jié)點地址賦給前一結(jié)點地址來實現(xiàn),即將要刪除的p1結(jié)點的后繼地址,放入前一結(jié)點p2的地址域,同時釋放p1結(jié)點。p2->next=p1->next;free(p1);,head,8.7.8鏈表的插入操作,先設(shè)四個指針變量:head:要插入鏈表的頭指針。p0:指向要插入的結(jié)點。p1:指向當前結(jié)點。p2:指向前一結(jié)點。,四種情況:,原鏈表為空表,即head=NULL時,用以下語句實現(xiàn)插入操作:head=p0;p0->next=NULL;,NULL,head,NULL,無p1、p2,在頭結(jié)點之前插入,若p1=head,表示插入結(jié)點在頭結(jié)點之前。用以下語句實現(xiàn)插入操作:head=p0;p0->next=p1,head,p0,p1,無p2,在中間插入,表示在在非頭結(jié)點之前,非尾節(jié)點之后插入結(jié)點,用以下語句實現(xiàn)插入操作:p2->next=p0;p0->next=p1;,head,p0,尾節(jié)點之后插入,用以下語句實現(xiàn)插入操作:p2->next=p0;p0->next=NULL;,head,p0,p1為NULL可理解為無p1,NULL,

注意事項

本文(《C語言程序設(shè)計》第8章結(jié)構(gòu)體、共用體與枚舉類型.ppt)為本站會員(max****ui)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!