結(jié)構(gòu)體和枚舉類型_第1頁
結(jié)構(gòu)體和枚舉類型_第2頁
結(jié)構(gòu)體和枚舉類型_第3頁
結(jié)構(gòu)體和枚舉類型_第4頁
結(jié)構(gòu)體和枚舉類型_第5頁
已閱讀5頁,還剩87頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

結(jié)構(gòu)體和枚舉類型第1頁,共92頁,2023年,2月20日,星期二本章要點:

教學目標本章講解結(jié)構(gòu)和結(jié)構(gòu)變量的定義格式、結(jié)構(gòu)成員的表示、結(jié)構(gòu)變量的賦初值和賦值、結(jié)構(gòu)變量的運算。在此基礎上進一步講述結(jié)構(gòu)與指針、結(jié)構(gòu)與數(shù)組、結(jié)構(gòu)與函數(shù)的應用。教學重點和難點◆結(jié)構(gòu)體類型的定義◆定義和初始化結(jié)構(gòu)體變量◆類型定義typedef◆結(jié)構(gòu)體數(shù)組◆結(jié)構(gòu)體指針◆結(jié)構(gòu)體與函數(shù)◆單向鏈表及其操作◆枚舉類型第2頁,共92頁,2023年,2月20日,星期二在現(xiàn)實生活中,有許多不同性質(zhì)的數(shù)據(jù)實體。比如,通訊錄通常由姓名、電話、E-mail、年齡等組成。姓名、電話、E-mail和所在城市可以用字符串表示,年齡可以用整型數(shù)表示??墒撬鼈兊拿恳豁椂际菃为毷褂玫?,不能反映通訊錄這樣一個整體。用什么方法表示通訊錄這個整體呢?新的被稱為結(jié)構(gòu)體的數(shù)據(jù)類型。為我們處理復雜的數(shù)據(jù)提供了便利的手段。第3頁,共92頁,2023年,2月20日,星期二8.1.1什么是結(jié)構(gòu)體結(jié)構(gòu)體(structure)是一種數(shù)據(jù)類型,它把互相聯(lián)系的數(shù)據(jù)組合成一個整體。例如,下面的表格顯示了一個通訊錄的信息:表8-1一個通訊錄的信息表一個通訊錄中有姓名、電話、性別、年齡、E-mail地址、所在城市,這些信息都是和一個叫“李明”的人有關。如果我們只把這些信息分別定義為獨立的簡單變量,就體現(xiàn)不出它們之間的相互關聯(lián)了。所以,應當把它們組織成一個組合項,在一個組合項中包含若干個類型不同的數(shù)據(jù)項。用“結(jié)構(gòu)體”來定義。8.1結(jié)構(gòu)體類型第4頁,共92頁,2023年,2月20日,星期二8.1.2結(jié)構(gòu)體的定義結(jié)構(gòu)體既然是一種數(shù)據(jù)類型,在使用前,先要“定義”出要使用的結(jié)構(gòu)體類型。例:將通訊錄定義成一個結(jié)構(gòu)體。通訊錄的信息由六項屬性組成,首先要給這個結(jié)構(gòu)體類型定義取一個名字,比如“AddressList”。然后,應該在結(jié)構(gòu)體定義中對各屬性進行說明。下面就是“通訊錄”結(jié)構(gòu)體類型:structAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/};8.1結(jié)構(gòu)體類型第5頁,共92頁,2023年,2月20日,星期二其中,“struct”是關鍵字,是結(jié)構(gòu)體的標識符,不能省略?!癆ddressList”是結(jié)構(gòu)體類型名,它由我們自己進行命名的。“{}”中是結(jié)構(gòu)體的成員,每個成員的數(shù)據(jù)類型既可以是簡單的數(shù)據(jù)類型,也可以是復雜的數(shù)據(jù)類型,當然也可以是其他結(jié)構(gòu)體數(shù)據(jù)類型。最后,定義完一個結(jié)構(gòu)體后一定要用一個分號“;”結(jié)束。從上面這個例子,可以看出結(jié)構(gòu)體定義格式如下:

8.1結(jié)構(gòu)體類型struct名字{成員說明1;成員說明2;成員說明3;……成員說明n;};第6頁,共92頁,2023年,2月20日,星期二可以定義許多復雜的數(shù)據(jù)類型。比如,定義一個表示日期的結(jié)構(gòu)體:structdate{ intyear; /*年*/ intmonth; /*月*/ intday; /*日*/};用日期這種結(jié)構(gòu)體,我們就可以表示生日、開學時間、春節(jié)等等這樣的日期。8.1結(jié)構(gòu)體類型第7頁,共92頁,2023年,2月20日,星期二也可把兩種結(jié)構(gòu)體類型結(jié)合起來,“造出”更復雜的結(jié)構(gòu)體。比如,一個通訊錄的結(jié)構(gòu)體中包含了表示出生日期的結(jié)構(gòu)體structdate:structAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/

