結(jié)構(gòu)體類型與共用體類型_第1頁(yè)
結(jié)構(gòu)體類型與共用體類型_第2頁(yè)
結(jié)構(gòu)體類型與共用體類型_第3頁(yè)
結(jié)構(gòu)體類型與共用體類型_第4頁(yè)
結(jié)構(gòu)體類型與共用體類型_第5頁(yè)
已閱讀5頁(yè),還剩68頁(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)介

結(jié)構(gòu)體類型與共用體類型第一頁(yè),共七十三頁(yè),編輯于2023年,星期一9.1結(jié)構(gòu)體類型9.1.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義用關(guān)鍵字struct標(biāo)識(shí),形式為:struct標(biāo)識(shí)符{成員表};第二頁(yè),共七十三頁(yè),編輯于2023年,星期一例如,定義結(jié)構(gòu)體類型,描述下列數(shù)據(jù)。

(1)學(xué)生情況,包含學(xué)生的學(xué)號(hào)、姓名、性別、年齡、C語(yǔ)言課程成績(jī):structstudent{intno;/*學(xué)號(hào)*/charname[8];/*姓名*/charsex;/*性別*/intage;/*年齡*/floatcscore;/*C成績(jī)*/};第三頁(yè),共七十三頁(yè),編輯于2023年,星期一如考慮30門課程成績(jī),加上總成績(jī)與平均成績(jī),可作如下定義:structstudent{intno;/*學(xué)號(hào)*/charname[8];/*姓名*/charsex;/*性別*/intage;/*年齡*/floatscore[31];/*30門課程成績(jī)*/floattcj,acj;/*總成績(jī),平均成績(jī)*/};第四頁(yè),共七十三頁(yè),編輯于2023年,星期一

(2)個(gè)人數(shù)據(jù),包含姓名、性別、年齡、身高、體重、住址:structperson{charname[8];/*姓名*/charsex;/*性別*/intage;/*年齡*/floatheight;/*身高*/floatweight;/*體重*/charadd[40];/*住址*/};第五頁(yè),共七十三頁(yè),編輯于2023年,星期一(3)平面上的點(diǎn):structpoint2{floatx;/*橫坐標(biāo)*/floaty;/*縱坐標(biāo)*/};如考慮空間中的點(diǎn),可作如下定義:structpoint3{floatx;/*X坐標(biāo)*/floaty;/*Y坐標(biāo)*/floatz;/*Z坐標(biāo)*/};第六頁(yè),共七十三頁(yè),編輯于2023年,星期一(4)日期,包括年、月、日:structdate{intyear;/*年*/month;/*月*/day;/*日*/};如考慮時(shí)間,可作如下定義:structtime{inthh;/*時(shí)*/intmm;/*分*/intss;/*秒*/};

第七頁(yè),共七十三頁(yè),編輯于2023年,星期一(5)復(fù)數(shù):structcomplex{floatre;/*實(shí)部*/floatie;/*虛部*/};第八頁(yè),共七十三頁(yè),編輯于2023年,星期一(6)三角形:structsjx{floata,b,c;/*三邊*/};第九頁(yè),共七十三頁(yè),編輯于2023年,星期一9.1.2結(jié)構(gòu)體變量的定義

(1)先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。形式為:①struct標(biāo)識(shí)符

{成員表};②struct標(biāo)識(shí)符變量表;例如,對(duì)以上定義的結(jié)構(gòu)體類型,我們可以定義如下一些結(jié)構(gòu)體變量:

structstudentzhang;/*張同學(xué)情況*/structpersonp[100];/*100個(gè)人的數(shù)據(jù)*/structpoint2p1,p2;/*平面上的兩個(gè)點(diǎn)*/structpoint3po1,po2;/*空間上的兩個(gè)點(diǎn)*/第十頁(yè),共七十三頁(yè),編輯于2023年,星期一

(2)定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。形式為:

struct標(biāo)識(shí)符

{成員表}變量表;例如,對(duì)以上定義的結(jié)構(gòu)體變量,我們可以在定義結(jié)構(gòu)體類型的同時(shí)定義如下:

