《C語言程序設(shè)計(jì)》 課件 第8章 結(jié)構(gòu)體_第1頁
《C語言程序設(shè)計(jì)》 課件 第8章 結(jié)構(gòu)體_第2頁
《C語言程序設(shè)計(jì)》 課件 第8章 結(jié)構(gòu)體_第3頁
《C語言程序設(shè)計(jì)》 課件 第8章 結(jié)構(gòu)體_第4頁
《C語言程序設(shè)計(jì)》 課件 第8章 結(jié)構(gòu)體_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章結(jié)構(gòu)體信息工程學(xué)院主講人:XXX內(nèi)容提要41結(jié)構(gòu)體類型的定義12構(gòu)體類型的定義423結(jié)構(gòu)體數(shù)組424252448.1結(jié)構(gòu)體類型的定義結(jié)構(gòu)體是一種比較復(fù)雜但卻非常靈活的構(gòu)造數(shù)據(jù)類型。允許用戶自已指定若干個(gè)成員,這種成員可以是不同的數(shù)據(jù)類型。我們把數(shù)據(jù)類型不同,且有一定聯(lián)系的多個(gè)數(shù)據(jù)用一定的語法組織起來,以struct為關(guān)鍵字,為其取一個(gè)名字,構(gòu)造出一種新的數(shù)據(jù)類型,被稱為結(jié)構(gòu)體類型。結(jié)構(gòu)體類型定義形式:struct結(jié)構(gòu)體類型名{類型說明符1成員1;類型說明符2成員2;.....類型說明符n成員n;};8.1結(jié)構(gòu)體類型的定義例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];};說明如下:(1)struct為類型說明的關(guān)鍵字,是結(jié)構(gòu)體類型定義的標(biāo)識(shí)符。(2)結(jié)構(gòu)體類型名由用戶定義,它與struct一起形成特定的結(jié)構(gòu)體類型,在以后的結(jié)構(gòu)體變量定義中可以被使用。(3)花括號(hào)內(nèi)是該結(jié)構(gòu)體各個(gè)成員,由它們共同組成結(jié)構(gòu)體。(4)注意:不要忽略整個(gè)結(jié)構(gòu)體類型定義結(jié)束的分員,花括號(hào)后面的分號(hào)不能省略。(5)結(jié)構(gòu)體中的成員本身也可以是結(jié)構(gòu)體,這稱為結(jié)構(gòu)體的嵌套。而且內(nèi)嵌結(jié)構(gòu)體成員的名字可以和外層成員名字相同。8.1結(jié)構(gòu)體類型的定義【例8.1】結(jié)構(gòu)體類型的嵌套。程序如下:structbirthday{ intyear; intmonth; intday;};structstudent{ charname[15]; structbirthdaydate; charsex; floatscore; charaddr[30];};;}結(jié)構(gòu)體類型的嵌套本例中,structstudent結(jié)構(gòu)體中又嵌套了stuctbirthday結(jié)構(gòu)體,如圖8-1所示:8.2結(jié)構(gòu)體變量8.2.1結(jié)構(gòu)體變量的定義定義結(jié)構(gòu)體變量有以三種方法。1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式為:struct結(jié)構(gòu)體類型名{類型說明符成員名;};struct結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名表列;8.2結(jié)構(gòu)體變量8.2.1結(jié)構(gòu)體變量的定義定義結(jié)構(gòu)體變量有以三種方法。1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式為:struct結(jié)構(gòu)體類型名{類型說明符成員名;};struct結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名表列;8.2結(jié)構(gòu)體變量8.2.1結(jié)構(gòu)體變量的定義2.在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量一般形式為:struct結(jié)構(gòu)體類型名{類型說明符成員名;}結(jié)構(gòu)體變量名表列;例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];}student1,student2;它的效果與第一種方法相同,形式比較緊湊,即同時(shí)定義了兩個(gè)structstudent類型的變量student1和student2。8.2結(jié)構(gòu)體變量8.2.1結(jié)構(gòu)體變量的定義3.無名定義,缺省了結(jié)構(gòu)體類型名,直接定義結(jié)構(gòu)體類型變量一般形式為:struct{類型說明符成員名;}結(jié)構(gòu)體變量名表列;例如:struct{intnum;charname[15]charsex;intage;floatscore;charaddr[30];}student1,student2;8.2結(jié)構(gòu)體變量8.2.2結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量在定義之后,可以引用這個(gè)結(jié)構(gòu)體變量,但應(yīng)遵循以下規(guī)則:(1)一個(gè)結(jié)構(gòu)體變量不能作為一個(gè)整體進(jìn)行輸入輸出。例如,已定義student1和student2為結(jié)構(gòu)體變量,它們已有值。不能這樣引用:printf(“%d,%s,%c,%d,%f,%s\n”,student1);結(jié)構(gòu)體變量中的各個(gè)成員只能分別進(jìn)行輸入和輸出。引用結(jié)構(gòu)體變量中成員的方法為:結(jié)構(gòu)體變量名.成員名8.2結(jié)構(gòu)體變量8.2.2結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量在定義之后,可以引用這個(gè)結(jié)構(gòu)體變量,但應(yīng)遵循以下規(guī)則:(2)如果成員本身又屬于一個(gè)結(jié)構(gòu)體類型,則需要用到多個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低一級(jí)的成員。只能對(duì)某一級(jí)的成員進(jìn)行賦值或存取以及運(yùn)算。例如,對(duì)上面定義的嵌套結(jié)構(gòu)體變量student1,可以這樣訪問成員:student1.numstudent1.birthday.month(3)結(jié)構(gòu)體變量的成員可以進(jìn)行各種運(yùn)算(像普通變量一樣)。例如:student2.score=student1.score;sum=student1.score+student2.score;//sum是定義過的非結(jié)構(gòu)體變量student1.age++;++student1.age;由于“.”運(yùn)算符的優(yōu)先級(jí)最高,因此student1.age++是對(duì)student1.age進(jìn)行自加運(yùn)算,而不是先對(duì)age進(jìn)行自加運(yùn)算。8.2結(jié)構(gòu)體變量8.2.2結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量在定義之后,可以引用這個(gè)結(jié)構(gòu)體變量,但應(yīng)遵循以下規(guī)則:(4)可以引用結(jié)構(gòu)體變量的地址,也可以引用結(jié)構(gòu)體成員的地址。例如:scanf(“%d”,&student1.num);(輸入student1.num的值)printf(“%o”,&student1);(輸出student1的首地址)但不能用以下語句整體讀入結(jié)構(gòu)體變量,例如:scanf(“%d,%s,%c,%d,%f,%s”,&student1);結(jié)構(gòu)體變量的地址主要用作函數(shù)參數(shù),傳遞結(jié)構(gòu)體變量的地址。8.2結(jié)構(gòu)體變量#include<stdio.h>voidmain(){structstudent{longintnum;charname[20]; charsex; charaddr[20];}a={100101,“LiLin”,‘M’,“123BeiJingRoad”};//對(duì)結(jié)構(gòu)體變量a賦值printf(“NO.:%ld\nname:%s\nsex:%c\naddress:%s\n”,a.num,,a.sex,a.addr);}運(yùn)行結(jié)果:8.2.3結(jié)構(gòu)體變量的初始化無參函數(shù)舉例8.3結(jié)構(gòu)體數(shù)組8.3.1定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組和定義結(jié)構(gòu)體變量的方法相仿,只要說明其為數(shù)組就可以了。例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];};structstudentstu[4];以上定義了一個(gè)數(shù)組stu,數(shù)組有4個(gè)元素,均為structstudent類型變量。8.3結(jié)構(gòu)體數(shù)組8.3.2結(jié)構(gòu)體數(shù)組初始化同其它類型的數(shù)組一樣,結(jié)構(gòu)體數(shù)組也可以初始化。例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];}stu[4]={{100101,“LiLin”,‘M’,19,86.5,“123BeiJingRoad”},{100102,“ZhangFun”,‘M’,20,88,“130ShangHaiRoad”},{100103,“WangMing”,‘M’,18,86.5,“102GuangZhouRoad”},{100104,“ZhangGang”,‘F’,21,95,“113GuangZhouRoad”}};8.3結(jié)構(gòu)體數(shù)組【例8.3】統(tǒng)計(jì)候選人得票的統(tǒng)計(jì)程序。設(shè)有3個(gè)候選人,每次輸入一個(gè)得票的候選人的名字,要求最后輸出每各人得票結(jié)果。程序如下:#include<stdio.h>#include<string.h>structperson{charname[20];intcount;}leader[3]={{"Li",0},{"Zhang",0},{"Fun",0}};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++;}printf("\n");for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}運(yùn)行結(jié)果:8.3.2結(jié)構(gòu)體數(shù)組應(yīng)用舉例本章小結(jié)本章主

溫馨提示

  • 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. 人人文庫(kù)網(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)論