




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、(中職)Visual C+程序設計基礎(中職)Flash 8.0基礎第6章 構造數據類型ppt課件6.1 結構體類型6.2 聯合體6.3 枚舉類型6.4 用typedef定義類型第6章 構造數據類型6.1.1 結構體類型的定義10010LiFunM1887.5Beijingnumnamesexagescoreadd 結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。在一個結構中,這些數據應是在邏輯上相互關聯的。結構中的每個數據稱為結構的成員。 結構體提供了一種將相關的數據匯集在一起的方法,它使程序可以方便地處理象職工記錄這樣復雜的數據。 6.1 結構體類型 在程序設計過程中,使用結構
2、體之前,必須先對結構體的組成進行描述,這就是結構體類型的定義。結構體類型的定義描述了組成結構體的成員以及每個成員的數據類型。在定義了結構體類型以后才能定義結構體變量。struct studentint num;char name20;char sex;int age;double score;char addr30;定義結構體類型的一般形式為:struct 結構類型名 數據類型 成員名1; 數據類型 成員名2 . 數據類型 成員名n; struct是定義結構體類型的關鍵字;“結構體類型名”是一個標識符,它和struct一起形成特定的結構體類型。然后就可以象基本類型(int型、double型)一
3、樣,定義自己的變量。 花括號 內是組成該結構體的各個數據,稱為結構體的成員。在結構體類型的定義中,對每個成員的成員名和數據類型進行說明。每個成員的數據類型既可以是基本的數據類型,也可以是已經定義過的結構體類型。 上面student結構類型一經定義后便成為一種新的數據類型,它和基本數據類型的地位是等同的;然而,它又是一種特殊的數據類型,它是根據設計需要,由用戶將一組不同類型而又邏輯相關的數據組合而成的一種新類型。 6.1.2 結構體類型變量的定義 結構體類型的定義說明了該結構體類型的組成。結構體類型本身并不占用存儲空間,只有當用該類型定義變量時才需要分配存儲空間。結構體類型定義后,即可定義屬于該
4、類型的變量,即結構體類型的變量,簡稱為結構體變量。1直接定義 在聲明結構體類型的同時定義結構體變量。 間接定義先定義結構體類型,再定義結構體變量。 無名定義當結構體類型和結構變量同時定義時,可省略結構體類型名。但是,由于省略了結構體類型名,因而以后不能再用這種結構體類型定義其它變量。 struct student int num; char name20; char sex; int age; double score; char addr30; student1,student2;struct int num; char name20; char sex; int age; double s
5、core; char addr30; student1,student2;直接定義無名定義struct studentint num;char name20;char sex;int age;double score;char addr30;struct student student1,student2;間接定義6.1.2 結構體類型變量的定義使用結構體變量時,應注意幾點: 結構體類型與結構體變量是兩個不同的概念,不要混同。 C+允許在一個結構中嵌套另一個結構。即結構體類型中的成員可以是另外一個已定義的結構體類型。 成員名與程序中的變量可以相同,但不能與結構體類型名相同。結構體變量名可以和結
6、構體類型名相同。 結構體變量的初始化是指在定義結構體變量的同時給每個成員賦初值。結構體變量初始化的一般語法形式為: struct 結構體類型名 結構體變量名=初始數據; 其中:初始數據的個數、順序、類型均應與定義結構時成員的個數、順序、類型保持一致,中間用逗號隔開。6.1.3 結構體變量的初始化struct student int num; char name20; char sex;stu=10001, “WangPing”,F;#includevoid main() stu.sex;初始數據個數、順序和類型應與結構成員一一對應struct studen
7、t int num=10001; char name20=“WangPing”; char sex=F;stu; 6.1.3 結構體變量的初始化Wrong!不能在定義類型時初始化 在定義了結構體變量以后,就可以訪問這個變量,通常我們是訪問結構體變量的成員。 訪問成員的一般語法形式為: 結構體變量名.成員名 其中,符號“.”是成員運算符,用于訪問一個結構體變量中的某個成員, 6.1.4 結構體變量的成員的訪問說明: 可以對結構體變量中的成員賦值。 成員的類型是在定義結構體時規定的,在程序中訪問成員時必須與定義時的類型保持一致。結構體變量的成員可以象普通變量一樣進行各種運算。 如果成員本身是結構體
8、類型,則要使用若干個成員運算符,一級一級地找到最低的一級的成員,只能對最低級的成員進行運算. 在某些情況下允許對結構體變量進行整體操作,如把一個結構體變量中每個成員的值賦給同類型的另一個結構體變量中的對應成員。但是在對結構體變量進行輸入和輸出時,只能是針對每一個成員來進行。 訪問結構體變量的成員 結構體變量名 . 成員名“.”是成員運算符,優先級最高,左結合性 例如:student1.num=10010;student1.age+;coutstudent1.num;sum=student1.num+student1.age; 結構體變量可以整體賦值student1=student26.1.4
9、結構體變量的成員的訪問結構體可以嵌套struct date int month; int day; int year;struct student int num; char name20; char sex; int age; struct date birthday; char addr30; student1,student2;numnamesexagebirthdayaddrmonthdayyearstudent1.birthday.month=11;coutstudent1.birthday.month;初始化:student stu=10001,“WangPing”,F,5,24,
10、1976,24;使用:定義: 定義: 結構體數組即數據類型為結構體類型的數組,它與以前介紹過的數值型數組的不同之處在于結構體數組的每個數組元素是一個結構體類型的變量。struct student int num; char name20; char sex; stu16;student stu210;6.1.5 結構體數組1. 結構體數組的定義 結構體數組的定義與結構體變量相同 定義了兩個student類型的結構體數組。其中,結構體數組stu1采用直接定義方式,結構體數組stu2采用間接定義方式。 結構體數組stu1和stu2各包含了6個和10個數組元素,每個元素都是student類型,都包含
11、了num、name、sex三個成員。 全部初始化時長度可省略student stu=1001, “LiuLi”, F,1101, “HeFei”, M;可訪問結構體數組元素的成員: stu1.sex stu0.num可進行同一個結構體類型變量(數組元素)的整體賦值 stu0=stu1; 要對結構體數組元素的單個成員進行輸入輸出 for(i=0;stui.sex;2. 訪問結構體數組元素的成員 在結構體數組中,當需要訪問結構體數組元素中的某一成員時,可采用與結構體變量中訪問成員相同的方法,利用“.”成員運算符來操作。 3. 結構體數組的初始化 結構體數組在定義
12、時也可以進行初始化。其初始化方法與一般數組的初始化方法基本相同,只是必須為每個元素提供各成員的值, #includestruct student int num; char name12; double score;void main()student st20;int i,n;coutn;coutinput num name score n;for(i=0;sti.score;for(i=0;in;i+) tsti.scoresex (*p).num,(*p).name, (*p).sex 指針變量名-成員名“- ”是指
13、向運算符,左結合性(*p).sex 結構體指針變量的定義及初始化 結構體指針變量在使用前應先進行定義說明。結構體指針定義的一般形式為: struct 結構體類型名 *指針變量名; 用結構體指針變量訪問結構體的成員2. 指向結構體數組的指針變量 指向結構體數組的指針變量的定義和使用方法與指向普通數組的指針變量的定義和使用方法完全一樣,只不過結構體數組的數據類型是結構體類型而已。struct studentint num;char name20;char sex;stu20,*p;p=stu;即將該數組的首地址賦值給該指針變量注意:(+p)-num(p+)-num的結果分別為何?1001“LiuL
14、i”F1101“HeFei”M1201“WanLi”Fstu0stu1stu2p11011001#include struct dateint year,month,day;void func(struct date p)p.year=2000;p.month=5;p.day=22;void main()struct date d;d.year=1999;d.month=4;d.day=23;coutd.yeard.monthd.day;func(d); coutd.yeard.monthyear=2000; p-month=5; p-day=22;main() struct date d;
15、d.year=1999; d.month=4; d.day=23; coutd.yeard.monthd.day; func(&d); coutd.yeard.monthyear=2000; p-month=5; p-day=22;main() struct date d; d.year=1999; d.month=4; d.day=23; coutd.yeard.monthd.day; func(d); coutd.yeard.monthd.day;19994232000522#includestruct studentint num;char name20;double score;voi
16、d main() struct student stu4,*p,*q; int i; for (i=0;stui.score; for (p=q=stu;pscoreq-score) q=p; coutnumtnametscoreendl;4個學生,每個學生包括學號、姓名、成績。要求找出成績最高者的姓名和成績#include #define N 30typedef struct student STUD;struct student int num; char name12; int score;void input(STUD stu,int n);void
17、 sort(STUD stu,int n);void swap(STUD &p,STUD &q);void output (STUD stu,int n);void main() STUD stuN; int n; cinn; input(stu,n); sort(stu,n); output(stu,n);對n個同學的姓名,學號,成績,按成績排序后輸出void input (STUD stu,int n) int i; for (i=0;stui.score;void sort(STUD stu,int n) for (int i=0;in-1;i+) f
18、or (int j=0;jstuj+1.score) swap(stuj,stuj+1);void swap(STUD &p,STUD &q) STUD t; t=p;p=q;q=t;void output (STUD stu,int n) int i; for (i=0;in;i+) ”來對聯合體變量的成員進行操作。若使用聯合體變量訪問成員,用“.”運算符;若使用指向聯合體類型的指針變量,用“-”運算符。其基本格式為: 聯合體變量.成員名 或 (*聯合體指針變量名) .成員名 聯合體指針變量名-成員名 聯合體變量的不同成員,占用同一個存儲區域。各成
19、員在內存中占用同一個起始地址,這就是聯合體變量的地址。但在某一瞬間,只能存放一個成員的數據,即只有一個成員有效,其它成員無效。 在聯合體變量中,一個新成員被賦值后,原有成員的數據被覆蓋。若連續為各成員賦值,只有最后一個被賦值的成員有效。 聯合體類型和結構體類型可以嵌套定義。結構體變量和結構體數組可以作聯合體的成員,反之,聯合體變量和聯合體數組也可作成員。 6.2.3 聯合體類型的特點 共用體類型數據的特點同一個內存段在每一瞬時只能存放其中一種類型的成員;并非同時都存在和起作用共用體變量的地址和它的各成員的地址都是同一地址。&a、&a.i、 &a.f、 &a.ch起作用的成員是最后一次存放的成員
20、;a.i=1;a.ch=a;a.f=1.5;couta.f;共用體變量不能作為函數參數,但可使用指向共用體變量的指針。不能對共用體變量名賦值,不能在定義共用體變量時對它初始化union dataint i;char ch;float f;a=1 ,a,1.5;a=1;m=a;不能初始化不能對共用體變量賦值不能引用共用體變量名以得到值共用體類型可出現在結構體定義中,結構體也可出現在共用體定義中。#includevoid main()union example struct int x,y; in; int a,b; e;e.a=1;e.b=2;e.in.x=e.a*e.b;e.in.y=e.a+e.b;coute.in.x”運算符,而是在枚舉類型定義之外,直接就可以訪問。 枚舉元素作為整型常量,可以直接賦給枚舉變量、直接訪問。 除枚舉常量外,其它整型常量不能直接賦給枚舉變量。 同類型的枚舉變量間、枚舉元素間、枚
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司每月娛樂活動方案
- 公司組織義工活動方案
- 公司組建舞蹈隊活動方案
- 公司研學策劃方案
- 公司組織燒烤策劃方案
- 公司派對活動方案
- 公司節后收心會活動方案
- 2025年心理健康教育輔導考試試題及答案
- 濱海生態補償機制-洞察及研究
- 2025年食品科學與工程專業考試試卷及答案
- 市政道路及設施零星養護服務技術方案(技術標)
- 2024年中考地理簡答題答題模板
- 農村自建房施工安全建議
- 廣東省深圳市龍崗區龍嶺中學2024年物理八下期末統考試題及答案解析
- 2024年湖北省丹江口市初中畢業生適應性考試地理·生物試題
- DZ∕T 0033-2020 固體礦產地質勘查報告編寫規范(正式版)
- 2024年輔警招聘考試試題庫附參考答案(完整版)
- NY-T 3213-2023 植保無人駕駛航空器 質量評價技術規范
- 2023年春季內蒙古高一化學學業水平合格性考試卷真題
- 北師大版六年級下學期小升初數學期末考試試題(含答案)
- 司母戊鼎的介紹
評論
0/150
提交評論