清華大學(xué)7課件_第1頁
清華大學(xué)7課件_第2頁
清華大學(xué)7課件_第3頁
清華大學(xué)7課件_第4頁
清華大學(xué)7課件_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章結(jié)構(gòu)體、聯(lián)合體和枚舉1本章主要內(nèi)容結(jié)構(gòu)體的說明和定義結(jié)構(gòu)體成員的引用與結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體指針結(jié)構(gòu)體在函數(shù)間的傳遞結(jié)構(gòu)體指針型和結(jié)構(gòu)體型函數(shù)結(jié)構(gòu)體嵌套聯(lián)合體枚舉類型自定義類型位字段結(jié)構(gòu)體2清華大學(xué)黃維通設(shè)計(jì)制作8.1結(jié)構(gòu)體的說明和定義3清華大學(xué)黃維通設(shè)計(jì)制作結(jié)構(gòu)體說明的格式:

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

結(jié)構(gòu)體成員表;}8.1.2結(jié)構(gòu)體的說明及結(jié)構(gòu)體變量的定義structdate{intyear;intmonth;intday;intyearday;};

1.結(jié)構(gòu)體的說明

5清華大學(xué)黃維通設(shè)計(jì)制作2結(jié)構(gòu)體變量的定義(1)在結(jié)構(gòu)體說明的同時(shí)定義結(jié)構(gòu)體變量,例如:structexample{char*name;intage;}guo,zhang;

(2)直接定義結(jié)構(gòu)體變量,例如:struct{char*name;intage;}guo,zhang未給出結(jié)構(gòu)體名(3)把定義和說明分開,例如:structexample

{char*name;intage;};

structexampleguo,zhang;

結(jié)構(gòu)體變量占用內(nèi)存的大小可用sizeof()運(yùn)算來求出6清華大學(xué)黃維通設(shè)計(jì)制作變量說明形式

struct

結(jié)構(gòu)體名結(jié)構(gòu)體變量名;注意:結(jié)構(gòu)變量的存儲(chǔ)類型概念、它的壽命、可見性及使用范圍與普通變量、數(shù)組等完全一致。結(jié)構(gòu)體變量說明必須在結(jié)構(gòu)類型定義之后,二者也可同時(shí)進(jìn)行。7清華大學(xué)黃維通設(shè)計(jì)制作引用結(jié)構(gòu)體成員的一般形式如下:

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

8.2.1結(jié)構(gòu)體成員的引用成員名與程序中其他變量名可以相同,但代表不同的對(duì)象,為增強(qiáng)可讀性,不提倡這樣做structexample{longintid;charadd[100];}guo;各成員的引用:guo.idguo.add或guo.add[i]9清華大學(xué)黃維通設(shè)計(jì)制作

不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體加以引用,而只能對(duì)結(jié)構(gòu)體變量中各個(gè)成員進(jìn)行引用如:printf(“…”,student1);(錯(cuò)誤)對(duì)成員變量可以象普通變量一樣進(jìn)行各種運(yùn)算成員地址與結(jié)構(gòu)體地址都可以引用,如:scanf(“%d”,&student1.num);…它是成員地址引用printf(“%d”,&student1);…它是結(jié)構(gòu)體地址引用

賦值時(shí),與數(shù)組類似,只能當(dāng)結(jié)構(gòu)體變量為全局變量及靜態(tài)變量時(shí),可以賦值10清華大學(xué)黃維通設(shè)計(jì)制作結(jié)構(gòu)體變量初始化的一般形式如下:struct結(jié)構(gòu)體名

結(jié)構(gòu)體變量名={初始數(shù)據(jù)};structdate{intyear;

intmonth;

intday;

charmonthname[4];};structdatedate1={2003,10,1,”Sept”};8.2.2結(jié)構(gòu)體變量的初始化11清華大學(xué)黃維通設(shè)計(jì)制作/*******結(jié)構(gòu)體字節(jié)長度的計(jì)算******/structregist {charyour_name[66];intyour_age;}wang;main(){printf("regist:%d\n",sizeof(structregist));printf("wang:%d\n",sizeof(wang));}13清華大學(xué)黃維通設(shè)計(jì)制作8.3結(jié)構(gòu)體數(shù)組

