2014c課件第9章結構體類型_第1頁
2014c課件第9章結構體類型_第2頁
2014c課件第9章結構體類型_第3頁
2014c課件第9章結構體類型_第4頁
2014c課件第9章結構體類型_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章 結構體結構結構與指針結構與數組結構與函數鏈表結構程序設計舉例9.1

結構9.1.1

結構類型的定義結構類型定義用關鍵字struct標識,形式為:struct

標識符{成員表};例如,定義結構體類型,描述下列數據。(1)學生情況,包含學生的學號、姓名、性別、年齡、C++語言課程成績:struct

student{ int

no;//學號char

name[9];//姓名

char

sex;//性別intage;//年齡float

cscore;//C++成績};如考慮60門課程成績,加上總成績與平均成績,可作如下定義:struct

student{ int

no;//學號char

name[8];//姓名

char

sex;//性別int

age;//年齡date

birthday;float

score[60];//60門課程成績float

totalMark,average;//總成績,平均成績};(2)個人數據,包含姓名、性別、年齡、身高、體重、住址:struct

person{ char

name[8];//姓名

char

sex;//性別intage;//年齡

float

height;//身高

float

weight;//體重char

add[40];//住址};(3)平面上的點:struct

point2{

float

x;

//橫坐標float

y;

//縱坐標};如考慮空間中的點,可作如下定義:struct

point3{

float

x;

//X坐標float

y;

//Y坐標float

z;//Z坐標};(4)

日期,包括年、月、日:struct

date{

int

year;//年int

month;//月int

day;//日};如考慮時間,可作如下定義:struct

time{inthour;//時intminute;//分intsecond;//秒};復數:struct

complex{

float

real;

//實部float

ie;

//虛部};三角形:struct

sjx{

float

a,b,c;//三邊};9.1.2

結構體變量的定義先定義結構體類型,再定義結構體變量。形式為:①struct

結構類型標識符{

成員表

};②

結構類型標識符

變量表;例如,對以上定義的結構體類型,我們可以定義如下一些結構體變量:student zhang;

//張同學情況

person p[100];

//100個人的數據9.1.3

結構體成員的訪問結構體的成員變量的訪問通過結構變量名、成員名與點運算來描述。字段變量的形式為:結構變量名

.成員名例如:

student

zhang;結構變量zhang的所有成員如下:

zhang.no,zhang.name,zhang.sex,zhang.age,zhang.cscore注:結構體的每一成員相當于其所屬類型的變量。9.1.4

結構體變量的賦值與初始化1.初始化格式:結構體名有序初始化數據表是相應成員的初值表。例如:(1)

student

zhang={9901,″zhangsan″,′m′,19,95.0};zhang.no初值9901,zhang.name初值″zhangsan″,zhang.sex初值′m′,zhang.age初值19,zhang.cscore初值95。struct

student{ int

no;//學號char

name[9];//姓名

char

sex;//性別intage;//年齡float

cscore;//C++成績};結構體變量={初始化數據表};2.

賦值方式:方式1:整體賦值結構體變量1=結構體變量2;struct

Weather{double

temp;//溫度};double

wind;//風力Weather

today={-4,

3},tomorrow;Tomorrow=

today;方式2:對結構中的成員一一賦值。如://作為左值使用Weather

today;today.temp=-4.0;today.wind=3.0;例

9

1

求某同學上學期8門課程的總成績與平均成績。//程序9-1,求某同學的總成績與平均成績struct

student{

char

name[20];float

score[8];float

total,average;}

;main(

){

student

st;int

i;cin>>

st.name;//輸入for(i=0;

i<8;i++)cin>>st.score[i];st.total=0.0;//求總成績

for(i=0;i<8;i++)st.total+=st.score[i];st.average=st.total/8.0;//求平均成績

cout<<″總成績=″<<st.total<<″,平均成績=″<<st.average

;//輸出}輸入數據:

CHEN 80

86

79

98

88

72

96

66運行結果:總成績=577.00,平均成績=72.139.1.5

結構體作函數參數例

9

4

將例9

-

2中求平面上兩點之間的距離改用函數實現。struct

point{

float

x;float

y;};float

distance(

point

p1,point

p2)//求平面上兩點之間距離的函數{float

d;d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));return(d);}9.2

結構與指針9.2.1

指向結構體數據的指針變量對使用指針來處理數據讀者應有了一些體會,即先定義一以數據或元素類型為基類型的指針變量;其次在定義的指針變量與要處理的數據之間建立關聯(lián),讓指針變量指向要處理的數據;然后引用指針指向變量來完成數據的處理。例

9

13

指向結構體變量的指針變量的應用示例。假設有一結構體,包含某人的姓名和年齡,用指向結構體變量的指針變量完成輸出處理。程序如下://程序9

—13,指針應用于結構體struct

person{

char

*name;int

age;}

;main(

){//定義結構體類型的指針變量//假定姓名為張三person someone,*p;someone.name=″張三″;someone.age=20;p=&someone;//建立關聯(lián),*p即someonecout<<″姓名=″<<(*p).name<<″,年齡=″<<(

*p).age;}運行結果:姓名=張三,年齡=20等價寫法:p->age9.3

結構數組結構數組的定義與結構變量的定義一樣形式如下:結構標識符struct{成員表}

;結構標識符數組名[常量];例如,100個同學的情況,我們可以定義結構體數組allst描述:struct

student{ int

no;char

name[8];char

sex;int

age;float

score[31];float

tcj,

acj;}

;studentallst[100];數組分量及其成員如何訪問?對結構體數組allst的操作要轉化成對allst[i]進行操作,而allst[i]的操作要轉化成對allst[i].no、allst[i].name、allst[i].sex、allst[i].age、allst[i].score[j]、allst[i].tcj、allst[i].acj進行操作。例9—14對上例,考慮三個人組成的結構體數組的處理。程序如下://程序9

—14,結構體數組的指針處理struct

person{

char

name[20];int

age;};person sp[3]={{″張三″,18},{″李四″,19},{″王五″,20}};main(

){

struct

person

*p;cout<<″

姓名

年齡\n″;for

(p=sp,

p<sp+3;

p++);cout<<setw(6)<<

p->

name

<<setw(6)<<

p->

age

<<endl;}運行結果:姓名年齡張三18李四19王五20閱讀p210例程ch9_5.cpp例程ch9_6.cpp9.4

傳遞結構參數傳遞結構值(傳值方式)以結構指針作函數參數傳遞結構的引用1.

傳遞結構值(傳值方式)struct

Person{ char

name[20];unsigned

long

id;float

salary;};void

Print(Person

pr){ cout

<<pr.name

<<"

"<<pr.id

<<"

"<<pr.salary

<<endl;}傳值方式2

指向結構體的指針作函數參數例

9

15

有40個學生,每個學生包括學號、姓名及成績,用函數輸出成績最高的學生數據。//指向結構體的指針作函數參數例struct

student{int

num;char

name[20];float

score;}void

print(

student *p

//輸出函數,結構指針作函數參數{cout<<

p->

num<<

p->

name<<

p->

score<<endl;}int maxi(student p[],int

n)//求最高分學生序號函數{int i,Pmax;Pmax

=0;for

(i=1;i<n;

i++)if

(p[i].score>

p[Pmax].

score)Pmax

=i;return

Pmax;}void

main(

){student

stu[40];int

i,

k;for

(i=1;i<40;

i++)cin>>stu[i].num>>stu[i].name>>stu[i].score;k=maxi(stu,40); //結構體數組作函數參數

print

(stu+k);//結構體指針作函數參數

for(int

i=0;i<40;i++)print

(stu+i);//結構體指針作函數參數}9.5

返回結構返回結構值返回結構的指針例9-6用結構體數組處理學生的C++課程成績。功能:輸入、排序、查找、求均分、添加、刪除等//程序9-6,用結構體數組處理C++成績,排序輸出struct

student{

char

name[8];float

score;這些功能有無次序性呢?};void

input

(student *stu,int

n);//輸入學生信息void

sort

(student *stu,int

n);//對學生信息按照成績排序int

search

(student *stu,int

n,char

*name);

//按照學生姓名查詢float

average

(student *stu,int

n);

//求均分void

output

(student *stu,int

n);//輸出學生信息bool

add

(student *stu,int

&n);

//添加一個學生信息void

del

(student *stu,int

n,int

k);

//刪除一個學生信息void

munu(){cout<<“

1----------添加”<<endl;cout<<“

2----------排序”<<endl;cout<<“3----------查找”<<endl;cout<<“4----------求均分”<<endl;cout<<“5----------輸出”<<endl;cout<<“6----------刪除”<<endl;cout<<“0----------退出”<<endl;}voidmain(){student

stu[50]={{"jone", 89},{"david",

95},{"marit",76}};int

n=3;while(1){cin>>select;//添加一個學生信息munu();int

select;switch(select){case

1:add(stu,n);break;case

2:case

3:sort(stu,n);//對學生信息按照成績排序

break;//按照學生姓名查詢

break;case

4://求均分break;case

5:print(stu,n);//輸出學生信息

break;case

0:

return;}}}例

9

-

7

假設有5個候選人,有20人參加投票,規(guī)定只能在5個候選人中選一個,多選或選這5人以外者均為廢票。試用結構體數組編寫程序,統(tǒng)計出5位候選人各人所得票數。//程序9-7,統(tǒng)計候選人得票數struct

ttt{char

name[12];int

count;};main(

){

ttt

dp[5]={{″Zhang″,

0},

{″Li″,

0},{″Wang″,

0},

{″Liu″,

0},

{″

Zhao″,

0}};char

ticket[10];int

i,

j;for(i=1;

i<=20;

i++){ cin>>

ticket

;for(j=0;

j<5;

j++)if(strcmp(

ticket

,

dp[j].name)=

=0)dp[j].count++;}for(i=0;

i<5;

i++)cout<<

dp[i].name<<″的得票數=″<<dp[i].count)<<endl;}輸入數據:Zhang

Li

Wang

Liu

Zhao

Zhao

Li

Li

Zhang

Li

Zhang

Li

Liu

LiZhangLiuLiLiZhang運行結果:

Zhang的得票數=5Li的得票數=8Wang的得票數=1Liu的得票數=3Zhao的得票數=29.6

鏈表結構鏈表概念鏈表的原理鏈表的建立單鏈表的基本操作學生信息描述:nonamescorestruct

student{ int

no;

//學號char

name[8];

//姓名float

score;

//C++課程成績};一個學生:student wang

;wang100個學生:學生數組student

st[100];學生1學生2學生3……學生98學生100012……9899st問題:1)靜態(tài)性;通用性;空間利用率低。鏈表是一種動態(tài)地進行存儲分配的數據結構,表

中各元素在內存中可以不連續(xù)存放。要查找某一元素,必須先找到上一個元素,根據它提供的下一元素地址

才能找到下一個元素。如果不知道第一個元素的地址,則整個鏈表無法訪問。故一般在鏈表的開頭設立頭指

針,存放第一個元素的內存地址。這樣,整個鏈表就

可以從頭到尾訪問。鏈表的訪問只能從頭到尾,故是

一種順序訪問。在結構體中,若只有一個指針成員域,則得到的鏈表為單鏈表;若有多個指針成員域,則得到的鏈表為多重鏈表。9.6.1

鏈表概念學生1學生2學生3學生4學生5學生6學生7學生8^H9.6.2

鏈表的原理H——鏈表的頭指針^——空指針NULL,表示該結點無后繼。學生后繼指針結點結構單鏈表的數據描述一般形式:struct

結構體名{

成員及類型說明;struct

結構體名*

指針成員;}

;在單鏈表中,指針域只有一個,但非指針域個數不限制。為了描述方便,我們將非指針域個數也定為一個,并且按下面給定的類型來描述鏈表:struct

studentNode{char

name[20];int

age;charsex;studentNode

*next;};studentNode

*head;datanext結點結構圖9—2p->nextp->datastudentNode

*head,*p;p鏈表是動態(tài)存儲方式指針后移方法:p=p->next;73head7992^p67指針后移方法:p=p->next;73head7992^67p指針指向問題:73head7992^p67p->next9.6.3

單鏈表的建立1.堆空間的申請與釋放申請空間:p=new

nodetype在內存的動態(tài)存儲區(qū)申請一定字節(jié)的空間。釋放空間:delete

p釋放由指針p所指向的存儲單元,而存儲單元的大小是最近一次調用new時所申請的存儲空間。struct

nodeType{int

data;nodeType

*next;};datanext結點結構2.

尾插法元素表為(

73,

79

,

92

,

67

)初始:73nodeType*head,*pS,*pEnd;head

^ppEndp=new nodetype

;p->data=73

;head

=p

;pEnd=p;建立過程:head73pheadpEndp79元素表為(

73,

79

,

92

,

67

)p=new nodetype

;p->data=73

;head

=p

;pEnd=p;p=new nodetype

;p->data=79

;pEnd->next=p;pEnd=p;73headpEndp79元素表為(

73,

79

,

92

,

67

)p=new nodetype

;p->data=73

;head

=p

;pEnd=p;p=new nodetype

;p->data=79

;pEnd->next=p;pEnd=p;73headpEnd79元素表為(

73,

79

,

92

,

67

)p=new nodetype

;p->data=73

;head

=p

;pEnd=p;p=new nodetype

;p->data=79

;pEnd->next=p;pEnd=p;p92p=new nodetype

;p->data=92

;pEnd->next=p;pEnd=p;73headpEnd79元素表為(

73,

79

,

92

,

67

)p=new nodetype

;p->data=73

;head

=p

;pEnd=p;p=new nodetype

;p->data=79

;pEnd->next=p;pEnd=p;p92p=new nodetype

;p->data=92

;pEnd->next=p;pEnd=p;p=new nodetype

;p->data=67

;pEnd->next=p;pEnd=p;p6773headpEnd79元素表為(

73,

79

,

92

,

67

)p=new nodetype

;p->data=73

;head

=p

;pEnd=p;p=new nodetype

;p->data=79

;pEnd->next=p;pEnd=p;92p=new nodetype

;p->data=92

;pEnd->next=p;pEnd=p;p=new nodetype

;p->data=67

;pEnd->next=p;pEnd=p;^p67pEnd->next=NULL;73headpEnd79元素表為(

73,

79

,

92

,

67

)p=new nodetype

;92^p67pEnd->next=NULL;p->data=73

;head

=p

;pEnd=p;for(int

k=1;k<=3;k++){}p=new nodetype

;cin>>p->data

;pEnd->next=p;pEnd=p;const

int

n=4;void

main()//四個結點的鏈表{

nodetype

*head,*p,*pEnd;p=new nodetype

;cin>>p->data

;head

=p

;pEnd=head;for(int

k=1;k<n;k++){

p=new nodetype

;cin>>p->data

;pEnd->next=p;pEnd=p;}pEnd->next=NULL;//以下進行鏈表的處理或輸出}void

main(){nodetype

*head,*pS,*pEnd;int

n=10;p=new nodetype

;cin>>p->data

;head

=p

;pEnd=p;for(int

k=1;k<n;k++){

p=new nodetype

;cin>>p->data

;pEnd->next=p;pEnd=p;}pEnd->next=NULL;//輸出鏈表內容}struct

nodetype{

int

data;nodetype

*next;};//n個結點的鏈表:將鏈表的左端固定,鏈表不斷向右延伸,這種建立鏈表的方法稱為尾插法。尾插法建立鏈表時,頭指針固定不動,故必須設立一個搜索指針,向鏈表右邊延伸,則整個算法中應設立三個鏈表指針,即頭指針

head、搜索指針pEnd、申請單元指針p。尾插法最先得到的是頭結點。下面用函數實現鏈表的建立。struct

nodetype{

int

data;nodetype

*next;};nodetype

*

create(int

n);//返回建立成功后的鏈表頭指針

void

print(nodetype*head);//輸出鏈表void

create(nodetype*&head,int

n);//建立鏈表,正確的

void

create(

nodetype**head,int

n);//建立鏈表,正確的

void

main(){nodetype

*head;int

n=10;head

=create(n);//create(head,

10);print(head);//下面輸出鏈表內容}nodetype*create

(int

n)

//建立具有n個結點的單鏈表{

nodetype

*head,

*pS,*pEnd;p=new nodetype

;cin>>p->data

;head

=p

;pEnd=p;for(int

k=1;k<n;k++){

p=new nodetype

;cin>>p->data

;pEnd->next=p;pEnd=p;}pEnd->next=NULL;return

head;}程序:ch9_12.cpp9.6.4

單鏈表的基本操作注意兩點:將鏈表傳遞進函數,只需將鏈表頭指針傳遞進函數。函數的形參對應實參頭指針。對鏈表的訪問用條件循環(huán)控制,循環(huán)的條件是結點的指針域非空。1.

輸出鏈表中所有結點void

print(nodetype

*head)//輸出鏈表所有結點{//p指向鏈表第一個結點nodetype

*p;p=head;while(p!=NULL){

cout<<setw(8)<<

p->data;p=p->next;

//p指向下一個結點}cout<<endl;}程序:ch9_12.cpp2.

統(tǒng)計鏈表中元素個數只需將上述輸出結點改成計數即可。int

count(

nodetype

*head)//統(tǒng)計鏈表中結點個數{int

n=0;nodetype

*p;p=head;while(p!=NULL){n++;p=p->next;}return(n);}3.鏈表插入:p73head7992^67(1)插入原理:在元素92之前插入元素32。a)首先找到元素92的前一個元素的位置b

)

準備工作:q=new

datatype;32qq->data=32;p73head7992^6732qc)插入:先確定待插入結點指針域指針的指向,再修改鏈表指針的指向。①①q->next=p->next;②p->next=q;①

q->next=p->next;②

p->next=q;p73head7992^6732qc)插入:先確定待插入結點指針域指針的指向,再修改鏈表指針的指向。①②3.

插入操作

:在鏈表的第

i

個元素之后插入元素xvoid

insert(

nodetype

*&head,int

i,int

x)

//插入結點{int

j;nodetype

*p,

*q;p=head;j=1;while((p!=NULL)&&(j<i))//找插入位置{p=p->next;j++;//產生插入結點//q插入p之后}q=new

nodetype

;q->data=x;q->next=p->next;p->next=q;}4.刪除操作假設刪除鏈表中第i個結點,先找到第i-1個結點和第i個結點,然后將第i+1個結點鏈接在第i-1個結點后,再釋放第i個結點所占空間,完成刪除操作。原理:p->next=q->next;

delete

q;p73head7992^67q①4.刪除操作假設刪除鏈表中第i個結點,先找到第i-1個結點和第i個結點,然后將第i+1個結點鏈接在第i-1個結點后,再釋放第i個結點所占空間,完成刪除操作。原理:p->next=q->next;

delete

q;p73head7992^67q①void del(struct

linklist

*head,int

i)//刪除結點{

int

j;struct

linklist

*p,

*q;p=head;j=1;while((p!=NULL)&&(j<i))//找第i-1個結點和第i個結點指針q、p{

q=p;p=p->next;j++;}if(p==NULL)cout<<“找不到結點!”;else{

q->next=p->next;//刪除第i個結點

delete

p;}}雙鏈表有兩個指針域,一個指針指向左邊結點,一個指針指向右邊結點,用頭指針表示開始結點,用尾指針表示結尾結點。例如:struct

