使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)演示文稿_第1頁
使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)演示文稿_第2頁
使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)演示文稿_第3頁
使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)演示文稿_第4頁
使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)演示文稿_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)演示文稿當(dāng)前第1頁\共有99頁\編于星期四\19點(diǎn)優(yōu)選使用結(jié)構(gòu)體類型處理組合數(shù)據(jù)當(dāng)前第2頁\共有99頁\編于星期四\19點(diǎn)9.1定義和使用結(jié)構(gòu)體變量9.2結(jié)構(gòu)體數(shù)組9.3結(jié)構(gòu)體指針9.4用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)9.5用指針處理鏈表9.6提高部分當(dāng)前第3頁\共有99頁\編于星期四\19點(diǎn)9.1定義和使用結(jié)構(gòu)體變量9.1.1自己建立結(jié)構(gòu)體類型9.1.2定義結(jié)構(gòu)體類型變量9.1.3結(jié)構(gòu)體變量的初始化和引用P248當(dāng)前第4頁\共有99頁\編于星期四\19點(diǎn)9.1.1自己建立結(jié)構(gòu)體類型P248用戶自己建立由不同類型數(shù)據(jù)組成的組合型的數(shù)據(jù)結(jié)構(gòu),它稱為結(jié)構(gòu)體例如,一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址等項(xiàng),是屬于同一個(gè)學(xué)生的,因此組成一個(gè)組合數(shù)據(jù),如student_1的變量,反映它們之間的內(nèi)在聯(lián)系當(dāng)前第5頁\共有99頁\編于星期四\19點(diǎn)structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};由程序設(shè)計(jì)者指定了一個(gè)結(jié)構(gòu)體類型structStudent它包括num,name,sex,age,score,addr等不同類型的成員當(dāng)前第6頁\共有99頁\編于星期四\19點(diǎn)聲明一個(gè)結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體名{成員表列};

類型名

成員名;當(dāng)前第7頁\共有99頁\編于星期四\19點(diǎn)說明:(1)結(jié)構(gòu)體類型并非只有一種,而是可以設(shè)計(jì)出許多種結(jié)構(gòu)體類型,例如structteacherstructworkerstructdate等結(jié)構(gòu)體類型各自包含不同的成員當(dāng)前第8頁\共有99頁\編于星期四\19點(diǎn)說明:(2)成員可以屬于另一個(gè)結(jié)構(gòu)體類型。

structdate

{intmonth;

intday;intyear;

};

structstudent

{intnum;charname[20];charsex;intage;

structdatebirthday;

charaddr[30];

};當(dāng)前第9頁\共有99頁\編于星期四\19點(diǎn)說明:(2)成員可以屬于另一個(gè)結(jié)構(gòu)體類型。

numnamesexagebirthdayaddrmonthdayyear當(dāng)前第10頁\共有99頁\編于星期四\19點(diǎn)9.1.2定義結(jié)構(gòu)體類型變量P250前面只是建立了一個(gè)結(jié)構(gòu)體類型,它相當(dāng)于一個(gè)模型,并沒有定義變量,其中并無具體數(shù)據(jù),系統(tǒng)對(duì)之也不分配存儲(chǔ)單元。相當(dāng)于設(shè)計(jì)好了圖紙,但并未建成具體的房屋。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量,并在其中存放具體的數(shù)據(jù)。當(dāng)前第11頁\共有99頁\編于星期四\19點(diǎn)1.先聲明結(jié)構(gòu)體類型,再定義該類型變量聲明結(jié)構(gòu)體類型structstudent,可以用它來定義變量structstudentstudent1,student2;結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名

當(dāng)前第12頁\共有99頁\編于星期四\19點(diǎn)1.先聲明結(jié)構(gòu)體類型,再定義該類型變量聲明結(jié)構(gòu)體類型structstudent,可以用它來定義變量structstudentstudent1,student2;10001ZhangXinM1990.5Shanghaistudent110002WangLiF2098Beijingstudent2當(dāng)前第13頁\共有99頁\編于星期四\19點(diǎn)2.在聲明類型的同時(shí)定義變量structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;當(dāng)前第14頁\共有99頁\編于星期四\19點(diǎn)3.不指定類型名而直接定義結(jié)構(gòu)體類型變量其一般形式為:struct{成員表列}變量名表列;

