語言程序設(shè)計-課件9-上課夏5周結(jié)構(gòu)_第1頁
語言程序設(shè)計-課件9-上課夏5周結(jié)構(gòu)_第2頁
語言程序設(shè)計-課件9-上課夏5周結(jié)構(gòu)_第3頁
語言程序設(shè)計-課件9-上課夏5周結(jié)構(gòu)_第4頁
語言程序設(shè)計-課件9-上課夏5周結(jié)構(gòu)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9章結(jié)構(gòu)

structure基本數(shù)據(jù)類型:charintfloatdouble構(gòu)造數(shù)據(jù)類型:由基本數(shù)據(jù)類型通過一定的規(guī)則組合而成,亦稱導(dǎo)出類型。數(shù)組(array),結(jié)構(gòu),聯(lián)合,枚舉指針類型空類型C語言的數(shù)據(jù)類型描述聯(lián)系人的基本信息:姓名、年齡和聯(lián)系電話charname[10];intage;chartelephone[13];描述50個朋友的聯(lián)系信息,建成通訊錄whenstructure希望每一個friend作為一個整體操作比如新增一個friend,刪除一個friend又可以對friend內(nèi)部的成員獨立操作,如只修改電話號碼結(jié)構(gòu)結(jié)構(gòu)類型的定義(P180)結(jié)構(gòu)類型定義的一般形式為:

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

{

類型名結(jié)構(gòu)成員名1;類型名結(jié)構(gòu)成員名2;

類型名結(jié)構(gòu)成員名n;

};結(jié)構(gòu)的定義以分號結(jié)束,被看作一條語句

關(guān)鍵字struct和它后面的結(jié)構(gòu)名一起組成一個新的數(shù)據(jù)類型名

structfriendAttr{charname[10];intage;chartelephone[13];};inta;structfriendAttrfriend1;structfriendAttrfriends[50];結(jié)構(gòu)類型的定義示例定義空間坐標(biāo)位置結(jié)構(gòu):structposition{doublelongitude;doublelatitude;};雖然x、y、z的類型相同,也可以用數(shù)組的方式表示,但采用結(jié)構(gòu)體描述整體性更強(qiáng),增加了程序的可讀性,使程序更清晰。structpositionhangzhou,beijing;結(jié)構(gòu)變量的定義三種形式:1)單獨定義structpositionhangzhou,beijing;structfriendAttrfriend1;structfriendAttrfriends[50];結(jié)構(gòu)變量的定義三種形式:2)混合定義定義結(jié)構(gòu)類型的同時定義結(jié)構(gòu)變量structfriendAttr{charname[10];intage;chartelephone[14];}friend1,friend2;分號放在最后結(jié)構(gòu)變量的定義三種形式:3)無類型名定義定義結(jié)構(gòu)變量時省略結(jié)構(gòu)類型struct{charname[10];intage;chartelephone[14];}friend1,friend2;由于沒有結(jié)構(gòu)名,該結(jié)構(gòu)無法新增相同類型的變量。結(jié)構(gòu)變量可以嵌套定義姓名性別年齡

通信地址聯(lián)系電話電子郵箱城市街道門牌號郵編structnestFriendsAttr{charname[10];intage;

structaddressaddr;chartelephone[14];}nestFriend1;structaddress{charcity[10];charstreet[20];intcode;intzip;};在定義嵌套的結(jié)構(gòu)類型時,必須先定義成員的結(jié)構(gòu)類型,再定義主結(jié)構(gòu)類型。結(jié)構(gòu)變量的初始化structfriendsAttrfriend1={"Zhang",26,""};nameagetelephoneZhang26

定義時直接賦值結(jié)構(gòu)變量的使用1.結(jié)構(gòu)變量成員的引用friend1.age=26;strcpy(,"ZhangSan");結(jié)構(gòu)變量名.結(jié)構(gòu)成員名struct{charname[10];intage;chartelephone[14];}friend1,friend2;1.結(jié)構(gòu)變量成員的引用結(jié)構(gòu)變量名.結(jié)構(gòu)成員名nestFriend1.addr.zip=310000;structnestFriendsAttr{charname[10];intage;

structaddressaddr;chartelephone[14];}nestFriend1;structaddress{charcity[10];charstreet[20];intcode;intzip;};例9-2計算實發(fā)工資在一個職工工資管理系統(tǒng)中,工資項目包括編號、姓名、基本工資、獎金、保險、實發(fā)工資。輸入一個正整數(shù)n,再輸入n個職工的前5項信息,計算并輸出每位職工的實發(fā)工資。實發(fā)工資=基本工資+獎金–保險。#include<stdio.h>structemployee{intnum;charname[20];floatjbgz,jj,bx,sfgz;};intmain(void){inti,n;

