c語言結(jié)構(gòu)體與共用體學(xué)習教案_第1頁
c語言結(jié)構(gòu)體與共用體學(xué)習教案_第2頁
c語言結(jié)構(gòu)體與共用體學(xué)習教案_第3頁
c語言結(jié)構(gòu)體與共用體學(xué)習教案_第4頁
c語言結(jié)構(gòu)體與共用體學(xué)習教案_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、會計學(xué)1c語言結(jié)構(gòu)體與共用體語言結(jié)構(gòu)體與共用體例 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié).結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型定義的作用域struct student a;第1頁/共27頁例 struct student int num; char name20; char sex; int age; float score; char addr30; ; stru

2、ct student stu1,stu2; struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; .;struct 結(jié)構(gòu)體名 變量名表列;例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2; 第2頁/共27頁struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; .變量名表列;例 struct student int num; char name20; char se

3、x; int age; float score; char addr30; stu1,stu2; 第3頁/共27頁 直接定義結(jié)構(gòu)體變量一般形式:struct 類型標識符 成員名; 類型標識符 成員名; .變量名表列;例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 用無名結(jié)構(gòu)體直接定義變量只能一次第4頁/共27頁 說明v結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同l 類型:不分配內(nèi)存; 變量:分配內(nèi)存l 類型:不能賦值、存取、運算; 變量:可以v結(jié)構(gòu)體可嵌套v結(jié)構(gòu)體成員名與程序中變量名

4、可相同,不會混淆v 結(jié)構(gòu)體類型及變量的作用域與生存期例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyear第5頁/共27頁v 可以將一個結(jié)

5、構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量v 結(jié)構(gòu)體嵌套時逐級引用成員(分量)運算符優(yōu)先級: 1結(jié)合性:從左向右引用方式: 結(jié)構(gòu)體變量名.成員名例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例 struct student int num; char name20; char sex; int age; float score; char a

6、ddr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; ()例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1

7、,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; if(stu1=stu2). ()第6頁/共27頁struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; .;struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct student int num; char name20; char sex; int age; char ad

8、dr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;第7頁/共27頁形式二:struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第8頁/共27頁形式三:struct 類型標識符 成員名; 類型標識符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 st

9、ruct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第9頁/共27頁形式一: struct student int num; char name20; char sex; int age; ;struct student stu2;形式二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; char

10、sex; int age; stu2;numnamesexagenumnamesexagestu0stu125B第10頁/共27頁例 struct int num; char name20; char sex; int age; stu =,;順序初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 例 struct student int num; char na

11、me20; char sex; int age; stu =,;分行初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化時維數(shù)可省 結(jié)構(gòu)體數(shù)組引用引用方式: 結(jié)構(gòu)體數(shù)組名下標.成員名 struct student int num; char name20; char sex; int age; stu3;stu1.age+;strcpy(stu0.nam

12、e,”ZhaoDa”);第11頁/共27頁例 統(tǒng)計后選人選票struct person char name20; int count;leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20; for(i=1;i=10;i+) scanf(%s,leader_name); for(j=0;j3;j+)if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i成員名結(jié)構(gòu)體變量名.成員名指向運算符優(yōu)先級: 1結(jié)合方向:從左向右例 指向結(jié)構(gòu)體的指針變

13、量main() struct student long int num; char name20; char sex; float score; stu_1,*p; p=&stu_1; stu_1.num=89101; strcpy(stu_1.name,Li Lin); p-sex=M; p-score=89.5; printf(nNo:%ldnname:%snsex:%cnscore:%fn, (*p).num,p-name,p-score);例 int n; int *p=&n; *p=10; n=10struct student stu1;struct student

14、*p=&stu1;=101; (*p).num=101第13頁/共27頁例 指向結(jié)構(gòu)體數(shù)組的指針struct student int num; char name20; char sex; int age;stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20;main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1第14頁/共27頁第15頁/共27頁struct data int a,

