函數(shù)調(diào)用函數(shù)原型_第1頁
函數(shù)調(diào)用函數(shù)原型_第2頁
函數(shù)調(diào)用函數(shù)原型_第3頁
函數(shù)調(diào)用函數(shù)原型_第4頁
函數(shù)調(diào)用函數(shù)原型_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

內(nèi)容提要函數(shù)定義、函數(shù)調(diào)用、函數(shù)原型、函數(shù)返回值難點:函數(shù)的參數(shù)傳遞與返回值程序調(diào)試代碼風(fēng)格變量的作用域與存儲類型模塊化程序設(shè)計Skill:用函數(shù)編程求解問題的能力程序排錯與調(diào)試的能力第一頁第二頁,共63頁。數(shù)學(xué)中的函數(shù)自變量因變量函數(shù)名說明自變量與因變量的映射關(guān)系第二頁第三頁,共63頁。程序設(shè)計中的函數(shù)程序設(shè)計中的函數(shù)不局限于計算計算類,如打印階乘表的程序……判斷推理類,如排序、查找……第三頁第四頁,共63頁。請問讀多少行的程序能讓你不頭疼?假如系統(tǒng)提供的函數(shù)printf()由10行代碼替換,那么你編過的程序會成什么樣子?實際上一個printf()有上千行代碼main()中能放多少行代碼?如果所有代碼都在main()中,怎么團隊合作?如果代碼都在一個文件中,怎么團隊合作?第四頁第五頁,共63頁。程序設(shè)計的藝術(shù)“事無巨細”,“事必躬親”管理學(xué)的觀點是極其排斥這種做法的,認為工作必須分工,各司其職其中的思想,在程序設(shè)計里也適用分而治之(DivideandConquer,Wirth,1971)函數(shù)把較大的任務(wù)分解成若干個較小的任務(wù),并提煉出公用任務(wù)第五頁第六頁,共63頁。程序設(shè)計的藝術(shù)信息隱藏(InformationHiding,Parnas,1972)設(shè)計得當(dāng)?shù)暮瘮?shù)可以把具體操作細節(jié)對程序中不需要知道它們的那些部分隱藏掉,從而使整個程序結(jié)構(gòu)清楚使用函數(shù)時,不用知道這個函數(shù)內(nèi)部是如何運作的,只按照我們的需要和它的參數(shù)形式調(diào)用它即可第六頁第七頁,共63頁。函數(shù)是C語言中模塊化編程的最小單位可以把每個函數(shù)看作一個模塊如把編程比做制造一臺機器,函數(shù)就好比其零部件可將這些“零部件”單獨設(shè)計、調(diào)試、測試好,用時拿出來裝配,再總體調(diào)試。這些“零部件”可以是自己設(shè)計制造/別人設(shè)計制造/現(xiàn)成的標(biāo)準(zhǔn)產(chǎn)品函數(shù)(function)和模塊(module)第七頁第八頁,共63頁。函數(shù)(function)和模塊(module)若干相關(guān)的函數(shù)可以合并成一個“模塊”一個源程序文件由一個或多個函數(shù)組成一個C程序由一個或多個源程序文件組成C程序結(jié)構(gòu)第八頁第九頁,共63頁。函數(shù)的分類函數(shù)生來都是平等的,互相獨立的,沒有高低貴賤和從屬之分main()稍微特殊一點點C程序的執(zhí)行從main函數(shù)開始調(diào)用其他函數(shù)后流程回到main函數(shù)在main函數(shù)中結(jié)束整個程序運行第九頁第十頁,共63頁。函數(shù)的分類庫函數(shù)ANSI/ISOC定義的標(biāo)準(zhǔn)庫函數(shù)符合標(biāo)準(zhǔn)的C語言編譯器必須提供這些函數(shù)函數(shù)的行為也要符合ANSI/ISOC的定義第三方庫函數(shù)由其它廠商自行開發(fā)的C語言函數(shù)庫不在標(biāo)準(zhǔn)范圍內(nèi),能擴充C語言的功能(圖形、網(wǎng)絡(luò)、數(shù)據(jù)庫等)自定義函數(shù)自己編寫的函數(shù)包裝后,也可成為函數(shù)庫,供別人使用第十頁第十一頁,共63頁。函數(shù)定義(definition)類型函數(shù)名(類型參數(shù)1,類型參數(shù)2,……)

