《其他數(shù)據(jù)類型》PPT課件.ppt
《《其他數(shù)據(jù)類型》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《其他數(shù)據(jù)類型》PPT課件.ppt(54頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第6章其他數(shù)據(jù)類型,,學(xué)習(xí)目標(biāo),結(jié)構(gòu)體的定義與使用結(jié)構(gòu)體與指針共用體的定義與使用枚舉類型的定義與使用typedef定義數(shù)據(jù)類型位運(yùn)算規(guī)則,6.1結(jié)構(gòu)體,引入:數(shù)據(jù)的基本類型:整、實(shí)、字符。數(shù)組是構(gòu)造類型:每個(gè)元素為同一類型,有些問題僅用基本類型和數(shù)組來描述是無法實(shí)現(xiàn)的?,舉例:如學(xué)生情況表,這些數(shù)據(jù)類型雖不相同,但它們卻是有機(jī)的整體,若將它們分別定義,則難以反映它們之間的內(nèi)在聯(lián)系。如何解決呢?用結(jié)構(gòu)體。,結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體,又稱自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義,struct[結(jié)構(gòu)體類型名]{類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;……};,成員類型可以是基本型或構(gòu)造型,struct是關(guān)鍵字,不能省略,合法標(biāo)識(shí)符,可根據(jù)情況省略,6.1.1結(jié)構(gòu)體類型的定義,Structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};,結(jié)構(gòu)體類型定義,描述結(jié)構(gòu)的組織形式,不分配內(nèi)存,以上語句的作用是:定義了一個(gè)名為student的結(jié)構(gòu)體類型,它具有以下結(jié)構(gòu):,6.1.2結(jié)構(gòu)體變量,(1)結(jié)構(gòu)體類型變量的聲明間接法:先聲明結(jié)構(gòu)體類型再定義變量名,struct結(jié)構(gòu)體名{類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;……………};struct結(jié)構(gòu)體名變量名表列;,直接法:在聲明結(jié)構(gòu)體類型的同時(shí)定義變量,struct結(jié)構(gòu)體名{類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;......}變量名表列;,structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;,struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;,省去結(jié)構(gòu)體類型名,用無名結(jié)構(gòu)體直接定義變量只能一次。,說明:1.結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同2.結(jié)構(gòu)體可嵌套,sturctdate{intmonth;intday;intyear;};,structstudent{intnum;charname[20];charsex;structdatebirthday;floatscore;charaddr[30];}student1,student2;,,說明:3.結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆(2)結(jié)構(gòu)體變量的引用:結(jié)構(gòu)體變量.成員如:student1.num=1;strcpy(student1.name,“ZhangHua");student1.sex=M;student1.birthday.year=1980,如果某成員本身又是一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)找到最低一級(jí)的成員。成員運(yùn)算符“.”的結(jié)合性為從左到右。如:student1.birthday.year結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算。例如:student1.birthday.day++;sum=student1.score+5;,可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。如:,struct結(jié)構(gòu)體類型名{類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;......};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};,structss{intnum;charname[20];charsex;intage;charaddr[30];};structssstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};,(3)結(jié)構(gòu)體變量的初始化,形式二:,struct[結(jié)構(gòu)體類型名]{類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;......}結(jié)構(gòu)體變量={初始數(shù)據(jù)};,structss{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};,結(jié)構(gòu)體類型名ss可以省略,(4)求結(jié)構(gòu)體變量占用內(nèi)存的大小求變量或類型說明符占用內(nèi)存大小可以使用sizeof運(yùn)算符。sizeof是單目運(yùn)算符,其功能是求出變量或類型說明符所占的內(nèi)存空間的字節(jié)數(shù)。使用的一般形式為:sizeof(變量或類型說明符);,charstr[20];structdate{intyear,month,day;}today;structaddress{charname[30],street[40],city[20];unsignedlongintzip;}wang;printf("char:%d\t",sizeof(char));printf("str:%d\t",sizeof(str));printf("date:%d\t",sizeof(structdate));printf("wang:%d\n",sizeof(wang));,6.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];,(2)結(jié)構(gòu)體數(shù)組的初始化,struct{intnum;charname[20];charsex;intage;}stu[..]={{...},{...},{...}};,(3)結(jié)構(gòu)體數(shù)組元素、成員引用引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名,structstudent{intnum;charname[20];charsex;intage;}str[3];,stu[1].age++;,strcpy(stu[0].name,”ZhaoDa”);,,#include#includestructperson{charname[20];intcount;}lead[3]={"Li",0,"Zhang",0,"Wang",0};voidmain(){inti,j;charleader_name[20];for(i=1;i<=10;i++)//10張選票{scanf("%s",leader_name);for(j=0;j<3;j++)//每張選票與3個(gè)候選人姓名對(duì)比if(strcmp(leader_name,lead[j].name)==0)lead[j].count++;}for(i=0;i成員名,注意:”.“用于結(jié)構(gòu)體變量訪問成員而“->”用于結(jié)構(gòu)體指針變量訪問成員。使用中要注意兩者的優(yōu)先級(jí)與結(jié)合性問題。,p->n得到p指向的結(jié)構(gòu)體變量中的成員n的值。p->n++得到p指向的結(jié)構(gòu)體變量中的成員n的值,用完該值后使它加1。++p->n得到p指向的結(jié)構(gòu)體變量中的成員n的值使之加1(先加)。,構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體幾個(gè)不同類型的變量共占一段內(nèi)存(相互覆蓋)定義形式,6.3共用體,union共用體類型名{類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;......};,除去關(guān)鍵字,其形式和結(jié)構(gòu)體定義一致,uniondata{charch;inti;floatf;};,uniondata{inti;charch;floatf;}a,b;,uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];,共用體變量的定義:,由于是共用一段內(nèi)存,因此:共用體變量任何時(shí)刻只有一個(gè)成員存在共用體變量定義分配內(nèi)存長(zhǎng)度是最長(zhǎng)成員所占字節(jié)數(shù),共用體變量引用,uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];,a.i,a.ch,a.fp->i,p->ch,p->f(*p).i,(*p).ch,(*p).fp->i,p->ch,p->fd[0].i,d[0].ch,d[0].f,共用體變量名.成員名(*共用體指針名).成員名共用體指針名->成員名,注意:共用體變量中起作用的成員是最后一次存放的成員共用體變量的地址和它的各成員的地址都是同一地址。不能引用共用體變量,只能引用其成員不能在定義共用體變量時(shí)初始化可以用一個(gè)共用體變量為另一個(gè)變量賦值,union{inti;charch;floatf;}a;a=1;(?),a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;printf(“%d”,a.i);(?編譯通過,運(yùn)行結(jié)果不對(duì)),union{inti;charch;floatf;}a={1,’a’,1.5};(?),floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;(?)x=a.f;(?),,union//定義共用體并說明共用體變量mix{longi;intk;charii;chars[4];}mix;mix.i=0 x12345678;printf("mix.i=%lx\n",mix.i);printf("mix.k=%x\n",mix.k);printf("mix.ii=%x\n",mix.ii);printf("mix.s[0]=%x\tmix.s[1]=%x\n",mix.s[0],mix.s[1]);printf("mix.s[2]=%x\tmix.s[3]=%x\n",mix.s[2],mix.s[3]);,[例6.8]分析以下程序的運(yùn)行結(jié)果。,,變量的各成員同時(shí)存在,任一時(shí)刻只有一個(gè)成員存在,結(jié)構(gòu)體與共用體區(qū)別:存儲(chǔ)方式不同聯(lián)系:兩者可相互嵌套,6.4枚舉類型,概念:“枚舉”是指將變量的值一一列舉出來,變量的取值只限于列舉出來的值的范圍。定義:enum枚舉類型名{取值表};變量定義:enumcolour{Red,Blue,Yellow,White};enumcolourc1,c2;c1,c2為枚舉型變量,其值可以取括號(hào)中的任意一個(gè)。c1=Yellow;(√)c2=White;(√)c1=Black;()c2=2;(),說明(1)對(duì)枚舉元素按常量處理,故稱枚舉常量。枚舉常量是有值的,編譯時(shí)按定義時(shí)的順序依次置為0,1,2…,在上面的定義中,枚舉元素的值分別為:Red=0,Blue=1,Yellow=2,White=3。(2)不能對(duì)枚舉常量賦值,要改變枚舉常量的值只能在定義時(shí)由程序指定。例如:enumcolour{Red=10,Blue=0,Yellow,White};則這時(shí)Red=10,Blue=0,Yellow=1,White=2。當(dāng)定義枚舉變量enumcolourc1,c2;后,若給枚舉變量賦值:c1=Red;則枚舉變量c1中的值為10c2=White;則枚舉變量c2中的值為2。,6.5用typedef定義類型,功能:用自定義名字為已有數(shù)據(jù)類型命名形式:typedeftypename;,類型定義語句關(guān)鍵字,已有數(shù)據(jù)類型名,用戶定義的類型名,若有:typedefintINTEGER;typedeffloatREAL;則:INTEGERi,j;等價(jià)于inti,j;REALpai;等價(jià)于floatpai;,typedef常用于結(jié)構(gòu)體類型的定義:typedefstruct{intmonth;intday;intyear;}DATE;聲明新類型名DATE,它代表上面指定的一個(gè)結(jié)構(gòu)體類型。DATEbirthday,*p;,類型定義后,與已有類型一樣使用,typedef也可用于數(shù)組和指針類型的定義:typedefintARR[20];ARRa,b,d;等價(jià)于:inta[20],b[20],d[20];typedefint*point;pointp1,p2;等價(jià)于:int*p1,*p2;,說明:1.typedef沒有創(chuàng)造新數(shù)據(jù)類型2.typedef是定義類型,不能定義變量3.typedef與define不同4.typedef可以嵌套,typedefstructclub{charname[20];intsize;intyear;}GROUP;typedefGROUP*PG;PGpclub;,GROUP為結(jié)構(gòu)體類型,PG為指向GROUP的指針類型,等價(jià)于:structclub{charname[20];intsize;intyear;}*pclub;,6.6位運(yùn)算及位字段,位運(yùn)算符和位運(yùn)算位運(yùn)算舉例,6.6.1位運(yùn)算符和位運(yùn)算,前面介紹的各種運(yùn)算都是以字節(jié)作為最基本位進(jìn)行的。但在很多系統(tǒng)程序中常要求在位(bit)一級(jí)進(jìn)行運(yùn)算或處理。C語言提供了位運(yùn)算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。按位與a=a<>):運(yùn)算規(guī)則:a=a>>n將a中所有位向右移動(dòng)n位。作用:相當(dāng)于除法運(yùn)算。每右移一位相當(dāng)于除以2。注意數(shù)的符號(hào)問題(即正負(fù)的問題)對(duì)于無符號(hào)數(shù)(正數(shù))右移時(shí)高位補(bǔ)以0。對(duì)于有符號(hào)數(shù),高位為0(正數(shù))右移時(shí)高位補(bǔ)以0。對(duì)于有符號(hào)數(shù),高位為1(負(fù)數(shù))時(shí):①右移時(shí)高位補(bǔ)以0,稱之為“邏輯位移”。②右移時(shí)高位補(bǔ)以1,稱之為“算術(shù)位移”。TC采用“算術(shù)位移”,高位補(bǔ)以1。,7、不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算時(shí)的規(guī)則規(guī)則:如果兩個(gè)不同長(zhǎng)度的數(shù)據(jù)(例如char型和int型)進(jìn)行位運(yùn)算,系統(tǒng)將會(huì)對(duì)二者進(jìn)行處理:先將兩個(gè)運(yùn)算數(shù)按右端對(duì)齊,再將較短的一個(gè)運(yùn)算數(shù)往高位擴(kuò)充,即無符號(hào)數(shù)和正整數(shù)左側(cè)用0補(bǔ)齊;負(fù)數(shù)左側(cè)用1補(bǔ)齊,最后按位進(jìn)行位運(yùn)算。,8、位運(yùn)算的復(fù)合賦值運(yùn)算符:ascanf("%o",,,將要取的4~9位移到最右端,即將a右移4位,設(shè)置一個(gè)低6位全為1,其余全為0的數(shù)0:0000…0000000~0:1111…1111111~0<<6:1111…1000000~(~0<成員名。數(shù)組元素的類型為結(jié)構(gòu)的數(shù)組稱為結(jié)構(gòu)數(shù)組。,結(jié)構(gòu)體定義允許嵌套,結(jié)構(gòu)體中也可用共用體作為成員,形成結(jié)構(gòu)體和共用體的嵌套。共用體與結(jié)構(gòu)體類似,區(qū)別在于共用體各個(gè)成員共享同一片內(nèi)存區(qū)域。位運(yùn)算是C語言的一種特殊運(yùn)算功能,它是以二進(jìn)制位為單位進(jìn)行運(yùn)算的。位運(yùn)算符只有邏輯運(yùn)算和移位運(yùn)算兩類。位運(yùn)算符可以與賦值符一起組成復(fù)合賦值符。如shorta;};unionuwordu={2.5};/*錯(cuò)誤*/,使用位運(yùn)算符時(shí)應(yīng)注意:①如同表達(dá)式a+2不能改變a的值一樣,a>兩邊必須都是整型數(shù),否則非法。如a<<2.0是錯(cuò)誤的。③不同長(zhǎng)度的變量進(jìn)行位運(yùn)算時(shí),系統(tǒng)會(huì)自動(dòng)右對(duì)齊,而左端的不齊部分,會(huì)按最高位進(jìn)行擴(kuò)展。,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 其他數(shù)據(jù)類型 其他 數(shù)據(jù)類型 PPT 課件
鏈接地址:http://www.3dchina-expo.com/p-11501989.html