structemployeee;printf("請輸入職工人數(shù)n:");scanf("%d",&n);for(i=1;i<=n;i++){printf("請輸入第%d個職工的信息:",i);scanf("%d%s",&e.num,);scanf("%f%f%f",&e.jbgz,&e.jj,&e.bx);e.sfgz=e.jbgz+e.jj-e.bx;

printf("編號:%d姓名:%s實發(fā)工資:%.2f\n",e.num,,e.sfgz);}return0;}例9-2源程序結(jié)構(gòu)變量的使用2.結(jié)構(gòu)變量的整體賦值相同的結(jié)構(gòu)類型的結(jié)構(gòu)變量可以直接賦值。struct{charname[10];intage;chartelephone[14];}friend1,friend2;friend1=friend2;將賦值符號右邊結(jié)構(gòu)變量的每一個成員的值都賦給了左邊結(jié)構(gòu)變量中相應(yīng)的成員結(jié)構(gòu)變量的使用3.結(jié)構(gòu)變量作為函數(shù)參數(shù)struct{charname[10];intage;chartelephone[14];}friend1,friend2;如果在函數(shù)間傳遞結(jié)構(gòu)數(shù)據(jù),則需用結(jié)構(gòu)變量作為函數(shù)的參數(shù)或返回值。例9-3結(jié)構(gòu)變量做為函數(shù)參數(shù)改寫例9-2,要求使用結(jié)構(gòu)變量作為函數(shù)參數(shù)。定義一個用于計算實發(fā)工資的函數(shù):

floatcount_sfgz(structemployeem){returnm.jbgz+m.jj-m.bx;}再將主函數(shù)main中的語句改成函數(shù)調(diào)用:

e.sfgz=e.jbgz+e.jj-e.bx;=>e.sfgz=count_sfgz(e);函數(shù)聲明:floatcount_sfgz(structemployeem);一個結(jié)構(gòu)變量只能表示一個實體的信息,如果有許多相同類型的實體,就需要使用結(jié)構(gòu)數(shù)組。與普通數(shù)組的不同之處在于:結(jié)構(gòu)數(shù)組的元素每一個都是一個結(jié)構(gòu)類型的數(shù)據(jù)。結(jié)構(gòu)數(shù)組(p182)structfriendsAttr{charname[10];intage;chartelephone[13];}friends[10];

結(jié)構(gòu)數(shù)組friends,它有10個數(shù)組元素,從friends[0]到friends[9],每個數(shù)組元素都是結(jié)構(gòu)類型structfriendsAttr結(jié)構(gòu)數(shù)組的初始化structfriendsAttrfriends[10]={{"zhangsan",26,""},{"LiSi",30,""}};………

30LiSi

26ZhangSanfriends[9]…friends[1]friends[0]………

30LiSi