linklist{ int

data;linklist

*llink,

*rlink;};linklist

*head,

*rear;9.6

枚舉類型9.6.1

枚舉類型的定義枚舉類型定義用關鍵字enum標識,形式為:enum

標識符{枚舉數據表};標識符用來區(qū)分不同的枚舉類型,定義的枚舉類型用enum標識符”標識。枚舉數據(枚舉常量)是一些特定的標識符,標識符代表什么含義,完全由程序員決定。數據枚舉的順序規(guī)定了枚舉數據的序號,從0開始,依次遞增。例如:(1)

定義枚舉類型status,包含復制與刪除兩種狀態(tài):enum

status{copy,

delete};枚舉類型status僅有兩個數據,一個是copy,一個是delete,序號為0、1,代表復制與刪除。(2)

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

color{red,

yellow,

blue,

white,

black};枚舉類型color有red、yellow、blue、white、black五個數據,序號為0、1、2、3、4,代表紅、黃、藍、白、黑五種顏色。(3)

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

weekday{sun,

mon,

tue,

wed,

thu,

fri,

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

status{copy=6,

delete};則copy的序號為6,delete的序號為7。9.6.2

枚舉類型變量的定義先定義枚舉類型,再定義枚舉類型變量:enum

標識符{枚舉數據表};enum

標識符

變量表;在定義枚舉類型的同時定義枚舉類型變量:enum

標識符{枚舉數據表}

變量表;直接定義枚舉類型變量:enum

{枚舉數據表}

變量表;例如,對枚舉類型enum

color,定義枚舉變量c1、c2:enum

color

{red,yellow,blue,white,black};enum

color

c1,

c2;或enum

color{red,yellow,blue,white,black}c1,c2;或enum

{red,yellow,blue,white,black}c1,c2;枚舉類型數據可以進行賦值運算。枚舉類型是有序類型,枚舉類型數據還可以進行關系運算。枚舉類型數據的比較轉化成對序號進行比較,只有同一種枚舉類型的數據才能進行比較。將枚舉型數據按整型格式輸出,可得到整數值(枚舉變量值的序號)。使用強制類型轉換,可將整數值(枚舉值序號)轉換成對應枚舉值。例如:c1=(enum color

)2;//c1得到枚舉值blue枚舉類型數據不能直接輸入輸出。枚舉類型數據輸入時,先輸入其序號,再進行強制類型轉換完成。輸出時,采用開關語句先進行判斷,再轉化成對應字符串輸出。例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);

//輸出一種取法}}采用枚舉類型來描述數據。設用red表示紅色球,yellow表示黃色球,blue表示藍色球,white

表示白色球,black表示黑色球。//程序9-9,三種不同顏色球的取法main(

){enum

color {red,

yellow,

blue,

white,

black};enum

color

i,

j,

k,

l;int n,

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![KG-*4]=j)){n++;printf(″%4d″,

n);for(m=1;

m<=3;

m++){switch(m){case1:

1=i;

berak;case2:

1=j;

berak;case

3:

1=k;

berak;}switch(l)//間接輸出{case red:

printf(″%8s″,

″red″),

break;case

yellow:

printf(″%8s″,

″yellow″);

break;case

blue:

printf(″%8s″),

″blue″);

break;case

white:

printf(″%8s″,

″white″);

break;;case

black:

printf(″%8s″,

″black″);

break;}}printf(″\n″);}}printf(″總的取法有%d種\n″,n);}9.7

