版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八講用戶自己建立數(shù)據(jù)類型1、教學(xué)目的:掌握結(jié)構(gòu)體定義和使用;掌握結(jié)構(gòu)體數(shù)組定義和使用;掌握結(jié)構(gòu)體指針的使用;了解聯(lián)合體定義和使用。2、教學(xué)重點(diǎn):結(jié)構(gòu)體變量的定義和使用結(jié)構(gòu)體數(shù)組的定義和使用。3、教學(xué)難點(diǎn):結(jié)構(gòu)體類型指針4、教學(xué)方法:講授為主,利用多媒體輔助教學(xué)。5、 教學(xué)工具:PPT+板書6、 教學(xué)學(xué)時(shí):27、 教學(xué)過程:7.1引入在實(shí)際生活中有許多需要由不同類型的數(shù)據(jù)共同描述的實(shí)體,比如通訊錄可由姓名、地址、電話、郵政編碼等組成;一個(gè)學(xué)生的情況可由姓名、性別、年齡、成績(jī)、家庭住址等數(shù)據(jù)項(xiàng)組成。C語(yǔ)言提供了這樣一種數(shù)據(jù)結(jié)構(gòu),稱為結(jié)構(gòu)體。教學(xué)內(nèi)容1)結(jié)構(gòu)體類型的定義和使用2)結(jié)構(gòu)體數(shù)組3)結(jié)構(gòu)體類型數(shù)據(jù)的指針4)共用體類型小結(jié):本章介紹了兩種構(gòu)造類型:結(jié)構(gòu)體和共用體(聯(lián)合類型)它與我們前面學(xué)過的數(shù)組類型的區(qū)別在于數(shù)組由一組具有相同類型的數(shù)據(jù)標(biāo)號(hào)而成,定義后可應(yīng)按引用在計(jì)算機(jī)內(nèi)存只有一片連續(xù)的空間,而結(jié)構(gòu)體和共用體可由若干不同的類型的數(shù)據(jù)項(xiàng)構(gòu)成結(jié)構(gòu)類型。在定義結(jié)構(gòu)體類型時(shí)系統(tǒng)不為它分配存儲(chǔ)空間。只有引用該類型定義變量時(shí),才為其分配存儲(chǔ)空間本章主要的講解內(nèi)容如下:1.結(jié)構(gòu)體類型定義。對(duì)結(jié)構(gòu)體變量可以使用輸入、輸出操作。2.結(jié)構(gòu)體數(shù)組的定義及初始化。3.結(jié)構(gòu)體類型數(shù)據(jù)指針。4.聯(lián)合類型及變量定義、引用。7.4作業(yè):P330:1,2閱讀教材8、 后記:9、講義:第九章用戶自己建立數(shù)據(jù)類型9.1結(jié)構(gòu)體類型的定義和使用一、結(jié)構(gòu)體類型的定義構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體類型名{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;I■■I數(shù)據(jù)類型n成員名n;};例如,為描述日期可定義如下的結(jié)構(gòu)體類型:structdate{intyear;intmonth;intday;};二、結(jié)構(gòu)體類型變量的定義定義一個(gè)結(jié)構(gòu)體類型的變量,可以采用以下三種方法:1.先定義結(jié)構(gòu)體類型再定義變量,例如上面已定義了一個(gè)結(jié)構(gòu)體類型structstudent,可以用它來(lái)定義變量:structstudentstudentl,student2;2.在定義類型的同時(shí)定義變量上面可改寫為:struct結(jié)構(gòu)體類型名{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;IIII數(shù)據(jù)類型n成員名n;}變量名表列;即在結(jié)構(gòu)體類型定義后直接寫出變量名。3.直接定義結(jié)構(gòu)體類型變量,即不定義結(jié)構(gòu)體類型名,在寫出結(jié)構(gòu)體類型后直接寫出變量名Struct{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;IIII數(shù)據(jù)類型n成員名n;}變量名表列;說明:類型與變量的概念不同。對(duì)結(jié)構(gòu)體類型變量來(lái)說,在定義時(shí)一般先定義結(jié)構(gòu)體類型,然后再定義該結(jié)構(gòu)體類型的變量。只能對(duì)結(jié)構(gòu)體類型的變量賦值、存取或運(yùn)算,而不能對(duì)結(jié)構(gòu)體類型賦值、存取或運(yùn)算。在編譯時(shí)對(duì)類型是不分配存儲(chǔ)空間的,只對(duì)變量分配存儲(chǔ)空間。對(duì)結(jié)構(gòu)體變量中的成員,可以單獨(dú)使用,其作用與地位相當(dāng)于普通變量。結(jié)構(gòu)體類型的成員可以是一個(gè)已定義的結(jié)構(gòu)體類型變量。例如:structaddr{charcity[20];unsignedlongzip;unsignedlongtel;};structinfo{charname[20];intage;structaddraddress;};這樣先定義了一個(gè)structaddr類型,它包括三個(gè)成員:city、zip、tel。然后在定義structinfo時(shí),成員address被定義為structaddr類型。結(jié)構(gòu)體類型中的成員可以與程序中的變量同名,二者不代表同一對(duì)象。比如程序中可以另外定義一個(gè)變量name,它與structinfo中的name無(wú)關(guān)。三、結(jié)構(gòu)體類型變量的引用在定義結(jié)構(gòu)體類型變量以后,可以引用這個(gè)變量。引用結(jié)構(gòu)體類型的變量應(yīng)遵守以下規(guī)則:不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體加以引用,只能引用結(jié)構(gòu)體變量中的成員。引用方式為:結(jié)構(gòu)體變量名.成員名例如:classmate.ageclassmate.age=20;如果成員本身又屬于一個(gè)結(jié)構(gòu)體類型,則需要再次使用取成員運(yùn)算符“.”,這樣一級(jí)一級(jí)找到最低的一級(jí)的成員。對(duì)結(jié)構(gòu)體類型變量的成員所能執(zhí)行的操作,與具有相同類型的普通變量所能執(zhí)行的操作相同。例如:classmate.age++;ANSIC新標(biāo)準(zhǔn)允許將一個(gè)結(jié)構(gòu)體類型的變量,作為一個(gè)整體賦值給另一個(gè)具有相同類型的結(jié)構(gòu)體變量。例9.1學(xué)生信息輸出。structdate{intmonth;intday;intyear;};structstud_type{charname[20];intage;charsex;structdatebirthday;longnum;floatscore;};main(){structstud_typestudentl={〃WangLi〃,18,'M‘,12,15,1974,89101,89.5};structstud_typestudent2;student2=student1;printf(〃student1:%s,%d,%c,%d,%d,%d,%1d,%5.2f\n〃,student1.name,student1.age,student1.sex,student1.birthday.month,student1.birthday.day,student1.birthday.year,student1.num,student1.score;)printf(〃student2:%s,%d,%c,%d,%d,%d,%ld,%5.2f\n〃,,student2.age,student2.sex,student2.birthday.month,student2.birthday.day,student2.birthday.year,student2.num,student2.score);}運(yùn)行情況如下:student1:WangLi,18,M,12,15,1974,89101,89.50student2:WangLi,18,M,12,15,1974,89101,89.505、C語(yǔ)言允許兩個(gè)同類型的結(jié)構(gòu)體變量之間相互賦值。在執(zhí)行“student2=studentl;”不允許用賦值語(yǔ)句將一組常量直接賦給一個(gè)結(jié)構(gòu)體變量。輸入下面語(yǔ)句不合法:studentl={〃WangLi〃,18,M‘,12,15,1974,89101,89.5};四、結(jié)構(gòu)體變量的輸入和輸出若有一個(gè)結(jié)構(gòu)體:struct{charname[15];charadd[20];longnum;}stud={〃WangLi〃,〃125BlingRoad〃,89101};可用語(yǔ)句:printf(“%s,%s,%1d\n〃,,stud.addr,stud.num);由于成員項(xiàng)name和addr是字符數(shù)組,故應(yīng)按%$字符格式輸出。當(dāng)然也可以用gest和puts函數(shù)輸入和輸出一個(gè)結(jié)構(gòu)體變量中字符數(shù)組成員。9.2結(jié)構(gòu)體數(shù)組一個(gè)結(jié)構(gòu)體變量只能存放一個(gè)對(duì)象(如一個(gè)學(xué)生,一個(gè)職工)的一組數(shù)據(jù),如果要存放一個(gè)班(30人)學(xué)生的有關(guān)數(shù)據(jù)就要設(shè)30個(gè)結(jié)構(gòu)體變量,顯然是很不方便的,人們自然想到使用數(shù)組,C語(yǔ)言結(jié)構(gòu)體數(shù)組的概念與普通數(shù)組的概念相同,即數(shù)組中每一個(gè)元素都是一個(gè)結(jié)構(gòu)體變量。一、結(jié)構(gòu)體數(shù)組的定義structstudent{longnum;charname[20];charsex;intage;float score;};structstudentstu[3];以上定義了一個(gè)結(jié)構(gòu)體類型數(shù)組stu[3],其元素為structstudent類型,數(shù)組有三個(gè)元素。也可以在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體數(shù)組,如:structstudent{longnum;charname[20];charsex;int age;floatescore;}stu[3];或者只定義結(jié)構(gòu)體數(shù)組,而不定義類型,如:struct{longnum;charname[20];charsex;int age;floatescore;}stu[3];以上三種方法定義的效果相同。數(shù)組中的元素在數(shù)組中連續(xù)存放。二、結(jié)構(gòu)體數(shù)組的初始化對(duì)全局或靜態(tài)存儲(chǔ)類別的結(jié)構(gòu)體數(shù)組,可以在定義時(shí)初始化,TurboC允許在定義動(dòng)態(tài)存儲(chǔ)類別的局部結(jié)構(gòu)體數(shù)組時(shí),將其初始化。結(jié)構(gòu)體數(shù)組初始化的一般形式是在定義數(shù)組時(shí),在數(shù)組的后面寫上:={初值表列};如果用于賦值的數(shù)據(jù)的個(gè)數(shù)與所定義的數(shù)組元素的個(gè)數(shù)相等,則數(shù)組元素個(gè)數(shù)可以不寫。三、結(jié)構(gòu)體數(shù)組的引用一個(gè)結(jié)構(gòu)體數(shù)組的元素相當(dāng)于一個(gè)結(jié)構(gòu)體變量,因此前面介紹的關(guān)于引用結(jié)構(gòu)體變量的規(guī)則也適用于結(jié)構(gòu)體數(shù)組元素。即:1.引用某一個(gè)元素中的一個(gè)成員,用以下形式:student[i].num2.可以將一個(gè)結(jié)構(gòu)體數(shù)組元素賦值給同一個(gè)結(jié)構(gòu)體類型的數(shù)組中的另一個(gè)元素,或賦給同一類型的變量,如:structstud_typestudent[3],student1;3.不能把結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體直接進(jìn)行輸入或輸出。只能以單個(gè)成員作為對(duì)象進(jìn)行輸入輸出,如:scanf(“%s〃 ,&student[O].name);scanf(“%ld〃 ,&student[O].num);printf(“%s,%ld,%d,%f\n〃,student[O].name,student[O].num,student[0].age,student[0].score);結(jié)構(gòu)體類型數(shù)據(jù)的指針一、指向結(jié)構(gòu)體變量的指針structstud_type*p;使用指針變量可以指向任何一個(gè)屬于structstud_type類型的結(jié)構(gòu)體變量。例9.2用指針變量輸出結(jié)構(gòu)體變量的值。#include<string.h>structstudent /*定義結(jié)構(gòu)體類型structstudent*/{longintnum;charname[10];charsex;floatscore;};main(){structstudentstud,*p; /*定義結(jié)構(gòu)體類型變量stud和指針變量*/p=&stud;stud.num=91601;strcpy(,“LiLing");stud.sex=F‘;stud.score=89.5;printf("No.NameSexScore'n");printf("%-81d%-10s%-3c%8.2f\n",(*p).num,(*p).name,(*p).sex,(*p).score);printf("%-8ld%-10s%-3c%8.2f\n",p->num,p->name,p->sex,p->score);}即在C語(yǔ)言中,以下三種形式等價(jià):1.結(jié)構(gòu)體變量名.成員名2.*(結(jié)構(gòu)體指針變量名).成員名3.結(jié)構(gòu)體指針變量名->成員名其中->稱為指向運(yùn)算符。二、指向結(jié)構(gòu)體數(shù)組的指針一個(gè)指針變量可以指向一個(gè)結(jié)構(gòu)體數(shù)組,即將該數(shù)組的起始地址賦給此指針變量,例如struct{inta;floatb;}arr[3],*p;p=arr;p指向arr數(shù)組,即指向arr數(shù)組的第一個(gè)元素,若執(zhí)行p++;則指針變量此時(shí)指向arr[1]。例9.3用指向結(jié)構(gòu)體變量的指針輸出結(jié)構(gòu)體數(shù)組中的元素。structname_tel{charname[14];unsignedlongtel;};structname_telcomrades[3]={{"ZhangLong",4792553},{"ZhaoHu",6846351},{"WangChao",3897256}};main(){structname_tel*p;printf("NameTelephone'*');for(p=comrades;p<comrades+3;p++)printf(“%-14s%71d\n〃,p—>name,p—>tel);}執(zhí)行結(jié)果如下:Name TelephoneZhangLong 4792553ZhaoHu 6846351WangChao 3897256程三、用指向結(jié)構(gòu)體變量的指針作函數(shù)的參數(shù)1.結(jié)構(gòu)體變量的成員作實(shí)參,將實(shí)參值傳送給形參,其用法與普通變量作實(shí)參相同,是值傳送方式。2.指向結(jié)構(gòu)體變量的指針作實(shí)參,將結(jié)構(gòu)體變量的地址傳送給形參,是地址傳送方式例9.4有一結(jié)構(gòu)體變量comrade內(nèi)含姓名.年齡和地址,要求在主函數(shù)中輸入值,在另一函數(shù)中將其打印出來(lái).#include<stdio.h>structperson_rec{charname[14];intage;charaddr[20];};structperson_reccomrade;voidprint(structperson_rec*p){printf("%-14s%-6d%-20s\n〃,p—>name,p—>age,p—>addr);}main(){printf("Name:");gets();prinft("Age:");scanf("%d",&comrade.age);getchar();printf("Address:");gets(comrade.addr);printf("\nNameAgeAddress\n");print(&comrade);}一次可能的運(yùn)行結(jié)果如下:Name: ZhangSanAge: 34Address:102WenHuaRoadName: Age AddressZhangSan 34 102WenHuaRoad聯(lián)合類型一、聯(lián)合類型及其變量的定義聯(lián)合類定義的一般形式為:union聯(lián)合舉型名
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度毛石石材工程設(shè)計(jì)及施工合同4篇
- 2025年消防工程現(xiàn)場(chǎng)施工管理與監(jiān)督承攬施工合同3篇
- 2025年度羅馬柱工程抗震設(shè)計(jì)與施工合同4篇
- 二零二五年度智能監(jiān)控系統(tǒng)集成與技術(shù)服務(wù)協(xié)議3篇
- 2025-2030年中國(guó)風(fēng)力發(fā)電設(shè)備制造業(yè)行業(yè)十三五規(guī)劃及投資戰(zhàn)略分析報(bào)告新版
- 2025-2030年中國(guó)銀礦石產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資前景規(guī)劃研究報(bào)告
- 二零二五年房地產(chǎn)投資風(fēng)險(xiǎn)評(píng)估與購(gòu)買代理協(xié)議3篇
- 2025-2030年中國(guó)醬油調(diào)味料市場(chǎng)供求規(guī)模及未來(lái)發(fā)展建議研究報(bào)告
- 2025-2030年中國(guó)花炮行業(yè)十三五發(fā)展規(guī)劃及投資戰(zhàn)略研究報(bào)告新版
- 2025-2030年中國(guó)船用鋁合金板行業(yè)競(jìng)爭(zhēng)狀況及投資發(fā)展前景分析報(bào)告
- 深圳2024-2025學(xué)年度四年級(jí)第一學(xué)期期末數(shù)學(xué)試題
- 中考語(yǔ)文復(fù)習(xí)說話要得體
- 《工商業(yè)儲(chǔ)能柜技術(shù)規(guī)范》
- 華中師范大學(xué)教育技術(shù)學(xué)碩士研究生培養(yǎng)方案
- 醫(yī)院醫(yī)學(xué)倫理委員會(huì)章程
- 風(fēng)浪流耦合作用下錨泊式海上試驗(yàn)平臺(tái)的水動(dòng)力特性試驗(yàn)
- 高考英語(yǔ)語(yǔ)法專練定語(yǔ)從句含答案
- 有機(jī)農(nóng)業(yè)種植技術(shù)操作手冊(cè)
- 公園廣場(chǎng)綠地文化設(shè)施維修改造工程施工部署及進(jìn)度計(jì)劃
- 塑料件缺陷匯總
- 2020年的中國(guó)海外工程示范營(yíng)地申報(bào)材料及評(píng)分標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論