譚浩強C程序設(shè)計課件第9章_第1頁
譚浩強C程序設(shè)計課件第9章_第2頁
譚浩強C程序設(shè)計課件第9章_第3頁
譚浩強C程序設(shè)計課件第9章_第4頁
譚浩強C程序設(shè)計課件第9章_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、,9,用戶設(shè)置自己的數(shù)據(jù)類型。章,定義和使用結(jié)構(gòu)變量。c語言允許用戶建立他們自己的由不同類型的數(shù)據(jù)組成的組合數(shù)據(jù)結(jié)構(gòu),這被稱為結(jié)構(gòu)。在程序中創(chuàng)建結(jié)構(gòu)類型:自己創(chuàng)建結(jié)構(gòu)類型,結(jié)構(gòu)名稱成員列表;結(jié)構(gòu)學(xué)生整數(shù);/學(xué)生編號為整數(shù)字符名稱20;/名稱為字符串字符性;/性別是年齡中的字符類型;/年齡是整數(shù)浮點分?jǐn)?shù);/結(jié)果是實數(shù)加數(shù)30;/地址是字符串;/請注意,末尾有一個分號。結(jié)構(gòu)類型的名稱由關(guān)鍵字結(jié)構(gòu)和結(jié)構(gòu)名稱組成。結(jié)構(gòu)的名稱由用戶指定,也稱為“結(jié)構(gòu)標(biāo)簽”?;ɡㄌ杻?nèi)是結(jié)構(gòu)中包含的子元素,稱為結(jié)構(gòu)成員。應(yīng)為每個成員進行類型聲明,即“成員列表”也稱為“字段列表”。每個成員都是結(jié)構(gòu)中的一個字段。成員名命名規(guī)則

2、與變量名相同。類型名、成員名;(1)不僅有一種結(jié)構(gòu)類型,而且可以設(shè)計多種結(jié)構(gòu)類型,每種結(jié)構(gòu)類型包含不同的構(gòu)件。(2)成員可以屬于另一種結(jié)構(gòu)類型。結(jié)構(gòu)日期/聲明一個結(jié)構(gòu)類型結(jié)構(gòu)日期整數(shù)個月;/月整數(shù)天;/年中的某天;/年份;結(jié)構(gòu)Student /聲明結(jié)構(gòu)類型Student int numchar名稱20;迷人的性;國際年齡;結(jié)構(gòu)日期生日;/成員生日屬于結(jié)構(gòu)日期類型字符地址30;定義結(jié)構(gòu)類型的變量,首先聲明結(jié)構(gòu)類型,然后定義此類型的變量2。在聲明類型3時定義變量。直接定義結(jié)構(gòu)類型的變量,而不指定類型名稱,結(jié)構(gòu)學(xué)生學(xué)生1,學(xué)生2;| | |結(jié)構(gòu)類型名稱結(jié)構(gòu)變量名稱,結(jié)構(gòu)學(xué)生整數(shù);/學(xué)生編號為整數(shù)字符

3、名稱20;/名稱為字符串字符性;/性別是年齡中的字符類型;/年齡是整數(shù)浮點分?jǐn)?shù);/結(jié)果是實數(shù)加數(shù)30;/地址是字符串;/請注意,在末尾有一個分號,結(jié)構(gòu)Student int numchar名稱20;迷人的性;國際年齡;浮動分?jǐn)?shù);char addr30;學(xué)生1,學(xué)生2;結(jié)構(gòu)名成員表列變量名表列;結(jié)構(gòu)成員表列變量名表列;(1)結(jié)構(gòu)類型和結(jié)構(gòu)變量是不同的概念,不應(yīng)混淆。您只能分配、訪問或操作變量,而不能操作類型。在編譯時,不為類型分配空間,只為變量分配空間。(2)結(jié)構(gòu)類型中的成員名可以與程序中的變量名相同,但這兩者并不代表相同的對象。(3)結(jié)構(gòu)變量(即“字段”)的成員可以單獨使用,其功能和位置等同于

4、普通變量。結(jié)構(gòu)變量的初始化和引用例9.1將學(xué)生信息(包括學(xué)生編號、姓名、性別、地址)放入結(jié)構(gòu)變量,然后輸出學(xué)生信息。# includeintmain() struct Student/聲明結(jié)構(gòu)類型struct Student long int num/char name20是以下4種行為結(jié)構(gòu)的成員;迷人的性;char addr20;a=10101,李林,M,北京路123號 ;/定義結(jié)構(gòu)變量a并初始化printf( no .% LD n name :% s nsex :% c n address :% s n ,a.num,,a.sex,a . addr);返回0;,結(jié)構(gòu)變量的初始化