14清華大學(xué)黃維通設(shè)計(jì)制作1結(jié)構(gòu)體數(shù)組的定義(也有類似三種方式)

[存儲(chǔ)類型]struct結(jié)構(gòu)體名

結(jié)構(gòu)體數(shù)組名[元素個(gè)數(shù)][,結(jié)構(gòu)體數(shù)組名[元素個(gè)數(shù)],…];

8.3.1結(jié)構(gòu)體數(shù)組的定義及初始化

2結(jié)構(gòu)體數(shù)組的初始化

structkeykeytab[]={{”shift”,0},

{”del”,0},

…{”pause”,0}};

15清華大學(xué)黃維通設(shè)計(jì)制作for(i=0;i<MAXIMUM;i++){printf("name?");gets(stu[i].name);printf(“sex?”);gets(str);

stu[i].sex=str[0];printf("age?");gets(str);stu[i].age=atoi(str);printf("tel?");gets(stu[i].tel);printf("add?");gets(stu[i].add);}for(i=0;i<MAXIMUM;i++){printf("%s%d",stu[i].name,stu[i].age); printf("%c%s%s",stu[i].sex,stu[i].tel,stu[i].add);

}}}17清華大學(xué)黃維通設(shè)計(jì)制作8.4結(jié)構(gòu)體指針18清華大學(xué)黃維通設(shè)計(jì)制作8.4.1結(jié)構(gòu)體指針及其定義結(jié)構(gòu)體指針的定義類似格式如下:[存儲(chǔ)類型]struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例如:staticstructexample*pexample;

存放結(jié)構(gòu)體首地址結(jié)構(gòu)指針的運(yùn)算按照C語言的地址運(yùn)算原則進(jìn)行19清華大學(xué)黃維通設(shè)計(jì)制作/*例***指向結(jié)構(gòu)體數(shù)組的指針及其應(yīng)用**/#include<stdio.h>#include<conio.h>structdate{intyear;intmonth;intday; };structscore{inttc; intvb; intdelphi;floataverage; };staticstructstudent{charname[10]; intnumber;charsex;structdateb;structscorer;}s[2];21清華大學(xué)黃維通設(shè)計(jì)制作main(){inti;floatt;charch[20];structstudent*p;p=s;

for(i=0;i<2;i++,p++){printf("Names:");gets(p->name);printf("Numberd:");scanf("%d",&p->number);

printf("Sexc:");gets(ch);p->sex=ch[0];

printf("year/month/day:");scanf("%d%d%d",&p->b.year,&s[i].b.month,&(*p).b.day);

t=0;

printf("tc/vb/delphi:");scanf("%d%d%d",&s[i].r.tc,&s[i].r.vb,&s[i].r.delphi);

t=s[i].r.tc+s[i].r.vb+s[i].r.delphi;s[i].r.average=t/3.0;}printf("\nNameNumberSexYearMonthDaytcvbdelphiaverage\n");for(i=0;i<2;i++){printf("%s%d%c",s[i].name,s[i].number,s[i].sex);printf("%d%d%d",s[i].b.year,s[i].b.month,s[i].b.day);

printf("%d%d%d%f\n",s[i].r.tc,s[i].r.vb,s[i].r.delphi,s[i].r.average);}}使用char*name時(shí),不能用此語句22清華大學(xué)黃維通設(shè)計(jì)制作1用地址復(fù)制方式傳遞結(jié)構(gòu)體變量

【例】用地址復(fù)制方式傳遞結(jié)構(gòu)體變量

