c語言程序設計(第三版) 教學課件 ppt 作者 恰汗.合孜爾 第8章結構體和共用體_第1頁
已閱讀1頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第8章 結構體和共用體,前面的章節(jié)中已經介紹了各種基本數(shù)據(jù)類型、數(shù)組和指針。但只有這些數(shù)據(jù)類型還難以處理一些比較復雜的數(shù)據(jù)結構。本章將以前面介紹的數(shù)據(jù)類型為基礎,進一步介紹結構體類型、共用體類型和枚舉類型。,,,8.1 結構體 8.2 動態(tài)內存分配與鏈表 8.3 共用體類型 8.4 枚舉類型 8.5 用戶自定義類型 8.6 程序舉例,第8章 結構體和共用體,第8章,8.1 結 構 體,8.1 結構體,8.1.1 結

2、構類型定義 在實際問題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如,在學生登記表中,姓名應為字符型;學號可為整型或字符型;年齡應為整型;性別應為字符型;成績可為整型或實型。但這些顯然不能用一個數(shù)組來存放這一組數(shù)據(jù)。因為數(shù)組中各元素的類型和長度都必須一致,以便于編譯系統(tǒng)處理。為了解決這個問題,C語言中給出了另一種構造數(shù)據(jù)類型—“結構體”。 “結構體”是一種構造類型,它是由若干“成員”組成的。每一個成員可以是一個

3、基本數(shù)據(jù)類型或者又是一個構造類型。結構體既然是一種“構造”而成的數(shù)據(jù)類型,那么在說明和使用之前必須先定義它,也就是構造它。如同在說明和調用函數(shù)之前要先定義函數(shù)一樣。,8.1 結構體,定義一個結構體類型的一般形式為: struct 結構體名 { 結構成

4、員的說明; };成員表由若干個成員組成,每個成員都是該結構體的一個組成部分。對每個成員也必須作類型說明,其形式為: 類型說明符 成員名;成員名的命名應符合標識符的書寫規(guī)定。例如: struct stu

5、 { int num; char name[20]; char sex; float score; };,8.1 結構體,在這個結構體定義中,結

6、構體名為stu,該結構體由4個成員組成。第一個成員為num,整型變量;第二個成員為name,字符數(shù)組變量;第三個成員為sex,字符變量;第四個成員為score,實型變量。應注意在括號“}”后的分號是不可少的。結構體定義之后,即可進行變量說明。凡說明為結構體stu的變量都由上述4個成員組成。由此可見,結構是一種復雜的數(shù)據(jù)類型,是數(shù)目固定,類型不同的若干有序變量的集合。,8.1 結構體,8.1.2 結構體類型變量的說明 說明結

7、構體變量有以下三種方法。以上面定義的stu為例來加以說明。 (1)先定義結構體類型,再說明結構體變量 例如: struct stu { int num; char name[20]; char

8、sex; float score; }; struct stu boy1,boy2;說明了兩個變量boy1和boy2為stu結構類型。也可以用宏定義使用一個符號常量來表示一個結構類型,例如: #define STU struct st

9、u STU { int num; char name[20]; char sex; float score; };

10、 STU boy1,boy2;,8.1 結構體,(2)在定義結構體類型的同時說明結構體變量 例如: struct stu { int num; char name[20]; char sex;

11、 float score; }boy1,boy2;(3)直接說明結構體變量 例如: struct { int num; char name[20]; ch

12、ar sex; float score; }boy1,boy2;,8.1 結構體,第三種方法與第二種方法的區(qū)別在于第三種方法中省去了結構體名,而直接給出結構體變量。三種方法中說明的boy1,boy2變量都具有相同的結構。說明了boy1,boy2變量為stu類型后,即可向這兩個變量中的各個成員賦值。 在上述stu結構體定義中,所有的

13、成員都是基本數(shù)據(jù)類型或數(shù)組類型。成員也可以又是一個結構體類型,即構成了嵌套的結構體。,8.1 結構體,例如:struct date{ int month; int day; int year;};struct{ int num; char name[20]; char sex; struct date birthday; float score;}boy1,boy2;,首先定義一個

