C課件-結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù).ppt_第1頁
C課件-結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù).ppt_第2頁
C課件-結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù).ppt_第3頁
C課件-結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù).ppt_第4頁
C課件-結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù).ppt_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十講,第十章 結(jié)構(gòu)體和共用體,結(jié)構(gòu)體類型的定義 結(jié)構(gòu)體類型變量的定義 結(jié)構(gòu)體類型變量的初始化和引用 結(jié)構(gòu)體數(shù)組,10.1 結(jié)構(gòu)體,問題 數(shù)組能方便的處理一組同類型的數(shù)據(jù),那么對一組不同類型的數(shù)據(jù)如何管理和引用呢? 使用結(jié)構(gòu)體。,例: 學生姓名,性別,年齡,身高,體重等,,結(jié)構(gòu)體屬于構(gòu)造類型,在內(nèi)存中占據(jù)連續(xù)的存儲空間。 C語言本身沒有結(jié)構(gòu)體類型,用戶要做兩項工作: 1)定義結(jié)構(gòu)體類型:描述結(jié)構(gòu)體成員及其類型; 2)定義結(jié)構(gòu)體變量:為結(jié)構(gòu)體成員分配存儲空間。,10.1.1 結(jié)構(gòu)體類型的定義,結(jié)構(gòu)體類型的定義 一般格式,struct 結(jié)構(gòu)體名 類型名1 成員名1; 類型名2 成員名2; 類型名n 成員名n; ;,struct date int year,month,day; ;,10.1.1 結(jié)構(gòu)體類型的定義,結(jié)構(gòu)體類型定義的格式說明: struct:關鍵字,是定義結(jié)構(gòu)體類型的標志。 結(jié)構(gòu)體名:標識符,其命名規(guī)則同變量名。 struct 結(jié)構(gòu)體名:結(jié)構(gòu)體類型名,作用等同于int、float等關鍵字,用于定義結(jié)構(gòu)體變量。 類型名1n:說明了結(jié)構(gòu)體成員的數(shù)據(jù)類型。 成員名1n:用戶定義的一個或多個結(jié)構(gòu)體成員的名稱,其命名規(guī)則同變量名。多個同類型的成員彼此間用逗號分隔。,10.1.2 結(jié)構(gòu)體類型變量的定義,注意: 結(jié)構(gòu)體類型的定義只是指出了該結(jié)構(gòu)體的組成情況,系統(tǒng)并不會為它分配實際的存儲單元。應在定義了結(jié)構(gòu)體類型以后,再定義該結(jié)構(gòu)體類型的變量(簡稱結(jié)構(gòu)體變量),以便在結(jié)構(gòu)體變量中存放具體的數(shù)據(jù)。 結(jié)構(gòu)體變量的定義方式有三種: 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。 在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。 直接定義結(jié)構(gòu)體變量。,10.1.2 結(jié)構(gòu)體類型變量的定義,方式I.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量,10.1.2 結(jié)構(gòu)體類型變量的定義,struct date int year; int month; int day; ; struct data today,tomorrow;,year month day 2012 5 16 2012 5 17,today tomorrow,12個字節(jié),today和tomorrow的存儲形式為:,例:,10.1.2 結(jié)構(gòu)體類型變量的定義,方式II. 在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。,struct student int num; char name10; char sex; float score4; stu1,stu2;,struct date int year; int month; int day; today,tomorrow;,例:,10.1.2 結(jié)構(gòu)體類型變量的定義,方式III. 定義無名結(jié)構(gòu)體變量,struct int num; char name10; char sex; float score4; stu1,stu2;,struct int year; int month; int day; today,tomorrow;,例:,10.1.2 結(jié)構(gòu)體類型變量的定義,關于結(jié)構(gòu)體的說明: 1、類型與變量是不同的概念,應注意區(qū)分。 系統(tǒng)可以對變量賦值、存取、運算,而類型則不能。 編譯時,系統(tǒng)只為變量分配存儲單元,而類型則不分配。,10.1.2 結(jié)構(gòu)體類型變量的定義,2、不同結(jié)構(gòu)體的成員名可以相同,不互相沖突。,struct date int year,month,day; ; struct Book char title50,writer20,publisher50; int year,month; ; int year,month,day;,10.1.2 結(jié)構(gòu)體類型變量的定義,3、結(jié)構(gòu)體的成員可以是基本類型和構(gòu)造類型。,struct date int year,month,day; ; struct student int num; char name10; char sex; struct date birthday; float score4; stu1,stu2;,struct student int num; char name10; char sex; struct date int year,month,day; birthday; float score4; stu1,stu2;,10.1.2 結(jié)構(gòu)體類型變量的定義,4、可以使用typedef關鍵字為結(jié)構(gòu)體類型定義一個別名。,typedef struct _Student char id10; char name10; int score3; int sum; Student;,以后就可以用Student代替結(jié)構(gòu)體類型名來定義結(jié)構(gòu)體變量了。 例如: Student stu1, stu2; 等價于: struct _Student stu1, stu2;,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,結(jié)構(gòu)體變量的初始化類似于對數(shù)組的初始化,由于結(jié)構(gòu)體變量的成員可以有不同的數(shù)據(jù)類型,所以各個初值必須與相應成員保持類型一致或兼容。,例:,struct _Student char id10; char name10; int score3; int sum; stu1 = “2012301101“, “胡樹偉“, 87, 71, 81;,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,例:,struct date int year, month, day; ; struct _student2 char num15; char name10; struct date birth; int score3; int aver; stu1=“200361070001“,“Hushuwei“,1984,10,8,87,71,81;,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,對結(jié)構(gòu)體變量初始化的說明: 對結(jié)構(gòu)體變量進行初始化時,系統(tǒng)是按每個成員在結(jié)構(gòu)體變量中的順序一一對應賦初值的。若只對部分成員進行初始化,則只能給前面的若干成員賦值,而不允許跳過前面的成員給后面的成員賦值。 例如:前面兩例中結(jié)構(gòu)體變量stu1和stu2的成員sum沒有獲得指定初值,而是獲得默認初值0。,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,對結(jié)構(gòu)體變量中成員的引用 一般格式 結(jié)構(gòu)體變量名 . 成員名,其中:“為結(jié)構(gòu)體成員運算符,1級運算符。 例如:stu1.sum表示對結(jié)構(gòu)體變量stu1中的sum成員進行引用。,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 1、不能將結(jié)構(gòu)體變量作為一個整體進行輸入和輸出。 例如:,struct _Student3 long num; int age; char sex; st;,下面的寫法是錯誤的: scanf(“%ld%d%c“, ,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 2、內(nèi)嵌結(jié)構(gòu)體成員的引用,必須逐層使用成員名定位,找到最底層的成員。 例如: struct date int year, month, day; ; struct _Student2 char id10, name10; struct date birth; int score3, sum; stu2 = “20123002“, “李冬“, 1987, 5, 3, 75, 85, 76; printf(“birthday=%d年%d月%d日n“, stu2.birth.year, stu2.birth.month, stu2.birth.day);,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 3、若結(jié)構(gòu)體的成員是字符數(shù)組,可對其進行直接引用。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(“%s%s“, stu1.id, ); printf(“id=%s, name=%s“, stu1.id, );,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 4、若結(jié)構(gòu)體的成員是數(shù)值型數(shù)組,則應逐個引用數(shù)組中的元素。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(“%d%d%d“, ,10.1.3 結(jié)構(gòu)體類型變量的初始化和引用,例 結(jié)構(gòu)體變量的輸入和輸出 typedef struct _Student char id10, name10; int score3, sum; Student; /*定義結(jié)構(gòu)體類型別名*/ void main( ) Student stu1, stu2; /*定義結(jié)構(gòu)體變量*/ scanf(“%s%s%d%d%d“, stu1.id, , ,10.1.4 結(jié)構(gòu)體數(shù)組,一個結(jié)構(gòu)體變量一次只能存放一組數(shù)據(jù),如一個學生的信息。 全班學生信息,則用結(jié)構(gòu)體數(shù)組。 結(jié)構(gòu)體數(shù)組的每個數(shù)組元素都是一個結(jié)構(gòu)體變量,它們都分別包括各個成員項。,10.1.4 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的定義 三種形式,10.1.4 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的初始化 結(jié)構(gòu)體數(shù)組的初始化與普通數(shù)組的初始化相似。,struct _student char num15,name10; int score3; float aver; stu50=“200361070001”,“Hushuwei”,87,71,81, “200361070002“,“Zhangfan“,76,78,85, “200361070003“,“Wujiaxin“,70,91,78;,10.1.4 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的引用 結(jié)構(gòu)體數(shù)組的引用與結(jié)構(gòu)體變量的引用相似。,例:查詢學生基本信息。 (學生數(shù)據(jù)包括:學號,姓名,性別,年齡和成績。),#include #define N 5 struct student long int num; char name10; char sex; int age,score; stuN=20123001,“Zhang Mei“,M,18,85, 20123002,“Wang Hai“,M,19,87, 20123003,“Liu Jun“,F,18,90, 20123004,“Li Hui“,M,19,80, 20123005,“Chen Ming“,M,18,92;,10.1.4 結(jié)構(gòu)體數(shù)組,void main() int s,t; long int xh; printf(“請輸入學號:n“); scanf(“%ld“, ,請輸入學號: 20123003 20123003 Liu Jun F 18 90,10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),結(jié)構(gòu)體作為參數(shù)傳遞給函數(shù)的幾種方法: 1、結(jié)構(gòu)體變量的成員作為函數(shù)參數(shù) 與普通變量做函數(shù)參數(shù)一樣,傳值方式; 2、結(jié)構(gòu)體變量作為函數(shù)參數(shù) 是一種多值傳遞,需要對整個結(jié)構(gòu)體做一份拷貝,效率低。 3、結(jié)構(gòu)體指針做函數(shù)參數(shù) 4、結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)與普通數(shù)組名作為函數(shù)參數(shù)相似,傳遞的也是數(shù)組的首地址。,例:計算平均成績,打印排序成績表,#include #define N 3 #define M 3 void sort(struct _student ss , int n); struct _student char num15,name10; int score3; float aver; stuN=“200361070001“,“Lishuwei“,68,71,91, “200361070002“,“Zhangfan“,92,78,85, “200361070003“,“Wujiaxin“,70,91,78;,10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),void main() int i,j,sumN; for(i=0;iN;i+) sumi=0; for(j=0;jM;j+) sumi=sumi+stui.scorej; stui.aver=sumi/3.0; sort(stu,N); for(i=0;iN;i+) printf(“%3d%15s%12s%8.2fn“,i+1,stui.num,, stui.aver); ,10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),void sort(struct _student ss , int n) int i,j; struct _studen

溫馨提示

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

評論

0/150

提交評論