給出年月日計(jì)算它是該年的第幾天#include"stdio.h"structdate{ intyear; intmonth; intday; intyearday;};8.5結(jié)構(gòu)體在函數(shù)間的傳遞23清華大學(xué)黃維通設(shè)計(jì)制作main(){structdated1;printf(“Eenteryear,month,day:");scanf("%d%d%d",&d1.year, &d1.month,&d1.day);days(&d1);printf(“是第%d天",d1.yearday);}25清華大學(xué)黃維通設(shè)計(jì)制作【例】建立和顯示學(xué)生成績冊(cè)#include"stdio.h"#include"stdlib.h"#defineMAXIMUM300structstud{charid[6];charname[30];intscore;};input(structstud*sp){charstr[10];printf(“學(xué)號(hào):”);gets(sp->id);printf("姓名:");gets(sp->name);if(sp->name[0]==‘\0’)return(0);

printf("成績:");gets(str);sp->score=atoi(str);return(1);}2結(jié)構(gòu)體數(shù)組在函數(shù)間的傳遞

26清華大學(xué)黃維通設(shè)計(jì)制作

結(jié)構(gòu)體指針型函數(shù)定義的一般形式為:

struct結(jié)構(gòu)體名*函數(shù)名([形參表])[形參說明;]{內(nèi)部數(shù)據(jù)說明語句;

執(zhí)行語句;};

其說明形式為:struct結(jié)構(gòu)體名*函數(shù)名();

8.6.1結(jié)構(gòu)體指針型函數(shù)

29清華大學(xué)黃維通設(shè)計(jì)制作【例】假設(shè)有一個(gè)電話號(hào)碼表,給定一個(gè)用戶id,找出其對(duì)應(yīng)信息。#include"stdio.h"#defineNull0structdata{inttel;intid;charname[30];charadd[100];};structdataper[500];

30清華大學(xué)黃維通設(shè)計(jì)制作personlist() //建立電話號(hào)碼表函數(shù){inti;for(i=0;i<500;i++){scanf("%d",&per[i].tel);scanf("%s%s",per[i].name,per[i].add);per[i].id=i;if(per[i].tel==Null)break;}}structdata*found(intn)//給定id查信息

{inti;for(i=0;per[i].tel!=Null;i++)if(per[i].id==n)break;return(&per[i]);}31清華大學(xué)黃維通設(shè)計(jì)制作voidmain(){intnumber; structdata*sp;personlist();printf(“\n請(qǐng)輸入要查找信息的id:");scanf("%d",&number);if(number==Null)break;sp=found(number);if(sp->id!=Null){printf("%d",sp->tel);printf("%s%s",sp->name,sp->add);}elseprintf(“notfound!\n");}建立電話號(hào)碼表給定id查信息返回指針32清華大學(xué)黃維通設(shè)計(jì)制作

結(jié)構(gòu)體型函數(shù)定義的一般形式如下:

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

函數(shù)名([形參表])[形參說明;]{

內(nèi)部數(shù)據(jù)說明語句;

執(zhí)行語句;};

結(jié)構(gòu)體型函數(shù)說明的一般形式如下:

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

函數(shù)名();

8.6.2結(jié)構(gòu)體型函數(shù)

33清華大學(xué)黃維通設(shè)計(jì)制作【例】返回值為結(jié)構(gòu)體變量的函數(shù)#include<string.h>#include"stdio.h"structdata{chars[30];intn;floatx;};structdataexample(){structdataemp;strcpy(emp.s,“Anexample!");emp.n=68; emp.x=213.52;printf("%s%d%f\n",emp.s,emp.n,emp.x);return(emp);}voidmain(){structdataredata;printf("\n運(yùn)行函數(shù):\n");redata=example();

