C語(yǔ)言程序設(shè)計(jì)課件模塊9_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件模塊9_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件模塊9_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件模塊9_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件模塊9_第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)介

9.1結(jié)構(gòu)體

1、掌握結(jié)構(gòu)體類型的定義2、掌握結(jié)構(gòu)體類型變量的定義、初始化和應(yīng)用本節(jié)學(xué)習(xí)目標(biāo):9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體是由不同數(shù)據(jù)類型的數(shù)據(jù)組成的集合體,它包含若干個(gè)成員。在說(shuō)明和使用結(jié)構(gòu)體之前必須先定義它,也就是構(gòu)造它。結(jié)構(gòu)體定義實(shí)際上是說(shuō)明結(jié)構(gòu)體是由哪些成員所組成,以及成員的數(shù)據(jù)類型。9.1.1結(jié)構(gòu)體類型的定義案例9-1:使用結(jié)構(gòu)體類型描述學(xué)生的基本信息,需要包含學(xué)號(hào)、姓名、性別、年齡和入學(xué)成績(jī)。structstudent{charnum[11];char*name;charsex;intage;floatscore;};結(jié)構(gòu)體類型名,其中struct是保留字,student是結(jié)構(gòu)體名結(jié)構(gòu)體由5個(gè)成員組成。第一個(gè)成員為num,字符數(shù)組;第二個(gè)成員為name,字符數(shù)組;第三個(gè)成員為sex,字符變量;第四個(gè)成員為age,整型變量;第五個(gè)成員為score,實(shí)型變量。提示:在大括號(hào)后的分號(hào)是不可少

知識(shí)連接定義一個(gè)結(jié)構(gòu)的一般形式為:

struct結(jié)構(gòu)體名

{

結(jié)構(gòu)體成員表;

};9.1.2結(jié)構(gòu)體變量的定義定義結(jié)構(gòu)體類型相當(dāng)于做了一個(gè)模型,但是其中并沒(méi)有具體數(shù)據(jù),系統(tǒng)不對(duì)它分配實(shí)際的內(nèi)存單元。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),就要定義結(jié)構(gòu)體類型的變量,并且在其中存放具體的數(shù)據(jù)。9.1.2結(jié)構(gòu)體變量的定義案例9-2:使用結(jié)構(gòu)體student定義結(jié)構(gòu)體變量jack和rose。structstudent{charnum[11];char*name;charsex;intage;floatscore;};structstudentjack;structstudentrose;

提示:在這種定義方法中,保留字struct和結(jié)構(gòu)名student必須同時(shí)出現(xiàn)。

知識(shí)連接1、結(jié)構(gòu)體變量同其他變量一樣,也必須先定義,然后才能使用。首先定義結(jié)構(gòu)類型,然后定義結(jié)構(gòu)變量。2、結(jié)構(gòu)變量定義的一般形式如下:

struct結(jié)構(gòu)體名{

結(jié)構(gòu)體成員表;};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量名;9.1.3結(jié)構(gòu)體變量的初始化對(duì)結(jié)構(gòu)體變量的初始化,就是在定義該結(jié)構(gòu)體變量的同時(shí),對(duì)其成員變量賦初值。結(jié)構(gòu)體變量初始化的一般形式如下:

struct結(jié)構(gòu)體名結(jié)構(gòu)體變量名={初始數(shù)據(jù)};9.1.3結(jié)構(gòu)體變量的初始化案例9-3:對(duì)結(jié)構(gòu)體student類型的結(jié)構(gòu)體變量jack和rose初始化。#include<stdio.h>voidmain(){structstudent{intnum;char*name;charsex;floatscore;};structstudentjack={2010,"jack",'M',765.4};structstudentrose={2012,"rose",'F',876.5};printf("Themessageofstudentjack:\n");printf("Number=%d\nName=%s\n",jack.num,);printf("Sex=%c\nScore=%f\n",jack.sex,jack.score);printf("Themessageofstudentrose:\n");printf("Number=%d\nName=%s\n",rose.num,);printf("Sex=%c\nScore=%f\n",rose.sex,rose.score);}