{

函數(shù)體;

return

表達式;

}返回值類型函數(shù)名標(biāo)識符說明運算規(guī)則參數(shù)表相當(dāng)于運算的操作數(shù)返回值是運算的結(jié)果函數(shù)出口第十一頁第十二頁,共63頁。函數(shù)定義(definition)類型函數(shù)名(類型參數(shù)1,類型參數(shù)2,……)

{

函數(shù)體;

return

表達式;

}函數(shù)體的定界符參數(shù)表里的變量(叫形式參數(shù),parameter)也是內(nèi)部變量第十二頁第十三頁,共63頁。例5.1a計算兩個整數(shù)的平均數(shù)/*

函數(shù)功能:計算平均數(shù)函數(shù)入口參數(shù):整型x,存儲第一個運算數(shù)整型y,存儲第二個運算數(shù)函數(shù)返回值:平均數(shù)*/intAverage(intx,inty){

intresult; result=(x+y)/2;

returnresult;}返回值類型函數(shù)名說明函數(shù)的功能返回值作為函數(shù)調(diào)用表達式的值形參表,函數(shù)入口函數(shù)內(nèi)部可以定義只能自己使用的變量,稱內(nèi)部變量第十三頁第十四頁,共63頁。函數(shù)定義(Functiondefinition)void

函數(shù)名(void)

{

函數(shù)體;

return;

}函數(shù)沒有運算結(jié)果,無返回值,用void定義返回值類型用void定義參數(shù),表示沒有參數(shù)return語句后不需要任何表達式第十四頁第十五頁,共63頁。函數(shù)調(diào)用(Functioncall)函數(shù)名(表達式1,表達式2,……);調(diào)用函數(shù)時,提供的表達式叫實際參數(shù)(argument)有返回值時放到一個數(shù)值表達式中

c=max(a,b);作為另一個函數(shù)調(diào)用的參數(shù)

c=max(max(a,b),c);printf("%d\n",max(a,b));無返回值時函數(shù)調(diào)用表達式display(a,b);返回值=函數(shù)名(實參表列);函數(shù)名(實參表列);第十五頁第十六頁,共63頁。函數(shù)的每次執(zhí)行都會建立一個全新的獨立的環(huán)境在“?!敝袨楹瘮?shù)的每個變量(包括形式參數(shù))分配內(nèi)存把實參值復(fù)制給形參開始執(zhí)行函數(shù)內(nèi)的第一條語句main(){inta=12,b=24,ave;…ave=Average(a,b);

……}intAverage(intx,inty){intresult;result=(x+y)/2;returnresult;}①函數(shù)調(diào)用的過程y?x?result?b24a12ave?1224第十六頁第十七頁,共63頁。函數(shù)內(nèi)的代碼在這個獨立的環(huán)境內(nèi)工作當(dāng)函數(shù)執(zhí)行到return語句或}時函數(shù)退出程序從當(dāng)次調(diào)用函數(shù)的地方繼續(xù)執(zhí)行函數(shù)可有多個return,但最好只有一個且是最后一行main(){inta=12,b=24,ave;…ave=Average(a,b);

……}intAverage(intx,inty){intresult;result=(x+y)/2;returnresult;}③②函數(shù)調(diào)用的過程y?x?result?b24a12ave?122418第十七頁第十八頁,共63頁。函數(shù)退出時求出返回值,存入一個可被調(diào)用者訪問的地方收回分配給所有變量(包括形式參數(shù))的內(nèi)存程序控制權(quán)交給調(diào)用者,調(diào)用者拿到返回值,將其作為函數(shù)調(diào)用表達式的結(jié)果main(){inta=12,b=24,ave;…ave=Average(a,b);

……}intAverage(intx,inty){intresult;result=(x+y)/2;returnresult;}函數(shù)調(diào)用的過程y24x12result18b24a12ave?18第十八頁第十九頁,共63頁。函數(shù)參數(shù)傳遞從實參到形參是單向值傳遞形參值的改變不會影響對應(yīng)的實參實參和形參必須匹配數(shù)目一致類型一一對應(yīng)(會發(fā)生自動類型轉(zhuǎn)換)第十九頁第二十頁,共63頁。函數(shù)的嵌套調(diào)用嵌套調(diào)用在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)C語言規(guī)定函數(shù)不能嵌套定義,但可以嵌套調(diào)用函數(shù)是相互平行的main(){……a();}a