①structstudent{intno;

charname[8];

charsex;

intage;

floatcscore;}zhang;/*張同學(xué)情況*/第十一頁(yè),共七十三頁(yè),編輯于2023年,星期一②structperson{charname[8];charsex;intage;floatheight;floatweight;charadd[40];}p[100];/*100個(gè)人的數(shù)據(jù)*/第十二頁(yè),共七十三頁(yè),編輯于2023年,星期一③structpoint2{floatx;floaty;}p1,p2;/*平面上的兩個(gè)點(diǎn)*/structpoint3{floatx;floaty;floatz;}po1,po2;/*空間上的兩個(gè)點(diǎn)*/第十三頁(yè),共七十三頁(yè),編輯于2023年,星期一

(3)直接定義結(jié)構(gòu)體變量。形式為:

struct{成員表}變量表;直接定義結(jié)構(gòu)體變量,在關(guān)鍵字struct后無(wú)標(biāo)識(shí)符,不出現(xiàn)結(jié)構(gòu)體名,僅給出成員表及變量表。例如,對(duì)以上定義的結(jié)構(gòu)體變量,我們可以直接定義如下:第十四頁(yè),共七十三頁(yè),編輯于2023年,星期一①struct{intno;

charname[8];

charsex;

intage;

floatcscore;}zhang;/*張同學(xué)情況*/第十五頁(yè),共七十三頁(yè),編輯于2023年,星期一②struct{charname[8];charsex;intage;floatheight;floatweight;charadd[40];}p[100];/*100個(gè)人的數(shù)據(jù)*/第十六頁(yè),共七十三頁(yè),編輯于2023年,星期一③struct{floatx;floaty;}p1,p2;/*平面上的兩個(gè)點(diǎn)*/struct{floatx;floaty;floatz;}po1,po2;/*空間上的兩個(gè)點(diǎn)*/第十七頁(yè),共七十三頁(yè),編輯于2023年,星期一如果重命名了結(jié)構(gòu)體類型,則可以用新類型名來(lái)定義結(jié)構(gòu)體變量。例如:typedefstruct{charname[8];charsex;intage;floatheight;floatweight;charadd[40];}persont;/*將結(jié)構(gòu)體類型命名為persont*/persontp[100];/*100個(gè)人的數(shù)據(jù)*/第十八頁(yè),共七十三頁(yè),編輯于2023年,星期一9.1.3結(jié)構(gòu)體變量的引用結(jié)構(gòu)體的分量稱為字段變量。字段變量通過(guò)結(jié)構(gòu)體變量名、成員名(字段名)與點(diǎn)運(yùn)算來(lái)描述。字段變量的形式為:結(jié)構(gòu)體變量名.成員名例如:

(1)structstudent類型變量zhang,其所有分量如下:

zhang.no,,zhang.sex,zhang.age,zhang.cscore(2)structpoint2類型變量p1,其所有分量如下:

p1.x,p1.y(3)structpoint2類型變量p2,其所有分量如下:

p2.x,p2.y第十九頁(yè),共七十三頁(yè),編輯于2023年,星期一9.1.4結(jié)構(gòu)體變量的初始化初始化格式:存儲(chǔ)類別struct結(jié)構(gòu)體名{成員表}結(jié)構(gòu)體變量={初始化數(shù)據(jù)表};初始化數(shù)據(jù)表是相應(yīng)成員的初值表。第二十頁(yè),共七十三頁(yè),編輯于2023年,星期一例如:(1)externstructstudent{intno;

charname[8];

intage;

floatcscore;}zhang={9901,″zhangsan″,′m′,19,95};

zhang.no初值9901,初值″zhangsan″,zhang.sex初值′m′,zhang.age初值19,zhang.cscore初值95。第二十一頁(yè),共七十三頁(yè),編輯于2023年,星期一(2)staticstructpoint2{floatx;floaty;}p1={2.5,19.8};p1.x初值2.5,p1.y初值19.8。第二十二頁(yè),共七十三頁(yè),編輯于2023年,星期一例9–1

求某同學(xué)上學(xué)期8門課程的總成績(jī)與平均成績(jī)。/*程序9-1,求某同學(xué)的總成績(jī)與平均成績(jī)*/main(){structst{charxm[8];

floatcj[9];

floattcj,acj;}stu;第二十三頁(yè),共七十三頁(yè),編輯于2023年,星期一inti;scanf(″%s″,stu.xm);/*輸入*/for(i=1;i<=8;i++)scan(″%f″,&stu.cj[i]);stu.tcj=0.0;/*求總成績(jī)*/for(i=1;i<=8;i++)stu.tcj+=stu.cj[i];stu.acj=stu.tcj[i]/8;/*求平均成績(jī)*/printf(″%s的總成績(jī)=%6.2f,平均成績(jī)=%6.2f″,stu.tcj,stu.acj);/*輸出*/}輸入數(shù)據(jù):CHEN8086799888729666運(yùn)行結(jié)果:CHEN的總成績(jī)=577.00,平均成績(jī)=72.13第二十四頁(yè),共七十三頁(yè),編輯于2023年,星期一例9–2