知識(shí)連接1、初始化數(shù)據(jù)的個(gè)數(shù)要與成員的個(gè)數(shù)相同。2、初始化數(shù)據(jù)的類型要與相應(yīng)的成員變量的類型一致。9.1.4結(jié)構(gòu)體變量成員的引用結(jié)構(gòu)體變量被定義之后,就可以在程序中使用它。在對(duì)結(jié)構(gòu)體進(jìn)行引用時(shí),不能對(duì)一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體直接進(jìn)行操作,一般只能對(duì)結(jié)構(gòu)體變量中的各個(gè)成員進(jìn)行直接操作。結(jié)構(gòu)體變量成員的引用的兩種方式:用結(jié)構(gòu)體成員運(yùn)算符方式。

結(jié)構(gòu)變量名.成員名

用指針?lè)绞健?.1.4結(jié)構(gòu)體變量成員的引用案例9-4:引用結(jié)構(gòu)體student類型的結(jié)構(gòu)體變量jack和jack2的成員。

structstudentjack;structstudentjack2;jack.num=2010;="jack";printf("inputsexandscore:\n");scanf("%c%f",&jack.sex,&jack.score);9.2指向結(jié)構(gòu)體類型數(shù)據(jù)的指針學(xué)習(xí)目標(biāo)1、理解結(jié)構(gòu)體指針變量的定義。2、掌握結(jié)構(gòu)體指針變量的運(yùn)用。3、了解結(jié)構(gòu)體數(shù)組變量的定義和初始化。9.2.1指向結(jié)構(gòu)體變量的指針結(jié)構(gòu)體指針變量即指向結(jié)構(gòu)體變量的指針,它是一個(gè)指針變量。結(jié)構(gòu)體指針變量中的值是所指向的結(jié)構(gòu)體變量的首地址。通過(guò)結(jié)構(gòu)體指針即可訪問(wèn)該結(jié)構(gòu)體變量,這與數(shù)組指針和函數(shù)指針的情況是相同的。9.2.1指向結(jié)構(gòu)體變量的指針定義結(jié)構(gòu)體指針變量的一般形式為:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針變量名

structstudentboy={2010,"jack",'M',607.3};structstudent*ps;ps=&boy;9.2.1指向結(jié)構(gòu)體變量的指針定義結(jié)構(gòu)體指針變量后,就可以用指針變量來(lái)引用結(jié)構(gòu)體變量的各個(gè)成員。用指針變量引用結(jié)構(gòu)體成員的一般形式為:(*結(jié)構(gòu)體指針變量名).成員名或者:結(jié)構(gòu)體指針變量名->成員名例如:(*ps).num或者:ps->num9.2.1指向結(jié)構(gòu)體變量的指針#include<stdio.h>structstudent{intnum;char*name;charsex;floatscore;};voidmain(){structstudentboy={2010,"jack",'M',607.3};structstudent*ps;ps=&boy;

printf("Number=%d\nName=%s\n",boy.num,);printf("Sex=%c\nScore=%f\n\n",boy.sex,boy.score);printf("Number=%d\nName=%s\n",(*ps).num,(*ps).name);printf("Sex=%c\nScore=%f\n\n",(*ps).sex,(*ps).score);printf("Number=%d\nName=%s\n",ps->num,ps->name);printf("Sex=%c\nScore=%f\n\n",ps->sex,ps->score);}提示:(*ps)兩側(cè)的括號(hào)不可少,因?yàn)槌蓡T符“.”的優(yōu)先級(jí)高于“*”。如果去掉括號(hào)寫作*pstu.num則等效于*(pstu.num),這樣,意義就完全不對(duì)了。9.2.2指向結(jié)構(gòu)體數(shù)組的指針結(jié)構(gòu)體數(shù)組是其元素都是具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量。與一般數(shù)組一樣,結(jié)構(gòu)體數(shù)組也是要先定義后使用。structstudentstu[5]={{2010,"jack",'M',523.45},{2012,"tom",'M',634.567},{2013,"rose",'F',492.7891},{2014,"kate",'F',787},{2015,"jim",'M',580.9},};案例9-6:用指針變量輸出結(jié)構(gòu)體數(shù)組。#include<stdio.h>structstudent{intnum;char*name;charsex;floatscore;};voidmain(){structstudentstu[5]={{2010,"jack",'M',523.45},{2012,"tom",'M',634.567},{2013,"rose",'F',492.7891},{2014,"kate",'F',787},{2015,"jim",'M',580.9},};structstudent*ps;printf("No.\tName\tSex\tScore\t\n");for(ps=stu;ps<stu+5;ps++)printf("%d\t%s\t\%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);}在main函數(shù)中定義structstudent類型結(jié)構(gòu)體數(shù)組stu并對(duì)其初始化定義了一個(gè)指向structstudent類型結(jié)構(gòu)體的指針變量ps