函數(shù){b();…return;}b函數(shù){……return;}①③④⑤⑥⑦②第二十頁第二十一頁,共63頁。遞歸(Recursion)函數(shù)直接或間接調(diào)用自己為遞歸 unsigned

long

func(unsigned

intn)

{

if(n==0)

return1;

else

returnn*func(n-1);

}第二十一頁第二十二頁,共63頁。用遞歸的方法求n!

n!=n*(n-1)!..(n-1)!=(n-1)*(n-2)!..(n-2)!..(n-3)!4!:3!=3*2!:2!=2*1!:1!=1*0!0!=1回推過程遞推過程每個遞歸函數(shù)必須至少有一個基線條件一般情況必須最終能簡化為基線條件遞歸層數(shù)太多易導(dǎo)致??臻g溢出后果很嚴重,程序被異常中止第二十二頁第二十三頁,共63頁。遞歸與迭代迭代即循環(huán)方法來編寫的階乘函數(shù)unsignedlongfactorial(unsigned

intn){

unsignedlongfact=1;

unsignedinti;

for(i=1;i<=n;i++)fact*=i;

returnfact;}遞歸程序遵循了數(shù)學(xué)中對階乘的定義因此遞歸方法編寫程序具有更清晰、可讀性更好的優(yōu)點第二十三頁第二十四頁,共63頁。遞歸與迭代優(yōu)點:從編程角度來看,比較直觀、精煉,邏輯清楚符合人的思維習(xí)慣,逼近數(shù)學(xué)公式的表示尤其適合非數(shù)值計算領(lǐng)域hanoi塔,騎士游歷、八皇后問題(回溯法)缺點:增加了函數(shù)調(diào)用的開銷,每次調(diào)用都需要進行參數(shù)傳遞、現(xiàn)場保護等從程序運行效率來看,大量重復(fù)計算,時空效率低應(yīng)盡量用迭代形式替代遞歸形式第二十四頁第二十五頁,共63頁。函數(shù)原型(Functionprototype)在調(diào)用一個函數(shù)之前要先對其返回值類型、函數(shù)名和參數(shù)進行聲明(declaration)函數(shù)聲明,也稱函數(shù)原型有助于編譯器進行類型檢查不對函數(shù)進行聲明是非常危險的第二十五頁第二十六頁,共63頁。例5.1b使用了Average函數(shù)的main()

#include<stdio.h>intAverage(intx,inty);main(){

inta=12;

intb=24;

intave; ave=Average(a,b);

printf("Averageof%dand%dis%d.\n",a,b,ave);}函數(shù)聲明(函數(shù)原型),聲明時不要省略形參和返回值的類型函數(shù)調(diào)用第二十六頁第二十七頁,共63頁。#include<stdio.h>/*

函數(shù)功能:計算平均數(shù)函數(shù)入口參數(shù):整型x,存儲第一個運算數(shù)整型y,存儲第二個運算數(shù)函數(shù)返回值:平均數(shù)*/intAverage(intx,inty){

intresult; result=(x+y)/2;

returnresult;}main(){

inta=12;

intb=24;

intave=Average(a,b);

printf("Averageof%dand%dis%d.\n",a,b,ave);}例5.1函數(shù)定義也有聲明函數(shù)的效果當(dāng)返回值為整型或者函數(shù)定義在函數(shù)調(diào)用前面時,可以省略原型第二十七頁第二十八頁,共63頁。函數(shù)定義與函數(shù)聲明的區(qū)別函數(shù)定義指函數(shù)功能的確立包括指定函數(shù)名、函數(shù)類型、形參及其類型、函數(shù)體等是完整獨立的單位