5、和引用,當(dāng)定義結(jié)構(gòu)變量時,其成員可以被初始化。初始化列表是用花括號括起來的常數(shù),依次分配給結(jié)構(gòu)變量的每個成員。您可以在結(jié)構(gòu)變量中引用成員的值。參考方法是”。是成員操作員。它是所有運營商中優(yōu)先級最高的。因此,您可以將student1.num視為一個整體,這相當(dāng)于一個變量。您不能試圖通過輸出結(jié)構(gòu)變量名稱來獲取輸出結(jié)構(gòu)變量的所有成員的值。只有結(jié)構(gòu)變量中的每個成員可以分別輸入和輸出。,結(jié)構(gòu)變量名。成員名稱,student1.num=10010/*將student1定義為student1類型的結(jié)構(gòu)變量,然后student1.num表示student1變量中的num成員,即num(學(xué)生編號)成員*/,pr

6、intf (%s n ,student 1);/嘗試用結(jié)構(gòu)變量的名稱、初始化和結(jié)構(gòu)變量的引用輸出所有成員的值,(3)如果成員本身是結(jié)構(gòu)類型,應(yīng)該使用幾個成員運算符逐級查找最低的成員。只能分配、訪問和計算最低級別的成員。(4)結(jié)構(gòu)變量的成員可以像普通變量一樣執(zhí)行各種操作(取決于它們的類型)。(5)相似的結(jié)構(gòu)變量可以相互分配。(6)可以引用結(jié)構(gòu)變量成員的地址,也可以引用結(jié)構(gòu)變量的地址(結(jié)構(gòu)變量的地址主要用作傳遞結(jié)構(gòu)變量地址的函數(shù)參數(shù))。但是,下面的語句不能用于從整體上讀取結(jié)構(gòu)變量。student1.num=10010/在結(jié)構(gòu)變量student1中,成員號student1 .生日.月=6;/成員在結(jié)

7、構(gòu)變量student1成員月在生日,student 2 . score=student 1 . score;/作業(yè)總和=student 1 . score student 2 . score;/加法學(xué)生1 .年齡;/自動添加,student1=student2/假設(shè)學(xué)生1和學(xué)生2已被定義為同一類型的結(jié)構(gòu)變量,SCANN( %d ,/輸出結(jié)構(gòu)變量學(xué)生1的起始地址,SCANN( % d,% s,% c,% d,% f,% s n ,初始化和結(jié)構(gòu)變量的引用,示例9.2輸入兩個學(xué)生的學(xué)生編號、姓名和分?jǐn)?shù),并輸出分?jǐn)?shù)較高的學(xué)生的學(xué)生編號、姓名和分?jǐn)?shù)。# includeintmain() struct S

8、tudent/聲明結(jié)構(gòu)類型struct Student int numchar名稱20;浮動分?jǐn)?shù);學(xué)生1,學(xué)生2;/定義兩個結(jié)構(gòu)變量student1,student 2 canf( % d % s % f ),使用結(jié)構(gòu)數(shù)組定義結(jié)構(gòu)數(shù)組,并且示例9.3有3個候選人,每個投票人只能投一個人的票,并且需要編譯一個計票程序,一個接一個地輸入候選人的名字,最后輸出每個人的票。# include # includerstructperson/聲明結(jié)構(gòu)類型結(jié)構(gòu)Person char name20;/候選人姓名整數(shù)計數(shù);/候選人票數(shù)領(lǐng)袖3= 李,0,張,0,孫,0 ;/定義一個結(jié)構(gòu)數(shù)組并初始化int main

9、() int i,j;char leader _ name20;/定義字符數(shù)組(I=1;i=10I) scanf(“% s”,leader _ name);/輸入所選候選人的姓名(j=0;J3;j ) if(strcmp(leader_name,leaderj)。name)=0) leaderj。計數(shù); printf( n結(jié)果: n );對于(I=0;i3;i ) printf(%5s:%dn ,leaderi。姓名,領(lǐng)導(dǎo)i。計數(shù));返回0;,定義結(jié)構(gòu)數(shù)組,(1)定義結(jié)構(gòu)數(shù)組的一般形式是 首先聲明一個結(jié)構(gòu)類型,然后用這個類型定義結(jié)構(gòu)數(shù)組(2)通過在定義數(shù)組后加上:結(jié)構(gòu)結(jié)構(gòu)名成員表列數(shù)組名數(shù)組長

10、度來初始化結(jié)構(gòu)數(shù)組;結(jié)構(gòu)人員字符名稱20;int計數(shù);結(jié)構(gòu)人員領(lǐng)導(dǎo)3;/leader是結(jié)構(gòu)數(shù)組名和結(jié)構(gòu)類型數(shù)組名數(shù)組長度;=初始值表列;結(jié)構(gòu)人員字符名稱20;int計數(shù);領(lǐng)導(dǎo)者3;結(jié)構(gòu)人領(lǐng)導(dǎo)3= 李,0,張,0,孫,0 ;(例9.4)有n個學(xué)生信息(包括學(xué)生編號、姓名和年級)。要求按年級順序輸出每個學(xué)生的信息。,# includes structstudent/聲明結(jié)構(gòu)類型結(jié)構(gòu)學(xué)生 int numchar名稱20;浮動分?jǐn)?shù);int main() strut stu5= 10101,張,78,10103,王,98.5,10106,李,86,10108,凌,73.5,10110,孫,100 ;/定