structdatebirthday; /*出生日期*/};8.1結(jié)構(gòu)體類型第8頁,共92頁,2023年,2月20日,星期二我們先“造出”一個日期的結(jié)構(gòu)體類型,同時我們又在通訊錄這個結(jié)構(gòu)體中,將出生日期這個成員變量定義為日期類型,這樣通訊錄結(jié)構(gòu)體就變成更復雜一些的數(shù)據(jù)類型了。這樣的結(jié)構(gòu)可以叫做嵌套型的結(jié)構(gòu)體,其結(jié)構(gòu)可以如圖8-1示意:圖8-1嵌套型的結(jié)構(gòu)體示意8.1結(jié)構(gòu)體類型nametelephonesexageemailaddryearmonthdaybirthday第9頁,共92頁,2023年,2月20日,星期二8.1.3定義結(jié)構(gòu)體變量既然我們定義的結(jié)構(gòu)體是一種數(shù)據(jù)類型,就可以像int、char、float這樣的數(shù)據(jù)類型一樣來使用,定義結(jié)構(gòu)體類型的變量。用結(jié)構(gòu)體類型定義變量的方式有如下幾種:1.先定義結(jié)構(gòu)體類型,再定義變量例,定義一個通訊錄結(jié)構(gòu)體:structAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/};/*定義2個結(jié)構(gòu)體變量*/structAddressListAddressList1,AddressList2;8.1結(jié)構(gòu)體類型第10頁,共92頁,2023年,2月20日,星期二定義了兩個“AddressList”結(jié)構(gòu)體類型的變量AddressList1和AddressList2。它們可以分別表示兩個人的通訊錄,比如:AddressList1:AddressList2:圖8-2結(jié)構(gòu)體變量8.1結(jié)構(gòu)體類型第11頁,共92頁,2023年,2月20日,星期二結(jié)構(gòu)體變量中的各個成員,在內(nèi)存中是順序存放的。各成員變量所占內(nèi)存的大小是根據(jù)定義時它們的數(shù)據(jù)類型來決定。為了方便,也可以這樣定義結(jié)構(gòu)體變量:#defineADDRESSLISTstructAddressListADDRESSLIST{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ int age; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/};ADDRESSLISTAddressList1,AddressList2;8.1結(jié)構(gòu)體類型第12頁,共92頁,2023年,2月20日,星期二定義的這個符號常量“ADDRESSLIST”,它就代表了結(jié)構(gòu)體類型“structAddressList”。這樣,在未來的程序設計中,“ADDRESSLIST”可以和“structAddressList”完全等效使用了。2.?在定義結(jié)構(gòu)體類型的同時聲明變量structAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/}AddressList1,AddressList2;

8.1結(jié)構(gòu)體類型第13頁,共92頁,2023年,2月20日,星期二這種方式和前面定義的方式效果一樣,在定義結(jié)構(gòu)體的同時,定義了2個structAddressList類型的變量AddressList1,AddressList2。這種方式通常用于函數(shù)中使用的局部結(jié)構(gòu)體變量。3.?直接定義變量還可以用下面的方式直接定義結(jié)構(gòu)體變量:struct /*省略結(jié)構(gòu)體名稱*/{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/}AddressList1,AddressList2;8.1結(jié)構(gòu)體類型第14頁,共92頁,2023年,2月20日,星期二這種方式?jīng)]有給出結(jié)構(gòu)體名,通常也用于函數(shù)中使用的局部結(jié)構(gòu)體變量。注意:1)對于結(jié)構(gòu)體變量,在定義時,一定要先定義一個結(jié)構(gòu)體類型,然后再定義該類型的變量。只能對結(jié)構(gòu)體變量賦值、存取或運算,但不能對一個結(jié)構(gòu)體類型進行這些操作;2)對結(jié)構(gòu)體中的組成成員,可以單獨使用,它的作用相當于普通變量。4.?類型定義typedef在編寫程序的過程中,為了便于修改和表達清晰,我們往往還可以給數(shù)據(jù)類型取別名,在C++語言中叫做類型定義。類型定義的關鍵字是typedef,其使用格式為:

8.1結(jié)構(gòu)體類型typedef數(shù)據(jù)類型標識符別名;第15頁,共92頁,2023年,2月20日,星期二比如我們給整型標識符int取個別名,叫做Integer,可以這樣寫:typedefintInteger;Integerk;這樣定義的變量k就是一個整型數(shù)。8.1結(jié)構(gòu)體類型第16頁,共92頁,2023年,2月20日,星期二同樣可以對一個結(jié)構(gòu)體進行類型定義,也就是給這個結(jié)構(gòu)體取個別名。比如給前面定義的通訊錄取個別名,并用別名定義變量:typedefstructAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/}ADDR_LIST;/*定義2個structAddressList類型的變量*/ADDR_LISTAddressList1,AddressList2;第17頁,共92頁,2023年,2月20日,星期二或者:structAddressList{……}typedefstructAddressListADDR_LIST;也可省略結(jié)構(gòu)體的名稱AddressList,寫成如下的形式:typedefstruct{……}ADDR_LIST;8.1結(jié)構(gòu)體類型第18頁,共92頁,2023年,2月20日,星期二8.1.4結(jié)構(gòu)體變量的初始化1.?結(jié)構(gòu)體整體初始化聲明一個結(jié)構(gòu)體變量時,可以對它進行初始化,這和初始化一個數(shù)組是類似的。結(jié)合上面定義的通訊錄結(jié)構(gòu)體類型structAddressList,我們定義了一個structAddressList變量one,并對它進行初始化:structAddressListone={"李明","01062548445",'M',16,"liming@","北京"};8.1結(jié)構(gòu)體類型第19頁,共92頁,2023年,2月20日,星期二注意:不能在定義結(jié)構(gòu)體類型的時候,進行賦初值。例如:structAddressList /*下面的做法就是錯誤的*/{ charname="LiLin"; chartelephone[12]=; charsex='M'; intage=18; chare_mail[40]="lilin12@"; charaddr[30]="123BejingRoad";}one;第20頁,共92頁,2023年,2月20日,星期二例8.1定義一個結(jié)構(gòu)體變量,并進行整體初始化,再輸出其結(jié)果內(nèi)容。程序清單C08_01.cpp#include<iostream.h>/*結(jié)構(gòu)體定義部分*/structAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/};8.1結(jié)構(gòu)體類型第21頁,共92頁,2023年,2月20日,星期二voidmain(){ /*定義并初始化結(jié)構(gòu)體變量*/ structAddressListone={"李明","01062548445",'M',16, "liming@","北京"}; /*結(jié)構(gòu)體變量的輸出*/ cout<<"我們定義并初始化的結(jié)構(gòu)體是:\n"<<endl; cout<<"姓名是:" <<<<endl <<"電話號碼是:" <<one.telephone<<endl; cout<<"性別是:" <<one.sex<<endl cout<<"所在城市是:"<<one.addr<<endl;}8.1結(jié)構(gòu)體類型第22頁,共92頁,2023年,2月20日,星期二輸出結(jié)果:我們定義并初始化的結(jié)構(gòu)體是:姓名是:李明電話號碼是:01062548445性別是:M年齡是:16E-mail地址是:liming@所在城市是:北京其中的“”、“one.telephone”是通過“.”運算符訪問結(jié)構(gòu)體變量的成員。一般情況下,不能將一個結(jié)構(gòu)體變量作為整體來使用,只能使用其中的成員(分量)。使用結(jié)構(gòu)體成員的方式:

8.1結(jié)構(gòu)體類型結(jié)構(gòu)體變量名.成員名第23頁,共92頁,2023年,2月20日,星期二通過這種方式,我們就可以使用結(jié)構(gòu)體變量one中的成員了。例:cout<<<<","<<one.telephone<<","<<one.sex<<","<<one.age<<","<<one.e_mail<<","<<one.addr;注意,成員“.”操作符左邊必須是結(jié)構(gòu)體變量名,右邊必須是結(jié)構(gòu)體中已定義的成員名。下面這些寫法都是錯誤的:strcpy(AddressL,"wangli");/*AddressList是結(jié)構(gòu)體類型名,不是結(jié)構(gòu)體變量*/one.book=6; /*結(jié)構(gòu)體AddressList中沒有定義“book”這個成員*/8.1結(jié)構(gòu)體類型第24頁,共92頁,2023年,2月20日,星期二2.?初始化結(jié)構(gòu)體部分成員既然,結(jié)構(gòu)體變量的成員可以通過“.”操作符來訪問,我們就可以使用賦值語句對它們進行初始化了。例如,對于上面例8.1,對變量one的初始化,還可以使用賦值語句完成:strcpy(,"李明");strcpy(one.telephone,"01062548445");one.sex='M';one.age=16;strcpy(one.e_mail,"liming@");strcpy(one.addr,"北京");使用這種方式,比起第一種初始化方式要靈活一下,一般適用于對結(jié)構(gòu)體的某個成員變量進行設置時使用。當然,使用輸入語句也可以實現(xiàn)部分結(jié)構(gòu)體成員的初始化。例如:cin>>one.age;8.1結(jié)構(gòu)體類型第25頁,共92頁,2023年,2月20日,星期二3.?逐級訪問成員在前面曾經(jīng)定義了包含生日的通訊錄結(jié)構(gòu)體,生日這個成員變量又是日期結(jié)構(gòu)體類型。對于生日這個成員變量,我們可以一級一級訪問其成員。例如:

AddressList1.birthday.month=9; AddressList1.birthday.day=20; AddressList1.birthday.year=1994;8.1結(jié)構(gòu)體類型第26頁,共92頁,2023年,2月20日,星期二4.?把結(jié)構(gòu)體變量當作整體賦值只有在以下兩種情況下,才可以把結(jié)構(gòu)體變量作為一個整體來賦值和訪問。1)結(jié)構(gòu)體變量整體賦值例:

AddressList2=AddressList1;通過這種模式,可以直接完成結(jié)構(gòu)體之間的賦值。2)取結(jié)構(gòu)體變量地址例如:

cout<<&AddressList1; /*輸出AddressList1的地址*/ cin>>AddressList1.telephone; /*輸入AddressList1的電話*/需要注意,不能把結(jié)構(gòu)體變量整體輸入進來。例如:

cin>>AddressList1;我們在使用結(jié)構(gòu)體變量時,通常把結(jié)構(gòu)體變量的地址用作函數(shù)的參數(shù),以實現(xiàn)傳地址調(diào)用。8.1結(jié)構(gòu)體類型第27頁,共92頁,2023年,2月20日,星期二8.1.5結(jié)構(gòu)體數(shù)組我們知道,一個結(jié)構(gòu)體變量可以存放一組相關的數(shù)據(jù)(例如,一個通訊錄可以存放一個人的姓名、電話、性別、年齡、E-mail和地址等信息),正如前面引入數(shù)組一樣,我們也可以定義一個數(shù)組,其每一成員都是一個結(jié)構(gòu)體,它們都分別包含多個成員變量。1.?結(jié)構(gòu)體數(shù)組的定義我們在定義結(jié)構(gòu)體數(shù)組之前,首先要進行結(jié)構(gòu)體類型的定義。然后再像以前介紹過的數(shù)組定義方式定義結(jié)構(gòu)體數(shù)組。8.1結(jié)構(gòu)體類型第28頁,共92頁,2023年,2月20日,星期二例如,我們定義一個具有3個元素的通訊錄結(jié)構(gòu)體數(shù)組:/*定義結(jié)構(gòu)體類型*/typedefstructAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/}ADDR_LIST;/*定義結(jié)構(gòu)體數(shù)組*/ADDR_LISTaddlist[3];/*定義有3個元素的結(jié)構(gòu)體數(shù)組*/這樣就定義了一個具有3個元素的結(jié)構(gòu)體數(shù)組,這些數(shù)組元素在內(nèi)存中是連續(xù)存放的。8.1結(jié)構(gòu)體類型第29頁,共92頁,2023年,2月20日,星期二2.?結(jié)構(gòu)體數(shù)組的初始化我們可以把結(jié)構(gòu)體初始化和數(shù)組元素初始化結(jié)合起來,對結(jié)構(gòu)體數(shù)組進行初始化。經(jīng)過初始化,就可以分別輸出結(jié)構(gòu)體數(shù)組元素的值。例8.2結(jié)構(gòu)體數(shù)組的初始化。程序清單C08_02.cpp#include<iostream.h>typedefstruct{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/}ADDR_LIST;8.1結(jié)構(gòu)體類型第30頁,共92頁,2023年,2月20日,星期二voidPrint(ADDR_LIST*,intCount);voidmain(){ /*定義并初始化結(jié)構(gòu)體變量*/ ADDR_LISTaddrlist[3]={ {"李明","01062548445",'M',16,"liming@","北京"}, {"王芳","02162281234",'F',20,"wangf@","上海"}, {"Marry","02786614571",'F',19,"onegirl@263.net","武漢"},}; Print(addrlist,3);}8.1結(jié)構(gòu)體類型第31頁,共92頁,2023年,2月20日,星期二voidPrint(ADDR_LIST*List,intCount){ inti; /*結(jié)構(gòu)體變量的輸出*/ cout<<"我們定義并初始化的結(jié)構(gòu)體數(shù)組的數(shù)據(jù)如下:\n\n"; for(i=0;i<Count;i++) { cout<<"第"<<i+1<<"個記錄:"<<endl; cout<<"姓名:"<<List[i].name<<endl; cout<<"電話號碼:"<<List[i].telephone<<endl; cout<<"性別:"<<List[i].sex<<endl; cout<<"年齡:"<<List[i].age<<endl; cout<<"E-mail:"<<List[i].e_mail<<endl; cout<<"所在城市:"<<List[i].addr<<endl; cout<<endl; } }8.1結(jié)構(gòu)體類型第32頁,共92頁,2023年,2月20日,星期二輸出結(jié)果我們定義并初始化的結(jié)構(gòu)體數(shù)組的數(shù)據(jù)如下:第1個記錄:姓名:李明電話號碼:01062548445