printf("%s%d%f\n",redata.s,redata.n,redata.x);

}34清華大學(xué)黃維通設(shè)計(jì)制作/*******結(jié)構(gòu)型指針型函數(shù),輸入學(xué)號(hào),查找相應(yīng)學(xué)生的數(shù)據(jù)*/#defineNULL0structstudent{longintnum;char*name;floatscore;}stu[]={{990001,"Li",90},{990002,"Zhang",80},{990003,"Zhao",70},{0,0,0,}};main(){longintnumber;structstudent*result,*find();/*定義結(jié)構(gòu)指針及結(jié)構(gòu)指針函數(shù)*/printf("Enteranumber:");scanf("%ld",&number);result=find(number);/*調(diào)用函數(shù)開始查找,結(jié)構(gòu)find是指針型函數(shù),*/ /*執(zhí)行此句,將結(jié)構(gòu)體變量的地址傳給型參*/if(result->num!=NULL){ printf("number:%ld\n",result->num); printf("color:%s\n",result->name); printf("type:%f\n",result->score);}else printf("Notfound\n");}35清華大學(xué)黃維通設(shè)計(jì)制作structstudent*find(n)/*查找,返回找到的結(jié)構(gòu)體的首地址*/longintn;{inti;for(i=0;stu[i].num!=NULL;i++) /*尋找stu[0]至stu[3],其中stu[3]={0,0,0}*/if(stu[i].num==n)break; /*找到了,若沒找到,則返回stu[i].num=0,*/ /*返回后,經(jīng)if比較,執(zhí)行else語句*/return(&stu[i]);/*注意不能寫成&stu[i].num*/}36清華大學(xué)黃維通設(shè)計(jì)制作structdate{intyear; intmonth;intday;};8.7結(jié)構(gòu)體嵌套

structperson{charid[6];charname[30];charsex;

structdatebirthday;}stu;Birthday具有monthday和year三個(gè)成員這就是結(jié)構(gòu)體嵌套參加運(yùn)算和操作的只能是最內(nèi)層結(jié)構(gòu)的成員項(xiàng)內(nèi)層結(jié)構(gòu)成員的引用形式:結(jié)構(gòu)變量名.外層成員名.內(nèi)層成員名如:stu.birthday.month37清華大學(xué)黃維通設(shè)計(jì)制作structexample{intdata;structexample*next;};

datadatadatadata38清華大學(xué)黃維通設(shè)計(jì)制作structadd

{intpost;charaddr[100];chartel[8];};structperson{charname[30];

structaddwadd;structaddhadd;};structpersonLi;8.7.2嵌套結(jié)構(gòu)體類型變量的引用

LLi.hadd.postLi.wadd.postLi.wadd.addr

structperson*pman;pman–>namepman–>wadd.postpman–>wadd.tel39清華大學(xué)黃維通設(shè)計(jì)制作【例】用嵌套型結(jié)構(gòu)體變量處理通訊錄#include<stdio.h>#include<stdlib.h>#defineMAXIMUM100structaddress {char*postcode;charaddr[100];chartel[8];};structperson {charname[30];structaddresswadd;structaddresshadd;}grade[MAXIMUM];8.7.3結(jié)構(gòu)體嵌套應(yīng)用舉例

40清華大學(xué)黃維通設(shè)計(jì)制作voidinputdata(){inti;chars[10];for(i=0;i<100;i++){printf("姓名:");gets(grade[i].name);if(grade[i].name[0]=='\0')return;printf(“郵編1”);gets(grade[i].wadd.postcode);printf(“工作地址”);gets(grade[i].wadd.addr);printf(“電話”);gets(grade[i].wadd.tel);printf(“郵編2”);gets(grade[i].hadd.postcode);printf(“家庭地址:”);gets(grade[i].hadd.addr);return;}}41清華大學(xué)黃維通設(shè)計(jì)制作voidmain(){inti;for(i=0;i<MAXIMUM;i++){if(grade[i].name[0]=='\0')

break;printf("\n%s",grade[i].name);

printf("%d%s%s",grade[i].wadd.postcode,grade[i].wadd.addr,grade[i].wadd.tel);

printf("%d%s%s",grade[i].hadd.postcode,grade[i].hadd.addr,grade[i].hadd.tel);}}42清華大學(xué)黃維通設(shè)計(jì)制作聯(lián)合體是一種類似于結(jié)構(gòu)體的構(gòu)造型數(shù)據(jù)類型,它準(zhǔn)許不同類型和不同長度的數(shù)據(jù)共享同一塊存儲(chǔ)空間8.8聯(lián)合體43清華大學(xué)黃維通設(shè)計(jì)制作1聯(lián)合體的說明聯(lián)合體的說明與結(jié)構(gòu)體類似。union聯(lián)合體名{類型標(biāo)識(shí)符成員名1;…類型標(biāo)識(shí)符成員名n;};8.8.1聯(lián)合體的說明及聯(lián)合體變量的定義