指定了一個(gè)無名的結(jié)構(gòu)體類型。當(dāng)前第15頁\共有99頁\編于星期四\19點(diǎn)說明:(1)結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概念,不要混同。只能對(duì)變量賦值、存取或運(yùn)算,而不能對(duì)一個(gè)類型賦值、存取或運(yùn)算。在編譯時(shí),對(duì)類型是不分配空間的,只對(duì)變量分配空間。當(dāng)前第16頁\共有99頁\編于星期四\19點(diǎn)(2)結(jié)構(gòu)體類型中的成員名可以與程序中的變量名相同,但二者不代表同一對(duì)象。(3)對(duì)結(jié)構(gòu)體變量中的成員(即“域”),可以單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。當(dāng)前第17頁\共有99頁\編于星期四\19點(diǎn)9.1.3結(jié)構(gòu)體變量的初始化和引用

例9.1把一個(gè)學(xué)生的信息放在一個(gè)結(jié)構(gòu)體變量中,然后輸出這個(gè)學(xué)生的信息。解題思路:先在程序中自己建立一個(gè)結(jié)構(gòu)體類型,包括有關(guān)學(xué)生信息的各成員然后用它來定義結(jié)構(gòu)體變量,同時(shí)賦以初值最后輸出該結(jié)構(gòu)體變量的各成員P91當(dāng)前第18頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}student1={10101,“LiLin”,‘M’,“123BeijingRoad”};printf("NO.:%d\nname:%s\nsex:%c\naddress:%s\n",student1.num,,student1.sex,student1.addr);}當(dāng)前第19頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}student1={10101,“LiLin”,‘M’,“123BeijingRoad”};printf("NO.:%d\nname:%s\nsex:%c\naddress:%s\n",student1.num,,student1.sex,student1.addr);}{}當(dāng)前第20頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}student1={10101,“LiLin”,‘M’,“123BeijingRoad”};

……}student1.num=10010;對(duì)printf(“%s\n”,student1);不對(duì)當(dāng)前第21頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}student1={10101,“LiLin”,‘M’,“123BeijingRoad”};

……}structdatebirthday;student1.num=10010;對(duì)student1.birthday.month=11;對(duì)當(dāng)前第22頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}student1={10101,“LiLin”,‘M’,“123BeijingRoad”};

……}student2.num=student1.num;對(duì)sum=student1.num+student2.num;對(duì)student1.num++;對(duì),student2;當(dāng)前第23頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}student1={10101,“LiLin”,‘M’,“123BeijingRoad”};

……}student2=student1;對(duì),student2;scanf(“%d”,&student1.num);對(duì)scanf(“%d”,&student1);錯(cuò)當(dāng)前第24頁\共有99頁\編于星期四\19點(diǎn)

例9.2輸入兩個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸出成績(jī)較高學(xué)生的學(xué)號(hào)、姓名和成績(jī)解題思路:(1)定義兩個(gè)結(jié)構(gòu)相同的結(jié)構(gòu)體變量student1和student2;(2)分別輸入兩個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī);(3)比較兩個(gè)學(xué)生的成績(jī),如果學(xué)生1的成績(jī)高于學(xué)生2,就輸出學(xué)生1的全部信息,如果學(xué)生2的成績(jī)高于學(xué)生1,就輸出學(xué)生2的全部信息。如果二者相等,輸出2個(gè)學(xué)生的全部信息當(dāng)前第25頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>voidmain(){structstudent{intnum;charname[20];floatscore;}student1,student2;scanf("%d%s%f",&student1.num,

,&student1.score);scanf(“%d%s%f”,&student2.num,

,&student2.score);不能加&當(dāng)前第26頁\共有99頁\編于星期四\19點(diǎn)printf("Thehigherscoreis:\n");if(student1.score>student2.score)printf("%d%s%6.2f\n",student1.num,

student1.name,student1.score);elseif(student1.score<student2.score)printf("%d%s%6.2f\n",student2.num,

student2.name,student2.score);else{printf("%d%s%6.2f\n",student1.num,

student1.name,student1.score); printf("%d%s%6.2f\n",student2.num,

student2.name,student2.score);}}當(dāng)前第27頁\共有99頁\編于星期四\19點(diǎn)9.2結(jié)構(gòu)體數(shù)組P255