性別:M

年齡:16E-mail:liming@所在城市:北京第2個記錄:姓名:王芳電話號碼:02162281234

性別:F

年齡:20E-mail:wangf@所在城市:上海8.1結(jié)構(gòu)體類型第33頁,共92頁,2023年,2月20日,星期二第3個記錄:姓名:Marry電話號碼:02786614571

性別:F

年齡:19E-mail:onegirl@263.net所在城市:武漢8.1結(jié)構(gòu)體類型第34頁,共92頁,2023年,2月20日,星期二8.1.6結(jié)構(gòu)體指針結(jié)構(gòu)體指針,就是一個結(jié)構(gòu)體類型的指針,它指向一個結(jié)構(gòu)體變量。這和整型指針、字符指針是一樣的。其實例8.2的Print函數(shù)中就使用了結(jié)構(gòu)體指針作為形參(*List)。1.?結(jié)構(gòu)體指針我們再看一個應用結(jié)構(gòu)體指針的小例子。例8.3我們定義一個表示某人生日的結(jié)構(gòu)體變量,同時定義一個結(jié)構(gòu)體指針指向它,分別通過結(jié)構(gòu)體變量和結(jié)構(gòu)體指針輸出結(jié)構(gòu)體成員的值,觀察其結(jié)果的不同。8.1結(jié)構(gòu)體類型第35頁,共92頁,2023年,2月20日,星期二程序清單C08_03.cpp/*結(jié)構(gòu)體變量和結(jié)構(gòu)體指針的關系*/#include<iostream.h>/*結(jié)構(gòu)體類型定義,其中結(jié)構(gòu)體date是結(jié)構(gòu)體PERSON的成員變量*/structdate{ intmonth; /*表示月,從1-12*/ intday; /*表示日期,從1-31*/ intyear; /*表示年*/};/*定義結(jié)構(gòu)體類型,并且是復合(成員變量是結(jié)構(gòu)體類型)類型*/typedefstruct{ intNo; /*序號*/ charname[20]; /*姓名*/ structdatebirthday; /*出生日期*/}PERSON;8.1結(jié)構(gòu)體類型第36頁,共92頁,2023年,2月20日,星期二voidmain(){ PERSONUsers; /*定義Users是一個結(jié)構(gòu)體變量*/

PERSON*p; /*定義*p是一個結(jié)構(gòu)體指針*/ cout<<"請輸入結(jié)構(gòu)體變量的信息:\n"; cout<<"請輸入序號:"; cin>>Users.No; /*Users.No是整型變量*/ cout<<"姓名:"; cin>>U; /*U字符數(shù)組的名字,其表示地址*/ cout<<"請輸入生日日期(YYYY-MM-DD):"; cin>>Users.birthday.year>>Users.birthday.month>>Users.birthday.day;

p=&Users; /*將結(jié)構(gòu)體變量Users的地址賦值給指針p*/ cout<<"\n通過結(jié)構(gòu)體變量輸出的結(jié)果是:\n"; cout<<"序號:"<<Users.No<<endl8.1結(jié)構(gòu)體類型第37頁,共92頁,2023年,2月20日,星期二

<<"姓名:"<<U<<endl <<"生日:"<<Users.birthday.year <<Users.birthday.month <<Users.birthday.day<<endl; cout<<"\n通過結(jié)構(gòu)體指針變量輸出的結(jié)果:\n"; cout<<"序號:"<<(*p).No<<endl <<"姓名:"<<(*p).name<<endl <<"生日:"<<(*p).birthday.year <<(*p).birthday.month <<(*p).birthday.day<<endl;}8.1結(jié)構(gòu)體類型第38頁,共92頁,2023年,2月20日,星期二輸出結(jié)果請輸入結(jié)構(gòu)體變量的信息:請輸入序號:010姓名:Jordan請輸入生日日期(YYYY-MM-DD):1973-3-23通過結(jié)構(gòu)體變量輸出的結(jié)果是:序號:10姓名:Jordan生日:1973-3-23通過結(jié)構(gòu)體指針變量輸出的結(jié)果:序號:10姓名:Jordan生日:1973-3-238.1結(jié)構(gòu)體類型第39頁,共92頁,2023年,2月20日,星期二可見,通過結(jié)構(gòu)體變量和結(jié)構(gòu)體指針變量輸出的結(jié)果完全一樣。在程序中我們定義了一個結(jié)構(gòu)體類型PERSON,然后在主函數(shù)定義了一個PERSON類型變量Users。與此同時,定義了一個結(jié)構(gòu)體PERSON指針變量p,并讓它指向Users。情況如圖8-3所示。