unionarea{charc_data;shorts_data;longl_data;};共用體的定義與結(jié)構(gòu)體定義很類似,只是關(guān)鍵詞的不同struct<----->union既然幾種不同的變量占用同一個(gè)內(nèi)存段,那么,變量所占的內(nèi)存長度應(yīng)為最長的成員長度44清華大學(xué)黃維通設(shè)計(jì)制作2聯(lián)合體變量的定義

(1)說明與定義分開:

union聯(lián)合體名{類型標(biāo)識(shí)符

成員名1;…

類型標(biāo)識(shí)符

成員名n;

};union聯(lián)合體名

變量名表;

例如:

unionuniontype{inta; longd;

};unionuniontypemy_data;

(2)定義與說明合在一起:union聯(lián)合體名{數(shù)據(jù)類型標(biāo)識(shí)符

成員名1;

…數(shù)據(jù)類型標(biāo)識(shí)符

成員名n;

}變量名表;例如:unionuniontype{inta;longd;

}my_data;

(3)定義和說明合在一起,但缺省聯(lián)合體名:union{數(shù)據(jù)類型標(biāo)識(shí)符

成員名1;…

數(shù)據(jù)類型標(biāo)識(shí)符

成員名n;

}聯(lián)合體變量名表;例如:union{inta;longd;}my_data;

45清華大學(xué)黃維通設(shè)計(jì)制作結(jié)構(gòu)體與聯(lián)合體可以互相嵌套,例如:unionuniontype{inti;

floatf;

};structstructtype{shorts;

longl;

};structsutype{charc;

unionuniontypeu;

};unionustype{inti;

structstructtypest;};46清華大學(xué)黃維通設(shè)計(jì)制作3聯(lián)合體變量成員的引用

聯(lián)合體變量成員的引用類似結(jié)構(gòu)體變量,也是利用運(yùn)算符“–>”和“.”。例如:unionuniontype{inti;charc;

}my_data;unionuniontype*p;

p=&my_data;

下列引用都是合法的:my_data.i,my_data.c,p->i,p–>c47清華大學(xué)黃維通設(shè)計(jì)制作兩個(gè)具有相同聯(lián)合體類型的聯(lián)合體變量可以互相賦值聯(lián)合體變量可以作為參數(shù)傳遞給被調(diào)用函數(shù)聯(lián)合體變量可以作為函數(shù)的返回值,從被調(diào)用函數(shù)返回調(diào)用函數(shù)同一內(nèi)存段可用來存放幾種不同類型的成員,但每一瞬間只有一個(gè)成員不能對(duì)共用體變量表列賦值,這一點(diǎn)與結(jié)構(gòu)體不一樣,如:

union{inti;charch;floatb;}a={a,‘a(chǎn)’,1.5};這是不對(duì)的8.8.2使用聯(lián)合體變量應(yīng)注意的問題

48清華大學(xué)黃維通設(shè)計(jì)制作【例】建立教師和學(xué)生登記表,其中包括識(shí)別號(hào)、姓名、身份和職稱。若身份是“student”時(shí),則職稱一欄填年級(jí);若身份是“teacher”時(shí),則職稱欄填職稱。#include"stdio.h"#include"string.h"structpersontype{intid;charname[30]; charjob[10];