例9.3有3個(gè)候選人,每個(gè)選民只能投票選一人,要求編一個(gè)統(tǒng)計(jì)選票的程序,先后輸入被選人的名字,最后輸出各人得票結(jié)果。當(dāng)前第28頁\共有99頁\編于星期四\19點(diǎn)解題思路:設(shè)一個(gè)結(jié)構(gòu)體數(shù)組,數(shù)組中包含3個(gè)元素每個(gè)元素中的信息應(yīng)包括候選人的姓名(字符型)和得票數(shù)(整型)輸入被選人的姓名,然后與數(shù)組元素中的“姓名”成員比較,如果相同,就給這個(gè)元素中的“得票數(shù)”成員的值加1輸出所有元素的信息當(dāng)前第29頁\共有99頁\編于星期四\19點(diǎn)#include<string.h>#include<stdio.h>structperson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,“Sun”,0};全局的結(jié)構(gòu)體數(shù)組namecountleader[0]Li0Zhang0Sun0當(dāng)前第30頁\共有99頁\編于星期四\19點(diǎn)voidmain(){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);}leader[j].count=leader[j].count+1;當(dāng)前第31頁\共有99頁\編于星期四\19點(diǎn)voidmain(){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);}當(dāng)前第32頁\共有99頁\編于星期四\19點(diǎn)說明:(1)定義結(jié)構(gòu)體數(shù)組一般形式是①struct結(jié)構(gòu)體名{成員表列}數(shù)組名[數(shù)組長(zhǎng)度];②先聲明一個(gè)結(jié)構(gòu)體類型,然后再用此類型定義結(jié)構(gòu)體數(shù)組:

結(jié)構(gòu)體類型

數(shù)組名[數(shù)組長(zhǎng)度];

如:structpersonleader[3];當(dāng)前第33頁\共有99頁\編于星期四\19點(diǎn)說明:(2)對(duì)結(jié)構(gòu)體數(shù)組初始化的形式是在定義數(shù)組的后面加上:={初值表列};

