結構體與共用體講義_第1頁
結構體與共用體講義_第2頁
結構體與共用體講義_第3頁
結構體與共用體講義_第4頁
結構體與共用體講義_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第八講用戶自己建立數(shù)據(jù)類型1、教學目的:掌握結構體定義和使用;掌握結構體數(shù)組定義和使用;掌握結構體指針的使用;了解聯(lián)合體定義和使用。2、教學重點:結構體變量的定義和使用結構體數(shù)組的定義和使用。3、教學難點:結構體類型指針4、教學方法:講授為主,利用多媒體輔助教學。5、 教學工具:PPT+板書6、 教學學時:27、 教學過程:7.1引入在實際生活中有許多需要由不同類型的數(shù)據(jù)共同描述的實體,比如通訊錄可由姓名、地址、電話、郵政編碼等組成;一個學生的情況可由姓名、性別、年齡、成績、家庭住址等數(shù)據(jù)項組成。C語言提供了這樣一種數(shù)據(jù)結構,稱為結構體。教學內容1)結構體類型的定義和使用2)結構體數(shù)組3)結構體類型數(shù)據(jù)的指針4)共用體類型小結:本章介紹了兩種構造類型:結構體和共用體(聯(lián)合類型)它與我們前面學過的數(shù)組類型的區(qū)別在于數(shù)組由一組具有相同類型的數(shù)據(jù)標號而成,定義后可應按引用在計算機內存只有一片連續(xù)的空間,而結構體和共用體可由若干不同的類型的數(shù)據(jù)項構成結構類型。在定義結構體類型時系統(tǒng)不為它分配存儲空間。只有引用該類型定義變量時,才為其分配存儲空間本章主要的講解內容如下:1.結構體類型定義。對結構體變量可以使用輸入、輸出操作。2.結構體數(shù)組的定義及初始化。3.結構體類型數(shù)據(jù)指針。4.聯(lián)合類型及變量定義、引用。7.4作業(yè):P330:1,2閱讀教材8、 后記:9、講義:第九章用戶自己建立數(shù)據(jù)類型9.1結構體類型的定義和使用一、結構體類型的定義構體類型的一般形式為:struct結構體類型名{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;I■■I數(shù)據(jù)類型n成員名n;};例如,為描述日期可定義如下的結構體類型:structdate{intyear;intmonth;intday;};二、結構體類型變量的定義定義一個結構體類型的變量,可以采用以下三種方法:1.先定義結構體類型再定義變量,例如上面已定義了一個結構體類型structstudent,可以用它來定義變量:structstudentstudentl,student2;2.在定義類型的同時定義變量上面可改寫為:struct結構體類型名{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;IIII數(shù)據(jù)類型n成員名n;}變量名表列;即在結構體類型定義后直接寫出變量名。3.直接定義結構體類型變量,即不定義結構體類型名,在寫出結構體類型后直接寫出變量名Struct{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;IIII數(shù)據(jù)類型n成員名n;}變量名表列;說明:類型與變量的概念不同。對結構體類型變量來說,在定義時一般先定義結構體類型,然后再定義該結構體類型的變量。只能對結構體類型的變量賦值、存取或運算,而不能對結構體類型賦值、存取或運算。在編譯時對類型是不分配存儲空間的,只對變量分配存儲空間。對結構體變量中的成員,可以單獨使用,其作用與地位相當于普通變量。結構體類型的成員可以是一個已定義的結構體類型變量。例如:structaddr{charcity[20];unsignedlongzip;unsignedlongtel;};structinfo{charname[20];intage;structaddraddress;};這樣先定義了一個structaddr類型,它包括三個成員:city、zip、tel。然后在定義structinfo時,成員address被定義為structaddr類型。結構體類型中的成員可以與程序中的變量同名,二者不代表同一對象。比如程序中可以另外定義一個變量name,它與structinfo中的name無關。三、結構體類型變量的引用在定義結構體類型變量以后,可以引用這個變量。引用結構體類型的變量應遵守以下規(guī)則:不能將一個結構體變量作為一個整體加以引用,只能引用結構體變量中的成員。引用方式為:結構體變量名.成員名例如:classmate.ageclassmate.age=20;如果成員本身又屬于一個結構體類型,則需要再次使用取成員運算符“.”,這樣一級一級找到最低的一級的成員。對結構體類型變量的成員所能執(zhí)行的操作,與具有相同類型的普通變量所能執(zhí)行的操作相同。例如:classmate.age++;ANSIC新標準允許將一個結構體類型的變量,作為一個整體賦值給另一個具有相同類型的結構體變量。例9.1學生信息輸出。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);}運行情況如下:student1:WangLi,18,M,12,15,1974,89101,89.50student2:WangLi,18,M,12,15,1974,89101,89.505、C語言允許兩個同類型的結構體變量之間相互賦值。在執(zhí)行“student2=studentl;”不允許用賦值語句將一組常量直接賦給一個結構體變量。輸入下面語句不合法:studentl={〃WangLi〃,18,M‘,12,15,1974,89101,89.5};四、結構體變量的輸入和輸出若有一個結構體:struct{charname[15];charadd[20];longnum;}stud={〃WangLi〃,〃125BlingRoad〃,89101};可用語句:printf(“%s,%s,%1d\n〃,,stud.addr,stud.num);由于成員項name和addr是字符數(shù)組,故應按%$字符格式輸出。當然也可以用gest和puts函數(shù)輸入和輸出一個結構體變量中字符數(shù)組成員。9.2結構體數(shù)組一個結構體變量只能存放一個對象(如一個學生,一個職工)的一組數(shù)據(jù),如果要存放一個班(30人)學生的有關數(shù)據(jù)就要設30個結構體變量,顯然是很不方便的,人們自然想到使用數(shù)組,C語言結構體數(shù)組的概念與普通數(shù)組的概念相同,即數(shù)組中每一個元素都是一個結構體變量。一、結構體數(shù)組的定義structstudent{longnum;charname[20];charsex;intage;float score;};structstudentstu[3];以上定義了一個結構體類型數(shù)組stu[3],其元素為structstudent類型,數(shù)組有三個元素。也可以在定義結構體類型的同時定義結構體數(shù)組,如:structstudent{longnum;charname[20];charsex;int age;floatescore;}stu[3];或者只定義結構體數(shù)組,而不定義類型,如:struct{longnum;charname[20];charsex;int age;floatescore;}stu[3];以上三種方法定義的效果相同。數(shù)組中的元素在數(shù)組中連續(xù)存放。二、結構體數(shù)組的初始化對全局或靜態(tài)存儲類別的結構體數(shù)組,可以在定義時初始化,TurboC允許在定義動態(tài)存儲類別的局部結構體數(shù)組時,將其初始化。結構體數(shù)組初始化的一般形式是在定義數(shù)組時,在數(shù)組的后面寫上:={初值表列};如果用于賦值的數(shù)據(jù)的個數(shù)與所定義的數(shù)組元素的個數(shù)相等,則數(shù)組元素個數(shù)可以不寫。三、結構體數(shù)組的引用一個結構體數(shù)組的元素相當于一個結構體變量,因此前面介紹的關于引用結構體變量的規(guī)則也適用于結構體數(shù)組元素。即:1.引用某一個元素中的一個成員,用以下形式:student[i].num2.可以將一個結構體數(shù)組元素賦值給同一個結構體類型的數(shù)組中的另一個元素,或賦給同一類型的變量,如:structstud_typestudent[3],student1;3.不能把結構體數(shù)組元素作為一個整體直接進行輸入或輸出。只能以單個成員作為對象進行輸入輸出,如: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);結構體類型數(shù)據(jù)的指針一、指向結構體變量的指針structstud_type*p;使用指針變量可以指向任何一個屬于structstud_type類型的結構體變量。例9.2用指針變量輸出結構體變量的值。#include<string.h>structstudent /*定義結構體類型structstudent*/{longintnum;charname[10];charsex;floatscore;};main(){structstudentstud,*p; /*定義結構體類型變量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語言中,以下三種形式等價:1.結構體變量名.成員名2.*(結構體指針變量名).成員名3.結構體指針變量名->成員名其中->稱為指向運算符。二、指向結構體數(shù)組的指針一個指針變量可以指向一個結構體數(shù)組,即將該數(shù)組的起始地址賦給此指針變量,例如struct{inta;floatb;}arr[3],*p;p=arr;p指向arr數(shù)組,即指向arr數(shù)組的第一個元素,若執(zhí)行p++;則指針變量此時指向arr[1]。例9.3用指向結構體變量的指針輸出結構體數(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í)行結果如下:Name TelephoneZhangLong 4792553ZhaoHu 6846351WangChao 3897256程三、用指向結構體變量的指針作函數(shù)的參數(shù)1.結構體變量的成員作實參,將實參值傳送給形參,其用法與普通變量作實參相同,是值傳送方式。2.指向結構體變量的指針作實參,將結構體變量的地址傳送給形參,是地址傳送方式例9.4有一結構體變量comrade內含姓名.年齡和地址,要求在主函數(shù)中輸入值,在另一函數(shù)中將其打印出來.#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);}一次可能的運行結果如下:Name: ZhangSanAge: 34Address:102WenHuaRoadName: Age AddressZhangSan 34 102WenHuaRoad聯(lián)合類型一、聯(lián)合類型及其變量的定義聯(lián)合類定義的一般形式為:union聯(lián)合舉型名

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論