union{intgrade;charposition[10];}level;}person[5];聯(lián)合體嵌套在結(jié)構(gòu)體的定義中49清華大學(xué)黃維通設(shè)計(jì)制作voidmain(){intn,i;

printf("\nPersonalInformation(ID,姓名,身份,年級(jí)或職稱):\n“);for(i=0;i<5;i++)//輸入數(shù)據(jù){scanf("%d%s%s",&person[i].id,person[i].name,person[i].job);

if(strcmp(person[i].job,"student"))scanf("%d",&person[i].level.grade);elseif(strcmp(person[i].job,"teacher"))scanf("%s",person[i].level.position);elseprintf("輸入錯(cuò)誤!\n");}50清華大學(xué)黃維通設(shè)計(jì)制作printf("IDnamejobgrade/position\n");for(i=0;i<5;i++) //輸出數(shù)據(jù){if(strcmp(person[i].job,"student"))printf("%d%s%s%d\n",person[i].id,person[i].name,person[i].job,person[i].level.grade);elseprintf("%d%s%s%s\n",person[i].id,person[i].name,person[i].job,person[i].level.position);}}51清華大學(xué)黃維通設(shè)計(jì)制作8.9枚舉類型

52清華大學(xué)黃維通設(shè)計(jì)制作1枚舉的概念枚舉類型也是一種數(shù)據(jù)類型。對(duì)那些只可能取有限的某幾種值的數(shù)據(jù),可以把它定義為枚舉類型數(shù)據(jù)8.9.1枚舉類型數(shù)據(jù)的概念及其定義

如果某些變量只有幾種可能,如:星期一、星期二、……星期日性別及特定范圍的概念可以通過枚舉法將變量一一列出,在這種情況下可以使用枚舉類型變量53清華大學(xué)黃維通設(shè)計(jì)制作2枚舉類型數(shù)據(jù)的說明

枚舉類型說明的一般形式為:enum枚舉名{元素名1,元素名2,…,元素名n};例如:

enummonth{Jan,F(xiàn)eb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};//該枚舉類型只準(zhǔn)許取12種值

enumweekday{Sun,Mon,Tue,Wed,Thu,F(xiàn)ri,Sat};

//該枚舉類型只準(zhǔn)許取7種值

54清華大學(xué)黃維通設(shè)計(jì)制作3枚舉型變量的定義枚舉型變量的定義也有三種方式:說明與定義合一

,如:

enumweekday{Sun,Mon,Tue}day;

(2)用無名枚舉類型,如:

enum{Sun,Mon,Tue}day;(3)說明與定義分開,如:

enumweekday{Sun,Mon,Tue};

enumweekdayday;55清華大學(xué)黃維通設(shè)計(jì)制作為正確使用枚舉型變量,應(yīng)注意:枚舉類型說明中的元素以常量名處理,不是變量名,這些常量依序分別為0、1、…、n-1。例如:

enumweekday{Sun,Mon,Tue,Wed,Thu,F(xiàn)ri,Sat}workday;上述枚舉元素的值分別為0、1、2、3、4、5、6。8.9.2枚舉型變量的使用

枚舉元素是常量,不是變量,不能對(duì)它賦值,如:sun=0;mon=1;etc.56清華大學(xué)黃維通設(shè)計(jì)制作枚舉元素的值也可在定義時(shí)指定。

enumweekday{Sun=7,Mon=1,Tue,Wed,Thu,F(xiàn)ri,Sat}workday;

對(duì)于沒有指定值的元素,其取值原則仍按所處的順序取,故:

Tue是2,Wed是3,…,Sat是6。

可用枚舉變量進(jìn)行判斷或比較操作

enumflag{true,false}my_flag;

…if(my_flag==true)

57清華大學(xué)黃維通設(shè)計(jì)制作一個(gè)整數(shù)不能直接賦給枚舉變量,要先進(jìn)行強(qiáng)制類型轉(zhuǎn)換才能賦值。如:

workday=6;是錯(cuò)誤的。而:

workday=(enumweekday)6;

是正確的,它相當(dāng)于

workday=Sat;58清華大學(xué)黃維通設(shè)計(jì)制作/*******三種顏色取不同兩種排序,有幾種方式?******/main(){enumcolor{red,yellow,blue};enumcolori,j;intn=0;for(i=red;i<=blue;i++)

{ for(j=red;j<=blue;j++) if(j!=i)

{n=n+1; printf("%-4d",n);

switch(i) { casered:printf("%-10s","red");break; caseyellow:printf("%-10s","yellow");break; caseblue:printf("%-10s","blue");break; default:break; }

switch(j) { casered:printf("%-10s","red");break; caseyellow:printf("%-10s","yellow");break; caseblue:printf("%-10s","blue");break; default:break; } printf("\n"); }}printf("ntotal:%5d\n",n);}結(jié)果:1 red yellow2 red blue3 yellow red4 yellow blue5 blue red6 blue yellown total: 659清華大學(xué)黃維通設(shè)計(jì)制作/***分別輸入一周中的每天工作時(shí)間,并輸出總的工資**///周日的工資為120RMB/h,周六為100RMB/h,其他時(shí)間80RMB/h#include<stdio.h>voidmain(){enumweek{SUN,MON,TUE,WED,THR,FRI,SAT};enumweekday;inttotal,pay,hour;total=0;printf("PleaseenteryourworkinghoursfromSUNtoSAT\n");for(day=SUN;day<=SAT;day++){scanf("%d",&hour);switch(day){caseSUN:pay=hour*120;break;caseSAT:pay=hour*100;break;default:pay=hour*80;break;/*fromMONtoFRI*/}total+=pay;}printf("Yourtotalpayis:%d",total);}60清華大學(xué)黃維通設(shè)計(jì)制作【例】某小學(xué)舉行競賽活動(dòng),共有5個(gè)項(xiàng)目,每人只能選其中的3項(xiàng),編寫程序,測(cè)出每個(gè)學(xué)生可能的選擇方案。設(shè)這5個(gè)項(xiàng)目分別稱p1、p2、

、p5。故可用如下形式的枚舉型表示它:enumgroup{p1,p2,p3,p4,p5};

用get1、get2和get3表示一種選擇方案中的3個(gè)選項(xiàng)。并且這3個(gè)選項(xiàng)不能重復(fù),即:get1!=get2!=get3#include"stdio.h"main(){enumgroup{p1,p2,p3,p4,p5};enumgroupget1,get2,get3,pri;intn=0,loop;for(get1=p1;get1<=p5;get1++)for(get2=get1+1;get2<=p5;get2++)61清華大學(xué)黃維通設(shè)計(jì)制作if(get1!=get2){for(get3=get2+1;get3<=p5;get3++)if((get3!=get1)&&(get3!=get2){n++; //輸出一種選擇方案printf("%-4d",n);

for(loop=1;loop<=3;loop++){

switch(loop){case1:pri=get1;break;case2:pri=get2;break;case3:pri=get3;break;default:break;}

switch(pri){casep1:printf("%-10s","p1");break;casep2:printf("%-10s","p2");break;casep3:printf("%-10s","p3");break;casep4:printf("%-10s","p4");break;casep5:printf("%-10s","p5");break;default:break;}}printf("\n");}}printf("\ntotal=%5d",n);}62清華大學(xué)黃維通設(shè)計(jì)制作8.10自定義類型63清華大學(xué)黃維通設(shè)計(jì)制作類型定義:給已存在的數(shù)據(jù)類型重命名

類型定義的一般形式為:typedefoldtypenewtype;

8.10.1自定義類型及其表示形式

例如:typedefintINTEGER;就為int重新命名了一個(gè)新名字,于是inta,b;

與INTEGERa,b;

是完全等價(jià)的兩個(gè)變量定義語句。

64清華大學(xué)黃維通設(shè)計(jì)制作增強(qiáng)程序的可讀性和可移植性可以自定義結(jié)構(gòu)體,如:typedefstructstudent{char*name;intnumber;}STU;

STUstu1;

那么,stu1就擁有name和number兩個(gè)成員

8.10.2自定義類型的優(yōu)點(diǎn)

65清華大學(xué)黃維通設(shè)計(jì)制作有了上述概念之后,還可再進(jìn)一步:typedefintNUM[10]定義NUM為整型數(shù)組類型NUMn;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論