函數(shù)聲明是對函數(shù)名、函數(shù)返回值類型、形參類型的說明不包括函數(shù)體是一條語句,以分號結(jié)束,只起一個聲明作用第二十八頁第二十九頁,共63頁。循序漸進式編程

實驗4:小學(xué)生加法考試題通過輸入兩個加數(shù)給學(xué)生出一道加法運算題輸入答案正確:right錯誤:Notcorrect!Tryagain!第二十九頁第三十頁,共63頁。只答1次直到做對為止最多給3次機會隨機出題連續(xù)做10道題統(tǒng)計分數(shù)循序漸進式編程

實驗4:小學(xué)生加法考試題第三十頁第三十一頁,共63頁。voidPrint(intflag){if(flag)printf("Right!\n");else printf("Notcorrect!\n");}實驗4:小學(xué)生加法考試題/*函數(shù)功能:計算兩整型數(shù)之和,如果與用戶輸入的答案相同,則返回1,否則返回0

函數(shù)參數(shù):整型變量a和b,分別代表被加數(shù)和加數(shù)函數(shù)返回值:當(dāng)a加b的結(jié)果與用戶輸入的答案相同時,返回1,否則返回0*/intAddTest(inta,intb){

intanswer; printf("%d+%d=",a,b); scanf("%d",&answer);

if(a+b==answer)

return1;

else

return0;}只答1次第三十一頁第三十二頁,共63頁。main(){inta,b,answer;printf("Inputa,b:");scanf("%d,%d",&a,&b); answer=AddTest(a,b); Print(answer);}do{

}while(answer==0);實驗4:小學(xué)生加法考試題直到做對為止第三十二頁第三十三頁,共63頁。main(){……

answer=AddTest(a,b);

Print(answer,chance);

}chance=0;

do{

chance++;}while(answer==0&&chance<3);實驗4:小學(xué)生加法考試題最多給3次機會第三十三頁第三十四頁,共63頁。

srand(time(NULL));error=0;score=0;

for(i=0;i<10;i++){

a=rand()%10+1;b=rand()%10+1;answer=AddTest(a,b);Print(answer);

if(answer==1)score=score+10;

elseerror++;

}實驗4:小學(xué)生加法考試題隨機出題連續(xù)做10道題統(tǒng)計分數(shù)第三十四頁第三十五頁,共63頁。程序調(diào)試實例#include<stdio.h>#include<stdlib.h>intFactorial(intx);main(){

intx;

printf("Pleaseinputx(>=0):");

scanf("%d",&x);

if(x==-1) exit(0); /*退出程序*/

else

printf("Thefactorialof%dis%d.\n",x,Factorial(x)); }存在一處錯誤!第三十五頁第三十六頁,共63頁。程序調(diào)試實例#include<stdio.h>intFactorial(intx);main(){

intx;

do{

printf("Pleaseinputx(>=0):");

scanf("%d",&x); }while(x<0);printf("Thefactorialof%dis%d.\n",x,Factorial(x));}更好的編程方法!第三十六頁第三十七頁,共63頁。程序調(diào)試實例/*

函數(shù)功能:計算x的階乘

函數(shù)入口參數(shù):整型x

函數(shù)返回值:階乘運算結(jié)果*/intFactorial(intx){

inti,result;

for(i=1;i<=x;i++) result*=i;

returnresult;}存在兩個問題!輸入17或者在TC下(或?qū)nt改成short)輸入8試一試第三十七頁第三十八頁,共63頁。程序調(diào)試實例/*

函數(shù)功能:計算x的階乘

函數(shù)入口參數(shù):無符號長整型x

函數(shù)返回值:階乘運算結(jié)果*/unsigned

longFactorial(unsignedintx){

unsignedlongi,result=1;

for(i=2;i<=x;i++) result*=i;

returnresult;}同時需修改函數(shù)原型和主函數(shù)中的打印格式第三十八頁第三十九頁,共63頁。assert()名喚:斷言#include<assert.h>

