C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊7_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊7_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊7_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊7_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊7_第5頁(yè)
已閱讀5頁(yè),還剩66頁(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)介

模塊七圖書(shū)信息的添加、瀏覽和刪除模塊學(xué)習(xí)目標(biāo)1、理解和掌握結(jié)構(gòu)體的定義和調(diào)用方法;2、理解和掌握結(jié)構(gòu)體數(shù)組的定義和引用;3、理解共用體和枚舉類型的構(gòu)造、定義和引用。項(xiàng)目三圖書(shū)信息管理系統(tǒng)

模塊七

圖書(shū)信息的添加、瀏覽和刪除

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

7.1結(jié)構(gòu)體7.1.1結(jié)構(gòu)體的概念與聲明7.1.2結(jié)構(gòu)體變量7.1.3結(jié)構(gòu)體數(shù)組7.1.4結(jié)構(gòu)體指針7.1.1結(jié)構(gòu)的概念與定義1.結(jié)構(gòu)的概念及定義聲明一個(gè)結(jié)構(gòu)類型的一般形式為:struct結(jié)構(gòu)名{ 類型名成員名1; 類型名成員名2; …… 類型名成員名n;};說(shuō)明:(1)關(guān)鍵字struct與結(jié)構(gòu)名一起構(gòu)成結(jié)構(gòu)類型名。(2)大括號(hào)中的內(nèi)容是結(jié)構(gòu)所包括的成員,也叫結(jié)構(gòu)分量。成員的數(shù)據(jù)類型都可以是基本類型,也可以是結(jié)構(gòu)類型。(3)結(jié)構(gòu)類型定義只是說(shuō)明了結(jié)構(gòu)類型的構(gòu)成情況,系統(tǒng)并不分配內(nèi)存空間。(4)定義結(jié)構(gòu)類型時(shí),不允許將成員的數(shù)據(jù)類型定義成自身的結(jié)構(gòu)類型,但是結(jié)構(gòu)類型中可以含有指向自身類型的指針變量。(5)C語(yǔ)言把結(jié)構(gòu)聲明看做是一條語(yǔ)句,括號(hào)后面的分號(hào)是不可少的。1.結(jié)構(gòu)變量的定義聲明了結(jié)構(gòu)類型后,還需要定義結(jié)構(gòu)變量,以便在程序中引用它。結(jié)構(gòu)變量和其他變量一樣,必須先定義后使用。7.1.2結(jié)構(gòu)變量(1)先定義結(jié)構(gòu)類型,再定義結(jié)構(gòu)變量例如:structbooks{ intbno;charbname[20],field[10],author[10],publisher[30]; floatprice;};structbooksbook1,book2;(2)定義結(jié)構(gòu)類型的同時(shí)定義結(jié)構(gòu)變量例如:structbooks{intbno;charname[20],field[10],author[10],publisher[30];floatprice;}book1,book2;(3)直接定義結(jié)構(gòu)變量struct{ intbno; charbname[20],field[10]; floatprice;}book1,book2;說(shuō)明:方式(3)中沒(méi)有給出結(jié)構(gòu)名,在此定義語(yǔ)句后面無(wú)法再定義這個(gè)類型的其他結(jié)構(gòu)變量。

【課堂思考】下面關(guān)于結(jié)構(gòu)的定義語(yǔ)句,錯(cuò)誤的是________。A.structtest{inta;intb;intc;};structtesty;B.structtest{inta;intb;intc;}structtesty;C.structtest{inta;intb;intc;}y;D.struct{inta;intb;intc;}y;2.結(jié)構(gòu)變量的初始化結(jié)構(gòu)變量在定義的同時(shí)也可以進(jìn)行初始化。結(jié)構(gòu)變量初始化的一般形式是在定義變量的后面加上“={初值表列};”。除了允許具有相同類型的結(jié)構(gòu)變量相互賦值以外,不能整體引用結(jié)構(gòu)變量,而只能引用結(jié)構(gòu)變量中的成員。結(jié)構(gòu)變量的成員與普通變量一樣可以參與各種運(yùn)算,對(duì)結(jié)構(gòu)變量的賦值、存取、運(yùn)算都是通過(guò)引用其成員進(jìn)行的。3.結(jié)構(gòu)變量的引用引用結(jié)構(gòu)變量成員的方式為:結(jié)構(gòu)變量名.成員名其中,“.”是成員運(yùn)算符。在C語(yǔ)言中,成員運(yùn)算符“.”的優(yōu)先級(jí)高于其他運(yùn)算符,其結(jié)合方向是從左到右。例如,表達(dá)式“book1.price++”相當(dāng)于“(book1.price)++”?!纠?1】結(jié)構(gòu)變量初始化示例#include<stdio.h>intmain(){ structbooks /*結(jié)構(gòu)類型*/ { intbno; charbname[20],field[10],author[10],publisher[30]; floatprice; };