14、結構體date,由month(月)、day(日)、year(年) 三個成員組成。在定義并說明變量 boy1 和 boy2 時,其中的成員birthday被說明為data結構體類型。成員名可與程序中其它變量同名,互不干擾。結構體變量成員的表示方法,在程序中使用結構體變量時,往往不把它作為一個整體來使用。,說明:結構體在內存中存儲容量是各成員容量之和,這是與后面聯(lián)合體的重要區(qū)別。,8.1 結構體,8.1.3 結構體變量的引用

15、 一般情況下,不能對一個結構體變量作為整體引用,只能引用其中的成員。結構體變量中成員引用的一般形式為: 結構體變量名.成員名其中,“.”是域成員運算符,是C語言中優(yōu)先級最高的運算符之一。 例如:boy1.num 即第一個人的學號,boy2.sex 即第二個人的性別。如果成員本身又是一個結構體,則必須逐級找到最低級的成員才能使用。 例如:bo

16、y1.birthday.month 即第一個人出生的月份。成員可以在程序中單獨使用,與普通變量完全相同。,8.1 結構體,8.1.4 結構體變量的賦值對于結構體變量,只有以下兩種情況可以對結構體變量賦值。(1)結構體變量整體賦值 例如: boy2=boy1;(2)取結構體變量地址 例如: &boy2;

17、 &boy1;注意:結構體變量名是地址常量,含義與數(shù)組名和函數(shù)名相同,不能對結構體變量做整體輸入/輸出。例如: scanf("%d,%s,%c,%f",&boy1); printf("%d,%s,%c,%f",boy1);這些語句都是不允許的,只能對結構體成員進行輸入/輸出。,8

18、.1 結構體,例8.1 給結構體變量賦值并輸出其值。#include void main(){ struct stu /* 定義結構體stu */ { int num; char *name; char sex; float score; } boy1,boy2;

19、 /* 定義stu類型的變量boy1、boy2 */ boy1.num=102; boy1.name="Zhang ping"; printf ("input sex and score:\n"); scanf("%c %f",&boy1.sex,&boy1.score);/* 給boy1的成員sex和score賦值 */ bo

20、y2=boy1; /* 把boy1整體賦給boy2 */ printf ("number=%d\nname=%s\n",boy2.num,boy2.name); printf ("sex=%c\nscore=%6.2f\n",boy2.sex,boy2.score);},8.1 結構體

21、,程序運行結果:input sex and score:M 96↙number=102name=Zhang pingsex=Mscore=︼96.00,本程序中用賦值語句給num和name兩個成員賦值,name是一個字符串指針變量。用scanf()函數(shù)動態(tài)地輸入sex和score成員值,然后把boy1的所有成員的值整體賦予boy2。最后分別輸出boy2 的各個成員值。,8.1 結構體,8.1.5 結構體變量的初始化

22、 如果結構體變量為全局變量或者靜態(tài)變量,則可以對它做初始化賦值。對局部或自動結構體變量不能做初始化賦值。,8.1 結構體,例8.2 外部結構體變量初始化。#include struct stu /* 定義結構體 */{ int num; char *name; char sex; float score;} boy2,boy1={10

23、2,"Zhang ping",'M',78.5};/*對變量boy1的成員初始化 */void main(){ boy2=boy1; /* 把boy1整體賦給boy2 */ printf("number=%d\nname=%s\n",boy2.num,boy2.name); printf("sex

24、=%c\nscore=%6.2f\n",boy2.sex,boy2.score);},8.1 結構體,程序運行結果:number=102name=Zhang pingsex=Mscore=︼78.50,本程序中,boy2,boy1均被定義為外部結構體變量,并對boy1作了初始化賦值。在main()函數(shù)中,把boy1的值整體賦予boy2,然后用兩個printf()語句輸出boy2各成員的值。,8.1 結構體,例8.3

25、靜態(tài)結構體變量初始化。#include void main(){ static struct stu /* 定義靜態(tài)結構體 */ { int num; char *name; char sex; float score; }boy2,boy1={102,"Zhang ping",'M'

26、,78.5}; /*對變量boy1的成員初始化 */ boy2=boy1; printf("number=%d\nname=%s\n",boy2.num,boy2.name); printf("sex=%c\nscore=%6.2f\n",boy2.sex,boy2.score);} 本程序是把boy1,boy2都定義為靜態(tài)局部的結構體變量,同樣可以做初始化賦