26ZhangSanfriends[9]…friends[1]friends[0]結(jié)構(gòu)數(shù)組元素的使用使用方法與同類型的變量完全相同friends[5].age=26;strcpy(friends[5].name,"ZhangSan");friends[4]=friends[1];例9-4結(jié)構(gòu)數(shù)組排序(P185)輸入并保存10個學(xué)生的信息,計算并輸出平均分,再按照從高分到低分的順序輸出他們的信息。#include<stdio.h>structstudent{intnum;charname[20];intscore;};structstudentstud[10];/*定義結(jié)構(gòu)數(shù)組*/intmain(void){inti,j,index,sum=0;structstudenttemp; for(i=0;i<10;i++){ printf("No%d:",i+1);scanf("%d%s%d",&stud[i].num,stud[i].name,&stud[i].score);sum=sum+stud[i].score;}for(i=0;i<9;++i){/*分?jǐn)?shù)從低到高排序,選擇排序法*/index=i;for(j=i+1;j<10;j++)if(stud[j].score<stud[index].score)index=j;temp=stud[index];stud[index]=stud[i];stud[i]=temp;}/*輸出成績略*/return0;}例9-4源程序9.4結(jié)構(gòu)指針9.4.1結(jié)構(gòu)指針的概念9.4.2結(jié)構(gòu)指針作為函數(shù)參數(shù)結(jié)構(gòu)指針的概念(p.186)8801844526zhangp結(jié)構(gòu)指針:指向結(jié)構(gòu)類型變量的指針structfriendsAttrfriend1={"zhang",26,"88018445"};structfriendsAttr*p;p=&friend1;通過結(jié)構(gòu)指針間接訪問結(jié)構(gòu)變量8801844526zhangpstructfriendsAttrfriend1={"zhang",26,"88018445"};structfriendsAttr*p;p=&friend1;通過結(jié)構(gòu)指針間接訪問結(jié)構(gòu)變量(1)*p訪問結(jié)構(gòu)成員(*p).age=36;36(2)指向運(yùn)算符->訪問指針指向的結(jié)構(gòu)成員p->age=100;當(dāng)p=&friend1時,以下三條語句等價:

friend1.age=36;(*p).age=36;p->age=36;優(yōu)先級:成員運(yùn)算.指向運(yùn)算->()[]左結(jié)合100結(jié)構(gòu)指針作為函數(shù)參數(shù)(p187)將結(jié)構(gòu)指針作為函數(shù)的參數(shù),實參向行參傳遞結(jié)構(gòu)指針,可以間接獲得多個函數(shù)計算結(jié)果。當(dāng)結(jié)構(gòu)指針作為函數(shù)的參數(shù)時,執(zhí)行效率高,可以完成比基本類型指針更為復(fù)雜的操作。例9-5輸入10個學(xué)生的學(xué)號、姓名和成績,輸出學(xué)生的成績等級和不及格人數(shù)。每個學(xué)生的記錄包括學(xué)號、姓名、成績和等級。要求定義和調(diào)用函數(shù)set_grade(),根據(jù)學(xué)生成績設(shè)置等級,并統(tǒng)計不及格人數(shù),等級設(shè)置:A:85-100;B:70-84;C:60-69;D:0-59例9-5源程序#defineN10structstudent

{intnum;charname[20];intscore;chargrade;};intmain(void){structstudentstu[N],*ptr;

ptr=stu;/*輸入略*/count=set_grade(ptr);…}intset_grade(structstudent*p){inti,n=0;for(i=0;i<N;i++,p++){if(p->score>=85)p->grade='A';elseif(p->score>=70)p->grade='B';elseif(p->score>=60)p->grade='C';else{p->grade='D';n++;}}returnn;}例9-1構(gòu)建簡單的手機(jī)通訊錄(p176)聯(lián)系人的基本信息:姓名、年齡和聯(lián)系電話最多容納50名聯(lián)系人的信息具有新建和查詢功能例9-1源程序#include<stdio.h>#include<string.h>/*手機(jī)通訊錄結(jié)構(gòu)定義*/structfriends_list{charname[10];/*姓名*/intage;/*年齡*/chartelephone[13];/*聯(lián)系電話*/};intCount=0;/*全局變量記錄當(dāng)前聯(lián)系人總數(shù)*/voidnew_friend(structfriends_listfriends[]);voidsearch_friend(structfriends_listfriends[],char*name);源程序intmain(void){intchoice;charname[10];

structfriends_list

friends[50];/*包含50個人的通訊錄*/do{printf("手機(jī)通訊錄功能選項:1:新建2:查詢0:退出\n");printf("請選擇功能:");scanf("%d",&choice);switch(choice){ case1:new_friend(friends);break; case2:printf("請輸入要查找的聯(lián)系人名:");scanf("%s",name);search_friend(friends,name);break; case0:break; }}while(choice!=0);printf("謝謝使用通訊錄功能!\n");return0;}源程序/*新建聯(lián)系人*/voidnew_friend(structfrie

溫馨提示

  • 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

提交評論