求平面上兩點(diǎn)之間的距離。/*程序9-2,求平面上兩點(diǎn)之間的距離*/main(){structpoint{floatx;

floaty;

}p1,p2;

floatd;printf(″請(qǐng)輸入第一點(diǎn)的坐標(biāo):″);scanf(″%f,%f″,&p1.x,&p1.y);printf(″請(qǐng)輸入第二點(diǎn)的坐標(biāo):″);scanf(″%f,%f″,&p2.x,&p2.y);d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));printf(″兩點(diǎn)之間的距離=%8.3f″,d);}第二十五頁(yè),共七十三頁(yè),編輯于2023年,星期一運(yùn)行結(jié)果:請(qǐng)輸入第一點(diǎn)的坐標(biāo):1,1請(qǐng)輸入第二點(diǎn)的坐標(biāo):3,3兩點(diǎn)之間的距離=2.828第二十六頁(yè),共七十三頁(yè),編輯于2023年,星期一例9–3

復(fù)數(shù)的加減運(yùn)算。/*程序9-3,復(fù)數(shù)的加減運(yùn)算*/main(){structcomplex{floatre;

floatie;

}x,y;/*輸入變量*/structcomplexs1,s2;/*輸出變量*/printf(″請(qǐng)輸入第一個(gè)復(fù)數(shù)的實(shí)部,虛部:″);scanf(″%f,%f″,&x.re,&x.ie);printf(″請(qǐng)輸入第二個(gè)復(fù)數(shù)實(shí)部,虛部:″);scanf(″%f,%f″,&y.re,&y.ie);s1.re=x.re+y.re;/*求和*/s1.ie=x.ie+y.ie;s2.re=x.re-y.re;/*求差*/s2.ie=x.ie-y.ie;printf(″所求復(fù)數(shù)的和=%8.3f+%8.3fi\n″,s1.re,s1.ie);printf(″所求復(fù)數(shù)的差=%8.3f+%8.3fi\n″,s2.re,s2.ie);}第二十七頁(yè),共七十三頁(yè),編輯于2023年,星期一運(yùn)行結(jié)果:請(qǐng)輸入第一個(gè)復(fù)數(shù)的實(shí)部,虛部:3.2,4.3請(qǐng)輸入第二個(gè)復(fù)數(shù)實(shí)部,虛部:2.1,3.1所求復(fù)數(shù)的和=5.3+7.5i所求復(fù)數(shù)的差=1.1+1.2i第二十八頁(yè),共七十三頁(yè),編輯于2023年,星期一9.1.5結(jié)構(gòu)體作函數(shù)參數(shù)例9–4

將例9-2中求平面上兩點(diǎn)之間的距離改用函數(shù)實(shí)現(xiàn)。structpoint{floatx;

floaty;

};floatp1p2(p1,p2)/*求平面上兩點(diǎn)之間距離的函數(shù)*/structpointp1,p2;{floatd;d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));return(d);}第二十九頁(yè),共七十三頁(yè),編輯于2023年,星期一例9–5

