




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體numnameSexageaddr060001LiFangF18Wuhan060230LinHongF16Changsha060212WuQiangM18Beijing061122LiJunM17Zhengzhou060536ZhangXiaF17Shanghai上表中某一學(xué)生的數(shù)據(jù)是由學(xué)生的學(xué)號(hào)、姓名、性別、年齡、家庭地址等數(shù)據(jù)項(xiàng)組成的,這些數(shù)據(jù)項(xiàng)是一組邏輯上相關(guān)的數(shù)據(jù),如果將這些數(shù)據(jù)項(xiàng)分割開來孤立地考慮它們的屬性,將導(dǎo)致操作的不便或邏輯錯(cuò)誤。在C語言中,將這種由多個(gè)不同類型的數(shù)據(jù)項(xiàng)組合在一起形成的數(shù)據(jù)類型,稱為結(jié)構(gòu)體類型。表9-1學(xué)生表9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的一般形式:struct標(biāo)識(shí)符{
類型名1成員名1;類型名2成員名2;…類型名n成員名n;};9.1.1結(jié)構(gòu)體類型的定義例1對(duì)某一學(xué)生數(shù)據(jù)(由學(xué)生的學(xué)號(hào)、姓名、性別、年齡、家庭地址等數(shù)據(jù)項(xiàng)組成)的結(jié)構(gòu)體類型定義如下:structstudent{intnum;charname[20];charsex;intage;charaddr[30];};9.1.2結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義有三種處理方式:(1)先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。例1:structstudent{intnum;charname[20];charsex;intage;charaddr[30];};/*定義結(jié)構(gòu)體類型structstudent*/structstudenta,b;/*定義a、b為結(jié)構(gòu)體類型structstudent的變量*/9.1.2結(jié)構(gòu)體變量的定義(2)在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。例2:structstudent{intnum;charname[20];charsex;intage;charaddr[30];}a,b;9.1.2結(jié)構(gòu)體變量的定義(3)直接定義結(jié)構(gòu)類型變量。例3:struct
{intnum;charname[20];charsex;intage;charaddr[30];}a,b;9.1.3結(jié)構(gòu)體變量的引用對(duì)結(jié)構(gòu)體變量中的成員都可以像同類型的普通變量一樣進(jìn)行各種運(yùn)算。例3:a.num=060001+5;b.birthday.day++;(2)結(jié)構(gòu)體變量作為一個(gè)整體引用.結(jié)構(gòu)體變量不可以作為整體進(jìn)行輸入輸出,但可以作為函數(shù)的參數(shù)或返回值而被整體引用,也可以將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體賦給另一個(gè)具有相同類型的結(jié)構(gòu)體變量。例1:structstudenta,b;…a=b;(3)引用結(jié)構(gòu)體變量的地址或成員的地址structstudenta,b;scanf("%d",&a.num);printf("%x",&a.num);printf("%x",&a);9.1.3結(jié)構(gòu)體變量的引用9.1.4結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化形式有如下兩種:(1)struct標(biāo)識(shí)符{類型名1成員名1;類型名2成員名2;…類型名n成員名n;}變量名={數(shù)據(jù)表};例1:structstudent{intnum;charname[20];charsex;intage;charaddr[30];}a={060001,"LiFang",'F',18,"Wuhan"};9.2結(jié)構(gòu)體數(shù)組9.2.1結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組定義的一般形式:結(jié)構(gòu)體類型名數(shù)組名[常量表達(dá)式];例1:structstudent{intnum;charname[20];charsex;intage;charaddr[30];};/*定義結(jié)構(gòu)體類型structstudent*/structstudenta[5];/*定義a[5]結(jié)構(gòu)體類型structstudent的數(shù)組*/9.2.2結(jié)構(gòu)體數(shù)組元素的引用格式:結(jié)構(gòu)體數(shù)組名[元素下標(biāo)].結(jié)構(gòu)體成員名
例1:structstudent{intnum;charname[20];charsex;intage;charaddr[30];}a[5];a[0].num=060001;a[1].name="LinHong";一個(gè)結(jié)構(gòu)體數(shù)組元素相當(dāng)于一個(gè)結(jié)構(gòu)體變量,其處理方法與結(jié)構(gòu)體變量的處理方法相同9.2.2結(jié)構(gòu)體數(shù)組元素的引用例2:structstudent{intnum;charname[20];charsex;intage;charaddr[30];}a[5];scanf("%d",&a[0].num);gets(a[0].name);scanf("%c",&a[0].sex);scanf("%d",&a[0].age);gets(a[0].addr);a[3]=a[0];printf("%x",&a[0].num);printf("%x",&a[0]);9.2.4應(yīng)用舉例例9.1輸入如表9-1所示的學(xué)生情況登記表,按學(xué)號(hào)順序整理輸出該表。分析如下:1、定義學(xué)生類型及學(xué)生數(shù)組:2、輸入學(xué)生信息3、輸出學(xué)生信息(程序由學(xué)生和老師共同完成)structstudent{intnum;charname[20];charsex;intage;charaddr[30];}a[5];9.3結(jié)構(gòu)體指針結(jié)構(gòu)體指針變量:如果用一個(gè)指針變量指向一個(gè)結(jié)構(gòu)體變量,即存儲(chǔ)該結(jié)構(gòu)體變量所占據(jù)的內(nèi)存單元的起始地址,則該指針變量稱為結(jié)構(gòu)體指針變量。結(jié)構(gòu)體指針變量也可以用來指向結(jié)構(gòu)體數(shù)組中的元素。9.3.1結(jié)構(gòu)體指針變量的定義結(jié)構(gòu)體指針變量的定義形式如下:結(jié)構(gòu)體類型名*指針變量名;例如:structstudent*p,a;p=&a;9.3.3指向結(jié)構(gòu)體數(shù)組的指針對(duì)于已定義的結(jié)構(gòu)體數(shù)組,若用一個(gè)變量來存放該結(jié)構(gòu)體數(shù)組在內(nèi)存中的首地址,則該變量為指向結(jié)構(gòu)體數(shù)組的指針變量。例如:structstudent*p,a[5];p=a;例9.2用指向結(jié)構(gòu)體數(shù)組的指針處理例9.1(按學(xué)號(hào)順序整理輸出學(xué)生情況登記表。)9.4結(jié)構(gòu)體與函數(shù)1.結(jié)構(gòu)體變量作為函數(shù)的形參的三種形式:(1)以結(jié)構(gòu)體變量的成員作為參數(shù),傳遞結(jié)構(gòu)體變量的成員的值。(2)以結(jié)構(gòu)體變量作為參數(shù),直接傳遞結(jié)構(gòu)體變量的值。在ANSIC標(biāo)準(zhǔn)中允許用結(jié)構(gòu)變量作為函數(shù)的參數(shù)進(jìn)行整體傳送,即直接將實(shí)參結(jié)構(gòu)體變量的各個(gè)成員的值逐個(gè)傳遞給形參結(jié)構(gòu)體變量的對(duì)應(yīng)成員。注意,實(shí)參與形參必須是相同結(jié)構(gòu)體類型的變量。(3)以結(jié)構(gòu)體指針作為參數(shù),傳遞結(jié)構(gòu)體變量的地址。通過結(jié)構(gòu)體變量的整體傳遞可以實(shí)現(xiàn)函數(shù)參數(shù)的傳遞,但這要將結(jié)構(gòu)體變量的全部成員逐個(gè)傳送,特別是成員為數(shù)組時(shí)將會(huì)使傳送的時(shí)間和空間開銷很大,嚴(yán)重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進(jìn)行傳送。這時(shí)由實(shí)參傳遞給函數(shù)形參的只是地址,從而減少了時(shí)間和空間的開銷。例9.3利用函數(shù)完成結(jié)構(gòu)體變量的輸入輸出。(閱讀書中程序)2.結(jié)構(gòu)體類型作為函數(shù)的返回值類型其一般定義形式:結(jié)構(gòu)體類型名函數(shù)名(形參表){函數(shù)體}例(p168)9.4結(jié)構(gòu)體與函數(shù)9.5.1鏈表的概念例1:利用C語言在計(jì)算機(jī)中存儲(chǔ)三個(gè)學(xué)生的計(jì)算機(jī)成績(jī),如果有定義inta[3],則其內(nèi)存單元分配情況如下:…80a[0]75a[1]90a[2]…9.5.1鏈表的概念例2:用鏈表存儲(chǔ)方式來存儲(chǔ)三個(gè)同學(xué)的計(jì)算機(jī)成績(jī)?!?0022036758090……200220582058head80headNULL7590可直觀地表示如下:9.5.2動(dòng)態(tài)分配函數(shù)3.free函數(shù)函數(shù)格式:voidfree(void*ptr);函數(shù)功能:釋放由指針變量ptr指向的內(nèi)存區(qū)域。其中,ptr是一個(gè)指針變量,指向最近一次調(diào)用函數(shù)malloc或calloc時(shí)所分配的存儲(chǔ)空間的首地址。通過函數(shù)free將已分配的內(nèi)存區(qū)域交還系統(tǒng),使系統(tǒng)可以重新對(duì)其進(jìn)行分配。例3:int*p;p=(int*)calloc(3,sizeof(int));…free(p);9.5.3鏈表的基本操作1.鏈表節(jié)點(diǎn)的定義鏈表中的任一個(gè)節(jié)點(diǎn)都包括兩個(gè)數(shù)據(jù)項(xiàng),一個(gè)是節(jié)點(diǎn)自身的數(shù)據(jù)信息,稱為節(jié)點(diǎn)的數(shù)據(jù)域,另一個(gè)是下一節(jié)點(diǎn)的地址值,稱為節(jié)點(diǎn)的指針域。
structnode{datatypedata;structnode*next;};
datatype是數(shù)據(jù)域的類型,可以是前面所介紹的任意C語言類型。顯然,鏈表節(jié)點(diǎn)的指針域存放的地址類型與它自身的類型是相同的。例1:存儲(chǔ)三個(gè)同學(xué)的計(jì)算機(jī)成績(jī)的鏈表存儲(chǔ)方式如下:80headNULL7590上述鏈表中節(jié)點(diǎn)的定義如下:structnode{intdata;structnode*next;};鏈表的頭指針定義如下:structnode*head;9.5.3鏈表的基本操作2.鏈表的基本操作鏈表的基本操作主要有鏈表的建立、節(jié)點(diǎn)的訪問、節(jié)點(diǎn)的插入、節(jié)點(diǎn)的刪除等。(1)鏈表的建立。鏈表的建立是一個(gè)動(dòng)態(tài)存儲(chǔ)空間分配和形成鏈接關(guān)系的過程。用尾插法建立鏈表的過程如下:1)建立一個(gè)空鏈表,即head=NULL。2)請(qǐng)分配新節(jié)點(diǎn)存儲(chǔ)單元,對(duì)新節(jié)點(diǎn)的數(shù)據(jù)域和指針域賦值。由于新插入的節(jié)點(diǎn)總是尾節(jié)點(diǎn),因此,它的指針域的值為空(即NULL)。3)將新節(jié)點(diǎn)鏈接到鏈表的尾部:4)重復(fù)步驟2)~3),繼續(xù)插入新節(jié)點(diǎn)直到結(jié)束。例1:存儲(chǔ)三個(gè)同學(xué)的計(jì)算機(jī)成績(jī)的鏈表存儲(chǔ)方式如下:80headNULL7590上述鏈表中節(jié)點(diǎn)的定義如下:structnode{intdata;structnode*next;};鏈表的頭指針定義如下:structnode*head;9.5.3鏈表的基本操作例9.4用鏈表存儲(chǔ)學(xué)生的計(jì)算機(jī)成績(jī)。程序段如下:structnode*creat(){structnode*head,*p,*q;n=0;head=NULL;p=(structnode*)malloc(LEN);scanf("%d",&p->data);p->next=NULL;while(p->data!=-1){n=n+1;if(n==1)head=p;elseq->next=p;q=p;p=(structnode*)malloc(LEN);scanf("%d",&p->data);p->next=NULL;}return(head);}
#defineNULL0#defineLENsizeof(structnode)structnode{intdata;structnode*next;};intn;80headNULL7590NULLqp(2)鏈表節(jié)點(diǎn)的訪問。鏈表節(jié)點(diǎn)的訪問過程如下:1)取鏈表頭指針head。2)用一個(gè)指針p指向鏈表的第一個(gè)節(jié)點(diǎn),即p=head。3)訪問p所指節(jié)點(diǎn)。4)移動(dòng)指針p,使它指向下一節(jié)點(diǎn),即p=p->next。5)重復(fù)步驟3)和4),直到指針p為空。9.5.3鏈表的基本操作例9.5輸出例9.4建立的鏈表中所有學(xué)生的計(jì)算機(jī)成績(jī)。程序段如下:#defineNULL0#defineLENsizeof(structnode)structnode{intdata;structnode*next;};voidprint(structnode*head){structnode*p;p=head;while(p!=NULL){printf("%d",p->data);p=p->next;}}80headNULL7590ppp(3)鏈表節(jié)點(diǎn)的插入。其操作過程主要有兩個(gè)子過程:①確定插入位置;②插入新節(jié)點(diǎn)。插入條件的要求主要有以下幾種情況:新節(jié)點(diǎn)插入在第i個(gè)節(jié)點(diǎn)之前(或后)。新節(jié)點(diǎn)插入在節(jié)點(diǎn)數(shù)據(jù)等于某一指定數(shù)據(jù)的節(jié)點(diǎn)之前(或后)。新節(jié)點(diǎn)插入在一個(gè)節(jié)點(diǎn)數(shù)據(jù)有序的鏈表中,保證插入新節(jié)點(diǎn)后鏈表仍然有序。下面以新節(jié)點(diǎn)插入在節(jié)點(diǎn)數(shù)據(jù)等于某一指定數(shù)據(jù)的節(jié)點(diǎn)之前的情況分例介紹節(jié)點(diǎn)插入操作的算法。操作過程如下:1)取鏈表頭指針head。2)申請(qǐng)分配新節(jié)點(diǎn)存儲(chǔ)單元,對(duì)新節(jié)點(diǎn)的數(shù)據(jù)域賦值。3)如果head等于NULL,即鏈表為空,不存在指定數(shù)據(jù)的節(jié)點(diǎn),則新節(jié)點(diǎn)插入到鏈表中,成為鏈表中惟一的節(jié)點(diǎn),即將新節(jié)點(diǎn)的地址賦給頭指針head,賦新節(jié)點(diǎn)指針域的值為NULL。4)如果head不等于NULL,用一個(gè)指針p指向鏈表的第一個(gè)節(jié)點(diǎn),即p=head,判斷p所指節(jié)點(diǎn)是否為指定節(jié)點(diǎn),如果不是,移動(dòng)指針p,使它指向它的下一節(jié)點(diǎn),重復(fù)判斷過程,直到p所指節(jié)點(diǎn)是指定節(jié)點(diǎn)或p所指節(jié)點(diǎn)的指針域的值為NULL。5)如果p所指節(jié)點(diǎn)是指定節(jié)點(diǎn),將新節(jié)點(diǎn)插入在p所指節(jié)點(diǎn)之前,即p的前一節(jié)點(diǎn)的指針域的值為新節(jié)點(diǎn)的地址,新節(jié)點(diǎn)的指針域的值為p。6)如果p所指節(jié)點(diǎn)不是指定節(jié)點(diǎn),但p所指節(jié)點(diǎn)的指針域的值為NULL,則鏈表中不存在指定數(shù)據(jù)的節(jié)點(diǎn),新節(jié)點(diǎn)插入到鏈尾,即p所指節(jié)點(diǎn)之后,賦p所指節(jié)點(diǎn)的指針域的值為新節(jié)點(diǎn)的地址,新節(jié)點(diǎn)指針域的值為NULL。7)返回操作后鏈表的頭指針。例9.6在例9.4建立的鏈表中某一計(jì)算機(jī)成績(jī)值之前插入一個(gè)學(xué)生的計(jì)算機(jī)成績(jī)。其過程示意圖:q80head75xysp新結(jié)點(diǎn)指向所搜結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)指向要找的結(jié)點(diǎn)程序段如下:if(x==p->data){if(p==head){s->next=head;head=s;}else{s->next=p;q->next=s;}}else{s->next=p->next;p->next=s;}return(head);}structnode*insert(structnode*head,intx,inty){structnode*p,*q,*s;s=(structnode*)malloc(LEN);s->data=y;if(head==NULL){s->next=head;head=s;return(head);}p=head;while(p->data!=x&&p->next!=NULL){q=p;p=p->next;}
(4)鏈表節(jié)點(diǎn)的刪除。鏈表節(jié)點(diǎn)的刪除操作同樣包括兩個(gè)子過程:①確定刪除節(jié)點(diǎn)的位置;②刪除節(jié)點(diǎn)。下面介紹刪除節(jié)點(diǎn)數(shù)據(jù)等于某一指定數(shù)據(jù)的節(jié)點(diǎn)的操作過程。1)取鏈表頭指針head。2)如果head等于NULL,即鏈表為空,不存在指定數(shù)據(jù)的節(jié)點(diǎn),刪除操作失敗,輸出相關(guān)信息。3)如果head不等于NULL,用一個(gè)指針p指向鏈表的第一個(gè)節(jié)點(diǎn),即p=head,判斷p所指節(jié)點(diǎn)是否為指定節(jié)點(diǎn),如果不是,移動(dòng)指針p,使它指向它的下一節(jié)點(diǎn),重復(fù)判斷過程,直到p所指節(jié)點(diǎn)是指定節(jié)點(diǎn)或p所指節(jié)點(diǎn)的指針域的值為NULL。4)如果p所指節(jié)點(diǎn)是指定節(jié)點(diǎn),刪除該節(jié)點(diǎn),即p所指節(jié)點(diǎn)指針域的值賦給其前一節(jié)點(diǎn)的指針域。5)如果p所指節(jié)點(diǎn)不是指定節(jié)點(diǎn),但p所指節(jié)點(diǎn)的指針域的值為NULL,則鏈表中不存在指定數(shù)據(jù)的節(jié)點(diǎn),刪除操作失敗,輸出相關(guān)信息。6)返回操作后鏈表的頭指針。9.5.3鏈表的基本操作例9.7在例9.4建立的鏈表中刪除某一指定計(jì)算機(jī)成績(jī)的節(jié)點(diǎn)。q80headx80p指向要?jiǎng)h除結(jié)點(diǎn)指向要?jiǎng)h除結(jié)點(diǎn)前驅(qū)結(jié)點(diǎn)9.5.3鏈表的基本操作程序段如下:#defineNULL0#defineLENsizeof(structnode)structnode{intdata;structnode*next;};structnode*del(structnode*head,intx){structnode*p,*q;if(head==NULL){printf("該鏈表是空表。");return(head);}p=head;while(p->data!=x&&p->next!=NULL){q=p;p=p->next;}if(x==p->data){if(p==head)head=p->next;elseq->next=p->next;}elseprintf("找不到該節(jié)點(diǎn)。");return(head);}9.6.1共用體類型的定義其一般形式為:union標(biāo)識(shí)符{類型名1成員名1;類型名2成員名2;…類型名n成員名n;};說明:(1)union是關(guān)鍵字,是共用體類型的標(biāo)志。(2)標(biāo)識(shí)符是共用體名,是用戶自己定義的標(biāo)識(shí)符,與關(guān)鍵字union共同構(gòu)成共用體類型名。(3)花括號(hào)“{}”中是組成該共用體類型的成員數(shù)據(jù)項(xiàng),或稱為共用體中的分量,由成員類型和成員名組成。(4)共用體成員的數(shù)據(jù)類型可以是簡(jiǎn)單類型、數(shù)組、指針或結(jié)構(gòu)等。(5)共用體類型的長(zhǎng)度是共用體成員中的最大長(zhǎng)度。9.6.1共用體類型的定義例如:如果有定義:unionxy{charch;inta[3];floatb;);共用體類型unionxy的存儲(chǔ)單元中各成員占用空間情況如圖:則共用體類型unionxy的長(zhǎng)度是6(占用內(nèi)存的字節(jié)數(shù))?!璫ha[0]a[1]a[2]b9.6.2共用體變量的定義共用體變量定義的一般形式:共用體類型名變量名表;共用體變量的定義有如下三種處理方式:(1)先定義共用體類型,再定義共用體變量。例1:unionxy{charch;inta[3];floatb;};/*定義共用體類型unionxy*/unionxyx,y;/*定義x、y為共用體類型unionxy的變量*/9.6.2共用體變量的定義(2)在定義共用體類型的同時(shí)定義共用體變量。例2:unionxy{charch;inta[3];floatb;}x,y;(3)直接定義共用類型變量。例3:union{charch;inta[3];floatb;}x,y;9.6.3共用體變量的引用引用形式如下:共用體變量名.成員名例如:unionxy{charch;inta[3];floatb;}x,y;x.ch='m';y.a[0]=20;說明:(1)對(duì)同一共用體的不同成員進(jìn)行賦值后,共用體變量中存儲(chǔ)的是最后一次成員的賦值。(2)不能直接使用共用體變量名進(jìn)行輸入輸出。(3)可以直接使用共用體變量名對(duì)一個(gè)同類型的共用體變量賦值。(4)共用體變量名可以作為函數(shù)參數(shù)。(5)不能對(duì)共用體變量進(jìn)行初始化。(6)可以定義共用體類型的數(shù)組。(7)可以定義共用體類型的指針,也可以使用共用體類型的指針作函數(shù)參數(shù)。引用指針指向共用體的成員同樣使用運(yùn)算符“->”9.7枚舉所謂枚舉,是將具有相同屬性的一類數(shù)據(jù)值一一列舉。枚舉是一個(gè)已命名的一組常量的集合。例如:表示星期的(標(biāo)識(shí)符常量)Sunday,Monday,Tuesday,Wednesday,Thursday,F(xiàn)riday,Saturday就是一個(gè)枚舉。枚舉是C語言中的簡(jiǎn)單類型而非構(gòu)造類型,它的值域是有窮的,可以一一列舉出來,變量的取值只限于列舉出來的值的范圍。9.7.1枚舉類型的定義其形式為:enum枚舉名{標(biāo)識(shí)符1[=整型常數(shù)],標(biāo)識(shí)符2[=整型常數(shù)],…標(biāo)識(shí)符n[=整型常數(shù)],};說明:(1)enum是關(guān)鍵字,是枚舉類型的標(biāo)志。(2)標(biāo)識(shí)符是枚舉名,是用戶自己定義的標(biāo)識(shí)符,與關(guān)鍵字enum共同構(gòu)成枚舉類型名。(3)花括號(hào)“{}”中的“標(biāo)識(shí)符1,標(biāo)識(shí)符2,…,標(biāo)識(shí)符n”是所定義枚舉類型的全部取值,通常將這些標(biāo)識(shí)符稱為“枚舉元素”或“枚舉常量”。這些標(biāo)識(shí)符是用戶定義的標(biāo)識(shí)符,一般是所代表事物的名稱。(4)枚舉中每個(gè)標(biāo)識(shí)符后的結(jié)束符是“,”,而不是“;”,最后一個(gè)標(biāo)識(shí)符后可省略“,”。(5)如果枚舉沒有初始化,即省掉“=整型常數(shù)”時(shí),則從第一個(gè)標(biāo)識(shí)符開始,順次賦給標(biāo)識(shí)符整型常數(shù)0,1,2,…。但當(dāng)枚舉中的某個(gè)標(biāo)識(shí)符被賦值后(可以賦負(fù)數(shù)),其后的標(biāo)識(shí)符按依次加1的規(guī)則確定其值。9.7.1枚舉類型的定義例如:enumweekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};9.7.2枚舉變量的定義枚舉變量定義的一般形式:枚舉類型名變量名表;枚舉變量的定義有如下三種處理方式:(1)先定義枚舉類型,再定義枚舉變量。例1:enumweekday{Sunday,Monday,Tuesday,Wedneday,Thursday,Friday,Saturday};/*定義枚舉類型enumweekday*/enumweekdayx,y;/*定義x?y為枚舉類型enumweekday的變量*/9.7.2枚舉變量的定義(2)在定義枚舉類型的同時(shí)定義枚舉變量。例2:enumweekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}x,y;(3)直接定義枚舉類型變量。例3:enum{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}x,y;9.7.3枚舉變量的應(yīng)用(1)枚舉變量取枚舉說明結(jié)構(gòu)中的某個(gè)標(biāo)識(shí)符常量后,其值可認(rèn)為是標(biāo)識(shí)符對(duì)應(yīng)的常數(shù)。例1:enumweekday{Sunday=0,Monday,Tuesday,Wedneday,Thursday,Friday,Saturday}x,y;
x=Friday;y=Tuesday;即x的值為5,y的值為2。9.7.3枚舉變量的應(yīng)用(2)不能直接給一個(gè)枚舉變量賦一個(gè)整數(shù),但經(jīng)過強(qiáng)制類型轉(zhuǎn)換后可以實(shí)現(xiàn)賦值。例2:x=5;是不合法的。x=(enumweekday)5;是合法的
(3)枚舉變量的值不能直接輸入輸出,一般通過下面例3的方式實(shí)現(xiàn)。例3:enumweekday{Sunday=0,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}x;
intn;scanf("%d",&n)switch(n){case0:x=Sunday;case1:x=Monday;case2:x=Tuesday;case3:x=Wednesday;case4:x=Thursday;case5:x=Friday;case6:x=Saturday;}
switch(x){caseSunday:printf("Sunday");caseMonday:printf("Monday");caseTuesday:printf("Tuesday");caseWednesday:printf("Wednesday");caseThursday:printf("Thursday");caseFriday:printf("Friday");caseSaturday:printf("Saturday");}枚舉變量輸入枚舉變量輸出9.7.3枚舉變量的應(yīng)用(4)枚舉值可以進(jìn)行比較。例4:enumweekday{Sunday=0,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}x;if(x==Friday)printf("今天是周末!");if(x<Saturday&&x>Sunday)printf("今天要工作!");9.8自定義類型自定義類型是將一個(gè)數(shù)據(jù)類型定義一個(gè)新的名字。自定義類型的格式為:typedef類型名標(biāo)識(shí)符;例如:typedefintIN;/*定義整型int的新類型名為IN*/INx;/*定義IN類型(即int)的變量x*/typedefstructstudent{charname[8];intclass;charsubclass[6];floatmath,phys,chem,engl,biol;}ST; /*定義structstudent的新類型名為ST*/STy; /*定義ST類型(即structstudent)的變量y*/9.10典型試題詳解1.設(shè)有如下說明語句:structex{intx;floaty;charz;}example;則下面的敘述中不正確的是________。A)struct是結(jié)構(gòu)體類型的關(guān)鍵字 B)example是結(jié)構(gòu)體類型名C)x、y、z都是結(jié)構(gòu)體成員名 D)structex是結(jié)構(gòu)體類型正確答案:B(知識(shí)點(diǎn):結(jié)構(gòu)體類型及結(jié)構(gòu)體變量的定義)試題分析:example是結(jié)構(gòu)體類型的變量名。9.10典型試題詳解2.設(shè)有如下定義:structss{charname[10];intage;charsex;}std[3],*p=std;下面各輸入語句中錯(cuò)誤的是________。A)scanf("%d",&(*p).age); B)scanf("%s",&);C)scanf("%c",&std[0].sex); D)scanf("%c",&(p->sex));正確答案:B(知識(shí)點(diǎn):結(jié)構(gòu)體數(shù)組、指向結(jié)構(gòu)體數(shù)組的指針、結(jié)構(gòu)體變量的引用)9.10典型試題詳解3.設(shè)有如下定義:structsk{inta;floatb;}data;int*p;若要使p指向data中的a域,正確的賦值語句是________。A)p=&a B)p=data.a; C)p=&data.a D)*p=data.a正確答案:C(知識(shí)點(diǎn):結(jié)構(gòu)體成員地址的引用、指向結(jié)構(gòu)體成員的指針)9.10典型試題詳解4.以下選項(xiàng)中不能正確把c1定義成結(jié)構(gòu)體變量的是________。A)typedefstruct B)structcolorc1{intred; {intred;intgreen; intgreen;intblue;}COLOR intblue;};COLORc1;C)structcolor D)struct{intred;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 整車制造綠色環(huán)保技術(shù)應(yīng)用考核試卷
- 木材采伐作業(yè)成本控制考核試卷
- 衛(wèi)生材料的社會(huì)影響與企業(yè)責(zé)任考核試卷
- 在建工地安全課件模板
- 工廠院內(nèi)改造合同范本
- 公司聘用合同范本6
- 土地小院出租合同范本
- 團(tuán)隊(duì)合作合同范本
- 鋁廠服裝租借合同范本
- 小學(xué)生注意力課件
- 《調(diào)整心態(tài)迎接中考》主題班會(huì)
- 冠心病患者運(yùn)動(dòng)恐懼的現(xiàn)狀及影響因素分析
- 全國2018年10月自考00043經(jīng)濟(jì)法概論(財(cái)經(jīng)類)試題及答案
- 《又見平遙》課件
- 噴涂設(shè)備點(diǎn)檢表
- 廣東省佛山市《綜合基礎(chǔ)知識(shí)》事業(yè)單位國考真題
- 02 第2章 城市與城市化-城市管理學(xué)
- 六年級(jí)上冊(cè)英語教案-Culture 2 Going Green 第二課時(shí) 廣東開心英語
- 警察叔叔是怎樣破案的演示文稿課件
- 2019石景山初三一模語文試題及答案
- 09式 新擒敵拳 教學(xué)教案 教學(xué)法 圖解
評(píng)論
0/150
提交評(píng)論