structbooksbk1={ /*初始化*/

1001,"cprogramming","computer","xuwei","renminyoudianpress",39.0

}; printf("bno=%d\nbname=%s\nfield=%s\n",bk1.bno,bk1.bname,bk1.field); printf("author=%s\n",bk1.author); printf("publisher=%s\nprice=%f\n",bk1.publisher,bk1.price); return0;}注意:(1)對(duì)結(jié)構(gòu)變量初始化時(shí),需要按照其成員出現(xiàn)的順序?qū)γ總€(gè)成員依次賦值,不能跳過(guò)前面的成員給后面的成員賦值,例如下面的用法是錯(cuò)誤的。structbooksbk1={1002,,"computer",,"renminyoudianpress",39.0};(2)不能在結(jié)構(gòu)內(nèi)部給成員賦初值,例如下面的用法是錯(cuò)誤的。structbooks{ intbno=1001; charbname[20]="cprogramming"; charfield[10]="computer"; charauthor[10]; charpublisher[30]; floatprice=23;};7.1.3結(jié)構(gòu)數(shù)組1.結(jié)構(gòu)數(shù)組的定義可以將數(shù)組定義為結(jié)構(gòu)類型,即結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組用來(lái)表示具有相同數(shù)據(jù)結(jié)構(gòu)的一個(gè)群體,可以使用循環(huán)對(duì)數(shù)組元素進(jìn)行統(tǒng)一處理,優(yōu)化算法。(1)先聲明結(jié)構(gòu)類型,再定義結(jié)構(gòu)數(shù)組struct結(jié)構(gòu)名{ 成員列表;};struct結(jié)構(gòu)名數(shù)組名[元素個(gè)數(shù)];(2)聲明結(jié)構(gòu)類型的同時(shí)定義結(jié)構(gòu)數(shù)組struct結(jié)構(gòu)名{ 成員列表;}數(shù)組名[元素個(gè)數(shù)];(3)直接定義結(jié)構(gòu)數(shù)組struct{ 成員列表;}數(shù)組名[元素個(gè)數(shù)];2.結(jié)構(gòu)數(shù)組的初始化結(jié)構(gòu)數(shù)組初始化的一般形式為:struct結(jié)構(gòu)名數(shù)組名[元素個(gè)數(shù)]={初值表列};例如:structbooksbook[5]={101,"clanguage","computer","xw","rmydpress",39,102,"vbprogramming","computer","zys","qhdxpress",39,103,"java","computer","mj","jxgypress",34};為了增強(qiáng)程序的可讀性,最好用大括號(hào)將每一個(gè)數(shù)組元素的初值括起來(lái)。例如:structbooksbook[5]={ {101,"clanguage","computer","xw","rmydpress",39}, {102,"vb","computer","zys","qhdxpress",39}, {103,"java","computer","mj","jxgypress",34}, {104,"c#","math","chc","dzgypress",29.8}, {105,"clanguage","computer","thq","qhdxpress",26}};當(dāng)對(duì)結(jié)構(gòu)數(shù)組的全部元素進(jìn)行初始化時(shí),可以省略數(shù)組的長(zhǎng)度,系統(tǒng)根據(jù)初始化數(shù)據(jù)的多少來(lái)確定數(shù)組的長(zhǎng)度。例如:structbooksbook[]={ {101,"clanguage","computer","xw","rmydpress",39}, {102,"vb","computer","zys","qhdxpress",39}, {103,"java","computer","mj","jxgypress",34}, {104,"linearalgebra","math","chc","dzgypress",29.8}, {105,"clanguage","computer","thq","qhdxpress",26}};根據(jù)初值可知結(jié)構(gòu)數(shù)組book的長(zhǎng)度為53.結(jié)構(gòu)數(shù)組的使用結(jié)構(gòu)數(shù)組元素成員的引用可以有如下幾種形式:(1)結(jié)構(gòu)數(shù)組名[下標(biāo)].成員名(2)(*(結(jié)構(gòu)數(shù)組名+下標(biāo))).成員名(3)(結(jié)構(gòu)數(shù)組名+下標(biāo))->成員名。其中:形式(2)中最外面的括號(hào)不可少形式(3)中的“->”稱為指向成員運(yùn)算符,其優(yōu)先級(jí)與成員運(yùn)算符“.”相同,且結(jié)合方向均為從左到右。結(jié)構(gòu)數(shù)組元素成員的使用方法與同類型的結(jié)構(gòu)變量相同。#include<stdio.h>/*包含頭文件*/intmain()/*主函數(shù)main*/{ structbooks{/*聲明結(jié)構(gòu)體變量books*/ intnum; charbook_name[20]; charauthor[10]; doubleprice; };structbooksbook[3]={/*定義結(jié)構(gòu)體數(shù)組*/ {1001,"Cprogram","James",45.00}, {1002,"Javaprogram","Tom",55.00}, {1003,"javascript","Jack",65.00} };printf("%d\n",book[0].num);printf("%d\n",book[1].num);printf("%d\n",book[2].num);return0;/*程序結(jié)束*/}運(yùn)行結(jié)果:100110021003指向結(jié)構(gòu)變量的指針叫做結(jié)構(gòu)指針。結(jié)構(gòu)指針變量的值是它所指向的結(jié)構(gòu)變量所占用內(nèi)存空間的起始地址。結(jié)構(gòu)指針變量定義的形式為:struct結(jié)構(gòu)名*指針變量名;7.1.4結(jié)構(gòu)體指針1、結(jié)構(gòu)指針的概念訪問(wèn)結(jié)構(gòu)變量的成員的形式等價(jià):(1)結(jié)構(gòu)變量名.成員名(2)(*結(jié)構(gòu)指針變量名).成員名(3)結(jié)構(gòu)指針變量名->成員名例如,設(shè)有如下定義:structstru{ intn;}str,*p=&str;則:str.n:得到結(jié)構(gòu)變量str的成員n的值。(*p).n:得到p指向的結(jié)構(gòu)變量str的成員n的值。p->n:得到p指向的結(jié)構(gòu)變量str的成員n的值。p->n++:得到p指向的結(jié)構(gòu)變量str的成員n的值,然后使成員n的值加1。++p->n:等價(jià)于++(p->n),使p指向的結(jié)構(gòu)變量str的成員n的值加1。(++p)->n:先使p自加1,然后得到它指向的元素的成員n的值。(p++)->n:先得到p->n的值,然后使p自加1?!纠?3】結(jié)構(gòu)指針使用示例。#include<stdio.h>intmain(){structbooks {intbno;charbname[20],field[10],author[10],publisher[30];floatprice;};structbooksbk1={1001,"cprogramming","computer","xuwei","renminyoudianpress",39.0}; structbooks*p=&bk1;printf("bno=%d,bname=%s,price=%f\n",bk1.bno,(*p).bname,p->price);return0;}運(yùn)行結(jié)果:bno=1001,bname=cprogramming,price=39.000000結(jié)構(gòu)指針也可以用來(lái)指向一個(gè)結(jié)構(gòu)數(shù)組,這時(shí)結(jié)構(gòu)指針的值是結(jié)構(gòu)數(shù)組的首地址。同樣,結(jié)構(gòu)指針變量也可以指向結(jié)構(gòu)數(shù)組元素,此時(shí)結(jié)構(gòu)指針變量的值是結(jié)構(gòu)數(shù)組元素的地址。2、指向結(jié)構(gòu)數(shù)組的指針例如,結(jié)構(gòu)數(shù)組與結(jié)構(gòu)指針的定義如下:struct{ inta; floatb;}a[3],*p;p=a;此時(shí)p指向數(shù)組a的第一個(gè)元素,“p=a;”等價(jià)于“p=&a[0];”,若執(zhí)行“p++;”則此時(shí)指針變量p指向a[1]。pp++a[0]a[1]a[2]#include/*包含頭文件*/intmain()/*主函數(shù)main*/{structbooks{/*聲明結(jié)構(gòu)體books*/intnum;charbook_name[20];charauthor[10];doubleprice;};structbooksbook[3]={/*定義結(jié)構(gòu)體數(shù)組*/{1001,"Cprogram","James",45.00},{1002,"Javaprogram","Tom",55.00},{1003,"javascript","Jack",65.00}};structbooks*p=book;/*定義結(jié)構(gòu)體指針變量并指向結(jié)構(gòu)體數(shù)組*/printf("%d\n",(*p).num);p++;printf("%d\n",(*p).num);return0;/*程序結(jié)束*運(yùn)行結(jié)果:10011002【例04】指向結(jié)構(gòu)體數(shù)組的指針項(xiàng)目三圖書(shū)信息管理系統(tǒng)