將例9-3中復(fù)數(shù)的加減運(yùn)算改用函數(shù)實(shí)現(xiàn)。/*程序9-5,采用函數(shù)實(shí)現(xiàn)復(fù)數(shù)的加減運(yùn)算*/structcomplex{floatre;

floatie;};main(){structcomplexx,y;structcomplexs1,s2;structcomplexcsum();/*調(diào)用函數(shù)申明*/structcomplexcsub();printf(″請(qǐng)輸入第一個(gè)復(fù)數(shù)的實(shí)部,虛部:″);scanf(″%f,%f″,&x.re,&x.ie);printf(″請(qǐng)輸入第二個(gè)復(fù)數(shù)實(shí)部,虛部:″);scanf(″%f,%f″,&y.re,&y.ie);s1=csum(x,y);/*調(diào)用函數(shù)求和*/s2=csub(x,y);/*調(diào)用函數(shù)求差*/第三十頁(yè),共七十三頁(yè),編輯于2023年,星期一printf(″所求復(fù)數(shù)的和=%8.3f+%8.3fi\n″,s1.re,s1.ie);printf(″所求復(fù)數(shù)的差=%8.3f+%8.3fi\n″,s2.re,s2.ie);}structcomplexcsum(xx,xy)/*求兩個(gè)復(fù)數(shù)和的函數(shù)*/structcomplexxx,xy;{structcomplext;t.re=xx.re+xy.re;t.ie=xx.ie+xy.ie;return(t);}structcomplexcsub(xx,xy)/*求兩個(gè)復(fù)數(shù)差的函數(shù)*/structcomplexxx,xy;{structcomplext;t.re=xx.re-xy.re;t.ie=xx.ie-+xy.ie;return(t);}第三十一頁(yè),共七十三頁(yè),編輯于2023年,星期一9.1.6嵌套結(jié)構(gòu)體例如,在描述個(gè)人數(shù)據(jù)時(shí),假如除了年齡,還需描述出生日期。我們需在前面的定義中增加一日期結(jié)構(gòu)體成員,形成嵌套結(jié)構(gòu)體類型person。structdate{intyear;month;day;};structperson{charname[8];charsex;intage;structdatebirthday;/*增加的結(jié)構(gòu)體成員*/floatheight;floatweight;charadd[40];};第三十二頁(yè),共七十三頁(yè),編輯于2023年,星期一我們也可采用如下的嵌套結(jié)構(gòu)體形式:structperson{charname[8];charsex;intage;structdate{intyear;month;day;}birthday;/*增加的結(jié)構(gòu)體成員*/floatheight;floatweight;charadd[40];};第三十三頁(yè),共七十三頁(yè),編輯于2023年,星期一9.2結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義與結(jié)構(gòu)體變量的定義一樣有以下三種形式:(1)Struct標(biāo)識(shí)符{成員表};

struct標(biāo)識(shí)符數(shù)組名[常量];(2)struct標(biāo)識(shí)符{成員表}數(shù)組名[常量];(3)struct{成員表}數(shù)組名[常量];第三十四頁(yè),共七十三頁(yè),編輯于2023年,星期一例如,100個(gè)同學(xué)的情況,我們可以定義結(jié)構(gòu)體數(shù)組allst描述:

structstudent{intno;

charname[8];

charsex;

intage;

floatscore[31];

floattcj,acj;}allst[100];

第三十五頁(yè),共七十三頁(yè),編輯于2023年,星期一對(duì)結(jié)構(gòu)體數(shù)組allst的操作要轉(zhuǎn)化成對(duì)allst[i]進(jìn)行操作,而allst[i]的操作要轉(zhuǎn)化成對(duì)allst[i].no、allst[i].name、allst[i].sex、allst[i].age、allst[i].score、allst[i].tcj、allst[i].acj進(jìn)行操作。allst[i].no、allst[i].name、allst[i].sex、allst[i].age、allst[i].score、allst[i].tcj、allst[i].acj相當(dāng)于對(duì)應(yīng)基類型的量。第三十六頁(yè),共七十三頁(yè),編輯于2023年,星期一

例9–6

用結(jié)構(gòu)體數(shù)組處理全班50個(gè)同學(xué)的C語(yǔ)言課程成績(jī)。/*程序9-6,用結(jié)構(gòu)體數(shù)組處理C語(yǔ)言成績(jī),排序輸出*/#defineSTTstructstudentSTT{charxm[8];floatc;};main(){STTcs[51];/*存放50個(gè)同學(xué)的姓名、C成績(jī)*/inti;intflag;STTt;/*排序時(shí)用于交換數(shù)據(jù)*/for(i=1;i<50;i++)/*輸入50個(gè)同學(xué)的姓名、C成績(jī)*/第三十七頁(yè),共七十三頁(yè),編輯于2023年,星期一

scanf(″%s%f″,&cs[i].xm,&cs[i].c);do/*冒泡排序*/{flag=1;for(i=1;i<49;i++)

if(cs[i+1].c>cs[i].c)

{t=cs[i];cs[i]=cs[i+1];cs[i+1]=t;

flag=0;

}}while(!flag);printf(″排序后的C語(yǔ)言成績(jī)?nèi)缦拢篭n″);/*輸出*/printf(″姓名分?jǐn)?shù)名次\n″);for(i=1;i<50;i++)

