在C程序中使用結(jié)構(gòu)體.ppt_第1頁(yè)
在C程序中使用結(jié)構(gòu)體.ppt_第2頁(yè)
在C程序中使用結(jié)構(gòu)體.ppt_第3頁(yè)
在C程序中使用結(jié)構(gòu)體.ppt_第4頁(yè)
在C程序中使用結(jié)構(gòu)體.ppt_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

結(jié)構(gòu)體,徐秋紅 辦公地點(diǎn):主樓四層(信息學(xué)院)411室 辦公電話:01062336516 E-mail:,主要內(nèi)容,什么是結(jié)構(gòu)體 如何定義一個(gè)結(jié)構(gòu)體 如何聲明結(jié)構(gòu)體變量 如何引用結(jié)構(gòu)體變量:結(jié)構(gòu)體的輸入、輸出操作、結(jié)構(gòu)體成員操作等 結(jié)構(gòu)體數(shù)組,什么是結(jié)構(gòu)體,除數(shù)組以外的又一個(gè)構(gòu)造類型 為什么引入結(jié)構(gòu)體的概念 例如:體檢表,什么是結(jié)構(gòu)體,例如:學(xué)生的成績(jī)單,這些表格中數(shù)據(jù)的特點(diǎn)是什么?,含義上具有相關(guān)性 表現(xiàn)的形式上不完全相同,什么是結(jié)構(gòu)體,表格的數(shù)據(jù)特點(diǎn):表格中集合了各種類型的數(shù)據(jù),無(wú)法用前面學(xué)過(guò)的任何單一種類的數(shù)據(jù)類型來(lái)完全描述 因此C語(yǔ)言引入了一種能集中不同的數(shù)據(jù)類型于一體的構(gòu)造類型 -結(jié)構(gòu)體,什么是結(jié)構(gòu)體,結(jié)構(gòu)體是一個(gè)新的構(gòu)造類型 是由編程者根據(jù)自己的需求而設(shè)計(jì)的一種結(jié)構(gòu)形式(或稱為由編程者自己設(shè)計(jì)的數(shù)據(jù)類型) 例如:,通過(guò)分析和整理要處理的數(shù)據(jù)內(nèi)容,歸納需要哪些數(shù)據(jù)項(xiàng),并指出每個(gè)數(shù)據(jù)項(xiàng)的表現(xiàn)形式(即它屬于哪種數(shù)據(jù)類型)。 然后準(zhǔn)備定義新的數(shù)據(jù)類型:結(jié)構(gòu)體,定義結(jié)構(gòu)體,定義結(jié)構(gòu)體 定義兩個(gè)內(nèi)容,struct score char num10; char name20; int english; int math; ;,自定義了一個(gè)數(shù)據(jù)類型, 它的名字為score,結(jié)構(gòu)體的內(nèi)容是由多個(gè)數(shù)據(jù)項(xiàng)組成,每個(gè)數(shù)據(jù)項(xiàng)被稱為該結(jié)構(gòu)體的結(jié)構(gòu)體成員,定義結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體必須先定義,后引用 定義結(jié)構(gòu)體其實(shí)是對(duì)結(jié)構(gòu)體內(nèi)部構(gòu)成形式進(jìn)行描述,即對(duì)其成員的聲明,包括每個(gè)成員所具有的數(shù)據(jù)類型的描述。,定義結(jié)構(gòu)體類型的語(yǔ)句格式: struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體的成員列表; ;,struct coordinate double x; double y; ;,對(duì)每個(gè)成員必須分別聲明,無(wú)論他們是否具有相同的數(shù)據(jù)類型,通訊錄每條記錄的描述:,定義結(jié)構(gòu)體類型,struct addr char name20; char depart30; /* 工作單位 */ char address30; /* 住址 */ int postcode; /* 郵編 */ char phone9; /* 電話號(hào)碼 */ char email30; /* E-mail */ ;,聲明結(jié)構(gòu)體變量,1)定義了結(jié)構(gòu)體類型后,再聲明結(jié)構(gòu)體類型的變量 struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體成員表; ; struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名;,先定義結(jié)構(gòu)體類型,再聲明結(jié)構(gòu)體類型的變量,聲明結(jié)構(gòu)體變量,struct singer int s_id; double s1; /* 參賽歌曲得分 */ double s2; /* 知識(shí)問(wèn)答得分 */ double sum; /* 該選手的總得分 */ ;,struct singer a1, a2, a3, a4, a5, a6;,聲明結(jié)構(gòu)體變量,2) 在定義結(jié)構(gòu)體類型的同時(shí)聲明結(jié)構(gòu)體變量。即將結(jié)構(gòu)體類型的定義和聲明結(jié)構(gòu)體變量放在同一個(gè)語(yǔ)句中. 其一般形式如下: struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體成員表; 結(jié)構(gòu)體變量名表;,struct singer int s_id; double s1; double s2; double sum; a1,a2,a3,a4,a5,a6;,聲明結(jié)構(gòu)體變量,3)在定義結(jié)構(gòu)體類型時(shí)省略結(jié)構(gòu)體類型名,并直接聲明結(jié)構(gòu)體變量。 一般形式如下: struct 結(jié)構(gòu)體成員表; 結(jié)構(gòu)體變量名表; 即定義的結(jié)構(gòu)體沒(méi)有結(jié)構(gòu)體類型名。,如果省略結(jié)構(gòu)體類型名, 則稱之為無(wú)名結(jié)構(gòu)體, 這種情況常常出現(xiàn)在函數(shù)內(nèi)部。使用這種結(jié)構(gòu)體定義形式時(shí),一定是在定義結(jié)構(gòu)體類型的同時(shí),就聲明結(jié)構(gòu)體變量,struct singer int s_id; double s1; double s2; double sum; a1,a2,a3,a4,a5,a6;,結(jié)構(gòu)體的長(zhǎng)度,結(jié)構(gòu)體類型的長(zhǎng)度 一旦通過(guò)結(jié)構(gòu)體類型定義語(yǔ)句定義了一個(gè)結(jié)構(gòu)體類型,則這個(gè)結(jié)構(gòu)體類型的長(zhǎng)度也就被固定下來(lái),. 一個(gè)結(jié)構(gòu)體類型長(zhǎng)度的計(jì)算 sizeof(結(jié)構(gòu)體類型名) 一個(gè)結(jié)構(gòu)體變量長(zhǎng)度的計(jì)算 sizeof(結(jié)構(gòu)體變量名),定義結(jié)構(gòu)體類型,如 struct singer int s_id; double s1; double s2; stud1; 則結(jié)構(gòu)體變量stud1的長(zhǎng)度是多少?,sizeof(數(shù)據(jù)類型名)返回“數(shù)據(jù)類型名”的類型長(zhǎng)度。 sizeof(變量名)返回“結(jié)構(gòu)體變量”的長(zhǎng)度。,定義結(jié)構(gòu)體類型,#include struct singer int s_id; double s1; double s2; stud1; int main(void) printf(“nnt 長(zhǎng)度: %d %d“, sizeof(struct singer); printf(“nnt 長(zhǎng)度: %d %d“, sizeof(stud1); return 0; ,s_long.c,結(jié)構(gòu)體變量的初始化,結(jié)構(gòu)體變量初始化的一般形式為: 方式1: struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名 = 初始化數(shù)據(jù); 方式2: struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體成員表; 結(jié)構(gòu)體變量名 = 初始化數(shù)據(jù) ; 方式3: struct 結(jié)構(gòu)體成員表; 結(jié)構(gòu)體變量名 = 初始化數(shù)據(jù) ;,結(jié)構(gòu)體變量的初始化,由于結(jié)構(gòu)體類型變量匯集了各類不同數(shù)據(jù)類型的成員,所以結(jié)構(gòu)體類型變量的初始化就略顯復(fù)雜。 struct ach /*定義學(xué)生結(jié)構(gòu)體類型*/ char name20; /* 學(xué)生姓名*/ char sex; /* 性別*/ int num; /* 學(xué)號(hào)*/ float score3; /* 三科考試成績(jī)*/ stu1= “Frank“, M, 206110, 78.5, 91.5, 95.0 , stu2;,結(jié)構(gòu)體變量的引用,C語(yǔ)言對(duì)結(jié)構(gòu)體變量的處理是通過(guò)對(duì)其成員的引用實(shí)現(xiàn)的。,“.”被稱為成員(分量)運(yùn)算符 它在所有的運(yùn)算符中優(yōu)先級(jí)最高。,引用結(jié)構(gòu)體變量的成員的一般方式為: 結(jié)構(gòu)體變量名.成員名,一個(gè)整體,結(jié)構(gòu)體變量的引用,從鍵盤(pán)給a4賦值,然后輸出: scanf(“%d“, ); scanf(“%lf%lf“, ); printf(“ n %d n“, ); printf(“ %f, %f n“, ); printf(“ %f n“, );,struct singer int s_id; double s1; double s2; double sum; a1, a2 = 113045, 80, 78, 0, a3, a4;,&a4.s_id,&a4.s1, &a4.s2,a4.s_id,a4.s1, a4.s2,a4.sum=a4.s1+a4.s2,給a3賦值: 將a2的值賦給a3 a3=a2;,例如:給變量a1賦值 a1.s_id = 102011; a1.s1 = 88.5; a1.s2 = 89; a1.sum = a1.s1+a1.s2;,聲明結(jié)構(gòu)體變量,例如: struct ach /* 定義學(xué)生結(jié)構(gòu)體類型 */ char name20; /* 學(xué)生姓名 */ char sex; /* 性別 */ int num; /* 學(xué)號(hào) */ float score3; /* 三門課程的考試成績(jī) */ ; struct ach stu1=“Jonh“,M,310,75,96,63, stu2=“Lili“,F,217,92,87,70;,(stu1.score0+ stu1.score1+ stu1.score2)/3,int i; float avg_2, sum=0.0; avg_2= sum/3;,求每一位學(xué)生的平均成績(jī),avg_1=,for( i=0; i3; i+) sum=sum+stu2.scorei;,結(jié)構(gòu)體數(shù)組,struct ach /* 定義學(xué)生結(jié)構(gòu)體類型 */ char name20; /* 學(xué)生姓名 */ char sex; /* 性別 */ int num; /* 編號(hào) */ float score3; /* 三門課程的考試成績(jī) */ stu0, stu1 ;,struct ach char name20; char sex; int num; float score3; stu2 ;,stu2=“John“,M,310,75 96,63, “Lili“,F,217,92,78,70 ;,printf(“n %s, %f “, );,, stu0.score2,如果要輸出第一位學(xué)生的名字和其最后一科的成績(jī)?,如何初始化數(shù)組?,對(duì)結(jié)構(gòu)體做一個(gè)說(shuō)明,結(jié)構(gòu)體類型是人們制造的一種類型,它與其他C的基本類型的特性一樣 結(jié)構(gòu)體變量是由結(jié)構(gòu)體聲明的變量。它與C的其他基本變量的特性一樣 結(jié)構(gòu)體的成員是由C的其他類型來(lái)定義的,為什么結(jié)構(gòu)體的成員不能由其他已經(jīng)定義的結(jié)構(gòu)體來(lái)定義呢?!,結(jié)構(gòu)體定義,再來(lái)看一張學(xué)生體檢表:,Frank M 1.78 67.5,1.0 0.9,恐高癥,Mary F 1.61 58.5,0.7 0.8,青霉素過(guò)敏,結(jié)構(gòu)體的嵌套,struct sight_table float left; float right; ; struct case_table char name20; char sex; float height; float weight; struct sight_table sight; char comment30; health2;,結(jié)構(gòu)體的嵌套,對(duì)嵌套的結(jié)構(gòu)體變量成員的引用:,strcpy(, “Frank“); health0.sex = M; health0.sight.left = 1.2; health0.sight.right = 1.0; printf(“%.2f, %.2f n“,health0.sight.left, health0.sight.right);,health0: 是結(jié)構(gòu)體數(shù)組health的第1個(gè)元素,Frank,舉例,#include struct date int year; int month; int day; ; struct good char name20; char place20; int number; float price; struct date deadline; ;,現(xiàn)有庫(kù)存信息表,包括商品名稱、存放地點(diǎn)、庫(kù)存量、商品單價(jià),入庫(kù)日期,如 “book“,“No.3“,57000,202.5,2009,5,19 要求用結(jié)構(gòu)體變量保存此信息,并輸出。,st_proc.c,int main(void) struct good proc; strcpy(, “book“); strcpy(proc.place, “No.3“); proc.price = 202.5; proc.number = 57000; proc.deadline.year = 2009; proc.deadline.month = 5; proc.deadline.day = 19; printf

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論