如:structpersonleader[3]={"Li",0,"Zhang",0,“Sun",0};當(dāng)前第34頁\共有99頁\編于星期四\19點(diǎn)

例9.4有n個(gè)學(xué)生的信息(包括學(xué)號(hào)、姓名、成績(jī)),要求按照成績(jī)的高低順序輸出各學(xué)生的信息。解題思路:用結(jié)構(gòu)體數(shù)組存放n個(gè)學(xué)生信息,采用選擇法對(duì)各元素進(jìn)行排序(進(jìn)行比較的是各元素中的成績(jī))。當(dāng)前第35頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>#defineN5structstudent{intnum;charname[20];floatscore;};voidmain(){structstudentstu[N]={{10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li“,86},{10108,“Ling”,73.5},{10110,“Sun”,100}};structstudenttemp;inti,j,k;當(dāng)前第36頁\共有99頁\編于星期四\19點(diǎn)printf("Theorderis:\n");for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(stu[j].score>stu[k].score)k=j;temp=stu[k];stu[k]=stu[i];stu[i]=temp;}for(i=0;i<N;i++)printf("%6d%8s%6.2f\n",stu[i].num,stu[i].name,stu[i].score);printf("\n");}寫法上與普通變量一致當(dāng)前第37頁\共有99頁\編于星期四\19點(diǎn)9.3結(jié)構(gòu)體指針P258指向結(jié)構(gòu)體對(duì)象的指針變量既可以指向結(jié)構(gòu)體變量,也可以用來指向結(jié)構(gòu)體數(shù)組中的元素。但是,指針變量的基類型必須與結(jié)構(gòu)體變量的類型相同。例如:structstudent*pt;當(dāng)前第38頁\共有99頁\編于星期四\19點(diǎn)

例9.5通過指向結(jié)構(gòu)體變量的指針變量輸出結(jié)構(gòu)體變量中成員的信息。解題思路:在已有的基礎(chǔ)上,本題要解決兩個(gè)問題:怎樣對(duì)結(jié)構(gòu)體變量成員賦值;怎樣通過指向結(jié)構(gòu)體變量的指針訪問結(jié)構(gòu)體變量中成員。當(dāng)前第39頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>#include<string.h>voidmain(){structstudent{longnum;charname[20];charsex;floatscore;};……當(dāng)前第40頁\共有99頁\編于星期四\19點(diǎn)

structstudentstu_1;

structstudent*p;

p=&stu_1;

stu_1.num=10101;strcpy(stu_1.name,“LiLin”);stu_1.sex='M‘;stu_1.score=89.5;printf("No.:%ld\n”,stu_1.num);printf("name:%s\n",stu_1.name);printf("sex:%c\n”,stu_1.sex);printf(”score:%5.1f\n”,stu_1.score);}stu_110101LiLinM89.5p當(dāng)前第41頁\共有99頁\編于星期四\19點(diǎn)structstudentstu_1;structstudent*p;p=&stu_1;stu_1.num=10101;strcpy(stu_1.name,“LiLin”);stu_1.sex='M‘;stu_1.score=89.5;printf("No.:%ld\n”,stu_1.num);printf("name:%s\n",stu_1.name);printf("sex:%c\n”,stu_1.sex);printf(”score:%5.1f\n”,stu_1.score);}stu_110101LiLinM89.5p(*p).num(*p).name(*p).sex(*p).score當(dāng)前第42頁\共有99頁\編于星期四\19點(diǎn)說明:為了使用方便和直觀,允許把(*p).num用p->num來代替(*p).name等價(jià)于p->name如果p指向一個(gè)結(jié)構(gòu)體變量stu,以下等價(jià):①stu.成員名(如stu.num)②(*p).成員名(如(*p).num)p->成員名(如p->num)當(dāng)前第43頁\共有99頁\編于星期四\19點(diǎn)

例9.6有3個(gè)學(xué)生的信息,放在結(jié)構(gòu)體數(shù)組中,要求輸出全部學(xué)生的信息。當(dāng)前第44頁\共有99頁\編于星期四\19點(diǎn)解題思路:用指向結(jié)構(gòu)體變量的指針處理(1)聲明structstudent,并定義結(jié)構(gòu)體數(shù)組、初始化(2)定義指向structstudent類型指針p(3)使p指向數(shù)組首元素,輸出元素中各信息(4)使p指向下一個(gè)元素,輸出元素中各信息(5)再使p指向結(jié)構(gòu)體數(shù)組的下一個(gè)元素,輸出它指向的元素中的有關(guān)信息當(dāng)前第45頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>structstudent{intnum;charname[20];charsex;intage;};structstudentstu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19},{10104,"WangMin",'F',20}};當(dāng)前第46頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*p;printf("No.Namesexage\n");for(p=stu;p<stu+3;p++)printf(“%5d%-20s%2c%4d\n”,p->num,p->name,p->sex,p->age);}10101LiLinM1810102ZhangFangM1910104WangMinF20stu[0]stu[1]stu[2]當(dāng)前第47頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*p;printf("No.Namesexage\n");for(p=stu;p<stu+3;p++)printf(“%5d%-20s%2c%4d\n”,p->num,p->name,p->sex,p->age);}10101LiLinM1810102ZhangFangM1910104WangMinF20pstu[0]stu[1]stu[2]當(dāng)前第48頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*p;printf("No.Namesexage\n");for(p=stu;p<stu+3;p++)printf(“%5d%-20s%2c%4d\n”,p->num,p->name,p->sex,p->age);}10101LiLinM1810102ZhangFangM1910104WangMinF20pstu[0]stu[1]stu[2]當(dāng)前第49頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*p;printf("No.Namesexage\n");for(p=stu;p<stu+3;p++)printf(“%5d%-20s%2c%4d\n”,p->num,p->name,p->sex,p->age);}10101LiLinM1810102ZhangFangM1910104WangMinF20pstu[0]stu[1]stu[2]當(dāng)前第50頁\共有99頁\編于星期四\19點(diǎn)9.4用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)P262將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),有3個(gè)方法。當(dāng)前第51頁\共有99頁\編于星期四\19點(diǎn)(1)用結(jié)構(gòu)體變量的成員作參數(shù)。

