第8章C語言的結(jié)構(gòu)體與共同體課件_第1頁
第8章C語言的結(jié)構(gòu)體與共同體課件_第2頁
第8章C語言的結(jié)構(gòu)體與共同體課件_第3頁
第8章C語言的結(jié)構(gòu)體與共同體課件_第4頁
第8章C語言的結(jié)構(gòu)體與共同體課件_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第八章結(jié)構(gòu)體、共用體和枚舉類型8.1

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

共用體8.3

枚舉類型8.4

用typedef定義類型/1第八章結(jié)構(gòu)體、共用體和枚舉類型8.1結(jié)構(gòu)體8.2共用結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體-------自定義數(shù)據(jù)類型struct[結(jié)構(gòu)體名]{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識符可省:無名結(jié)構(gòu)體8.1.1結(jié)構(gòu)體類型聲明8.1結(jié)構(gòu)體結(jié)構(gòu)體類型定義/2結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型struct[結(jié)構(gòu)體名例struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型定義的作用域8.1結(jié)構(gòu)體structstudent應(yīng)作為一個類型整體,num,name[20]等都只是其中的成員,且struct及“}”后的“;”不能省略。/3例structstudentnamenumse8.1結(jié)構(gòu)體例個人數(shù)據(jù):包含姓名、性別、年齡、身高、體重、住址:structperson{charname[20];/*姓名*/charsex;/*性別*/intage;/*年齡*/floatheight;/*身高*/floatweight;/*體重*/charaddr[50];/*住址*/};structdate{intyear;/*年*/month;/*月*/day;/*日*/};例日期,包括年、月、日:/48.1結(jié)構(gòu)體例個人數(shù)據(jù):包含姓名、性別、年齡、身高、體8.1結(jié)構(gòu)體如職工信息結(jié)構(gòu)體類型為:structperson{charname[20];/*姓名*/charaddress[40];/*地址*/floatsalary;/*工資*/floatcost;/*扣款*/structdatehiredate;

/*聘任日期*/};結(jié)構(gòu)體類型可以嵌套定義

即一個結(jié)構(gòu)體類型中的某些成員又是其他結(jié)構(gòu)體類型

/58.1結(jié)構(gòu)體如職工信息結(jié)構(gòu)體類型為:結(jié)構(gòu)體類型可以嵌套定8.1結(jié)構(gòu)體8.1.2結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….};struct結(jié)構(gòu)體名變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu1,stu2/68.1結(jié)構(gòu)體8.1.2結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:

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

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;/7定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量8.1結(jié)構(gòu)體struct8.1結(jié)構(gòu)體直接定義結(jié)構(gòu)體變量一般形式:

struct{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體直接定義變量只能一次/88.1結(jié)構(gòu)體直接定義結(jié)構(gòu)體變量struct例str8.1結(jié)構(gòu)體說明:結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算;變量:可以結(jié)構(gòu)體可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆結(jié)構(gòu)體類型及變量的作用域與生存期/98.1結(jié)構(gòu)體說明:/98.1結(jié)構(gòu)體8.1.3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員引用方式:結(jié)構(gòu)體變量名.成員名成員(分量)運(yùn)算符優(yōu)先級:1結(jié)合性:從左向右如果結(jié)構(gòu)體變量類型相同,可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用例;stu1=stu2;例:stu1.birthday.day=23;stu1.birthday.month=8;stu1.birthday.year=2003;/108.1結(jié)構(gòu)體8.1.3結(jié)構(gòu)體變量的引用引用規(guī)則成員(分量8.1結(jié)構(gòu)體8.1.4結(jié)構(gòu)體變量的使用1、結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};/118.1結(jié)構(gòu)體8.1.4結(jié)構(gòu)體變量的使用1、結(jié)構(gòu)體變量的8.1結(jié)構(gòu)體形式二:struct結(jié)構(gòu)體名{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};/128.1結(jié)構(gòu)體形式二:struct結(jié)構(gòu)體名例8.1結(jié)構(gòu)體形式三:struct{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};/138.1結(jié)構(gòu)體形式三:struct例struct/18.1結(jié)構(gòu)體2、結(jié)構(gòu)體變量的輸入輸出不允許對結(jié)構(gòu)體變量進(jìn)行整體的輸入輸出如:scanf(“%s%c%d%f”,&stu1);structstudent{intnum;intage;floatscore;}stu;voidmain(){printf("Enternum,age,score:");scanf("%d,%d,%f",&stu.num,&stu.age,&stu.score);printf("num:%d,age:%d,score:%.1f\n",stu.num,stu.age,stu.score);}程序運(yùn)行過程:Enternum,age,score:1001,19,98.5↙num:1001,age:19,score:98.5/148.1結(jié)構(gòu)體2、結(jié)構(gòu)體變量的輸入輸出structstud結(jié)構(gòu)體數(shù)組的定義形式一:

structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B8.1結(jié)構(gòu)體8.1.5結(jié)構(gòu)體數(shù)組/15結(jié)構(gòu)體數(shù)組的定義形式一:形式二:形式三:numnames例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);8.1結(jié)構(gòu)體結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的引用/16例struct引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成structperson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0};main(){inti,j;charleader_name[20];

for(i=1;i<=10;i++){scanf("%s",leader_name);

for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000例統(tǒng)計后選人選票8.1結(jié)構(gòu)體/17structpersonnamecountLiZhangW8.1結(jié)構(gòu)體8.1.6結(jié)構(gòu)體指針變量一個指針變量可以指向一個結(jié)構(gòu)體數(shù)組元素(將該結(jié)構(gòu)體數(shù)組的數(shù)組元素地址賦給此指針變量)。例struct{inta;floatb;}arr[3],*p;p=arr;此時p指向arr數(shù)組的第一個元素,“p=arr;”等價于“p=&arr[0];”。若執(zhí)行“p++;”則此時指針變量p此時指向arr[1]。定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;/188.1結(jié)構(gòu)體8.1.6結(jié)構(gòu)體指針變量一個指針變量可以指使用結(jié)構(gòu)體指針變量引用成員形式指向運(yùn)算符優(yōu)先級:1結(jié)合方向:從左向右例intn;int*p=&n;*p=10;

n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;

(*p).num=1018.1結(jié)構(gòu)體結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名(*結(jié)構(gòu)體指針名).成員名/19使用結(jié)構(gòu)體指針變量引用成員形式指向運(yùn)算符例int8.1結(jié)構(gòu)體例輸出數(shù)組中各元素中各成員的值。structstudent{intnum;charname[20];charsex;intage;};structstudentstu[3]={{10101,"Zhang",'M',18},{10102,"Li",'M',19},{10103,"Wang",'F',20}};main(){structstudent*p;printf("No.Namesexage\n");for(p=stu;p<stu+3;p++)printf("%5d%-20s%2c4d\n",p->num,p->name,p->sex,p->age);}/208.1結(jié)構(gòu)體例輸出數(shù)組中各元素中各成員的值。ma8.1結(jié)構(gòu)體10101"Zhang"'M'1810102"Li"'M'1910103"Wang"'F'20stu[0]stu[1]stu[2]PP’P”指針移動示意圖:注意:①如果p的初值為stu,即指向第一個元素,則p+1后指向下一個元素的起始地址。請區(qū)別:

(++p)->num和(p++)->num②指針p已定義為指向structstudent類型的數(shù)據(jù),它只能指向該結(jié)構(gòu)體類型數(shù)據(jù),而不能指向一元素的某一成員(即p的地址不能是成員的地址)。如下面的賦值是錯誤的:

p=&/218.1結(jié)構(gòu)體10101stu[0]stu[1]stu[2]8.1結(jié)構(gòu)體8.1.7結(jié)構(gòu)體與函數(shù)1、結(jié)構(gòu)體變量作函數(shù)參數(shù)有時需要將一個結(jié)構(gòu)體變量的值傳遞給另一個函數(shù)可以:

用結(jié)構(gòu)體變量的成員作參數(shù)。用法和普通變量作實參是一樣的,屬“值傳遞”方式。形參與實參都用結(jié)構(gòu)體變量直接將實參結(jié)構(gòu)體變量的各個成員的值全部傳遞給形參的結(jié)構(gòu)體變量。注意:實參和形參類型應(yīng)當(dāng)完全一致。/228.1結(jié)構(gòu)體8.1.7結(jié)構(gòu)體與函數(shù)1、結(jié)構(gòu)體變量作函數(shù)參structdata{inta,b,c;};main(){voidfunc(structdata);structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");

func(arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}voidfunc(structdataparm){printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Process...\n");parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Return...\n");}8.1結(jié)構(gòu)體arga:27b:3c:30(main)arga:27b:3c:30(main)(func)parma:27b:3c:30copyarga:27b:3c:30(main)(func)parma:18b:5c:90arga:27b:3c:30(main)/23structdata8.1結(jié)構(gòu)體arga:27b:38.1結(jié)構(gòu)體用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實參,將結(jié)構(gòu)體變量(或數(shù)組)的地址傳給形參。形參為指針變量,實參為結(jié)構(gòu)體變量的地址或指向結(jié)構(gòu)體變量的指針。2、結(jié)構(gòu)體指針作函數(shù)參數(shù)/248.1結(jié)構(gòu)體用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實參,將結(jié)8.1結(jié)構(gòu)體structdata{inta,b,c;};main(){voidfunc(structdata*parm);structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");

func(&arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}voidfunc(structdata*parm){printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Process...\n");parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Return...\n");}arga:27b:3c:30(main)arga:27b:3c:30(main)(func)parm****arga:18b:5c:90(main)(func)parm****arga:18b:5c:90(main)/258.1結(jié)構(gòu)體structdataarga:27b:38.1結(jié)構(gòu)體例有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和三門課的成績。要求在main函數(shù)中賦值,在另一函數(shù)print中將它們打印輸出。程序如下。#include"string.h"#defineformat"%d\n%s\n%f\n%f\n%f\n"structstudent{intnum;charname[20];floatscore[3];};main(){voidprint();structstudentstu;stu.num=12345;strcpy(,"LiPing");stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.5;print(&stu);}voidprint(structstudent*p){printf(format,p->num,p->name,p->score[0],p->score[1],p->score[2]);printf("\n");}/268.1結(jié)構(gòu)體例有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名8.1結(jié)構(gòu)體值得指出的是,把一個完整的結(jié)構(gòu)體變量作為參數(shù)傳遞,雖然合法,但要將全部成員值一個一個傳遞,既費(fèi)時間又費(fèi)空間,開銷大,因此一般不采用。上例的print函數(shù)形參改用結(jié)構(gòu)體變量后程序如下:注意:ANSIC允許用整個結(jié)構(gòu)體作為函數(shù)的參數(shù)傳遞,但是必須保證實參與形參的類型相同。#include"string.h"#defineformat"%d\n%s\n%f\n%f\n%f\n"structstudent{intnum;charname[20];floatscore[3];};main(){voidprint();structstudentstu;stu.num=12345;strcpy(,"LiPing");stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.5;print(stu);}voidprint(p)structstudentp;{printf(format,p.num,,p.score[0],p.score[1],p.score[2]);printf("\n");}/278.1結(jié)構(gòu)體值得指出的是,把一個完整的結(jié)構(gòu)體變量作為參數(shù)8.1結(jié)構(gòu)體

ANSIC還允許函數(shù)返回結(jié)構(gòu)體類型的值。設(shè)有一個structstudent類型,結(jié)構(gòu)體變量定義如下:structstudentstud[30];若函數(shù)input()的功能是輸入一個學(xué)生結(jié)構(gòu)體數(shù)據(jù),并將其返回給第i個學(xué)生記錄stud[i],即:for(k=0;k<30;k++)stud[k]=input();3、返回結(jié)構(gòu)體類型值的函數(shù)input()函數(shù)定義如下:structstudentinput(){intk;structstudentstud;scanf("%d",&stud.num);gets();for(k=0;k<3;k++)scanf("%f",&stud.score[k]);returnstud;}/288.1結(jié)構(gòu)體

ANSIC還允許函數(shù)返回結(jié)構(gòu)體類型的值。8.2共用體8.2.1共用體類型聲明結(jié)構(gòu)體類型定義構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)union共用體名{

類型標(biāo)識符成員名;類型標(biāo)識符成員名;

…………….};例uniondata{inti;charch;floatf;};fchi類型定義不分配內(nèi)存/298.2共用體8.2.1共用體類型聲明結(jié)構(gòu)體類型定義構(gòu)造8.2共用體8.2.2共用體變量定義形式一:uniondata{inti;charch;floatf;}a,b;fchifchiab形式二:uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:union{inti;charch;floatf;}a,b,c;共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員存在/308.2共用體8.2.2共用體變量定義形式一:fchifc8.2共用體8.2.3共用體變量的引用引用方式:結(jié)構(gòu)體變量名.成員名引用規(guī)則不能引用共用體變量,只能引用其成員共用體變量中起作用的成員是最后一次存放的成員不能在定義共用體變量時初始化可以用一個共用體變量為另一個變量賦值共用體變量的地址和它的各個成員的地址相同共用體變量不能作函數(shù)參數(shù),函數(shù)的返回值也不能是共用體類型共用體類型和結(jié)構(gòu)體類型可以相互嵌套,共用體中成員可以為數(shù)組,甚至還可以定義共用體數(shù)組共用體指針名->成員名共用體變量名·成員名(*共用體指針名).成員名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f例union{inti;charch;floatf;}a;a=1;(

)例a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;printf(“%d”,a.i);(

編譯通過,運(yùn)行結(jié)果不對)例union{inti;charch;floatf;}a={1,’a’,1.5};(

)例floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;(

)x=a.f;(

)/318.2共用體8.2.3共用體變量的引用引用方式:結(jié)8.2共用體例將一個整數(shù)按字節(jié)輸出main(){unionint_char{inti;charch[2];}x;x.i=24897;printf("i=%o\n",x.i);printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]);}0110000101000001低字節(jié)高字節(jié)0100000101100001ch[0]ch[1]運(yùn)行結(jié)果:i=60501ch0=101,ch1=141ch0=A,ch1=a/328.2共用體例將一個整數(shù)按字節(jié)輸出main()01100結(jié)構(gòu)體與共用體區(qū)別:存儲方式不同聯(lián)系:兩者可相互嵌套achkstructnode{charch[2];intk;}a;unionnode{charch[2];intk;}b;bchk變量的各成員同時存在任一時刻只有一個成員存在/33結(jié)構(gòu)體與共用體區(qū)別:存儲方式不同聯(lián)系:兩者可相互嵌套ac8.3枚舉類型8.3.1枚舉類型的聲明枚舉類型定義枚舉數(shù)據(jù)類型,指這種類型變量的取值只能限于事前已經(jīng)一一列舉出來的值的范圍