27、值。,8.1 結構體,8.1.6 結構體數(shù)組 一個結構體變量可以處理一個對象,如果有多個對象,則需要多個結構體變量,數(shù)組的元素也可以是結構體類型的,因此可以構成結構體數(shù)組。結構體數(shù)組的每一個元素都是具有相同結構體類型的下標結構體變量。在實際應用中,經常用結構體數(shù)組來表示具有相同數(shù)據(jù)結構的一個群體。如一個班的學生檔案,一個車間職工的工資表等。 結構體數(shù)組的定義方法和結構體變量相似,也有三種方式:

28、 (1)先定義結構體類型,再定義結構體數(shù)組。 例如: struct stu { int num; char *name; char sex;

29、 float score; }; struct stu boy[5]; 定義了一個結構體數(shù)組boy,共有5個元素,boy[0]~boy[4]。每個數(shù)組元素都具有struct stu的結構體形式。,8.1 結構體,(2)在定義結構體類型的同時定義結構體數(shù)組。 例如:

30、 struct stu { int num; char *name; char sex; float score; }boy[5];(3)直接定義結構體數(shù)組。 例如:

31、 struct { int num; char *name; char sex; float score; }boy[5];,8.1 結構體,對外部結構體數(shù)組或靜態(tài)結構體數(shù)組可以做初始化賦值。 例如:

32、 struct stu { int num; char *name; char sex; float score; }boy[5]={{101,"Li ping",'M',45},

33、 {102,"Zhang ping",'M',62.5}, {103,"He fang",'F',92.5}, {104,"Cheng ling",&

34、#39;F',87}, {105,"Wang ming",'M',58}}; 當對全部元素做初始化賦值時,也可不給出數(shù)組長度。,8.1 結構體,例8.4 計算學生的平均成績和不及格的人數(shù)。#include struct stu

35、 /* 定義結構體 */{ int num; char *name; char sex; float score;}boy[5]={{101,"Li ping",'M',45},{102,"Zhang ping",'M',62.5},{103,"He fang",'F',92.5

36、},{104,"Cheng ling",'F',87},{105,"Wang ming",'M',58}}; /* 對結構體數(shù)組元素初始化 */void main(){ int i,c=0; float

37、 ave,s=0; for(i=0;i<5;i++) { s+=boy[i].score; if(boy[i].score<60) c+=1; } printf("s=%6.2f\n",s); ave=s/5; /* 計算平均成績 */

38、 printf("average=%6.2f\ncount=%d\n",ave,c);},8.1 結構體,程序運行結果:s=345.00average=︼69.00count=2,本例程序中定義了一個外部結構體數(shù)組boy,共5個元素,并作了初始化賦值。在main函數(shù)中用for語句逐個累加各元素的score 成員值存于s之中,如score的值小于60(不及格),即計數(shù)器C加1,循環(huán)完畢后計算平均成績,并輸出全

39、班總分、平均分及不及格人數(shù)。,8.1 結構體,例8.5 建立同學通訊錄。#include #define NUM 2struct mem /* 定義結構體 */{ char name[20]; char phone[10];};void main(){ struct mem man[NUM]; int i;

40、for(i=0;i<NUM;i++) /* 輸入通訊錄 */ { printf("input name:"); gets(man[i].name); printf("input phone:"); gets(man[i].phone); } printf("

41、Name\t\tPhone\n"); for(i=0;i<NUM;i++) /* 輸出通訊錄 */ printf("%s\t%s\n",man[i].name,man[i].phone);},8.1 結構體,,程序運行結果:input name:Zhang jun↙input phone:88888888↙

42、input name:Wang fang↙input phone:99999999↙Name PhoneZhang jun 88888888Wang fang 99999999,本程序中定義了一個結構體類型mem,它有兩個成員name和phone,用來表示姓名和電話號碼。在主函數(shù)中定義man為具有mem 類型的結構體數(shù)組。在for語句中,用gets()函數(shù)分別輸入各個元素中兩個成員的值。然后又在

43、for語句中用printf()語句輸出各元素中兩個成員值。,8.1 結構體,8.1.7 指向結構體變量的指針變量 結構體指針變量是一個指針變量,用來指向改變量所分配的存儲區(qū)域的首地址。結構體指針變量還可以用來指向結構體數(shù)組中的元素。結構體指針與以前介紹的各種指針在特性和使用方法上完全相同。結構體指針變量的運算也按照C語言的地址計算規(guī)則進行的。例如,結構體指針變量加1將指向內存中下一個結構體變量,結構體指針變量自身地址值的

44、增加量取決于它所指向的結構體變量的數(shù)據(jù)長度(sizeof()函數(shù)獲?。?傊?,結構體指針變量是指向一個結構體變量的指針變量。,8.1 結構體,1. 結構體指針變量的定義 定義結構體指針變量的一般形式為: struct 結構體類型名 *結構指針變量名; 例如: struct stu { int num;

45、 char *name; char sex; float score; }boy,*pstu; pstu=&boy;也可以定義結構體類型后再定義結構體指針變量。 結構體名和結構體變量是兩個不同的概念,不能混淆。結構體名只能表示一個結構體形式,編譯系統(tǒng)并不

46、對它分配內存空間。只有當某變量被說明為這種類型的結構時,才對該變量分配存儲空間。有了結構指針變量,就能更方便地訪問結構變量的各個成員。,8.1 結構體,2. 結構體指針變量的賦值 結構體指針變量必須先賦值后使用。賦值是把結構體變量的首地址賦給該指針變量,不能把結構名賦給該指針變量。例如,不能寫成pstu=&stu;。 注意:pstu已為指向一個結構體類型的指針變量,它只能指向結構體變量而不能指向它

47、其中一個成員。換句話說:pstu只能存放結構體變量的地址。例如,不能寫成pstu=&stu.num;。,8.1 結構體,3. 結構體指針變量的引用 定義好一個結構體指針變量之后,就可以對該指針變量進行各種操作。例如,給一個結構體變量指針賦一個地址值,輸出一個結構體變量指針的成員值,訪問結構體變量指針所指向的變量的成員等。引用結構體指針變量的一般形式為: (*結構指針變量)

48、.成員名; 或 結構指針變量->成員名; 例如: (*pstu).num; 或 pstu->num; 應該注意(*pstu) 兩側的括號不可少,因為成員符“.”的優(yōu)先級高于“*”。如去掉括號寫作 *pstu.num,則等效于*(pstu.

49、num),這樣,意義就完全不對了。,8.1 結構體,例8.6 分析下面程序的運行結果。#include struct stu /* 定義結構體 */{ int num; char *name; char sex; float score;}boy1={102,"Zhang ping",'M

50、',78.5},*pstu;void main(){ pstu=&boy1; printf("number=%d\nname=%s\n",boy1.num,boy1.name); printf("sex=%c\nscore=%6.2f\n\n",boy1.sex,boy1.score); printf("number=%d\nname=%s\n&

51、quot;,(*pstu).num,(*pstu).name); printf("sex=%c\nscore=%6.2f\n\n",(*pstu).sex,(*pstu).score); printf("number=%d\nname=%s\n",pstu->num,pstu->name); printf("sex=%c\nscore=%6.2f\n\n&q

52、uot;,pstu->sex,pstu->score);},8.1 結構體,本程序序定義了一個結構體類型stu,定義了stu類型結構變量boy1 并作了初始化賦值,還定義了一個指向stu類型結構體的指針變量pstu。在main()函數(shù)中,pstu被賦予boy1的地址,因此pstu指向boy1。然后在printf()語句內用三種形式輸出boy1的各個成員值。,程序運行結果:number=102name=Zhang pin

53、gsex=Mscore=︼78.50,8.2 動態(tài)內存分配與鏈表,我們存儲數(shù)量比較多的同類型或同結構的數(shù)據(jù)時,一般首先考慮數(shù)組。然而在實際應用中,當處理一些難以確定其數(shù)量的數(shù)據(jù)時,如果用數(shù)組來處理,必須事先分配一個足夠大的連續(xù)空間,以保證數(shù)組元素數(shù)量充分夠用,但這樣處理時對存儲空間的一種浪費。C 語言使用動態(tài)內存分配來解決這樣的問題,其中常用的就是鏈表。鏈表是一種常見的數(shù)據(jù)結構,它動態(tài)地進行存儲分配,并且可以方便而又簡單地進行數(shù)據(jù)插

54、入,刪除等操作。,8.2 動態(tài)內存分配與鏈表,8.2.1 鏈表的概念 鏈表是指若干個數(shù)據(jù)按一定的原則連接起來。這個原則為:前一個數(shù)據(jù)指向下一個數(shù)據(jù),只有通過前一個數(shù)據(jù)項才能找到下一個數(shù)據(jù)項。 鏈表有一個“頭指針”(head),它指向鏈表的第一個元素(數(shù)據(jù)項)。鏈表的一個元素稱為一個“結點”(node)。結點中包含兩部分內容,第一部分是結點數(shù)據(jù)本身,如圖8-1中的A、B、C、D所示。結點的第二部分是一個指針

55、,它指向下一個結點。最后一個結點稱為“表尾”,表尾結點的指針不指向任何地址,因此為空(NULL)。,圖8-1 鏈表結構圖,8.2 動態(tài)內存分配與鏈表,如果每個結點采用一個指針,將前一個結點的指針指向下一個結點,這稱為單鏈表。如果每個結點有兩個指向其他結點的指針,則稱為雙鏈表。本節(jié)主要討論單鏈表的運算。 由以上簡單鏈表可以看到,鏈表中的每個結點至少包含兩個域,一個域用來存放數(shù)據(jù),其類型根據(jù)需存放的數(shù)據(jù)類型定義。另一個域用

56、來存放下一個結點的地址,因此必然是一個指針類型,此指針的類型應該是所指向的表結點的結構體類型。 在C語言中,可以用結構體類型來實現(xiàn)鏈表,例如: struct student { int long;

57、 float score; struct student *next; /* 指向下一結點 */ };其中next是結構體指針變量,用來存放下一個結點的地址,即next是指向下一個結點。,8.2 動態(tài)內存分配與鏈表,8.2.2 動態(tài)存儲分配

58、 C語言允許在函數(shù)執(zhí)行部分的任何地方使用動態(tài)存儲分配函數(shù)開辟或收回存儲單元,這樣的存儲分配叫動態(tài)存儲分配。動態(tài)分配使用自由、節(jié)約內存。 鏈表是動態(tài)分配存儲空間的,也就是說在需要的時候才開辟一個結點的存儲空間。在C語言中提供了以下有關的函數(shù)來實現(xiàn)動態(tài)存儲分配和釋放,這些函數(shù)包含在“stdio.h”或“malloc.h”中。,8.2 動態(tài)內存分配與鏈表,1. malloc()函數(shù)(分配內存空間函數(shù)) 調用形式為:

59、 void *malloc(size);其作用是在內存中動態(tài)獲取一個大小為size個字節(jié)的連續(xù)存儲空間。該函數(shù)將返回一個void類型的指針,若分配成功,就返回所分配的空間的起始地址,否則,就返回空指針(NULL)。2.calloc函數(shù)(分配內存空間函數(shù)) 調用形式為: void *calloc(unsigned n, unsigned size);其作用是在內存中動態(tài)

60、獲取n個大小為size個字節(jié)的存儲空間。該函數(shù)將返回一個void類型的指針,若分配成功,就返回內存單元的起始地址,否則,返回空指針(NULL)。用該函數(shù)可以動態(tài)地獲取一個一維數(shù)組空間,其中n為數(shù)組元素個數(shù),每個數(shù)組元素的大小為size個字節(jié)。,8.2 動態(tài)內存分配與鏈表,3.free()函數(shù)(釋放內存空間函數(shù)) 調用形式為: void free(void *p);其作用是釋放由p指針所指向的內存空間

61、。即系統(tǒng)回收,使這段空間又可以被其他變量所用。指針變量p是最近一次調用malloc( )或calloc()函數(shù)時返回的值,不能是任意的地址。4. realloc函數(shù) 調用形式為: void *recalloc(void *p, unsigned size);其作用是將p所指的已分配的內存空間重新分配成大小為size個字節(jié)的空間。它用于改變已分配的空間的大小,可以增減單元數(shù)。函數(shù)返回新內存的首地址,如果內

62、存不夠,則返回空指針(NULL)。,8.2 動態(tài)內存分配與鏈表,例8.7 分配一塊區(qū)域,輸入一個學生數(shù)據(jù)。#include #include void main(){ struct stu /* 定義結構體 */ { int num; char *name; char sex; float score; }*ps;

63、 /* 定義一個結構體指針變量ps */ ps=(struct stu*)malloc(sizeof(struct stu)); ps->num=102; /* 輸入學生數(shù)據(jù) */ ps->name="Zhang ping"; ps->se

64、x='M'; ps->score=62.5; printf ("number=%d\nname=%s\n",ps->num,ps->name); printf ("sex=%c\nscore=%6.2f\n",ps->sex,ps->score); free(ps);},8.2 動態(tài)內存分配與鏈表,程序運行結果:number

65、=102name=Zhang pingsex=Mscore=︼62.50,本程序中,定義了結構體類型stu,定義了stu類型指針變量ps。然后分配一塊stu大內存區(qū),并把首地址賦予ps,使ps指向該區(qū)域。再以ps為指向結構體的指針變量對各成員賦值,并用printf()輸出各成員值。最后用free()函數(shù)釋放ps指向的內存空間。整個程序包含了申請內存空間、使用內存空間、釋放內存空間三個步驟,實現(xiàn)存儲空間的動態(tài)分配。,8.2 動態(tài)內存

66、分配與鏈表,8.2.3 建立和輸出鏈表 所謂動態(tài)建立鏈表是指在程序執(zhí)行過程中從無到有地建立鏈表,將一個個新生成的結點順次鏈接入已建立的鏈表上,上一個結點的指針域存放下一個結點的起始地址,并給各結點數(shù)據(jù)域賦值。 所謂輸出鏈表是將鏈表上各個結點的數(shù)據(jù)域中的值依次輸出,直到鏈表結尾。,8.2 動態(tài)內存分配與鏈表,例8.8 以三個結構體變量為結點建立一個簡單的鏈表并輸出。#include struct nod

67、e { int data; struct node *next;};void main(){ struct node a,b,c,*head,*p; head=&a; /* 頭結點指向a結點 */ a.data=5;a.next=&b; /* a結點指向b結點 */ b.data=1

68、0;b.next=&c; /* b結點指向c結點 */ c.data=15;c.next=NULL; /* c結點是尾結點 */ p=head; /* 使p指向a結點 */ while(p!=NULL) { printf("%d-->",p-&

69、gt;data); /* 輸出指針p所指向結點的數(shù)據(jù) */ p=p->next; /* 使p指向下一個結點 */ } printf("NULL\n");},程序運行結果:5-->10-->15-->NULL,8.2 動態(tài)內存分配與鏈表,8.2.4 鏈表的基本操作 鏈

70、表的基本操作包括,建立并初始化鏈表,遍歷訪問鏈表(包括查找結點、輸出結點等),刪除鏈表中的結點,在鏈表中插入結點。鏈表的各種基本操作的步驟如下。 1. 建立鏈表 ① 建立頭結點(或定義頭指針變量)。 ② 讀取數(shù)據(jù)。 ③ 生成新結點。 ④ 將數(shù)據(jù)存入結點的數(shù)據(jù)域中。 ⑤ 將新結點連接到鏈表中(將新結點地址賦給上一個

71、結 點的指針域連接到鏈表)。 ⑥ 重復步驟②~⑤,直到尾結點為止。,8.2 動態(tài)內存分配與鏈表,2.遍歷訪問鏈表 輸出鏈表即順序訪問鏈表中各結點的數(shù)據(jù)域,方法是:從頭結點開始,不斷地讀取數(shù)據(jù)和下移指針變量,直到尾結點為止。3.刪除鏈表中的一個結點 ① 找到要刪除結點的前驅結點。 ② 將要刪除結點的后驅結點的地址賦給要刪除結點的前驅

溫馨提示

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

評論

0/150

提交評論