模塊七

圖書(shū)信息的添加、瀏覽和刪除

7.2鏈表

7.2鏈表7.2.1鏈表的概念7.2.2鏈表的基本操作鏈表是一種動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),它使用隨機(jī)分配的內(nèi)存單元來(lái)存放數(shù)據(jù),這些內(nèi)存單元可以是連續(xù)的,也可以是不連續(xù)的。鏈表是由若干個(gè)相同結(jié)構(gòu)類型的元素依次串接而成的,它使用指針來(lái)表示兩個(gè)元素之間的前后關(guān)系。7.2鏈表1、

鏈表的概念鏈表中的每個(gè)元素稱為一個(gè)“結(jié)點(diǎn)”。結(jié)點(diǎn)是結(jié)構(gòu)類型,其成員由兩部分組成:用戶需要使用的數(shù)據(jù)(稱為數(shù)據(jù)成員或數(shù)據(jù)域);下一個(gè)結(jié)點(diǎn)的地址(稱為指針域,為指向自身結(jié)構(gòu)類型的指針)。鏈表的尾結(jié)點(diǎn)由于無(wú)后續(xù)結(jié)點(diǎn),在其指針域放一個(gè)NULL(表示空地址),表明鏈表到此結(jié)束。單鏈表:鏈表的每個(gè)結(jié)點(diǎn)中只包含一個(gè)指針域,該指針域中存放的是其后繼結(jié)點(diǎn)的地址,這樣的鏈表稱為單鏈表。h1a2b3c4dNULL單鏈表結(jié)點(diǎn)數(shù)據(jù)類型的定義形式如下:struct結(jié)構(gòu)名{類型名成員名1; 類型名成員名2; …… 類型名成員名n;

struct結(jié)構(gòu)名*指針名1,*指針名2,……,*指針名n;};動(dòng)態(tài)內(nèi)存分配是指在程序運(yùn)行時(shí)動(dòng)態(tài)地分配或者回收內(nèi)存空間的方法,其好處是能有效地使用內(nèi)存,而且同一段內(nèi)存可以有不同的用途,使用時(shí)申請(qǐng),用完就釋放。包括三個(gè)方面的內(nèi)容:動(dòng)態(tài)內(nèi)存分配、動(dòng)態(tài)內(nèi)存調(diào)整和動(dòng)態(tài)內(nèi)存釋放。使用動(dòng)態(tài)內(nèi)存分配函數(shù)需要包含頭文件“stdlib.h”、“malloc.h”或者“alloc.h”。2、動(dòng)態(tài)內(nèi)存分配(1)動(dòng)態(tài)內(nèi)存分配函數(shù)malloc()和calloc()說(shuō)明:malloc()或calloc()函數(shù)的返回值是一個(gè)(void*)類型的指針,在使用前需要將函數(shù)的返回值轉(zhuǎn)換到特定指針類型,賦給一個(gè)指針。例如,常見(jiàn)的使用方法為:if((p=(int*)malloc(n*sizeof(int)))==NULL){printf("Notabletoallocatememory.allocatememoryerror.\n");exit(1);}【例01】計(jì)算n個(gè)數(shù)的平均值,數(shù)字由用戶在運(yùn)行時(shí)輸入。#include<stdio.h>#include<stdlib.h>intmain(){inti,j=0,*p;floatsum=0;printf("請(qǐng)輸入數(shù)的個(gè)數(shù):");scanf("%d",&i); p=(int*)malloc(i*sizeof(int)); /*或者p=(int*)calloc(i,sizeof(int))*/if(p) {while(j++<i){printf("第%d個(gè)數(shù)是:",j); scanf("%d",p++);} for(j=i;j>0;j--) sum+=*(p-j);printf("平均值是:%f",(sum/i)); free(p-i); }elseprintf("內(nèi)存分配錯(cuò)誤!");return0;}運(yùn)行結(jié)果:請(qǐng)輸入數(shù)的個(gè)數(shù):3第1個(gè)數(shù)是:1第2個(gè)數(shù)是:2第3個(gè)數(shù)是:3平均值是:2.000000單鏈表的基本操作主要有:(1)創(chuàng)建鏈表(2)輸出鏈表(3)查找結(jié)點(diǎn)(4)插入結(jié)點(diǎn)(5)刪除結(jié)點(diǎn)(6)重組鏈表