printf(″%8s%6.1f%6d\n″,cs[i].xm,cs[i].c,i);

}第三十八頁(yè),共七十三頁(yè),編輯于2023年,星期一

例9-7

假設(shè)有5個(gè)候選人,有20人參加投票,規(guī)定只能在5個(gè)候選人中選一個(gè),多選或選這5人以外者均為廢票。試用結(jié)構(gòu)體數(shù)組編寫程序,統(tǒng)計(jì)出5位候選人各人所得票數(shù)。/*程序9-7,統(tǒng)計(jì)候選人得票數(shù)*/structttt{charname[12];

intcount;};

main(){structtttdp[5]={{″Zhang″,0},{″Li″,0},{″Wang″,0},{″Liu″,0},{″Zhao″,0}};chartp[10];inti,j;for(i=1;i<=20;i++)第三十九頁(yè),共七十三頁(yè),編輯于2023年,星期一

{scanf(″%s″,tp);

for(j=0;j<5;j++)

if(strcmp(tp,dp[i].name)==0)dp[j].count++;

}for(i=0;i<5;i++)

printf(″%s的得票數(shù)=%d\n″,dp[i].name,dp[i].count);}

輸入數(shù)據(jù):ZhangLiWangLiuZhaoZhaoLiLiZhangLiZhangLiLiuLiZhangLiuLiLiZhang運(yùn)行結(jié)果:Zhang的得票數(shù)=5Li的得票數(shù)=8Wang的得票數(shù)=1Liu的得票數(shù)=3Zhao的得票數(shù)=2第四十頁(yè),共七十三頁(yè),編輯于2023年,星期一9.3共用體類型9.3.1共用體類型的定義共用體類型定義用關(guān)鍵字union標(biāo)識(shí),形式為:union標(biāo)識(shí)符{成員表};第四十一頁(yè),共七十三頁(yè),編輯于2023年,星期一標(biāo)識(shí)符給出共用體名,是共用體類型名的主體,定義的共用體類型由“union標(biāo)識(shí)符”標(biāo)識(shí)。例如,定義一個(gè)共用體類型,要求包含一個(gè)整型成員,一個(gè)字符型成員和一個(gè)單精度型成員:unionicf{inti;charc;floatf;};

第四十二頁(yè),共七十三頁(yè),編輯于2023年,星期一9.3.2共用體變量的定義(1)先定義共用體類型,再定義共用體變量:①union共用體名

{成員表};②union共用體名變量表;(2)定義共用體類型的同時(shí)定義共用體變量:union共用體名{成員表}變量表;(3)直接定義共用體變量:union{成員表}變量表;第四十三頁(yè),共七十三頁(yè),編輯于2023年,星期一9.3.3共用體變量的引用共用體變量不能直接使用,只能使用里面的某個(gè)成員,其成員同樣通過(guò)點(diǎn)運(yùn)算描述。形式為:共用體變量名.成員名例如,定義上面共用體類型變量x,x占有4個(gè)字節(jié)的空間,x.i表示其整型成員,x.c表示其字符型成員,x.f表示其單精度型成員。第四十四頁(yè),共七十三頁(yè),編輯于2023年,星期一說(shuō)明:

(1)共用體變量中,可以包含若干個(gè)成員及若干種類型,但共用體成員不能同時(shí)使用。在每一時(shí)刻,只有一個(gè)成員及一種類型起作用,不能同時(shí)引用多個(gè)成員及多種類型。

(2)共用體變量中起作用的成員值是最后一次存放的成員值,即共用體變量所有成員共用同一段內(nèi)存單元,后來(lái)存放的值將原先存放的值覆蓋,故只能使用最后一次給定的成員值。

(3)共用體變量的地址和它的各個(gè)成員的地址相同。第四十五頁(yè),共七十三頁(yè),編輯于2023年,星期一

(4)不能對(duì)共用體變量初始化和賦值,也不能企圖引用共用體變量名來(lái)得到某成員的值。

(5)共用體變量不能作函數(shù)參數(shù),函數(shù)的返回值也不能是共用體類型。

