




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
構造數據類型第1頁,共31頁,2023年,2月20日,星期五在實際問題中,一組數據往往具有不同的數據類型。例如,在學生登記表中:為更好地解決此類問題,C語言采用構造數據類型,通過構造數據類型可以很好地將一些不同類型的數據作為一個整體進行處理。
姓名:字符型;學號:整型或字符型;年齡:整型;性別:字符型;成績:整型或實型。因為一個數組中只能存放同一種數據類型的數據,故不能用一個數組來存放這一組數據;如單獨定義為互相獨立的簡單變量,難以反映它們之間的內在聯系。第2頁,共31頁,2023年,2月20日,星期五9.1結構體“結構”是一種構造類型,它是由若干“成員”組成的。每一個成員可以是一個基本數據類型,或者又是一個構造類型。結構體類型的定義結構體變量的說明結構體變量的引用結構體先定義,后使用第3頁,共31頁,2023年,2月20日,星期五9.1結構體
9.1.1結構類型定義和結構變量說明
struct[結構體名]{
類型標識符成員名;類型標識符成員名;
…………….};成員類型可以是基本數據類型或構造數據類型struct是關鍵字,不能省略合法標識符可省:無名結構體一、結構體的定義
第4頁,共31頁,2023年,2月20日,星期五例
struct
student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr4字節4字節20字節1字節4字節30字節……..結構體類型定義描述結構的組織形式,不分配內存結構是一種復雜的數據類型,是數目固定,類型不同的若干有序變量的集合。結構定義之后,即可進行變量說明。括號后的分號不可省第5頁,共31頁,2023年,2月20日,星期五二、結構體變量說明
(1)先定義結構體類型,再定義結構體變量一般形式:struct結構體名{類型標識符成員名;類型標識符成員名;…………….};struct結構體名變量名表列;例#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
STUDENTstu1,stu2;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu1,stu2;第6頁,共31頁,2023年,2月20日,星期五(2)定義結構體類型的同時定義結構體變量一般形式:struct結構體名{類型標識符成員名;類型標識符成員名;…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;第7頁,共31頁,2023年,2月20日,星期五(3)直接定義結構體變量一般形式:struct{
類型標識符成員名;類型標識符成員名;
…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結構體直接定義變量只能一次第8頁,共31頁,2023年,2月20日,星期五說明結構體類型與結構體變量概念不同類型:不分配內存;變量:分配內存類型:不能賦值、存取、運算;變量:可以結構體成員名與程序中變量名可相同,不會混結構體可嵌套例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear第9頁,共31頁,2023年,2月20日,星期五9.1.2
結構體變量的引用引用規則結構體變量不能整體引用,只能引用變量成員可以將一個結構體變量賦值給另一個結構體變量結構體嵌套時逐級引用引用方式:結構體變量名.成員名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;()例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;if(stu1==stu2)……..()成員(分量)運算符優先級:1結合性:從左向右第10頁,共31頁,2023年,2月20日,星期五練習1.設有以下語句:structS{charch;
inta[4]}T;則下面敘述中正確的是()
S是struct類型的變量
T是structS類型的結構體變量可以用S定義結構體變量可以用T定義結構體變量第11頁,共31頁,2023年,2月20日,星期五練習2.設有如下定義:
structsk{inta;
floatsex;
}data;
int*p;若要使p指向data中的a域,正確的賦值語句是()A.p=&a;B.p=data.a;C.p=&data.a;D.*p=data.a第12頁,共31頁,2023年,2月20日,星期五struct結構體名{類型標識符成員名;類型標識符成員名;…………….};struct結構體名
結構體變量={初始數據};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudent
stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};二、結構體變量的初始化形式一:第13頁,共31頁,2023年,2月20日,星期五形式二:struct結構體名{
類型標識符成員名;類型標識符成員名;…………….}結構體變量={初始數據};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};
第14頁,共31頁,2023年,2月20日,星期五形式三:struct{
類型標識符成員名;類型標識符成員名;…………….}結構體變量={初始數據};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};第15頁,共31頁,2023年,2月20日,星期五注:結構體變量是全局變量或靜態變量,才可對它進行初始化賦值,局部或自動結構體變量,不能進行初始化賦值。結構體變量的初始化第16頁,共31頁,2023年,2月20日,星期五9.1.3結構體數組結構體數組的定義三種形式:形式一:
structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B第17頁,共31頁,2023年,2月20日,星期五結構體數組初始化例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};順序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};例structstudent{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時維數可省結構體數組引用引用方式:結構體數組名[下標].成員名
structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhangSan”);第18頁,共31頁,2023年,2月20日,星期五練習1.設有如下定義:main(){structcomplex{intx;
inty;
}num[2]={1,3,2,7};
printf(“%d\n”,num[0].y/num[0].x*num[1].x);}程序運行結果是()A.0B.1C.3D.6第19頁,共31頁,2023年,2月20日,星期五練習2.設有如下說明:
structSTD{intn;charc;doublex;}
;以下選項中,能正確定義結構體數組并賦初值的語句是()A.structSTDtt[2]={{1,'A',62},{2,'B',75}};B.structSTDtt[2]={1,"A",62,2,"B",75};C.structtt[2]={{1,'A'},{2,'B'}};D.structtt[2]={{1,"A",62.5},{2,"B",75.0}};第20頁,共31頁,2023年,2月20日,星期五9.1.4結構體和指針指向結構體變量的指針定義形式:struct結構體名*結構體指針名;例structstudent*p;使用結構體指針變量引用成員形式存放結構體變量在內存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*結構體指針名).成員名結構體指針名->成員名結構體變量名.成員名指向運算符優先級:1結合方向:從左向右例指向結構體的指針變量例intn;int*p=&n;
*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=101
pnum=101第21頁,共31頁,2023年,2月20日,星期五main(){structstudent{longintnum; charname[20]; charsex; floatscore;}stu_1,*p;p=&stu_1;stu_1.num=101;strcpy(stu_1.name,"LiLin");
p->sex='M';p->score=89.5;printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",
(*p).num,p->name,stu_1.sex,p->score);}No:101Name:LiLinSex:MScore:89.500000第22頁,共31頁,2023年,2月20日,星期五指向結構體數組的指針例指向結構體數組的指針structstudent{intnum;charname[20];charsex;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};main(){structstudent*p;for(p=stu;p<stu+3;p++)printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age);}numnamesexagestu[0]pstu[1]stu[2]p+110101LiLinM1810102ZhangFunM1910104WangMinF20第23頁,共31頁,2023年,2月20日,星期五在上例中,可使用的是(*p).num這樣的形式。(*p)表示p指向結構體變量,(*p).num是p指向的結構體變量中的成員num。注意:*p兩側的括弧不可省。請分析以下幾種運算:p->n
得到p指向的結構體變量中的成員n的值。p->n++++p->n得到p指向的結構體變量中的成員n的值,用完該值后使它加1。得到p指向的結構體變量中的成員n的值使之加1(先加)。第24頁,共31頁,2023年,2月20日,星期五1.有以下程序:#include<stdio.h>structSTU
{intnum;floatTotalScore;};voidf(structSTUp){structSTUs[2]={{20044,550},{20045,537}};
p.num=s[1].num;
p.TotalScore=s[1].TotalScore;}main(){structSTUs[2]={{20041,703},{20042,580}};
f(s[0]);printf("%d%3.0f\n",s[0].num,s[0].TotalScore);}程序運行后的輸出結果是()A.20045537B.20044550C.20042580D.20041703練習
值傳遞第25頁,共31頁,2023年,2月20日,星期五2.以下程序運行后輸出結果是()。#include<stdio.h>#include<string.h>structSTU{charname[10];intnum;};voidf(char*name,intnum){structSTUs[2]={{"SunDan",20044},{"Penghua",20045}};num=s[0].num;strcpy(name,s[0].name);}main(){structSTUs[2]={{"YangSan",20041},{"LiSi",20042}},*p;p=&s[1];f(p->name,p->num);printf("%s%d\n",p->name,p->num);}A)SunDan,20042B)SunDan,20044C)LiSi,20042D)YangSan,20041地址傳遞值傳遞第26頁,共31頁,2023年,2月20日,星期五3.有以下程序:structS{intn;inta[20];};voidf(structS*p){inti,j,t;
for(i=0;i<p->n-1;i++)for(j=i+1;j<p->n;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};
f(&s);
for(i=0;i<s.n;i++)printf("%d,",s.a[i]);}程序運行后的輸出結果是()A.1,2,3,4,5,6,7,8,9,10B.10,9,8,7,6,5,4,3,2,1C.2,3,1,6,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜西省西安交大附中中考物理三模試卷(含解析)
- 雞澤墻改梁施工方案
- 看臺土方開挖施工方案
- 酒店商鋪招商方案范本
- 鐵路旅客人身損害違約責任課件
- 中華兒童銘課件
- 大學生職業規劃大賽《輪機工程專業》生涯發展展示
- 臨時物流服務合同范本
- 個人職業防護課件
- 版舊房交易合同樣本
- 《無人機安全操作能力評估系統技術規范》
- 變壓器檢修規程范文(2篇)
- 強夯檢測方案
- 2024危重癥患兒管飼喂養護理-中華護理學會團體標準課件
- 生成式人工智能技術知識產權歸屬
- 我們愛運動(課件)冀美版美術二年級下冊
- 《國際物流與供應鏈管理》課程綜述論文:跨境電商供應鏈管理研究的文獻綜述4100字
- 數控車削編程與加工 課件 3.5軸類零件綜合
- 《三福百貨營銷環境PEST、SWOT研究及其營銷策略研究》11000字(論文)
- DB37T 4515-2022 罰沒物品分類與代碼
- 中國傳統文化(西安交通大學)知到智慧樹章節測試課后答案2024年秋西安交通大學
評論
0/150
提交評論