7.2.2鏈表的基本操作鏈表的建立向鏈表中添加一個(gè)新節(jié)點(diǎn)data=Anodedata=Bnodedata=C∧nodehead空指針NULL表示鏈表結(jié)尾鏈表的頭指針:訪問(wèn)鏈表的關(guān)鍵鏈表的建立若原鏈表為空表(head==NULL),則將新建節(jié)點(diǎn)p置為頭節(jié)點(diǎn)head(1)head=pdatanextp新建節(jié)點(diǎn)(2)pr=p∧pr(3)pr->next=NULLdatanext新建節(jié)點(diǎn)p鏈表的建立若原鏈表為非空,則將新建節(jié)點(diǎn)p添加到表尾(1)pr->next=p(2)pr=p∧headdata∧prpr(3)pr->next=NULLnext鏈表的刪除操作若原鏈表為空表,則退出程序若待刪除節(jié)點(diǎn)p是頭節(jié)點(diǎn),則將head指向當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)即可刪除當(dāng)前節(jié)點(diǎn)

datanext(1)head=p->nexthead待刪除節(jié)點(diǎn)datanextp頭節(jié)點(diǎn)(2)free(p)鏈表的刪除操作若待刪除節(jié)點(diǎn)不是頭節(jié)點(diǎn),則將前一節(jié)點(diǎn)的指針域指向當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)即可刪除當(dāng)前節(jié)點(diǎn)(1)pr->next=p->nextdatanextdatanext待刪除節(jié)點(diǎn)datanextp中間節(jié)點(diǎn)datanext若已搜索到表尾(p->next==NULL)仍未找到待刪除節(jié)點(diǎn),則顯示“未找到”