15、b, c; ;main() void func(struct data); struct data arg; =27; =3; =; =%d =%d =%); printf(Call Func().n); func(arg); =%d =%d =%);void func(struct data parm) =%d =%d =%); printf(Process.n); =18; =5; =*; =%d =%d =%); printf(Return.n);arga :27b: 3c :30(main)(func)parma :27b: 3c :30copyarga :27b: 3c :30(ma

16、in)(func)parma :18b: 5c :90arga :27b: 3c :30(main)arga :27b: 3c :30(main)例 用結(jié)構(gòu)體變量作函數(shù)參數(shù)第16頁/共27頁struct data int a, b, c; ;main() void func(struct data *parm); struct data arg; =27; =3; =; =%d =%d =%); printf(Call Func().n); func(&arg); =%d =%d =%);void func(struct data *parm) printf(parm-a=%d par

17、m-b=%d parm-c=%dn,parm-a,parm-b,parm-c); printf(Process.n); parm-a=18; parm-b=5; parm-c=parm-a*parm-b; printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c); printf(Return.n);arga :18b: 5c :90(main)arga :27b: 3c :30(main)例 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)arga :27b: 3c :30(main)(func)parm*arga :18b: 5c :90(main)(

18、func)parm*第17頁/共27頁union 共用體名 類型標識符 成員名; 類型標識符 成員名; .;例 union data int i; char ch; float f; ;fchi類型定義不分配內(nèi)存第18頁/共27頁形式一: union data int i; char ch; float f; a,b;形式二: union data int i; char ch; float f; ; union data a,b,c,*p,d3;形式三: union int i; char ch; float f; a,b,c; 共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長

19、度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員存在第19頁/共27頁共用體變量引用v 引用方式:例 a.i=1; =a; a.f=1.5; ); (編譯通過,運行結(jié)果不對) v 引用規(guī)則l 不能引用共用體變量,只能引用其成員共用體指針名-成員名共用體變量名.成員名(*共用體指針名).成員名union data int i; char ch; float f; ; union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p).ch (*p).fd0.i d0.ch d0.fl 共用體變量中起作用的成員是最后一次存放的成員例 union

20、 int i; char ch; float f; a; a=1; () l 不能在定義共用體變量時初始化例 union int i; char ch; float f; a=1,a,1.5; () l 可以用一個共用體變量為另一個變量賦值例 float x; union int i; char ch; float f; a,b; a.i=1; =a; a.f=1.5; b=a; () x=a.f; ()第20頁/共27頁例 將一個整數(shù)按字節(jié)輸出01100001 01000001低字節(jié)高字節(jié)0100000101100001ch0ch1運行結(jié)果:i=60501ch0=101,ch1=141ch0

21、=A,ch1=amain() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1);第21頁/共27頁 結(jié)構(gòu)體與共用體v區(qū)別: 存儲方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbch k變量的各成員同時存在任一時刻只有一個成員存在v 聯(lián)系: 兩者可相互嵌套第22頁/共27頁例 結(jié)構(gòu)體中嵌套共用體 namen

22、umsexjobclasspositionLiWang10112086FMST501prof循環(huán)n次讀入姓名、號碼、性別、職務(wù)job=s真真假假讀入class讀入position輸出“輸入錯”循環(huán)n次job=s真假輸出:姓名,號碼,性別,職業(yè),班級輸出:姓名,號碼,性別,職業(yè),職務(wù)job=tstruct int num; char name10; char sex; char job; union int class; char position10; category;person2;第23頁/共27頁例共用體中嵌套結(jié)構(gòu)體,機器字數(shù)據(jù)與字節(jié)數(shù)據(jù)的處理 00010010 00110100低字節(jié)

23、高字節(jié)0011010000010010lowhigh0 x123400010010 11111111低字節(jié)高字節(jié)1111111100010010lowhigh0 x12ffstruct w_tag char low; char high;union u_tag struct w_tag byte_acc; int word_acc;u_acc;word_accbyte_acc.lowbyte_acc.highu_acc第24頁/共27頁 用typedef定義類型功能:用自定義名字為已有數(shù)據(jù)類型命名 類型定義簡單形式: typedef type name;例 typedef int INTEGER;類型

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論