例如,用stu[1].num或stu[2].name作函數(shù)實(shí)參,將實(shí)參值傳給形參。用法和用普通變量作實(shí)參是一樣的,屬于“值傳遞”方式。應(yīng)當(dāng)注意實(shí)參與形參的類型保持一致。當(dāng)前第52頁\共有99頁\編于星期四\19點(diǎn)(2)用結(jié)構(gòu)體變量作實(shí)參。用結(jié)構(gòu)體變量作實(shí)參時(shí),將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部按順序傳遞給形參,形參也必須是同類型的結(jié)構(gòu)體變量在函數(shù)調(diào)用期間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時(shí)間上開銷較大在被調(diào)用函數(shù)期間改變形參(也是結(jié)構(gòu)體變量)的值,不能返回主調(diào)函數(shù)一般較少用這種方法當(dāng)前第53頁\共有99頁\編于星期四\19點(diǎn)(3)用指向結(jié)構(gòu)體變量(或數(shù)組元素)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組元素)的地址傳給形參。當(dāng)前第54頁\共有99頁\編于星期四\19點(diǎn)

例9.7有N個(gè)結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號(hào)、姓名和3門課程的成績(jī)。要求輸出平均成績(jī)最高的學(xué)生的信息(包括學(xué)號(hào)、姓名、3門課程成績(jī)和平均成績(jī))。當(dāng)前第55頁\共有99頁\編于星期四\19點(diǎn)解題思路:按照功能函數(shù)化的思想,分別用3個(gè)函數(shù)來實(shí)現(xiàn)不同的功能:用input函數(shù)輸入數(shù)據(jù)和求各學(xué)生平均成績(jī)用max函數(shù)找平均成績(jī)最高的學(xué)生用print函數(shù)輸出成績(jī)最高學(xué)生的信息在主函數(shù)中先后調(diào)用這3個(gè)函數(shù),用指向結(jié)構(gòu)體變量的指針作實(shí)參。最后得到結(jié)果。本程序假設(shè)N=3當(dāng)前第56頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>#defineN3structstudent{intnum;charname[20];floatscore[3];floataver;};4個(gè)成員輸入前3個(gè)成員值計(jì)算最后成員值當(dāng)前第57頁\共有99頁\編于星期四\19點(diǎn)voidmain(){voidinput(structstudentstu[]);structstudentmax(structstudentstu[]);voidprint(structstudentstu);structstudentstu[N],*p=stu;input(p);print(max(p));}當(dāng)前第58頁\共有99頁\編于星期四\19點(diǎn)voidinput(structstudentstu[]){inti;printf("請(qǐng)輸入各學(xué)生的信息:

學(xué)號(hào)、姓名、三門課成績(jī):\n");for(i=0;i<N;i++){scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;}}輸入第1個(gè)成員值輸入第2個(gè)成員值輸入第3個(gè)成員值計(jì)算第4個(gè)成員值stu[0]stu[1]stu[2]stu10101Li78899888.33i=0當(dāng)前第59頁\共有99頁\編于星期四\19點(diǎn)voidinput(structstudentstu[]){inti;printf("請(qǐng)輸入各學(xué)生的信息:

學(xué)號(hào)、姓名、三門課成績(jī):\n");for(i=0;i<N;i++){scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;}}輸入第1個(gè)成員值輸入第2個(gè)成員值輸入第3個(gè)成員值計(jì)算第4個(gè)成員值stu[0]stu[1]stu[2]stu10101Li78899888.3310103Wang98.5876984.83i=1當(dāng)前第60頁\共有99頁\編于星期四\19點(diǎn)voidinput(structstudentstu[]){inti;printf("請(qǐng)輸入各學(xué)生的信息:

學(xué)號(hào)、姓名、三門課成績(jī):\n");for(i=0;i<N;i++){scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;}}輸入第1個(gè)成員值輸入第2個(gè)成員值輸入第3個(gè)成員值計(jì)算第4個(gè)成員值stu[0]stu[1]stu[2]stu10101Li78899888.3310103Wang98.5876984.8310106Sun8876.58984.5i=2當(dāng)前第61頁\共有99頁\編于星期四\19點(diǎn)structstudentmax(structstudentstu[]){inti,m=0;for(i=0;i<N;i++)if(stu[i].aver>stu[m].aver)m=i;returnstu[m];}

stu[0]stu[1]stu[2]stu10101Li78899888.3310103Wang98.5876984.8310106Sun8876.58984.5最大返回當(dāng)前第62頁\共有99頁\編于星期四\19點(diǎn)voidprint(structstudentstud){printf("\n成績(jī)最高的學(xué)生是:\n"); printf("學(xué)號(hào):%d\n姓名:%s\n

三門課成績(jī):%5.1f,%5.1f,%5.1f\n

平均成績(jī):%6.2f\n”,stud.num,,stud.score[0],stud.score[1],stud.score[2],stud.aver);}stud10101Li78899888.3310103Wang98.5876984.8310106Sun8876.58984.5numnamescoreaverstu[0]stu[1]stu[2]當(dāng)前第63頁\共有99頁\編于星期四\19點(diǎn)以上3個(gè)函數(shù)的調(diào)用,情況各不相同:調(diào)用input函數(shù)時(shí),實(shí)參是指針變量,形參是結(jié)構(gòu)體數(shù)組,傳遞的是結(jié)構(gòu)體元素的地址,函數(shù)無返回值。調(diào)用max函數(shù)時(shí),實(shí)參是指針變量,形參是結(jié)構(gòu)體數(shù)組,傳遞的是結(jié)構(gòu)體元素的地址,函數(shù)的返回值是結(jié)構(gòu)體類型數(shù)據(jù)。調(diào)用print函數(shù)時(shí),實(shí)參是結(jié)構(gòu)體變量,形參是結(jié)構(gòu)體變量,傳遞的是結(jié)構(gòu)體變量中各成員的值,函數(shù)無返回值。當(dāng)前第64頁\共有99頁\編于星期四\19點(diǎn)9.5用指針處理鏈表什么是線性鏈表9.5.2建立簡(jiǎn)單的靜態(tài)鏈表9.5.3建立動(dòng)態(tài)鏈表P265當(dāng)前第65頁\共有99頁\編于星期四\19點(diǎn)什么是線性鏈表P265鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)head12491249A135613561475B1475C10211021D\0頭指針各結(jié)點(diǎn)地址不連續(xù)各結(jié)點(diǎn)含有兩個(gè)部分表尾當(dāng)前第66頁\共有99頁\編于星期四\19點(diǎn)鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)鏈表必須利用指針變量才能實(shí)現(xiàn)當(dāng)前第67頁\共有99頁\編于星期四\19點(diǎn)structstudent{intnum;

floatscore;

structstudent*next;}a,b,c;1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)a.next=&b;b.next=&c;numscorenext當(dāng)前第68頁\共有99頁\編于星期四\19點(diǎn)9.5.2建立簡(jiǎn)單的靜態(tài)鏈表P266

例9.8建立一個(gè)如圖所示的簡(jiǎn)單鏈表,它由3個(gè)學(xué)生數(shù)據(jù)的結(jié)點(diǎn)組成,要求輸出各結(jié)點(diǎn)中的數(shù)據(jù)。1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenext當(dāng)前第69頁\共有99頁\編于星期四\19點(diǎn)解題思路:1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadhead=&a;a.next=&b;b.next=&c;NULLc.next=NULL;當(dāng)前第70頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h> structstudent{intnum;floatscore;structstudent*next;};當(dāng)前第71頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudenta,b,c,*head,*p;a.num=10101;a.score=89.5;b.num=10103;b.score=90;c.num=10107;c.score=85;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next; }while(p!=NULL);}當(dāng)前第72頁\共有99頁\編于星期四\19點(diǎn)