enum枚舉類型名{

枚舉常量;;枚舉常量;;

…………….};例enumweekday{sun,mon,tue,wed,thu,fri,sat};/348.3枚舉類型8.3.1枚舉類型的聲明枚舉類型定義枚舉8.3枚舉類型8.3.2枚舉類型變量的定義形式一:

enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b;形式二:enumweekday{sun,mon,tue,wed,thu,fri,sat};enumweekdaya,b;形式三:

enum{sun,mon,tue,wed,thu,fri,sat}a,b;/358.3枚舉類型8.3.2枚舉類型變量的定義形式一:形式二8.3枚舉類型說明:enum是關(guān)鍵字,標(biāo)識枚舉類型,定義枚舉類型時必須用enum開頭。在定義枚舉類型時,花括號中的枚舉元素是常量,這些元素的名字是程序設(shè)計者自己指定的,命名規(guī)則與標(biāo)識符相同。這些名字只是作為一個符號,以利于提高程序的可讀性,并無其它固定的含義。枚舉元素是常量,在C編譯器中,按定義時的排列順序取值0、1、2、...。定義枚舉類型時,可在枚舉數(shù)據(jù)時通過“=”號規(guī)定序號,并影響后面的枚舉數(shù)據(jù)的序號,后繼序號以此遞增。枚舉元素是常量,不是變量,可以將枚舉常量賦給一個枚舉變量,但不能對枚舉元素賦值。但在定義枚舉類型時,可以指定枚舉常量的值枚舉值可以作判斷比較整型與枚舉類型是不同的數(shù)據(jù)類型,不能直接賦值,但可以通過強(qiáng)制類型轉(zhuǎn)換賦值枚舉常量不是字符串不能用下面的方法輸出字符串“sun”:printf("%s",sun); (

)而應(yīng)用檢查的方法去處理:if(week1==sun)printf("sun");例week1=wed;printf("%d",week1);輸出整數(shù)3enumstatus{copy=6,delete};則copy的序號為6,delete的序號為7。week2=sat; (

)sun=0;mon=1; (

)enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};tue、wed、...的值從mon的值順序加1。如,tue=2/368.3枚舉類型說明:不能用下面的方法輸出字符串“sun”:例某口袋中有紅、黃、藍(lán)、白、黑五種顏色的球若干個,每次從口袋中取出三個球,問得到三種不同顏色的球有多少種取法,并輸出每種組合結(jié)果。8.3枚舉類型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);/*輸出一種取法*/}}不用枚舉類型:/37例某口袋中有紅、黃、藍(lán)、白、黑五種顏色的球若干個,8.3枚舉類型采用枚舉類型來描述數(shù)據(jù)。設(shè)用red表示紅色球,yellow表示黃色球,blue表示藍(lán)色球,white表示白色球,black表示黑色球。/388.3枚舉類型采用枚舉類型來描述數(shù)據(jù)。設(shè)用red表示紅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++)if((k!=i)&&(k!=j)){n++;printf(″%4d″,n);for(m=1;m<=3;m++){switch(m){case1:l=i;berak;case2:l=j;berak;case3:l=k;berak;}switch(l)/*間接輸出*/{casered:printf(″%8s″,″red″),break;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);}/39

溫馨提示

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

評論

0/150

提交評論