版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
構(gòu)造數(shù)據(jù)類型第一頁,共三十一頁,編輯于2023年,星期六在實際問題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如,在學(xué)生登記表中:為更好地解決此類問題,C語言采用構(gòu)造數(shù)據(jù)類型,通過構(gòu)造數(shù)據(jù)類型可以很好地將一些不同類型的數(shù)據(jù)作為一個整體進行處理。
姓名:字符型;學(xué)號:整型或字符型;年齡:整型;性別:字符型;成績:整型或?qū)嵭?。因為一個數(shù)組中只能存放同一種數(shù)據(jù)類型的數(shù)據(jù),故不能用一個數(shù)組來存放這一組數(shù)據(jù);如單獨定義為互相獨立的簡單變量,難以反映它們之間的內(nèi)在聯(lián)系。第二頁,共三十一頁,編輯于2023年,星期六9.1結(jié)構(gòu)體“結(jié)構(gòu)”是一種構(gòu)造類型,它是由若干“成員”組成的。每一個成員可以是一個基本數(shù)據(jù)類型,或者又是一個構(gòu)造類型。結(jié)構(gòu)體類型的定義結(jié)構(gòu)體變量的說明結(jié)構(gòu)體變量的引用結(jié)構(gòu)體先定義,后使用第三頁,共三十一頁,編輯于2023年,星期六9.1結(jié)構(gòu)體
9.1.1結(jié)構(gòu)類型定義和結(jié)構(gòu)變量說明
struct[結(jié)構(gòu)體名]{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….};成員類型可以是基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型struct是關(guān)鍵字,不能省略合法標(biāo)識符可省:無名結(jié)構(gòu)體一、結(jié)構(gòu)體的定義
第四頁,共三十一頁,編輯于2023年,星期六例
struct
student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr4字節(jié)4字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)是一種復(fù)雜的數(shù)據(jù)類型,是數(shù)目固定,類型不同的若干有序變量的集合。結(jié)構(gòu)定義之后,即可進行變量說明。括號后的分號不可省第五頁,共三十一頁,編輯于2023年,星期六二、結(jié)構(gòu)體變量說明
(1)先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};struct結(jié)構(gòu)體名變量名表列;例#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
STUDENTstu1,stu2;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu1,stu2;第六頁,共三十一頁,編輯于2023年,星期六(2)定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;第七頁,共三十一頁,編輯于2023年,星期六(3)直接定義結(jié)構(gòu)體變量一般形式:struct{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體直接定義變量只能一次第八頁,共三十一頁,編輯于2023年,星期六說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運算;變量:可以結(jié)構(gòu)體成員名與程序中變量名可相同,不會混結(jié)構(gòu)體可嵌套例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear第九頁,共三十一頁,編輯于2023年,星期六9.1.2
結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用引用方式:結(jié)構(gòu)體變量名.成員名例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)……..()成員(分量)運算符優(yōu)先級:1結(jié)合性:從左向右第十頁,共三十一頁,編輯于2023年,星期六練習(xí)1.設(shè)有以下語句:structS{charch;
inta[4]}T;則下面敘述中正確的是()
S是struct類型的變量
T是structS類型的結(jié)構(gòu)體變量可以用S定義結(jié)構(gòu)體變量可以用T定義結(jié)構(gòu)體變量第十一頁,共三十一頁,編輯于2023年,星期六練習(xí)2.設(shè)有如下定義:
structsk{inta;
floatsex;
}data;
int*p;若要使p指向data中的a域,正確的賦值語句是()A.p=&a;B.p=data.a;C.p=&data.a;D.*p=data.a第十二頁,共三十一頁,編輯于2023年,星期六struct結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};struct結(jié)構(gòu)體名
結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudent
stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};二、結(jié)構(gòu)體變量的初始化形式一:第十三頁,共三十一頁,編輯于2023年,星期六形式二:struct結(jié)構(gòu)體名{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};
第十四頁,共三十一頁,編輯于2023年,星期六形式三:struct{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};第十五頁,共三十一頁,編輯于2023年,星期六注:結(jié)構(gòu)體變量是全局變量或靜態(tài)變量,才可對它進行初始化賦值,局部或自動結(jié)構(gòu)體變量,不能進行初始化賦值。結(jié)構(gòu)體變量的初始化第十六頁,共三十一頁,編輯于2023年,星期六9.1.3結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:
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第十七頁,共三十一頁,編輯于2023年,星期六結(jié)構(gòu)體數(shù)組初始化例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}};全部初始化時維數(shù)可省結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名
structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhangSan”);第十八頁,共三十一頁,編輯于2023年,星期六練習(xí)1.設(shè)有如下定義:main(){structcomplex{intx;
inty;
}num[2]={1,3,2,7};
printf(“%d\n”,num[0].y/num[0].x*num[1].x);}程序運行結(jié)果是()A.0B.1C.3D.6第十九頁,共三十一頁,編輯于2023年,星期六練習(xí)2.設(shè)有如下說明:
structSTD{intn;charc;doublex;}
;以下選項中,能正確定義結(jié)構(gòu)體數(shù)組并賦初值的語句是()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}};第二十頁,共三十一頁,編輯于2023年,星期六9.1.4結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名指向運算符優(yōu)先級:1結(jié)合方向:從左向右例指向結(jié)構(gòu)體的指針變量例intn;int*p=&n;
*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=101
pnum=101第二十一頁,共三十一頁,編輯于2023年,星期六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第二十二頁,共三十一頁,編輯于2023年,星期六指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針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第二十三頁,共三十一頁,編輯于2023年,星期六在上例中,可使用的是(*p).num這樣的形式。(*p)表示p指向結(jié)構(gòu)體變量,(*p).num是p指向的結(jié)構(gòu)體變量中的成員num。注意:*p兩側(cè)的括弧不可省。請分析以下幾種運算:p->n
得到p指向的結(jié)構(gòu)體變量中的成員n的值。p->n++++p->n得到p指向的結(jié)構(gòu)體變量中的成員n的值,用完該值后使它加1。得到p指向的結(jié)構(gòu)體變量中的成員n的值使之加1(先加)。第二十四頁,共三十一頁,編輯于2023年,星期六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);}程序運行后的輸出結(jié)果是()A.20045537B.20044550C.20042580D.20041703練習(xí)
值傳遞第二十五頁,共三十一頁,編輯于2023年,星期六2.以下程序運行后輸出結(jié)果是()。#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地址傳遞值傳遞第二十六頁,共三十一頁,編輯于2023年,星期六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]);}程序運行后的輸出結(jié)果是()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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度科研儀器租賃及技術(shù)服務(wù)合同
- 2024年定制:5G網(wǎng)絡(luò)技術(shù)研發(fā)與技術(shù)服務(wù)合同
- 2024合作開發(fā)合同的開發(fā)內(nèi)容和合作方式
- 04版加工承攬合同生產(chǎn)工藝與質(zhì)量控制
- 2024年度校園租賃:電動自行車合同
- 2024光電子技術(shù)研發(fā)與生產(chǎn)合同
- 2024廣州市勞動合同范文新版
- 2024營業(yè)租賃合同范文
- 2024年度電力設(shè)備安裝與維護合同
- 2024年度計算機軟件開發(fā)與銷售合同
- 超星爾雅學(xué)習(xí)通《海上絲綢之路》章節(jié)測試附答案
- DB42T169-2022巖土工程勘察規(guī)程
- 房顫合并心力衰竭的治療課件
- 《建筑制圖基礎(chǔ)實訓(xùn)》畫圖大作業(yè)布置
- 優(yōu)質(zhì)《春天的色彩》課件
- DB4101-T 25.2-2021物業(yè)服務(wù)規(guī)范 第2部分:住宅-(高清現(xiàn)行)
- 我們的家園-公開課獲獎?wù)n件
- 濕式電除塵器安裝施工方案(推薦文檔)
- 中藥的發(fā)展及研究思路課件
- 總承包項目部安全風(fēng)險分級管控管理辦法
- 獎狀證書模板優(yōu)秀員工3
評論
0/150
提交評論