(2)free(p)鏈表的插入操作若原鏈表為空表,則將新節(jié)點(diǎn)p作為頭節(jié)點(diǎn),讓head指向新節(jié)點(diǎn)phead待插入節(jié)點(diǎn)data∧p(1)head=pp=(structlink*)malloc(sizeof(structlink));p->next=NULL;p->data=nodeData;鏈表的插入操作若原鏈表為非空,則按節(jié)點(diǎn)值(假設(shè)已按升序排序)的大小確定插入新節(jié)點(diǎn)的位置若在頭節(jié)點(diǎn)前插入新節(jié)點(diǎn),則將新節(jié)點(diǎn)的指針域指向原鏈表的頭節(jié)點(diǎn),且讓head指向新節(jié)點(diǎn)head待插入節(jié)點(diǎn)datanextp(2)head=pdatanextdatanextdata∧(1)p->next=headdatanext鏈表的插入操作若在鏈表中間插入新節(jié)點(diǎn),則將新節(jié)點(diǎn)的指針域指向下一節(jié)點(diǎn)且讓前一節(jié)點(diǎn)的指針域指向新節(jié)點(diǎn)待插入節(jié)點(diǎn)datanextp(2)pr->next=pdatanextdatanextdata∧(1)p->next=pr->nextprdatanext鏈表的插入操作若在表尾插入新節(jié)點(diǎn),則末節(jié)點(diǎn)指針域指向新節(jié)點(diǎn)待插入節(jié)點(diǎn)datanextp(1)pr->next=pprdata∧原末節(jié)點(diǎn)next∧鏈表的輸出遍歷鏈表的所有節(jié)點(diǎn)headdatanextdatanextdata∧pppp∧項(xiàng)目三圖書(shū)信息管理系統(tǒng)