11、義結(jié)構(gòu)數(shù)組并初始化結(jié)構(gòu)學(xué)生溫度;/定義結(jié)構(gòu)變量temp,在交換過程中作為臨時變量常量n=5;/定義常量變量n int i,j,k;printf(“訂單是: n”);對于(I=0;Istu k。得分/比較結(jié)果k=j;temp=stuk;斯圖k=斯圖I;stuI=temp;/斯圖k和斯圖i元素交換為(I=0;因為,如果p指向一個結(jié)構(gòu)變量stu,下面三個用法是等價的: stu。成員名稱 (*p)。成員名稱 p-成員名稱,stu.num,(*p)。結(jié)構(gòu)數(shù)組的指針。示例9.6有3個學(xué)生的信息,這些信息放在結(jié)構(gòu)數(shù)組中,需要輸出所有學(xué)生的信息。# includes structstudent/聲明結(jié)構(gòu)類型結(jié)

12、構(gòu)學(xué)生 int numchar名稱20;迷人的性;國際年齡;結(jié)構(gòu)學(xué)生3=10101,李林,M,18,10102,張芳,M,19,10104,王敏,F(xiàn),20 ;/定義一個結(jié)構(gòu)數(shù)組并初始化int main() struct Student * p;/定義指向結(jié)構(gòu)學(xué)生結(jié)構(gòu)變量的指針變量printf(“編號、名稱、性別、年齡 n”);(p=stupnum,p-name,p-sex,p-age);/輸出結(jié)果返回0;通過使用結(jié)構(gòu)變量和指向結(jié)構(gòu)變量的指針作為函數(shù)參數(shù),有三種方法將一個結(jié)構(gòu)變量的值傳遞給另一個函數(shù):(1)使用結(jié)構(gòu)變量的成員作為參數(shù)。例如,斯圖1。num或用作函數(shù)參數(shù),將參數(shù)的

13、值傳遞給形參。用法與使用普通變量作為參數(shù)相同,屬于“值傳遞”方法。應(yīng)注意實際參與參數(shù)類型的一致性。(2)使用結(jié)構(gòu)變量作為參數(shù)。當(dāng)使用結(jié)構(gòu)變量作為實際參數(shù)時,也采用了“價值轉(zhuǎn)移”的方法。被結(jié)構(gòu)變量占據(jù)的存儲單元的內(nèi)容都被依次轉(zhuǎn)換成形式參數(shù)。形式參數(shù)也必須是相同類型的結(jié)構(gòu)變量。在函數(shù)調(diào)用期間,參數(shù)也會占用內(nèi)存單元。這種傳輸方法在空間和時間上都有很大的開銷。如果結(jié)構(gòu)的大小很大,開銷是相當(dāng)大的。此外,由于值傳遞方法,如果形式參數(shù)(也是一個結(jié)構(gòu)變量)的值在被調(diào)用函數(shù)的執(zhí)行過程中發(fā)生變化,則該值不能返回到主函數(shù),這通常會造成使用上的不便。因此,這種方法通常很少使用。(3)使用指向結(jié)構(gòu)變量(或數(shù)組元素)的指

14、針作為參數(shù),將結(jié)構(gòu)變量(或數(shù)組元素)的地址傳遞給形式參數(shù)。以結(jié)構(gòu)變量和指向結(jié)構(gòu)變量的指針作為函數(shù)參數(shù),在例9.7中有n個結(jié)構(gòu)變量,包括學(xué)生的學(xué)號、姓名和3門課程的成績。要求輸出平均分最高的學(xué)生信息(包括學(xué)生人數(shù)、姓名、3門課程成績和平均分)。#include #define N 3 /學(xué)生人數(shù)為3結(jié)構(gòu)學(xué)生/結(jié)構(gòu)類型結(jié)構(gòu)學(xué)生 int num/學(xué)生編號字符名稱20;/名稱浮動分?jǐn)?shù)3;/在3個進程中浮動aver/平均分?jǐn)?shù);int main() void輸入(結(jié)構(gòu)學(xué)生學(xué)生);/函數(shù)聲明structstudentmax(structstudenty)。/函數(shù)聲明無效打印(structurestudy);/函數(shù)聲明結(jié)構(gòu)study n,* p=study/定義結(jié)構(gòu)數(shù)組和指針輸入(p);/調(diào)用輸入函數(shù)print(最大(p);/調(diào)用打印函數(shù)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論