(6)共用體類型和結(jié)構(gòu)體類型可以相互嵌套,共用體中成員可以為數(shù)組,甚至還可以定義共用體數(shù)組。第四十六頁(yè),共七十三頁(yè),編輯于2023年,星期一

例9-8

設(shè)有若干教師的數(shù)據(jù),包含有教師編號(hào)、姓名、職稱,若職稱為講師,則描述他們的所講課程,若職稱為教授,則描述他們所寫論文數(shù)目。/*程序9-8,輸入輸出教師信息*/unioncf{charclname[30];/*所講課程*/intnum;/*論文數(shù)目*/};structteachers{intno;/*編號(hào)*/charname[12];/*姓名*/charzc;/*職稱*/unioncfx;/*可變字段,為所講課程或論文數(shù)目*/}teach[3];第四十七頁(yè),共七十三頁(yè),編輯于2023年,星期一main(){inti;for(i=0;i<3;i++)

{scanf(″%d,%s,%c″,&teach[i].no,teach[i].name,&teach[i].zc);

if(teach[i].zc==′L′)/*L表示講師*/scanf(″%s″,&teach[i].x.clname);

elseif(teach[i].zc==′P′)/*P表示教授*/scanf(″%d″,&teach[i].x.num);

elseprintf(″inputdataerror\n″);

}for(i=0;i<3;i++)

{printf(″%d%s%c″,teach[i].No,teach[i].name,teach[i].zc);第四十八頁(yè),共七十三頁(yè),編輯于2023年,星期一

if(teach[i].zc==′L′)printf(″%s\n″,teach[i].x..clname);

elseif(teach[i].name==′P′)printf("%d\n",teach[i].x.num);elseprintf(″dataerror\n″);

}}第四十九頁(yè),共七十三頁(yè),編輯于2023年,星期一9.4枚舉類型9.4.1枚舉類型的定義枚舉類型定義用關(guān)鍵字enum標(biāo)識(shí),形式為:

enum標(biāo)識(shí)符

{枚舉數(shù)據(jù)表};標(biāo)識(shí)符用來(lái)區(qū)分不同的枚舉類型,定義的枚舉類型用enum標(biāo)識(shí)符”標(biāo)識(shí)。枚舉數(shù)據(jù)(枚舉常量)是一些特定的標(biāo)識(shí)符,標(biāo)識(shí)符代表什么含義,完全由程序員決定。數(shù)據(jù)枚舉的順序規(guī)定了枚舉數(shù)據(jù)的序號(hào),從0開(kāi)始,依次遞增。第五十頁(yè),共七十三頁(yè),編輯于2023年,星期一例如:(1)定義枚舉類型status,包含復(fù)制與刪除兩種狀態(tài):enumstatus{copy,delete};枚舉類型status僅有兩個(gè)數(shù)據(jù),一個(gè)是copy,一個(gè)是delete,序號(hào)為0、1,代表復(fù)制與刪除。第五十一頁(yè),共七十三頁(yè),編輯于2023年,星期一

(2)定義枚舉類型color,包含紅、黃、藍(lán)、白、黑五種顏色:

enumcolor{red,yellow,blue,white,black};枚舉類型color有red、yellow、blue、white、black五個(gè)數(shù)據(jù),序號(hào)為0、1、2、3、4,代表紅、黃、藍(lán)、白、黑五種顏色。第五十二頁(yè),共七十三頁(yè),編輯于2023年,星期一

(3)定義枚舉類型weekday,包含一周的七天:

enumweekday{sun,mon,tue,wed,thu,fri,sat};枚舉類型weekday有sun、mon、tue、wed、thu、fri、sat七個(gè)數(shù)據(jù),序號(hào)為0、1、2、3、4、5、6,代表一周中的星期天、星期一、星期二、星期三、星期四、星期五、星期六。在定義枚舉類型時(shí),程序員可在枚舉數(shù)據(jù)時(shí)通過(guò)“=”號(hào)自己規(guī)定序號(hào),并影響后面的枚舉數(shù)據(jù)的序號(hào),后繼序號(hào)以此遞增。例如:

enumstatus{copy=6,delete};則copy的序號(hào)為6,delete的序號(hào)為7。第五十三頁(yè),共七十三頁(yè),編輯于2023年,星期一9.4.2枚舉類型變量的定義(1)先定義枚舉類型,再定義枚舉類型變量:enum標(biāo)識(shí)符{枚舉數(shù)據(jù)表};enum標(biāo)識(shí)符變量表;(2)在定義枚舉類型的同時(shí)定義枚舉類型變量:enum標(biāo)識(shí)符{枚舉數(shù)據(jù)表}變量表;(3)直接定義枚舉類型變量:enum{枚舉數(shù)據(jù)表}變量表;第五十四頁(yè),共七十三頁(yè),編輯于2023年,星期一例如,對(duì)枚舉類型enumcolor,定義枚舉變量c1、c2:enumcolor{red,yellow,blue,white,black};

enumcolorc1,c2;或enumcolor{red,yellow,blue,white,black}c1,c2;或enum{red,yellow,blue,white,black}c1,c2;枚舉類型數(shù)據(jù)可以進(jìn)行賦值運(yùn)算。枚舉類型是有序類型,枚舉類型數(shù)據(jù)還可以進(jìn)行關(guān)系運(yùn)算。枚舉類型數(shù)據(jù)的比較轉(zhuǎn)化成對(duì)序號(hào)進(jìn)行比較,只有同一種枚舉類型的數(shù)據(jù)才能進(jìn)行比較。第五十五頁(yè),共七十三頁(yè),編輯于2023年,星期一將枚舉型數(shù)據(jù)按整型格式輸出,可得到整數(shù)值(枚舉變量值的序號(hào))。使用強(qiáng)制類型轉(zhuǎn)換,可將整數(shù)值(枚舉值序號(hào))轉(zhuǎn)換成對(duì)應(yīng)枚舉值。例如:

c1=(enumcolor)2;/*c1得到枚舉值blue*/

枚舉類型數(shù)據(jù)不能直接輸入輸出。枚舉類型數(shù)據(jù)輸入時(shí),先輸入其序號(hào),再進(jìn)行強(qiáng)制類型轉(zhuǎn)換完成。輸出時(shí),采用開(kāi)關(guān)語(yǔ)句先進(jìn)行判斷,再轉(zhuǎn)化成對(duì)應(yīng)字符串輸出。第五十六頁(yè),共七十三頁(yè),編輯于2023年,星期一

例9–9

某口袋中有紅、黃、藍(lán)、白、黑五種顏色的球若干個(gè),每次從口袋中取出三個(gè)球,問(wèn)得到三種不同顏色的球有多少種取法,并輸出每種組合結(jié)果。for(n=0,i=1;i<=5;i++)/*取第一個(gè)球*/for(j=1;j<=5;j++)/*取第二個(gè)球*/if(i!=j)/*第一個(gè)與第二個(gè)不同色*/{for(k=1;k<=5;k++)/*取第三個(gè)球*/if((k!=i)&&(k!=j))

{n++;/*統(tǒng)計(jì)有多少種取法*/printf(″%d,%d,%d\n″,i,j,k);/*輸出一種取法*/}}不用枚舉類型:第五十七頁(yè),共七十三頁(yè),編輯于2023年,星期一采用枚舉類型來(lái)描述數(shù)據(jù)。設(shè)用red表示紅色球,yellow表示黃色球,blue表示藍(lán)色球,white表示白色球,black表示黑色球。/*程序9-9,三種不同顏色球的取法*/main(){enumcolor{red,yellow,blue,white,black};

enumcolori,j,k,l;

intn,m;

for(n=0,i=red;i<=black;i++)

for(j=red;j<=black;;j++)

if(i!=j)

{for(k=red;k<=black;k++)第五十八頁(yè),共七十三頁(yè),編輯于2023年,星期一

if((k!=i)&&(k![KG-*4]=j))

{n++;

printf(″%4d″,n);

for(m=1;m<=3;m++)

{switch(m)

{case1:1=i;berak;

case2:1=j;berak;

case3:1=k;berak;

}switch(l)/*間接輸出*/{casered:printf(″%8s″,″red″),break;第五十九頁(yè),共七十三頁(yè),編輯于2023年,星期一

caseyellow:printf(″%8s″,″yellow″);break;

caseblue:printf(″%8s″),″blue″);break;

casewhite:printf(″%8s″,″white″);break;;

caseblack:printf(″%8s″,″black″);break;

}}printf(″\n″);

}}printf(″總的取法有%d種\n″,n);}第六十頁(yè),共七十三頁(yè),編輯于2023年,星期一9.5程序設(shè)計(jì)舉例