模塊七

圖書(shū)信息的添加、瀏覽和刪除

7.3共用體

7.3共用體7.3.1共用體類型的說(shuō)明和變量7.3.2共用體變量的引用共用體,也叫聯(lián)合體,是一種用戶自定義的構(gòu)造數(shù)據(jù)類型,它使幾個(gè)不同類型的變量共占同一段內(nèi)存。共用體實(shí)質(zhì)上是采用了覆蓋技術(shù),使幾個(gè)變量互相覆蓋。7.3共用體1.共用體的定義注意:在C語(yǔ)言中,數(shù)據(jù)的存取必須與數(shù)據(jù)類型相匹配,否則會(huì)引起數(shù)據(jù)存取混亂,導(dǎo)致數(shù)據(jù)讀寫(xiě)錯(cuò)誤。共用體所占用的存儲(chǔ)空間雖然可以存放不同類型的數(shù)據(jù),但是在程序運(yùn)行的某一個(gè)時(shí)刻只有一個(gè)成員值有效。聲明一個(gè)共用體類型的一般形式為:union共用體名{ 類型名成員名1; 類型名成員名2; …… 類型名成員名n;};例如:unionelectivescore{ floatstatistics; floatmaintenance; chartourism;};方法一:先聲明共用體類型,然后再定義共用體變量unionelectivescore{ floatstatistics; floatmaintenance; chartourism;};unionelectivescoreelective;2.共用體變量方法二:聲明共用體類型的同時(shí)定義共用體變量unionelectivescore{ floatstatistics; floatmaintenance; chartourism;}elective;方法三:直接定義共用體變量union{ floatstatistics; floatmaintenance; chartourism;}elective;【例】若有數(shù)據(jù)類型定義如下:uniondata{ floatx; chary;};則表達(dá)式sizeof(uniondata)的值是什么?定義了共用體變量后系統(tǒng)會(huì)為之分配內(nèi)存,共用體變量所占有的存儲(chǔ)空間是占有存儲(chǔ)空間最大的共用體成員所占的空間。

對(duì)于共用體變量成員的引用也是通過(guò)成員運(yùn)算符“.”進(jìn)行的,引用方式為:共用體變量名.成員名

例如:elective.statistics共用體和結(jié)構(gòu)可以嵌套使用,即結(jié)構(gòu)中的成員可以是共用體,共用體中的成員也可以是結(jié)構(gòu)。引用內(nèi)部成員的方式如下:

結(jié)構(gòu)變量.共用體變量.成員

共用體變量.結(jié)構(gòu)變量.成員對(duì)共用體變量的使用要注意下面幾個(gè)問(wèn)題。(1)共用體成員所占用的存儲(chǔ)空間雖然可以存放不同類型的數(shù)據(jù),但是在程序運(yùn)行的某一個(gè)時(shí)刻只有一個(gè)成員值有效。(2)引用共用體變量時(shí),要保證其存儲(chǔ)類型的一致性,即最近一次存入共用體變量中的是一個(gè)整數(shù),那么下一次取出該變量中的內(nèi)容也應(yīng)該是一個(gè)整數(shù)。(3)只能對(duì)共用體變量的第一個(gè)成員初始化,不能同時(shí)對(duì)共用體變量的所有成員進(jìn)行初始化?!纠抗灿脙?nèi)存示例#include<stdio.h>intmain(){ unionudata { charc[2]; intx; }udd;

udd.x=0x1234; printf("udd.x=%#x\n",udd.x);