知識(shí)連接1、結(jié)構(gòu)體數(shù)組定義的一般格式如下:

struct結(jié)構(gòu)體名結(jié)構(gòu)體數(shù)組名[元素個(gè)數(shù)];2、結(jié)構(gòu)體數(shù)組與其他類型的數(shù)組一樣,可以初始化,初始化的一般格式如下:struct結(jié)構(gòu)體名結(jié)構(gòu)體數(shù)組名[]={初始化數(shù)據(jù)};或者是:struct結(jié)構(gòu)體名{

結(jié)構(gòu)體成員列表;}結(jié)構(gòu)體數(shù)組名[]={初始化數(shù)據(jù)};9.3用指針處理鏈表學(xué)習(xí)目標(biāo)1、理解鏈表的概念。2、了解使用指針和結(jié)構(gòu)體構(gòu)成鏈表的方法。3、掌握單鏈表的建立、插入、刪除等算法9.3用指針處理鏈表單鏈表分配一些任意的存儲(chǔ)單元來(lái)存儲(chǔ)線性表中的數(shù)據(jù)元素,這些存儲(chǔ)單元可以分散在內(nèi)存中的任意位置上,它們?cè)谖锢砩峡梢允且黄B續(xù)的存儲(chǔ)單元,也可以是不連續(xù)的。9.3用指針處理鏈表單鏈表為了表示線性表每個(gè)數(shù)據(jù)元素ai與數(shù)據(jù)元素ai+1的邏輯關(guān)系,在存儲(chǔ)元素ai的數(shù)據(jù)信息時(shí),必須使用一個(gè)指針指向它的直接后繼ai+1。因此單鏈表的每個(gè)結(jié)點(diǎn)的存儲(chǔ)區(qū)分為數(shù)據(jù)域和指針域兩個(gè)部分。如圖9-1所示。案例9-7程序分析:使用結(jié)構(gòu)體structnode來(lái)描述單鏈表的這種結(jié)構(gòu)。structnode類型,里面包含float型數(shù)據(jù)域data和指向下一個(gè)structnode結(jié)點(diǎn)的指針next。structnode/*結(jié)構(gòu)體node*/{ floatdata;/*定義數(shù)據(jù)域*/ structnode*next;/*定義指針域*/};案例9-7程序分析:程序中自定義的insert函數(shù)用后插法為帶頭結(jié)點(diǎn)的單鏈表插入新的結(jié)點(diǎn),從而建立帶頭結(jié)點(diǎn)的單鏈表。案例9-7程序分析:程序中自定義的dele函數(shù)實(shí)現(xiàn)刪除鏈表結(jié)點(diǎn)。如圖9-3所示刪除單鏈表中一個(gè)已存在的結(jié)點(diǎn)的過(guò)程。案例9-7程序分析:main函數(shù)調(diào)用malloc函數(shù)為鏈表的頭結(jié)點(diǎn)動(dòng)態(tài)的申請(qǐng)了一個(gè)structnode類型的內(nèi)存空間。頭結(jié)點(diǎn)中的data成員用于記錄鏈表的結(jié)點(diǎn)數(shù),next指針指向下一個(gè)鏈表結(jié)點(diǎn)。調(diào)用while語(yǔ)句無(wú)限循環(huán)的讓用戶選擇插入、刪除、打印和退出的操作,若選擇退出則終止循環(huán)結(jié)束程序。9.4共用體學(xué)習(xí)目標(biāo)1、掌握共用體類型的定義2、掌握共用體類型的引用9.4.1共用體類型的定義共用體是將不同的數(shù)據(jù)項(xiàng)放在同一段內(nèi)存單元的一種構(gòu)造數(shù)據(jù)類型。共用體變量定義的一般形式如下:union共用體名{

成員列表};9.4.1共用體類型的定義案例9-8:定義共用體類型people,并且使用該類型聲明變量a,計(jì)算a所占內(nèi)存長(zhǎng)度。#include<stdio.h>unionpeople{ charname[10]; longsno; charsex; floatscore[4];};main(){ unionpeoplea; printf("Thelengthofais:%d\n",sizeof(a));}案例9-8程序分析:共用體所需的存儲(chǔ)空間的大小則取決于共用體內(nèi)占用空間最大的成員的大小。本案例的共用體people有四個(gè)成員,其中第四個(gè)成員是一個(gè)含有4個(gè)元素的浮點(diǎn)型數(shù)組,該數(shù)組每個(gè)元素占用4個(gè)字節(jié),大小為4×4=16字節(jié),是共用體people占用空間最大的成員,所以共用體people所需的存儲(chǔ)空間為16字節(jié),它所定義的變量的大小也就是16字節(jié)。