程序設計舉例例

9

-

10

編寫程序,登錄幼兒園200個小朋友的數據:編號、姓名、性別、年齡、

身高、體重、出生日期、入園日期,分別按身高、年齡排序輸出。//程序9-10

,幼兒園小朋友數據登錄、排序#define

M

200struct

dst{int

year;int

month;int day;

};struct

cst{int

no;char

name[12];char

sex;float

age;float

height;float

weight;dst

bdate;

dst edate;

};struct

cst

all[M];main(

){void

input(

);

//調用函數申明void sort1(

);void sort2(

);void

output(

);input(

);

//調用登錄函數

sort1(

);

//調用身高排序函數printf(″幼兒園小朋友一覽(依身高排序):

\n″);output(

);

//調用輸出函數printf(″\n″);sort2(

);

//調用年齡排序函數printf(″幼兒園小朋友一覽(依年齡排序):

\n″);output(

);

//再次調用輸出函數printf(″\n″);}void

input(

)//登錄函數{int

i;for(i=0;

i<M;

i++){printf(″依次輸入第%d個小朋友的數據:\n″,i);scanf(″%d%s%c%f%f%f%d%d%d%d%d%d″,&all[i].no,all[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);}}void sort1(

)//依身高排序函數{int i,

j;int

k;struct

cst

t;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;}}void sort1(

)//依年齡排序函數{int i,

j;int

k;struct

cst

t;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;}}void

output(

)//輸出函數{int

i;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″);}}例

9

-

11

編寫程序,

實現復數的乘法運算。//程序9-5,采用函數實現復數的乘法運算struct

complex{float

re;float

ie;

}

;main(

){struct

complex

x,

y;struct

complex

m;struct

complex

compm(

);

//調用函數申明

printf(″請輸入第一個復數的實部,虛部:″);scanf(″%f

溫馨提示

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

評論

0/150

提交評論