p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next; }while(p!=NULL);}1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&b;當(dāng)前第73頁\共有99頁\編于星期四\19點(diǎn)

p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next; }while(p!=NULL);}1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&b;當(dāng)前第74頁\共有99頁\編于星期四\19點(diǎn)

p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next; }while(p!=NULL);}1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&c;當(dāng)前第75頁\共有99頁\編于星期四\19點(diǎn)

p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next; }while(p!=NULL);}1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&c;當(dāng)前第76頁\共有99頁\編于星期四\19點(diǎn)

p=head;do{printf(“%ld%5.1f\n”,p->num,p->score);p=p->next; }while(p!=NULL);}1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=NULL;靜態(tài)鏈表當(dāng)前第77頁\共有99頁\編于星期四\19點(diǎn)9.5.3建立動(dòng)態(tài)鏈表P267所謂建立動(dòng)態(tài)鏈表是指在程序執(zhí)行過程中從無到有地建立起一個(gè)鏈表,即一個(gè)一個(gè)地開辟結(jié)點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系。當(dāng)前第78頁\共有99頁\編于星期四\19點(diǎn)

例9.9建立一個(gè)有2名學(xué)生學(xué)號(hào)和成績(jī)數(shù)據(jù)的單向動(dòng)態(tài)鏈表。解題思路:定義結(jié)構(gòu)體變量,其成員包括學(xué)號(hào)、成績(jī)和指針變量。動(dòng)態(tài)地開辟一個(gè)新單元(動(dòng)態(tài)開辟內(nèi)存單元用malloc函數(shù))。使指針變量p和head指向此結(jié)點(diǎn)。向此結(jié)點(diǎn)輸入數(shù)據(jù)。當(dāng)前第79頁\共有99頁\編于星期四\19點(diǎn)

例9.9建立一個(gè)有2名學(xué)生學(xué)號(hào)和成績(jī)數(shù)據(jù)的單向動(dòng)態(tài)鏈表。解題思路:再開辟第2個(gè)新結(jié)點(diǎn),并使指針變量p指向此結(jié)點(diǎn)。使第2個(gè)結(jié)點(diǎn)中的指針變量的值為NULL,即不指向任何對(duì)象,鏈表到此為止。輸出兩個(gè)結(jié)點(diǎn)中的數(shù)據(jù)。當(dāng)前第80頁\共有99頁\編于星期四\19點(diǎn)#include<stdio.h>#include<malloc.h>#defineLENsizeof(structstudent)structstudent{intnum;floatscore;structstudent*next;};structstudent類型數(shù)據(jù)的長(zhǎng)度當(dāng)前第81頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*head,*p;head=p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);p=(structstudent*)malloc(LEN);

headp1010189.5當(dāng)前第82頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*head,*p;head=p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);head->next=p;p=head;

head1010189.5p1010290p->next=NULL;NULL當(dāng)前第83頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*head,*p;head=p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);head->next=p;p=head;

head1010189.5p1010290p->next=NULL;NULL當(dāng)前第84頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*head,*p;head=p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);head->next=p;p->next=NULL;p=head;printf(“結(jié)點(diǎn)1:%d,%6.2f\n”,p->num,p->score);p=p->next;1010189.5p1010290NULL結(jié)點(diǎn)1:10101,89.50當(dāng)前第85頁\共有99頁\編于星期四\19點(diǎn)voidmain(){structstudent*head,*p;head=p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);p=(structstudent*)malloc(LEN);scanf(“%d,%f”,&p->num,&p->score);head->next=p;p->next=NULL;p=head;printf(“結(jié)點(diǎn)1:%d,%6.2f\n”,

溫馨提示

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