8.1結(jié)構(gòu)體類型第40頁,共92頁,2023年,2月20日,星期二圖8-3結(jié)構(gòu)體變量和結(jié)構(gòu)體指針的關系8.1結(jié)構(gòu)體類型10Jordan1973323PERSON:Usersp第41頁,共92頁,2023年,2月20日,星期二這樣,結(jié)構(gòu)體變量Users和結(jié)構(gòu)體指針p就表示同一部分數(shù)據(jù)。從源程序中我們可以看出,對于指針類型的結(jié)構(gòu)體變量的成員,我們使用“(*p).No”、“(*p).name”這樣的形式訪問。其中,“(*p)”表示p指向的結(jié)構(gòu)體變量Users,“(*p).No”就是p指向的結(jié)構(gòu)體變量中的成員No。注意,“*p”兩側(cè)的括弧可不能??!因為運算符“.”的優(yōu)先級要高于指針運算符“*”,如果省略括弧,“*p.No”就表示了“p.No”是指針了(等價于“*(p.No)”),它和“(*p).No”不是一回事。8.1結(jié)構(gòu)體類型第42頁,共92頁,2023年,2月20日,星期二可以把“(*p).No”改用指向運算符“->”表示為“p->No”。同樣,“(*p).name”也等價于“p->name”。因此,下面三種形式是等價的:Users.成員名(*p).成員名p->成員名有了這些規(guī)則,我們可以把上面“通過結(jié)構(gòu)體指針變量輸出”的語句改為:

printf("序號是:%d\n姓名是:%s\n生日是:%d-%d-%d\n",p->No,p->name, p->birthday.month,p->birthday.day,p->birthday.year);其中“->”稱為指向運算符。8.1結(jié)構(gòu)體類型第43頁,共92頁,2023年,2月20日,星期二2.?指向結(jié)構(gòu)體數(shù)組的指針指針和數(shù)組之間的關系十分密切:如果指針p指向數(shù)組的某個特定元素,那么p+1就指向該數(shù)組中下一個元素,p+i指向該元素后面第i個元素,p-i指向該元素之前第i個元素。同樣,對結(jié)構(gòu)體數(shù)組及其元素也可以用指針變量來指向。例,我們在例8.2中定義了一個結(jié)構(gòu)體數(shù)組,并進行了初始化?,F(xiàn)在我們用指向結(jié)構(gòu)體數(shù)組的指針進行操作,結(jié)果會是怎么樣呢?例8.4定義一個結(jié)構(gòu)體數(shù)組變量,進行數(shù)組元素的整體初始化,并利用指向結(jié)構(gòu)體數(shù)組的指針輸出結(jié)構(gòu)體的數(shù)據(jù)。8.1結(jié)構(gòu)體類型第44頁,共92頁,2023年,2月20日,星期二程序清單C08_04.cpp#include<iostream.h>/*結(jié)構(gòu)體定義部分*/structAddressList{ charname[20]; /*姓名*/ chartelephone[12]; /*電話*/ charsex; /*性別*/ intage; /*年齡*/ chare_mail[40]; /*電子郵件*/ charaddr[30]; /*地址*/};typedefstructAddressListADDR_LIST;/*將此結(jié)構(gòu)體類型定義為ADDR_LIST*/8.1結(jié)構(gòu)體類型第45頁,共92頁,2023年,2月20日,星期二voidmain(){ /*定義并初始化結(jié)構(gòu)體變量*/ ADDR_LISTList[3]={ {"李明","01062548445",'M',16,"liming@","北京"}, {"王芳","02162281234",'F',20,"wangf@","上海"}, {"Marry","02786614571",'F',19,"onegirl@263.net","武漢"},}; ADDR_LIST*p; /*定義一個指向結(jié)構(gòu)體類型的指針*/ /*結(jié)構(gòu)體變量的輸出*/ cout<<"用指向結(jié)構(gòu)體數(shù)組的指針輸出的結(jié)構(gòu)體變量值是:\n"; for(p=List;p<List+3;p++) { cout<<endl; cout<<"姓名:"<<p->name<<endl <<"電話號碼:"<<p->telephone<<endl; cout<<"性別:"<<p->sex<<endl <<"年齡:"<<p->age<<endl;8.1結(jié)構(gòu)體類型第46頁,共92頁,2023年,2月20日,星期二

cout<<"e_mail:"<<p->e_mail<<endl; cout<<"所在城市:"<<p->addr<<endl; }}輸出結(jié)果用指向結(jié)構(gòu)體數(shù)組的指針輸出的結(jié)構(gòu)體變量值是:姓名:李明電話號碼:01062548445

性別:M

年齡:16e_mail:liming@所在城市:北京

8.1結(jié)構(gòu)體類型第47頁,共92頁,2023年,2月20日,星期二姓名:王芳電話號碼:02162281234

性別:F

年齡:20e_mail:wangf@所在城市:上海姓名:Marry電話號碼:02786614571

性別:F

年齡:19e_mail:onegirl@263.net所在城市:武漢8.1結(jié)構(gòu)體類型第48頁,共92頁,2023年,2月20日,星期二輸出結(jié)果和例8.2的一樣。我們在程序中定義了指向ADDR_LIST結(jié)構(gòu)體數(shù)組List的指針p,在for語句中先賦值p的初值為List,即結(jié)構(gòu)體數(shù)組的起始地址,如圖8-4所示。在第一次循環(huán)中,輸出List[0]的各成員值,然后執(zhí)行p++,使p指向List[1]的起始地址。同樣,第二次循環(huán)后,p指向List[2]的起始地址。再執(zhí)行p++后,p的值為List+3,循環(huán)條件不滿足,于是退出循環(huán)。

8.1結(jié)構(gòu)體類型第49頁,共92頁,2023年,2月20日,星期二圖8-4指向結(jié)構(gòu)體數(shù)組的指針8.1結(jié)構(gòu)體類型List[0]List[1]List[2]pp+1p+2第50頁,共92頁,2023年,2月20日,星期二我們在使用指向結(jié)構(gòu)體數(shù)組指針時需要注意以下幾點:1)(++p)和(p++)是不同的。例如:“(++p)->telephone”先使p自加1,然后得到它指向的元素中的telephone成員值,即“List[1].telephone("02162281234")”。“(p++)->telephone”先得到“p->telephone”的值,即"01062548445",然后再p自加1,即指向List[1]。2)如果定義p是結(jié)構(gòu)體類型ADDR_LIST的指針,它只能指向一個此結(jié)構(gòu)體類型的變量。例如,下面這樣描述是錯誤的:

p=&addrlist[0].name; /*錯誤*/8.1結(jié)構(gòu)體類型第51頁,共92頁,2023年,2月20日,星期二8.1.7結(jié)構(gòu)體與函數(shù)有時,我們想把一個結(jié)構(gòu)體變量的值傳遞給另一個函數(shù),用什么方法呢?可以利用前面學過函數(shù)的傳值調(diào)用,既可以傳遞單個結(jié)構(gòu)體成員也可以傳遞整個結(jié)構(gòu)體。例如:用List[0].name或List[0].telephone作函數(shù)的實參,通過函數(shù)調(diào)用將實參值傳遞給形參。這種用法和用普通變量作實參沒有任何區(qū)別,都是“值傳遞”方式,被調(diào)用函數(shù)無法修改主調(diào)函數(shù)中的結(jié)構(gòu)體變量成員。如果我們需要被調(diào)用函數(shù)能改變主調(diào)函數(shù)中結(jié)構(gòu)體變量成員,該用什么方法呢?通過指針的學習,自然使我們想到可以用指向結(jié)構(gòu)體變量的指針作實參,或?qū)⒔Y(jié)構(gòu)體變量的地址作為實參調(diào)用函數(shù)。比起傳值調(diào)用,傳地址方式不需要對整個結(jié)構(gòu)體做一份拷貝,只需要把結(jié)構(gòu)體變量的地址傳遞給函數(shù)就可以了。

8.1結(jié)構(gòu)體類型第52頁,共92頁,2023年,2月20日,星期二圖8-5回顧:傳值和傳地址調(diào)用的比較示意8.1結(jié)構(gòu)體類型主調(diào)函數(shù)被調(diào)函數(shù)函數(shù)形參(a)傳值調(diào)用實際參數(shù)復制主調(diào)函數(shù)被調(diào)函數(shù)函數(shù)形參(b)傳引用調(diào)用實際參數(shù)指向第53頁,共92頁,2023年,2月20日,星期二先讓我們看一看指針指向結(jié)構(gòu)體變量的小例子!例8.5用結(jié)構(gòu)體變量的地址作為實參調(diào)用函數(shù)。定義一個結(jié)構(gòu)體包括學生的學號、姓名和三門主課(數(shù)學、語文、英語)的成績和平均分。在主函數(shù)main定義此結(jié)構(gòu)體變量Exam,調(diào)用函數(shù)GetInfo()輸入賦值到Exam,再調(diào)用函數(shù)Comp()計算平均分并輸出。程序清單C08_05.cpp#include<iostream.h>typedefstruct{ intmath; /*數(shù)學成績*/ intchinese; /*語文成績*/ intenglish; /*英語成績*/}SCORE;8.1結(jié)構(gòu)體類型第54頁,共92頁,2023年,2月20日,星期二typedefstruct{ intNo; /*學號*/ charName[20]; /*姓名*/

SCOREScore; /*三門成績*/ intAverage_score; /*平均分*/}Information;/*函數(shù)聲明部分*/voidGetInfo(Information*p); /*從鍵盤輸入數(shù)據(jù)*/voidComp(Information*p); /*計算平均分*/voidmain(){ InformationExam; /*定義一個學生信息的結(jié)構(gòu)體變量*/ GetInfo(&Exam); /*輸入結(jié)構(gòu)體變量的成員值,用地址作為參數(shù)*/ Comp(&Exam); /*用地址作為參數(shù)*/} 8.1結(jié)構(gòu)體類型第55頁,共92頁,2023年,2月20日,星期二voidGetInfo(Information*p) /*形參采用指針類型*/{ cout<<"請輸入一位學生的信息:\n"; cout<<"學號:"; cin>>p->No; cout<<"姓名:"; cin>>p->Name; cout<<p->Name<<"的三門主課成績(數(shù)學,語文,英語)是:\n"; cin>>p->Score.math>>p->Score.chinese>>p->Score.english;}voidComp(Information*p) /*形參采用指針類型*/{ p->Average_score=(p->Score.math+p->Score.chinese+p->Score.english)/3;

8.1結(jié)構(gòu)體類型第56頁,共92頁,2023年,2月20日,星期二cout<<"\n調(diào)用函數(shù)Comp()計算"<<p->Name<<"的平均成績?nèi)缦拢篭n"; cout<<"學號:"<<p->No<<endl <<"數(shù)學:"<<p->Score.math<<"," <<"語文:"<<p->Score.chinese<<"," <<"英語:"<<p->Score.english<<endl; cout<<"三門功課平均成績:"<<p->Average_score<<endl; if((p->Average_score)>=85) cout<<"成績優(yōu)秀!\n"; else cout<<"成績一般!\n";}8.1結(jié)構(gòu)體類型第57頁,共92頁,2023年,2月20日,星期二輸出結(jié)果請輸入一位學生的信息:學號:010姓名:JordanJordan的三門主課成績(數(shù)學,語文,英語)是:98,76,97調(diào)用函數(shù)Comp()計算Jordan的平均成績?nèi)缦拢簩W號:10數(shù)學:98,語文:76,英語:97三門功課平均成績:90成績優(yōu)秀!8.1結(jié)構(gòu)體類型第58頁,共92頁,2023年,2月20日,星期二這里,輸入函數(shù)GetInfo(),計算函數(shù)Comp()的形參都是結(jié)構(gòu)體Information類型的指針。在調(diào)用它們的時候,使用Information類型變量Exam的地址,這樣在函數(shù)中對形參的修改就是直接對實參的修改。圖8-6(a)是調(diào)用函數(shù)GetInfo()或者Comp()后的實參和形參的關系。