voidassert(intexpression);expression為真,無聲無息;

為假,中斷程序。用來測試某種不可能發(fā)生的狀況確實不會發(fā)生Debug版有效Release版失效只為調(diào)試程序用,不可作為程序的功能第三十九頁第四十頁,共63頁。assert()#include<assert.h>

unsigned

longFactorial(unsignedintx);......unsigned

longFactorial(unsignedintx){

unsignedlongi,result=1;

assert(x>=0);

for(i=2;i<=x;i++) result*=i;

returnresult;}這里的斷言有意義嗎?第四十頁第四十一頁,共63頁。assert()加入斷言檢查函數(shù)的入口參數(shù)#include<assert.h>第四十一頁第四十二頁,共63頁。軟件測試測試的主要方式給定特定的輸入,運行被測軟件檢查軟件的輸出是否與預(yù)期結(jié)果一致測試用例的選取方法盡量覆蓋所有分支,減少重復(fù)覆蓋測試的目的通過運行測試用例找出軟件中的Bug成功的測試在于發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的Bug測試人員的主要任務(wù)是站在使用者的角度,通過不斷使用和攻擊,盡可能多的找出Bug測試的過程就像黑客的攻擊過程,專門找軟件漏洞第四十二頁第四十三頁,共63頁。軟件測試采用測試用例,通過運行程序查找程序錯誤的方法實質(zhì)是一種抽樣檢查,徹底的測試是不可能的徹底的測試不現(xiàn)實,要考慮時間費用等限制,不允許無休止的測試測試只能證明程序有錯,不能證明程序無錯——E.W.Dijkstra測試能提高軟件質(zhì)量,但提高軟件質(zhì)量不能依賴于測試第四十三頁第四十四頁,共63頁。軟件測試方法的分類從代碼和用戶使用的角度分類覆蓋性測試從代碼特性的角度(即內(nèi)部)出發(fā)的測試單元測試,功能測試,提交測試,基本驗證測試,回歸測試使用測試從用戶的角度(即外部)出發(fā)的測試配置測試,兼容性測試,性能測試,Alpha和Beta測試,強力測試,文檔和幫助文件測試第四十四頁第四十五頁,共63頁。軟件測試方法的分類第2種分類方法白盒測試(結(jié)構(gòu)測試)在完全了解程序的結(jié)構(gòu)和處理過程的情況下,按照程序內(nèi)部的邏輯測試程序,檢驗程序中的每條邏輯路徑是否都能按預(yù)定要求正確工作主要用于測試的早期黑盒測試(功能測試)把系統(tǒng)看成一個黑盒子,不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和處理過程,只根據(jù)需求規(guī)格說明書的要求,設(shè)計測試用例,檢查程序的功能是否符合它的功能說明主要用于測試的后期通常結(jié)合使用選擇有限數(shù)量的重要路徑進行白盒測試對重要的功能需求進行黑盒測試第四十五頁第四十六頁,共63頁。軟件測試方法的分類第3種分類方法手工測試依靠人力來查找Bug自動測試編寫一些測試工具,讓他們自動運行來查找Bug優(yōu)點:快,廣泛缺點:只能檢查一些最重要的問題,如內(nèi)存泄漏、死機等,無法發(fā)現(xiàn)一般性的日常錯誤,而且編寫測試工具的工作量很大第四十六頁第四十七頁,共63頁。軟件測試方法的分類案例1:微軟開發(fā)ExchangeServer時常常要做強力測試需要幾萬個甚至幾十萬個用戶同時把E-mail發(fā)送到服務(wù)器,以保證Server不會死機只能利用測試工具,自動產(chǎn)生幾萬個賬號,同一時間從不同機器上同時發(fā)送E-mail第四十七頁第四十八頁,共63頁。軟件測試方法的分類案例2:測試Web頁面瀏覽器時要求50000個用戶同時瀏覽一個web頁面,以保證網(wǎng)站的服務(wù)器不會死機通過測試工具很容易做到,而且工具可以自動判斷瀏覽結(jié)果是否正確第四十八頁第四十九頁,共63頁。程序改錯是個大悲大喜的過程,一天之內(nèi)可以讓人在悲傷的低谷和喜悅的巔峰之間跌宕起伏。如果改過了成千上萬個錯誤,……第四十九頁第五十頁,共63頁。程序改錯改錯的第一步是找出錯誤的根源,然后對癥下藥調(diào)試尋找錯誤根源的過程改錯很像偵破案件,有壞事發(fā)生了,而僅有的信息是它的確發(fā)生了。必須從結(jié)果出發(fā),逆向思考第五十頁第五十一頁,共63頁。程序改錯難點在于癥狀和根源可能相隔很遠有人問阿凡提:“我肚子疼,該用什么藥?”癥狀可能在另一個錯誤被糾正后暫時消失癥狀并不是某個程序錯誤引發(fā)的,如誤差累積癥狀可能時隱時現(xiàn),如“內(nèi)存泄露”很難產(chǎn)生完全一樣的輸入條件,難以恢復(fù)“錯誤的現(xiàn)場”第五十一頁第五十二頁,共63頁。程序中常見的錯誤編譯錯誤指在編譯過程中發(fā)現(xiàn)的錯誤,通常屬于語法錯誤即編寫的語句不符合C語言的語法規(guī)則Undefinedsymbol‘xxx’標(biāo)識符xxx未定義Expressionsyntaxerror表達式語法錯誤Toofewparameterincall函數(shù)調(diào)用時的實參少于函數(shù)的形參第五十二頁第五十三頁,共63頁。運行時錯誤指在程序運行時發(fā)生的錯誤往往是由于語義上的錯誤造成的即語句雖然合乎語法,但要求計算機去做不該做或做不到的事情。當(dāng)用0做除數(shù)時,運行后將顯示“Divisionbyzero”錯誤提示信息,并立即返回編輯屏幕程序中常見的錯誤第五十三頁第五十四頁,共63頁。邏輯錯誤不影響程序運行,但運行結(jié)果不正確比較隱蔽,出錯后不易查找變量未初始化,數(shù)組下標(biāo)越界,數(shù)據(jù)類型溢出,運算符寫錯,......例如,關(guān)系運算符==錯寫成賦值運算符=if(a=b)printf("yes");/*導(dǎo)致運行結(jié)果錯誤*/Warning:Possiblyincorrectassignmentinfunctionmain程序中常見的錯誤第五十四頁第五十五頁,共63頁。錯誤案例判斷字符是大寫字符或者小寫字符('a'<=ch<='z')||('A'<=ch<='Z')/*不提示任何錯誤,但導(dǎo)致運行結(jié)果錯誤*/(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')/*正確*/判斷字符是數(shù)字字符'0'<=ch<='9'/*不提示任何錯誤,但導(dǎo)致運行結(jié)果錯誤*/ch>='0'&&ch<='9'/*正確*/第五十五頁第五十六頁,共63頁。錯誤案例數(shù)據(jù)類型由高向低賦值時,進行類型轉(zhuǎn)換后導(dǎo)致信息丟失doublea,b;intsum;sum=a+b;TC下編譯,不提示任何錯誤VC下編譯warningC4244:'=':conversionfrom'double'to'int',possiblelossofdata第五十六頁第五十七頁,共63頁。錯誤案例函數(shù)聲明時的返回值類型與實際返回的數(shù)據(jù)類型不一致,導(dǎo)致自動類型轉(zhuǎn)換doubleAdd(doublea,doubleb){

intsum;……returnsum;}//不提示warningintAdd(doublea,doubleb){doublesum;……returnsum;}warningC4244:'return':conversionfrom'double'to'int',possiblelossofdata第五十七頁第五十八頁,共63頁。程序調(diào)試的基本方法利用調(diào)試工具單步運行,逐條語句跟蹤觀察變量值的變化調(diào)試的基本方法粗分細找,定位大致的范圍歸納、推理、二分、排除世界上最好的調(diào)試工具是那些有經(jīng)驗的人沒有任何語言和工具能防止我們犯錯誤第五十八頁第五十九頁,共63頁。程序調(diào)試的基本方法粗分細找

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論