例9-10

編寫程序,登錄幼兒園200個(gè)小朋友的數(shù)據(jù):編號(hào)、姓名、性別、年齡、身高、體重、出生日期、入園日期,分別按身高、年齡排序輸出。/*程序9-10,幼兒園小朋友數(shù)據(jù)登錄、排序*/#defineM200structdst{intyear;intmonth;intday;};第六十一頁(yè),共七十三頁(yè),編輯于2023年,星期一structcst{intno;charname[12];charsex;floatage;floatheight;floatweight;dstbdate;dstedate;};structcstall[M];main(){voidinput();/*調(diào)用函數(shù)申明*/voidsort1();voidsort2();voidoutput();第六十二頁(yè),共七十三頁(yè),編輯于2023年,星期一input();/*調(diào)用登錄函數(shù)*/sort1();/*調(diào)用身高排序函數(shù)*/printf(″幼兒園小朋友一覽(依身高排序):\n″);output();/*調(diào)用輸出函數(shù)*/printf(″\n″);sort2();/*調(diào)用年齡排序函數(shù)*/printf(″幼兒園小朋友一覽(依年齡排序):\n″);output();/*再次調(diào)用輸出函數(shù)*/printf(″\n″);}voidinput()/*登錄函數(shù)*/{inti;for(i=0;i<M;i++)

{printf(″依次輸入第%d個(gè)小朋友的數(shù)據(jù):\n″,i);

scanf(″%d%s%c%f%f%f%d%d%d%d%d%d″,&all[i].no,all第六十三頁(yè),共七十三頁(yè),編輯于2023年,星期一[i].name,&all[i].sex,&all[i].age,&all[i].height,&all[i].weight,&all[i].bdate.year,&all[i].bdate.month,&all[i].bdate.day,&all[i].edate.year,&all[i].edate.month,&all[i].edate.day);

}}voidsort1()/*依身高排序函數(shù)*/{inti,j;intk;structcstt;for(i=0;i<M-1;i++)

{k=i;

for(j=i;j<M;j++)

if(all[j].height>all[k].height)k=j;

t=all[i];all[i]=all[k];all[k]=t;

}}第六十四頁(yè),共七十三頁(yè),編輯于2023年,星期一voidsort1()/*依年齡排序函數(shù)*/{inti,j;intk;structcstt;for(i=0;i<M-1;i++)

{k=i;

for(j=i;j<M;j++)

if(all[j].age>all[k].age)k=j;

t=all[i];all[i]=all[k];all[k]=t;

}}voidoutput()/*輸出函數(shù)*/{inti;第六十五頁(yè),共七十三頁(yè),編輯于2023年,星期一printf(″編號(hào)姓名性別年齡身高體重出生日期入園日期\n″)for(i=0;i<M;i++)

{printf(″%4d%10s%8d%8.1f%8.2f%8.2f%4d,%2d%,2d%4d,%2d,%2d″,all[i].no,all[i].name,all[i].age,all[i].sex,all[i].height,all[i].weight,all[i].bdate.year,all[i].bdate.month,all[i].bdate.day,all[i].edate.year,all[i].edate.month,all[i].edate.day);

printf(″\n″);

}}第六十六頁(yè),共七十三頁(yè),編輯于2023年,星期一例9-11

編寫程序,實(shí)現(xiàn)復(fù)數(shù)的乘法運(yùn)算。/*程序9-5,采用函數(shù)實(shí)現(xiàn)復(fù)數(shù)的乘法運(yùn)算*/structcomplex{floatre;

floatie;};main(){structcomplexx,y;structcomplexm;structcomplexcompm();/*調(diào)用函數(shù)申明*/printf(″請(qǐng)輸入第一個(gè)復(fù)數(shù)的實(shí)部,虛部:″);scanf(″%f,%f″,&x.re,&x.ie);printf(″請(qǐng)輸入第二個(gè)復(fù)數(shù)實(shí)部,虛部:″);scanf(″%f,%f″,&y.re,&y.ie);m=compm(x,y);/*調(diào)用函數(shù)求積*/printf(″所求復(fù)數(shù)的積=%8.3f+%8.3fi\n″,s1.re,s1.ie);}第六十七頁(yè),共七十三頁(yè),編輯于2023年,星期一structc

溫馨提示

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