結構體類型與共用體類型_第1頁
結構體類型與共用體類型_第2頁
結構體類型與共用體類型_第3頁
結構體類型與共用體類型_第4頁
結構體類型與共用體類型_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

(1)先定義結構體類型,再定義結構體變量。形式為:①struct標識符

{成員表};②struct標識符變量表;例如,對以上定義的結構體類型,我們可以定義如下一些結構體變量:

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

(2)定義結構體類型的同時定義結構體變量。形式為:

struct標識符

{成員表}變量表;例如,對以上定義的結構體變量,我們可以在定義結構體類型的同時定義如下:

①structstudent{intno;

charname[8];

charsex;

intage;

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

(3)直接定義結構體變量。形式為:

struct{成員表}變量表;直接定義結構體變量,在關鍵字struct后無標識符,不出現(xiàn)結構體名,僅給出成員表及變量表。例如,對以上定義的結構體變量,我們可以直接定義如下:第十四頁,共七十三頁,編輯于2023年,星期一①struct{intno;

charname[8];

charsex;

intage;

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

(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第十九頁,共七十三頁,編輯于2023年,星期一9.1.4結構體變量的初始化初始化格式:存儲類別struct結構體名{成員表}結構體變量={初始化數(shù)據(jù)表};初始化數(shù)據(jù)表是相應成員的初值表。第二十頁,共七十三頁,編輯于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。第二十一頁,共七十三頁,編輯于2023年,星期一(2)staticstructpoint2{floatx;floaty;}p1={2.5,19.8};p1.x初值2.5,p1.y初值19.8。第二十二頁,共七十三頁,編輯于2023年,星期一例9–1

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

floatcj[9];

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

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

floaty;

}p1,p2;

floatd;printf(″請輸入第一點的坐標:″);scanf(″%f,%f″,&p1.x,&p1.y);printf(″請輸入第二點的坐標:″);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(″兩點之間的距離=%8.3f″,d);}第二十五頁,共七十三頁,編輯于2023年,星期一運行結果:請輸入第一點的坐標:1,1請輸入第二點的坐標:3,3兩點之間的距離=2.828第二十六頁,共七十三頁,編輯于2023年,星期一例9–3

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

floatie;

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

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

floaty;

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

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

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

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

structstudent{intno;

charname[8];

charsex;

intage;

floatscore[31];

floattcj,acj;}allst[100];

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

例9–6

用結構體數(shù)組處理全班50個同學的C語言課程成績。/*程序9-6,用結構體數(shù)組處理C語言成績,排序輸出*/#defineSTTstructstudentSTT{charxm[8];floatc;};main(){STTcs[51];/*存放50個同學的姓名、C成績*/inti;intflag;STTt;/*排序時用于交換數(shù)據(jù)*/for(i=1;i<50;i++)/*輸入50個同學的姓名、C成績*/第三十七頁,共七十三頁,編輯于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語言成績?nèi)缦拢篭n″);/*輸出*/printf(″姓名分數(shù)名次\n″);for(i=1;i<50;i++)

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

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

例9-7

假設有5個候選人,有20人參加投票,規(guī)定只能在5個候選人中選一個,多選或選這5人以外者均為廢票。試用結構體數(shù)組編寫程序,統(tǒng)計出5位候選人各人所得票數(shù)。/*程序9-7,統(tǒng)計候選人得票數(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++)第三十九頁,共七十三頁,編輯于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運行結果:Zhang的得票數(shù)=5Li的得票數(shù)=8Wang的得票數(shù)=1Liu的得票數(shù)=3Zhao的得票數(shù)=2第四十頁,共七十三頁,編輯于2023年,星期一9.3共用體類型9.3.1共用體類型的定義共用體類型定義用關鍵字union標識,形式為:union標識符{成員表};第四十一頁,共七十三頁,編輯于2023年,星期一標識符給出共用體名,是共用體類型名的主體,定義的共用體類型由“union標識符”標識。例如,定義一個共用體類型,要求包含一個整型成員,一個字符型成員和一個單精度型成員:unionicf{inti;charc;floatf;};

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

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

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

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

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

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

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

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

例9-8

設有若干教師的數(shù)據(jù),包含有教師編號、姓名、職稱,若職稱為講師,則描述他們的所講課程,若職稱為教授,則描述他們所寫論文數(shù)目。/*程序9-8,輸入輸出教師信息*/unioncf{charclname[30];/*所講課程*/intnum;/*論文數(shù)目*/};structteachers{intno;/*編號*/charname[12];/*姓名*/charzc;/*職稱*/unioncfx;/*可變字段,為所講課程或論文數(shù)目*/}teach[3];第四十七頁,共七十三頁,編輯于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);第四十八頁,共七十三頁,編輯于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″);

}}第四十九頁,共七十三頁,編輯于2023年,星期一9.4枚舉類型9.4.1枚舉類型的定義枚舉類型定義用關鍵字enum標識,形式為:

enum標識符

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

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

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

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

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

enumstatus{copy=6,delete};則copy的序號為6,delete的序號為7。第五十三頁,共七十三頁,編輯于2023年,星期一9.4.2枚舉類型變量的定義(1)先定義枚舉類型,再定義枚舉類型變量:enum標識符{枚舉數(shù)據(jù)表};enum標識符變量表;(2)在定義枚舉類型的同時定義枚舉類型變量:enum標識符{枚舉數(shù)據(jù)表}變量表;(3)直接定義枚舉類型變量:enum{枚舉數(shù)據(jù)表}變量表;第五十四頁,共七十三頁,編輯于2023年,星期一例如,對枚舉類型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ù)可以進行賦值運算。枚舉類型是有序類型,枚舉類型數(shù)據(jù)還可以進行關系運算。枚舉類型數(shù)據(jù)的比較轉(zhuǎn)化成對序號進行比較,只有同一種枚舉類型的數(shù)據(jù)才能進行比較。第五十五頁,共七十三頁,編輯于2023年,星期一將枚舉型數(shù)據(jù)按整型格式輸出,可得到整數(shù)值(枚舉變量值的序號)。使用強制類型轉(zhuǎn)換,可將整數(shù)值(枚舉值序號)轉(zhuǎn)換成對應枚舉值。例如:

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

枚舉類型數(shù)據(jù)不能直接輸入輸出。枚舉類型數(shù)據(jù)輸入時,先輸入其序號,再進行強制類型轉(zhuǎn)換完成。輸出時,采用開關語句先進行判斷,再轉(zhuǎn)化成對應字符串輸出。第五十六頁,共七十三頁,編輯于2023年,星期一

例9–9

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

{n++;/*統(tǒng)計有多少種取法*/printf(″%d,%d,%d\n″,i,j,k);/*輸出一種取法*/}}不用枚舉類型:第五十七頁,共七十三頁,編輯于2023年,星期一采用枚舉類型來描述數(shù)據(jù)。設用red表示紅色球,yellow表示黃色球,blue表示藍色球,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++)第五十八頁,共七十三頁,編輯于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;第五十九頁,共七十三頁,編輯于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);}第六十頁,共七十三頁,編輯于2023年,星期一9.5程序設計舉例

例9-10

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

scanf(″%d%s%c%f%f%f%d%d%d%d%d%d″,&all[i].no,all第六十三頁,共七十三頁,編輯于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;

}}第六十四頁,共七十三頁,編輯于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;第六十五頁,共七十三頁,編輯于2023年,星期一printf(″編號姓名性別年齡身高體重出生日期入園日期\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″);

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論