9.4.2共用體類型的引用對(duì)共用體變量引用的方式與結(jié)構(gòu)體變量的引用方式類似。但共用體變量不能直接引用,只能引用共用體成員。其引用方式為:共用體變量名.成員名ex.a=4;ex.b=6;9.4.2共用體類型的引用案例9-9:引用共用體類型變量中的成員變量

#include<stdio.h>unionexample{ struct{intx;inty;}in;inta;intb;}ex;voidmain(){ ex.a=4;ex.b=6; ex.in.x=ex.a*ex.b;ex.in.y=ex.a+ex.b;printf("%d,%d\n",ex.in.x,ex.in.y);}共用體是用同一段內(nèi)存存放不同類型的數(shù)據(jù),所以在每一時(shí)刻內(nèi)存只有一成員。案例中先對(duì)成員ex.a進(jìn)行賦值,然后對(duì)成員ex.b進(jìn)行賦值,那么只有ex.b是有效存在的,而之前對(duì)成員ex.a的賦值已經(jīng)被后者ex.b覆蓋而不再有效。共用體變量的地址和它所有成員的地址都是相同的。如&ex,&ex.a,&ex.b都是同一個(gè)地址。

9.5枚舉類型學(xué)習(xí)目標(biāo)1、掌握枚舉類型和枚舉變量的定義。2、掌握枚舉變量的使用。9.5枚舉類型1、若某個(gè)變量只有幾種可能的值,如人民幣的面值只有分,角,元這三種取值,那么就可以把該變量定義為枚舉類型。所謂“枚舉”是指把變量的值一一列舉出來(lái),變量的取值只能是列舉出來(lái)的某一個(gè)值。2、枚舉類型的一般定義格式如下:enum枚舉類型名{標(biāo)識(shí)符1,標(biāo)識(shí)符2,……標(biāo)識(shí)符n}變量名列表;9.5枚舉類型案例9-10:枚舉類型的使用。#include<stdio.h>enummonth{Jan,Feb,Mar,Apr=8,May,Jun,Jul,Aug,Sept,Oct,Nov,Dev};voidmain(){ enummonthmon1=Mar;enummonthmon2=Jun;printf("%d,%d\n",mon1,mon2);}9.6用戶自定義類型學(xué)習(xí)目標(biāo)掌握用typedef定義類型9.6用戶自定義類型1、使用typedef語(yǔ)句的一般形式如下:

typedef原數(shù)據(jù)類型新的數(shù)據(jù)類型名;2、使用typedef的目的,一個(gè)是給復(fù)雜的數(shù)據(jù)類型 一個(gè)易于記憶的名字,另一個(gè)是有利于程序的通用和移植。有時(shí)候程序會(huì)依賴于硬件特性,用typedef便于移植。 案例9-11:使用typedef自定義STU類型。

#include<stdio.h>typedefstructstudent{ intnum; char*name; charsex; floatscore;}STU;voidmain(){structstudentjack1={2010,"jack",'M',987.6};STUjack2={2010,"jack",'M',987.6};printf("Themessageofstudentjack1:\n");printf("Number=%d\nName=%s\n",jack1.num,);printf("Sex=%c\nScore=%f\n",jack1.sex,jack1.score);printf("Themessageofstudentjack2:\n");printf("Number=%d\nName=%s\n",jack2.num,);printf("Sex=%c\nScore=%f\n",jack2.sex,jack2.score);}使用typedef聲明新的類型名STU代替已有的structstudent類型名聲明的新類型名STU,它代表上面指定的structstudent結(jié)構(gòu)體類型。STU可以聲明變量

課后練習(xí)選擇題1、若有以下定義:structst{inta;floatf;}s,*p;p=&s;下列通過(guò)指針p引用s的成員語(yǔ)句中正確的是()。A. p.a=10; B.*p.a=10;C. *p->a=10;D.(*p).a=102、若有以下函數(shù):main(){ union{unsignedintn; unsignedchar c;}u1;

溫馨提示

  • 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)論