(a)函數(shù)形參是結(jié)構(gòu)體指針,實參是結(jié)構(gòu)體變量地址,調(diào)用后,指針指向?qū)崊⒌慕Y(jié)構(gòu)體8.1結(jié)構(gòu)體類型Exam(主函數(shù)中定義,作為實參)No NameScoreAverage_Score函數(shù)中的形參p第59頁,共92頁,2023年,2月20日,星期二(b)例8.5中的兩個函數(shù)GetInfo()、Comp()處理的數(shù)據(jù)都是主函數(shù)中定義的Exam圖8-6函數(shù)形參是結(jié)構(gòu)體指針,實參是結(jié)構(gòu)體變量地址8.1結(jié)構(gòu)體類型主函數(shù)main結(jié)構(gòu)體變量Examp函數(shù)Comp()處理函數(shù)GetInfo()p處理第60頁,共92頁,2023年,2月20日,星期二在C++語言中,允許將整個結(jié)構(gòu)體作為函數(shù)的參數(shù)進行傳遞,當然必須保證函數(shù)的形參和實參類型必須相同。但這種方法,程序運行時需要將全部成員一個一個傳遞給函數(shù),又費時、又浪費空間,開銷太大。如果結(jié)構(gòu)體類型中成員很多,比如一個大的結(jié)構(gòu)體,這種情況下,還是使用結(jié)構(gòu)體指針進行函數(shù)參數(shù)傳遞,效率要更高。下面我們用傳遞結(jié)構(gòu)體變量和傳遞結(jié)構(gòu)體指針的方法修改,并輸入一個結(jié)構(gòu)體變量,從中體會不同的參數(shù)傳遞方式的差異。例8.6定義一個日期結(jié)構(gòu)體類型,并定義一個日期結(jié)構(gòu)體變量,對其初始化。編寫兩個函數(shù),一個的形參是日期結(jié)構(gòu)體類型,一個的形參是日期結(jié)構(gòu)體指針類型。兩個函數(shù)中都先對形參修改,然后輸出。8.1結(jié)構(gòu)體類型第61頁,共92頁,2023年,2月20日,星期二程序清單C08_06.cpp#include<iostream.h>/*結(jié)構(gòu)體定義部分*/typedefstruct{ intyear; /*年*/ intmonth; /*月*/ intday; /*日*/}DATE;8.1結(jié)構(gòu)體類型第62頁,共92頁,2023年,2月20日,星期二/*函數(shù)定義*/voidMp1(DATEOneDay){ OneDay.year=1999;}voidMp2(DATE*pOneDay){ pOneDay->year=2050;}voidmain(){ DATEOneDay={2002,10,1};/*定義一個結(jié)構(gòu)體DATE類型變量,并初始化*/ DATE*p=&OneDay; /*定義一個結(jié)構(gòu)體DATE指針變量,并指向OneDay*/ cout<<"日期結(jié)構(gòu)體變量原始值:"; cout<<p->year<<"-"<<p->month<<"-"<<p->day; cout<<endl;

8.1結(jié)構(gòu)體類型第63頁,共92頁,2023年,2月20日,星期二Mp1(OneDay); cout<<"\n調(diào)用傳值函數(shù)Mp1(DATEOneDay)的結(jié)果:"; cout<<OneDay.year<<"-"<<OneDay.month<<"-"<<OneDay.day; cout<<endl; Mp2(p); /*等價于Mp2(&OneDay)*/ cout<<"\n調(diào)用傳指針函數(shù)Mp2(DATE*pOneDay)的結(jié)果:"; cout<<p->year<<"-"<<p->month<<"-"<<p->day; cout<<endl;}輸出結(jié)果日期結(jié)構(gòu)體變量原始值:2002-10-1調(diào)用傳值函數(shù)Mp1(DATEOneDay)的結(jié)果:2002-10-1調(diào)用傳指針函數(shù)Mp2(DATE*pOneDay)的結(jié)果:2050-10-18.1結(jié)構(gòu)體類型第64頁,共92頁,2023年,2月20日,星期二通過上面這段程序,我們可以看到,調(diào)用Mp1()不會影響實參值,而調(diào)用Mp2()就會影響實參值,我們從中可以再次體會到傳值和傳地址調(diào)用的不同。下面用圖8-7示意這個實例的參數(shù)傳遞情況。8.1結(jié)構(gòu)體類型第65頁,共92頁,2023年,2月20日,星期二圖8-7例8.7中的調(diào)用函數(shù)Mp1()、Mp2()參數(shù)傳遞情況8.1結(jié)構(gòu)體類型Mp2()DATEpOneDayMp1()yearmonthdayDATEOneDay傳遞地址(指向)DATEOneDayyearmonthday傳遞數(shù)據(jù)第66頁,共92頁,2023年,2月20日,星期二在實際生活中,我們常常遇到這樣一些情況:交通燈只有紅、黃、綠三種顏色;一個星期有七天;一年有十二個月;一個小組有張三、李四等。這些變量的取值被限定在一個有限的范圍內(nèi),如果把這些量說明為整型、字符型或其他類型顯然都不合適。為此,C語言提供了一種稱為“枚舉”的類型。所謂“枚舉”是指將變量的值一一列舉出來,變量的值只限于列舉出來的值范圍內(nèi)。這樣,被說明為該“枚舉”類型的變量取值就不能超過定義的范圍了。需要說明的是,枚舉類型是一種基本數(shù)據(jù)類型,而不是一種構(gòu)造類型,因為它不能再分解為任何基本類型。在定義結(jié)構(gòu)體的時候,我們也可以應用枚舉類型。8.2枚舉類型第67頁,共92頁,2023年,2月20日,星期二8.2.1枚舉類型的定義枚舉類型和其他基本數(shù)據(jù)類型一樣,在使用它聲明變量之前,必須先定義枚舉類型。定義枚舉類型定義的格式為:

枚舉類型的定義語句的關鍵字是enum。用戶定義的枚舉類型名,它是一個標識符,表示一個新的枚舉類型?;ɡㄌ柪ㄆ饋淼氖窃擃愋投x體,其中的內(nèi)容又稱為枚舉表。枚舉表是一組由用戶命名的符號常量,它們用逗號分開,每個符號常量又稱為枚舉常量或枚舉值。枚舉表內(nèi)的值確定了枚舉類型變量的取值范圍。例如,我們定義:enumcolor{red,yellow,green};enumday{Sun,Mon,Tues,Wed,Thur,Fri,Sat};8.2枚舉類型enum枚舉類型名{枚舉表};第68頁,共92頁,2023年,2月20日,星期二其中,red、yellow、green,Sun、Mon……Sat稱為“枚舉元素”或“枚舉常量”。第一條語句定義了一個枚舉類型color,用來表示交通燈的顏色,它的取值范圍是三個枚舉值red、yellow和green,分別代表紅色、黃色和綠色。第二條語句定義了一個枚舉類型day,用來表示日期,它包含7個枚舉值,分別表示星期日、星期一至星期六。另外枚舉表中的元素都是常量,它們規(guī)定了枚舉變量的取值范圍。數(shù)組可就不同了,數(shù)組的元素可以是基本類型、或者用戶自定義的數(shù)據(jù)類型等,而且數(shù)組元素是變量。8.2枚舉類型第69頁,共92頁,2023年,2月20日,星期二8.2.2枚舉變量的聲明定義了一個枚舉類型,我們可以用它來定義變量。例如,在前面定義了枚舉類型enumcolor,我們可以使用它來定義變量:

enumcolor

stop,go;或者為:

enumcolor{red,yellow,green}stop,go;后面的stop,go是該類型的兩個變量,它們的取值只能是red,yellow,green之一。例如:

stop=red; go=green;8.2枚舉類型第70頁,共92頁,2023年,2月20日,星期二8.2.3枚舉類型變量的賦值和使用枚舉類型在使用中有以下規(guī)定:1.?枚舉元素是常量在編譯器中,枚舉元素本身由系統(tǒng)定義了一個表示序號的數(shù)值,從0開始順序定義為0,1,2……如在enumday中,Sun值為0,Mon值為1……Sat值為6。例8.7我們可以按整型數(shù)據(jù)輸出枚舉類型變量的值:程序清單C08_7.cpp#include<iostream.h>enumcolor{red,yellow,green};8.2枚舉類型第71頁,共92頁,2023年,2月20日,星期二voidmain(){ enumcolorstop,go; /*聲明枚舉變量stop,go*/ stop=red; /*為枚舉變量賦值*/ go=green; printf("枚舉變量go的值是:%d\n",go); printf("枚舉變量stop的值是:%d\n",stop);}輸出結(jié)果枚舉變量go的值是:2枚舉變量stop的值是:0程序中,語句“enumcolor{red,yellow,green};”在確定枚舉值的同時分別為它們定義了表示序號的值:red為0,yellow為1,green為2。同時,枚舉變量的值只能用賦值語句來獲得。8.2枚舉類型第72頁,共92頁,2023年,2月20日,星期二2.?允許在定義枚舉類型時,指定枚舉常量的值。例如:

enumcolor{red=3,yellow=1,green};這里,green的值從yellow的值順序加1。即,green的值是2。8.2枚舉類型第73頁,共92頁,2023年,2月20日,星期二3.?枚舉值可以作判斷例如:

if(stop==red) cout<<"請停車?。?!\n";4.?整型與枚舉類型是不同的數(shù)據(jù)類型,不能進行直接賦值例,錯誤的賦值:

stop=2; /*stop是枚舉類型*/不過,可以通過強制類型轉(zhuǎn)換,對枚舉變量賦值整型值。例如:

stop=(enumcolor)2;8.2枚舉類型第74頁,共92頁,2023年,2月20日,星期二8.2.4枚舉類型的應用舉例例8.8在屏幕上提示:請用戶選擇行走的方向,然后顯示出所選方向。程序清單C08_8.cpp#include<iostream.h>#include<string.h>voidmain(){ char*question="請選擇方向[1:西,2:北,3:東,4:南]"; char*pwest="你選擇向西"; char*pnorth="你選擇向北"; char*peast="你選擇向東"; char*psouth="你選擇向南";

enumlocation{west=1,north=2,east=3,south=4}; enumlocationdirection;8.2枚舉類型第75頁,共92頁,2023年,2月20日,星期二

intn; cout<<question;

cin>>n;

direction=(enumlocation)n;

switch(direction) { casewest:cout<<pwest<<endl;break; casenorth:cout<<pnorth<<endl;break; caseeast:cout<<peast<<endl;break; casesouth:cout<<psouth<<endl;break; default:cout<<"在原地等待\n";break; }}8.2枚舉類型第76頁,共92頁,2023年,2月20日,星期二輸出結(jié)果請選擇方向[1:西,2:北,3:東,4:南]2你選擇向北從上面這段程序可以看出,用枚舉類型能夠很方便地制作一個選擇菜單。例8.9在結(jié)構(gòu)體中定義枚舉類型的成員。定義一個結(jié)構(gòu)體類型Regist用于統(tǒng)計學生注冊情況(學號、姓名、注冊日期),其中成員注冊日期是枚舉類型變量(從Sun到Sat七天)。輸入學生注冊信息,根據(jù)注冊日期(比如星期三之前)判斷一個學生是否遲到,并顯示結(jié)果。8.2枚舉類型第77頁,共92頁,2023年,2月20日,星期二程序清單C08_9.cpp#include<iostream.h>#include<string.h>#defineCOUNT4/*定義枚舉類型,表示注冊時間*/enumday{Sun,Mon,Tues,Wed,Thur,Fri,Sat};/*定義注冊情況結(jié)構(gòu)體*/typedefstruct{ charname[20]; /*姓名*/ intnumber; /*學號*/

enumdayRegist_day; /*注冊時間*/}Regist;voidInput(Regist*stu); /*用于輸入學生注冊情況的函數(shù)*/intJudge(Regist*stu); /*判斷學生是否遲到的函數(shù)*/8.2枚舉類型第78頁,共92頁,2023年,2月20日,星期二voidmain(){ Registstudent[COUNT]; /*定義四個學生的數(shù)組*/ Regist*p; /*結(jié)構(gòu)體數(shù)組指針*/ intn=0; /*用于統(tǒng)計多少學生遲到*/ inti; /*循環(huán)變量*/ p=student; cout<<"請輸入"<<COUNT<<"位同學的注冊信息:\n"; for(i=0;i<COUNT;i++) { Input(p+i); n=n+Judge(p+i); } cout<<"總共有"<<i<<"位同學注冊,"<<n<<"位同學遲到了!\n";}8.2枚舉類型第

溫馨提示

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

評論

0/150

提交評論