printf("udd.c[0]=%#x,udd.c[1]=%#x\n",udd.c[0],udd.c[1]); return0;}1000H1001Huddc[0]x內(nèi)存分配圖34H12Hc[1]運(yùn)行結(jié)果:udd.x=0x1234udd.c[0]=0x34,udd.c[1]=0x12floatx;結(jié)果?【例】若有以下定義語(yǔ)句,則以下選項(xiàng)正確的是________。uniondata{ intt; floatf; charc;}d={12};intn;A.d=5; B.d={2,1.2,'a'};C.printf("%d\n",d); D.n=d;voidff(uniondatadx) { printf("%c,%x\n",dx.c,&dx.c); dx.x=10; printf("%d,%x\n",dx.x,&dx.x);}intmain(){ uniondatadd; dd.c='A'; printf("%c,%x\n",dd.c,&dd.c); ff(dd);/*函數(shù)調(diào)用,將共用體變量作為實(shí)參*/ printf("%d\n",dd.x); return0;}運(yùn)行結(jié)果:A,18ff44A,18fef410,18fef4-858993599【例】共用體變量作為函數(shù)的形參【例】共用體和結(jié)構(gòu)的嵌套

#include<stdio.h>unionmyun /*共用體類型*/{ struct /*共用體內(nèi)部嵌套的結(jié)構(gòu)類型*/ {intx,y,z; }u; intk;}a;intmain(){ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf("%d",a.u.x); return0;}項(xiàng)目三圖書(shū)信息管理系統(tǒng)

模塊七

圖書(shū)信息的添加、瀏覽和刪除

7.4枚舉類型

7.4枚舉類型7.4.1枚舉類型的定義7.4.2枚舉類型的使用7.4枚舉類型1.聲明聲明一個(gè)枚舉類型的一般形式為:enum枚舉名{ 枚舉值列表 };(1)關(guān)鍵字enum是枚舉類型的標(biāo)志,“enum枚舉名”構(gòu)成枚舉類型。(2)枚舉是一個(gè)集合,集合中的元素(稱為枚舉成員或枚舉常量)是一些特定的標(biāo)識(shí)符,元素之間用逗號(hào)隔開(kāi)。(3)在枚舉類型中,枚舉成員是有值的,第一個(gè)枚舉成員的默認(rèn)值為0,后續(xù)成員的值依次遞增。(4)枚舉成員是常量,不能對(duì)它們賦值。如“red=1;”是錯(cuò)誤的。但是在定義枚舉類型時(shí)可以指定枚舉成員的值。(5)同一個(gè)程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的枚舉成員。2.枚舉變量聲明了枚舉類型后,可以使用它來(lái)定義枚舉變量,有以下三種形式:形式一:先定義枚舉類型,然后定義枚舉變量enumcolor{red,yellow,green,blue,black};enumcolorc1,c2;形式二:定義枚舉類型的同時(shí)定義枚舉變量enumcolor{red,yellow,green,blue,black}c1,c2;形式三:直接定義枚舉變量enum{red,yellow,green,blue,black}c1,c2;注意:枚舉變量的值只能為枚舉類型中列舉出來(lái)的枚舉成員,如“c1=red;”,則c1的值為0。枚舉成員不是字符常量或字符串常量,使用時(shí)不能加單引號(hào)或雙引號(hào),如“c1="red";”是錯(cuò)誤的。不能將一個(gè)數(shù)值直接賦值給枚舉變量,如“c1=3;”是錯(cuò)誤的。但是使用強(qiáng)制類型轉(zhuǎn)換則可以進(jìn)行賦值,如“c1=(enumcolor)3;”,其含義是將枚舉類型enumcolor中值為3的成員賦值給變量c1,相當(dāng)于“c1=blue;”。1.枚舉類型數(shù)據(jù)的輸入輸出枚舉類型的數(shù)據(jù)不能直接進(jìn)行輸入輸出。輸入時(shí)應(yīng)先輸入其序號(hào),然后使用強(qiáng)制類型轉(zhuǎn)換完成;輸出時(shí)應(yīng)先進(jìn)行轉(zhuǎn)換才能輸出其對(duì)應(yīng)的字符串。7.4.2枚舉類型的使用【例01】從鍵盤(pán)輸入一個(gè)整數(shù),顯示與該整數(shù)對(duì)應(yīng)的枚舉常量所表示的水果英文名稱。#include<stdio.h>enumfruits{watermelon,peach,strawberry,banana,pineapple,apple};intmain(){ charfts[][20]={"watermelon","peach","strawberry","banana","pineapple","apple"}; enumfruits

溫馨提示

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