![函數(shù)教學(xué)課件_第1頁](http://file4.renrendoc.com/view/5f6d45c3b02012eca135ad25e5951e12/5f6d45c3b02012eca135ad25e5951e121.gif)
![函數(shù)教學(xué)課件_第2頁](http://file4.renrendoc.com/view/5f6d45c3b02012eca135ad25e5951e12/5f6d45c3b02012eca135ad25e5951e122.gif)
![函數(shù)教學(xué)課件_第3頁](http://file4.renrendoc.com/view/5f6d45c3b02012eca135ad25e5951e12/5f6d45c3b02012eca135ad25e5951e123.gif)
![函數(shù)教學(xué)課件_第4頁](http://file4.renrendoc.com/view/5f6d45c3b02012eca135ad25e5951e12/5f6d45c3b02012eca135ad25e5951e124.gif)
![函數(shù)教學(xué)課件_第5頁](http://file4.renrendoc.com/view/5f6d45c3b02012eca135ad25e5951e12/5f6d45c3b02012eca135ad25e5951e125.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
8函數(shù)1
8.1概述1
8.2函數(shù)定義的一般形式3
8.3函數(shù)的參數(shù)和函數(shù)的值4
8.3.1形式參數(shù)和實際參數(shù)4
8.3.2函數(shù)的返回值5
8.4函數(shù)的調(diào)用6
8.4.1函數(shù)調(diào)用的一般形式6
8.4.2函數(shù)調(diào)用的方式6
8.4.3被調(diào)用函數(shù)的聲明和函數(shù)原型7
8.5函數(shù)的嵌套調(diào)用8
8.6函數(shù)的遞歸調(diào)用10
8.7數(shù)組作為函數(shù)參數(shù)12
8.8局部變量和全局變量17
8.8.1局部變量17
8.8.2全局變量19
8.9變量的存儲類別20
8.9.1動態(tài)存儲方式與靜態(tài)動態(tài)存儲方式20
8.9.2auto變量21
8.9.3用static聲明局部變量21
8.9.4register變量22
8.9.5用extern聲明外部變量23
8函數(shù)
8.1概述
在前面已經(jīng)介紹過,C源程序是由函數(shù)組成的。雖
然在前面各章的程序中大都只有一個主函數(shù)
main(),但實用程序往往由多個函數(shù)組成。函數(shù)是
C源程序的基本模塊,通過對函數(shù)模塊的調(diào)用實現(xiàn)
特定的功能。C語言中的函數(shù)相當(dāng)于其它高級語言
的子程序。C語言不僅提供了極為豐富的庫函數(shù)
(如TurboC,MSC都提供了三百多個庫函數(shù)),還
允許用戶建立自己定義的函數(shù)。用戶可把自己的算
法編成一個個相對獨立的函數(shù)模塊,然后用調(diào)用的
方法來使用函數(shù)??梢哉fC程序的全部工作都是由
各式各樣的函數(shù)完成的,所以也把C語言稱為函數(shù)
式語言。
由于采用了函數(shù)模塊式的結(jié)構(gòu),C語言易于實現(xiàn)結(jié)
構(gòu)化程序設(shè)計。使程序的層次結(jié)構(gòu)清晰,便于程序
的編寫、閱讀、調(diào)試。
在C語言中可從不同的角度對函數(shù)分類。
1.從函數(shù)定義的角度看,函數(shù)可分為庫函數(shù)和用
戶定義函數(shù)兩種。
1)庫函數(shù):由C系統(tǒng)提供,用戶無須定義,也不
必在程序中作類型說明,只需在程序前包含有該函
數(shù)原型的頭文件即可在程序中直接調(diào)用。在前面各
章的例題中反復(fù)用到printf、scanf、getchar、putchar、
gets>puts>strcat等函數(shù)均屬此類。
2)用戶定義函數(shù):由用戶按需要寫的函數(shù)。對于
用戶自定義函數(shù),不僅要在程序中定義函數(shù)本身,
而且在主調(diào)函數(shù)模塊中還必須對該被調(diào)函數(shù)進(jìn)行
類型說明,然后才能使用。
2.C語言的函數(shù)兼有其它語言中的函數(shù)和過程
兩種功能,從這個角度看,又可把函數(shù)分為有返回
值函數(shù)和無返回值函數(shù)兩種。
1)有返回值函數(shù):此類函數(shù)被調(diào)用執(zhí)行完后將向
調(diào)用者返回一個執(zhí)行結(jié)果,稱為函數(shù)返回值。如數(shù)
學(xué)函數(shù)即屬于此類函數(shù)。由用戶定義的這種要返回
函數(shù)值的函數(shù),必須在函數(shù)定義和函數(shù)說明中明確
返回值的類型。
2)無返回值函數(shù):此類函數(shù)用于完成某項特定的
處理任務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)值。這
類函數(shù)類似于其它語言的過程。由于函數(shù)無須返回
值,用戶在定義此類函數(shù)時可指定它的返回為''空
類型,,,空類型的說明符為“void”。
3.從主調(diào)函數(shù)和被調(diào)函數(shù)之間數(shù)據(jù)傳送的角度
看又可分為無參函數(shù)和有參函數(shù)兩種。
1)無參函數(shù):函數(shù)定義、函數(shù)說明及函數(shù)調(diào)用中
均不帶參數(shù)。主調(diào)函數(shù)和被調(diào)函數(shù)之間不進(jìn)行參數(shù)
傳送。此類函數(shù)通常用來完成一組指定的功能,可
以返回或不返回函數(shù)值。
2)有參函數(shù):也稱為帶參函數(shù)。在函數(shù)定義及函
數(shù)說明時都有參數(shù),稱為形式參數(shù)(簡稱為形參)。
在函數(shù)調(diào)用時也必須給出參數(shù),稱為實際參數(shù)(簡
稱為實參)。進(jìn)行函數(shù)調(diào)用時,主調(diào)函數(shù)將把實參
的值傳送給形參,供被調(diào)函數(shù)使用。
4.C語言提供了極為豐富的庫函數(shù),這些庫函數(shù)
又可從功能角度作以下分類。
1)字符類型分類函數(shù):用于對字符按ASCII碼
分類:字母,數(shù)字,控制字符,分隔符,大小寫字
母等。
2)轉(zhuǎn)換函數(shù):用于字符或字符串的轉(zhuǎn)換;在字符
量和各類數(shù)字量(整型,實型等)之間進(jìn)行轉(zhuǎn)換;在
大、小寫之間進(jìn)行轉(zhuǎn)換。
3)目錄路徑函數(shù):用于文件目錄和路徑操作。
4)診斷函數(shù):用于內(nèi)部錯誤檢測。
5)圖形函數(shù):用于屏幕管理和各種圖形功能。
6)輸入輸出函數(shù):用于完成輸入輸出功能。
7)接口函數(shù):用于與DOS,BIOS和硬件的接口。
8)字符串函數(shù):用于字符串操作和處理。
9)內(nèi)存管理函數(shù):用于內(nèi)存管理。
10)數(shù)學(xué)函數(shù):用于數(shù)學(xué)函數(shù)計算。
11)日期和時間函數(shù):用于日期,時間轉(zhuǎn)換操作。
12)進(jìn)程控制函數(shù):用于進(jìn)程管理和控制。
13)其它函數(shù):用于其它各種功能。
以上各類函數(shù)不僅數(shù)量多,而且有的還需要硬
件知識才會使用,因此要想全部掌握則需要一個較
長的學(xué)習(xí)過程。應(yīng)首先掌握一些最基本、最常用的
函數(shù),再逐步深入。由于課時關(guān)系,我們只介紹了
很少一部分庫函數(shù),其余部分讀者可根據(jù)需要查閱
有關(guān)手冊。
還應(yīng)該指出的是,在C語言中,所有的函數(shù)定義,
包括主函數(shù)main在內(nèi),都是平行的。也就是說,
在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),
即不能嵌套定義。但是函數(shù)之間允許相互調(diào)用,也
允許嵌套調(diào)用。習(xí)慣上把調(diào)用者稱為主調(diào)函數(shù)。函
數(shù)還可以自己調(diào)用自己,稱為遞歸調(diào)用。
main函數(shù)是主函數(shù),它可以調(diào)用其它函數(shù),而不
允許被其它函數(shù)調(diào)用。因此,C程序的執(zhí)行總是從
main函數(shù)開始,完成對其它函數(shù)的調(diào)用后再返回
到main函數(shù),最后由main函數(shù)結(jié)束整個程序。一
個C源程序必須有,也只能有一個主函數(shù)main。
8.2函數(shù)定義的一般形式
1.無參函數(shù)的定義形式
類型標(biāo)識符函數(shù)名0
{聲明部分
語句
)
其中類型標(biāo)識符和函數(shù)名稱為函數(shù)頭。類型標(biāo)識符
指明了本函數(shù)的類型,函數(shù)的類型實際上是函數(shù)返
回值的類型。該類型標(biāo)識符與前面介紹的各種說
明符相同。函數(shù)名是由用戶定義的標(biāo)識符,函數(shù)名
后有一個空括號,其中無參數(shù),但括號不可少。
{}中的內(nèi)容稱為函數(shù)體。在函數(shù)體中聲明部分,是
對函數(shù)體內(nèi)部所用到的變量的類型說明。
在很多情況下都不要求無參函數(shù)有返回值,此
時函數(shù)類型符可以寫為void。
我們可以改寫一個函數(shù)定義:
voidHello()
(
printfC'Hello,world\n*');
這里,只把main改為Hello作為函數(shù)名,其余不
變。Hello函數(shù)是一個無參函數(shù),當(dāng)被其它函數(shù)調(diào)
用時,輸出Helloworld字符串。
2.有參函數(shù)定義的一般形式
類型標(biāo)識符函數(shù)名(形式參數(shù)表列)
{聲明部分
語句
)
有參函數(shù)比無參函數(shù)多了一個內(nèi)容,即形式參數(shù)表
列。在形參表中給出的參數(shù)稱為形式參數(shù),它們可
以是各種類型的變量,各參數(shù)之間用逗號間隔。在
進(jìn)行函數(shù)調(diào)用時,主調(diào)函數(shù)將賦予這些形式參數(shù)實
際的值。形參既然是變量,必須在形參表中給出形
參的類型說明。
例如,定義一個函數(shù),用于求兩個數(shù)中的大數(shù),可
寫為:
intmax(inta,intb)
(
if(a>b)returna;
elsereturnb;
第一行說明max函數(shù)是一個整型函數(shù),其返回的
函數(shù)值是一個整數(shù)。形參為a,b,均為整型量。a,b
的具體值是由主調(diào)函數(shù)在調(diào)用時傳送過來的。在{}
中的函數(shù)體內(nèi),除形參外沒有使用其它變量,因此
只有語句而沒有聲明部分。在max函數(shù)體中的
return語句是把a(bǔ)(或b)的值作為函數(shù)的值返回給主
調(diào)函數(shù)。有返回值函數(shù)中至少應(yīng)有一個return語
句。
在C程序中,一個函數(shù)的定義可以放在任意位置,
既可放在主函數(shù)main之前,也可放在main之后。
例如:
可把max函數(shù)置在main之后,也可以把它放在
main之前。修改后的程序如下所示。
【例8.1]
intmax(inta,intb)
(
if(a>b)retuma;
elsereturnb;
)
main()
intmax(inta,intb);
intx,y,z;
printf("inputtwonumbers:\nu);
scanf(',%d%d',,&x,&y);
z=max(x,y);
printf(Hmaxmum=%dn,z);
現(xiàn)在我們可以從函數(shù)定義、函數(shù)說明及函數(shù)調(diào)
用的角度來分析整個程序,從中進(jìn)一步了解函數(shù)的
各種特點。
程序的第1行至第5行為max函數(shù)定義。進(jìn)入主
函數(shù)后,因為準(zhǔn)備調(diào)用max函數(shù),故先對max函
數(shù)進(jìn)行說明(程序第8行)。函數(shù)定義和函數(shù)說明并
不是一回事,在后面還要專門討論??梢钥闯龊?/p>
數(shù)說明與函數(shù)定義中的函數(shù)頭部分相同,但是末尾
要加分號。程序第12行為調(diào)用max函數(shù),并把
x,y中的值傳送給max的形參a,b。max函數(shù)執(zhí)行
的結(jié)果(a或b)將返回給變量z。最后由主函數(shù)輸出
Z的值。
8.3函數(shù)的參數(shù)和函數(shù)的值
8.3.1形式參數(shù)和實際參數(shù)
前面已經(jīng)介紹過,函數(shù)的參數(shù)分為形參和實參
兩種。在本小節(jié)中,進(jìn)一步介紹形參、實參的特點
和兩者的關(guān)系。形參出現(xiàn)在函數(shù)定義中,在整個函
數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實參
出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實參變量也
不能使用。形參和實參的功能是作數(shù)據(jù)傳送。發(fā)生
函數(shù)調(diào)用時,主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)
的形參從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。
函數(shù)的形參利實參具有以下特點:
1.形參變量只有在被調(diào)用時才分配內(nèi)存單元,在
調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。因此,
形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)
函數(shù)后則不能再使用該形參變量。
2.實參可以是常量、變量、表達(dá)式、函數(shù)等,無
論實參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們
都必須具有確定的值,以便把這些值傳送給形參。
因此應(yīng)預(yù)先用賦值,輸入等辦法使實參獲得確定
值。
3.實參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格
一致,否則會發(fā)生類型不匹配”的錯誤。
4.函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能
把實參的值傳送給形參,而不能把形參的值反向地
傳送給實參.因此在函數(shù)調(diào)用過程中,形參的值
發(fā)生改變,而實參中的值不會變化。
【例8.2】可以說明這個問題。
main()
intn;
printf("inputnumber\nH);
scanf("%dH,&n);
s(n);
printf("n=%d\n",n);
)
ints(intn)
{
inti;
for(i=n-l;i>=l;i-)
n=n+i;
printf(Hn=%d\nn,n);
本程序中定義了一個函數(shù)s,該函數(shù)的功能是
求Eni的值。在主函數(shù)中輸入n值,并作為實參,
在調(diào)用時傳送給s函數(shù)的形參量n(注意,本例的
形參變量和實參變量的標(biāo)識符都為n,但這是兩個
不同的量,各自的作用域不同)。在主函數(shù)中用
printf語句輸出一次n值,超n值是實參n的值。
在函數(shù)s中也用printf語句輸出了一次n值,這個
n值是形參最后取得的n值0。從運行情況看,輸
入n值為100?即實參n的值為100o把此值傳給
函數(shù)s時,形參n的初值也為100,在執(zhí)行函數(shù)過
程中,形參n的值變?yōu)?050o返回主函數(shù)之后,
輸出實參n的值仍為100??梢妼崊⒌闹挡浑S形參
的變化而變化。
8.3.2函數(shù)的返回值
函數(shù)的值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中
的程序段所取得的并返回給主調(diào)函數(shù)的值。如調(diào)用
正弦函數(shù)取得正弦值,調(diào)用例8.1的max函數(shù)取得
的最大數(shù)等。對函數(shù)的值(或稱函數(shù)返回值)有以下
一些說明:
1)函數(shù)的值只能通過return語句返回主調(diào)函數(shù)。
return語句的,?般形式為:
return表達(dá)式;
或者為:
return(表達(dá)式);
該語句的功能是計算表達(dá)式的值,并返回給主調(diào)函
數(shù)。在函數(shù)中允許有多個return語句,但每次調(diào)用
只能有一個return語句被執(zhí)行,因此只能返回一
個函數(shù)值。
2)函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保
持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自
動進(jìn)行類型轉(zhuǎn)換。
3)如函數(shù)值為整型,在函數(shù)定義時可以省去類型
說明。
4)不返回函數(shù)值的函數(shù),可以明確定義為“空類
型”,類型說明符為“void”。如例8.2中函數(shù)s并
不向主函數(shù)返函數(shù)值,因此可定義為:
voids(intn)
一旦函數(shù)被定義為空類型后,就不能在主調(diào)函數(shù)中
使用被調(diào)函數(shù)的函數(shù)值了。例如,在定義S為空類
型后,在主函數(shù)中寫下述語句
sum=s(n);
就是錯誤的。
為了使程序有良好的可讀性并減少出錯,凡不要
求返回值的函數(shù)都應(yīng)定義為空類型。
8.4函數(shù)的調(diào)用
8.4.1函數(shù)調(diào)用的一般形式
前面已經(jīng)說過,在程序中是通過對函數(shù)的調(diào)用來執(zhí)
行函數(shù)體的,其過程與其它語言的子程序調(diào)用相
似。
c語言中,函數(shù)調(diào)用的一般形式為:
函數(shù)名(實際參數(shù)表)
對無參函數(shù)調(diào)用時則無實際參數(shù)表。實際參數(shù)表中
的參數(shù)可以是常數(shù),變量或其它構(gòu)造類型數(shù)據(jù)及表
達(dá)式。各實參之間用逗號分隔。
8.4.2函數(shù)調(diào)用的方式
在C語言中,可以用以下幾種方式調(diào)用函數(shù):
1.函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項出現(xiàn)在
表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運算。這種
方式要求函數(shù)是有返回值的。例如:z=max(x,y)是
一個賦值表達(dá)式,把max的返回值賦予變量z。
2.函數(shù)語句:函數(shù)調(diào)用的?般形式加上分號即構(gòu)
成函數(shù)語句。例如:printf("%d",a);scanf
(“%d”,&b);都是以函數(shù)語句的方式調(diào)用函數(shù)。
3.函數(shù)實參:函數(shù)作為另一個函數(shù)調(diào)用的實際參
數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實參進(jìn)
行傳送,因此要求該函數(shù)必須是有返回值的。例如:
printf("%d",max(x,y));即是把max調(diào)用的返回
值又作為printf函數(shù)的實參來使用的。在函數(shù)調(diào)用
中還應(yīng)該注意的一個問題是求值順序的問題。所謂
求值順序是指對實參表中各量是自左至右使用呢,
還是自右至左使用。對此,各系統(tǒng)的規(guī)定不一定相
同。介紹printf函數(shù)時已提到過,這里從函數(shù)調(diào)用
的角度再強(qiáng)調(diào)一下。
【例8.3】
main()
(
inti=8;
printf(M%d\n%d\n%d\n%d\nn,++i,—i,i++,i—);
)
如按照從右至左的順序求值。運行結(jié)果應(yīng)為:
8
7
7
8
如對printf語句中的++i,—i,i++,i--從左至右求
值,結(jié)果應(yīng)為:
9
8
8
9
應(yīng)特別注意的是,無論是從左至右求值,還是自
右至左求值,其輸出順序都是不變的,即輸出順
序總是和實參表中實參的順序相同。由于TurboC
現(xiàn)定是自右至左求值,所以結(jié)果為8,7,7,8。
上述問題如還不理解,上機(jī)一試就明白了。
8.4.3被調(diào)用函數(shù)的聲明和函數(shù)原型
在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對該被調(diào)函數(shù)進(jìn)
行說明(聲明),這與使用變量之前要先進(jìn)行變量
說明是一樣的。在主調(diào)函數(shù)中對被調(diào)函數(shù)作說明的
目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型,以
便在主調(diào)函數(shù)中按此種類型對返回值作相應(yīng)的處
理。
其一般形式為:
類型說明符被調(diào)函數(shù)名(類型形參,類
型形參…);
或為:
類型說明符被調(diào)函數(shù)名(類型,類型…);
括號內(nèi)給出了形參的類型和形參名,或只給出形參
類型。這便于編譯系統(tǒng)進(jìn)行檢錯,以防止可能出現(xiàn)
的錯誤。
例8.1main函數(shù)中對max函數(shù)的說明為:
intmax(inta,intb);
或?qū)憺椋?/p>
intmax(int,int);
C語言中又規(guī)定在以下幾種情況時可以省去主調(diào)
函數(shù)中對被調(diào)函數(shù)的函數(shù)說明。
1)如果被調(diào)函數(shù)的返回值是整型或字符型時,可
以不對被調(diào)函數(shù)作說明,而直接調(diào)用。這時系統(tǒng)將
自動對被調(diào)函數(shù)返回值按整型處理。例8.2的主函
數(shù)中未對函數(shù)s作說明而直接調(diào)用即屬此種情形。
2)當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前
時,在主調(diào)函數(shù)中也可以不對被調(diào)函數(shù)再作說明而
直接調(diào)用。例如例8.1中,函數(shù)max的定義放在
main函數(shù)之前,因此可在main函數(shù)中省去對max
函數(shù)的函數(shù)說明intmax(inta,intb)。
3)如在所有函數(shù)定義之前,在函數(shù)外預(yù)先說明了
各個函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不
再對被調(diào)函數(shù)作說明.例如:
charstr(inta);
floatf(floatb);
main()
charstr(inta)
floatf(floatb)
)
其中第一,二行對str函數(shù)和f函數(shù)預(yù)先作了說明。
因此在以后各函數(shù)中無須對str和f函數(shù)再作說明
就可直接調(diào)用。
4)對庫函數(shù)的調(diào)用不需要再作說明,但必須把該
函數(shù)的頭文件用include命令包含在源文件前部。
8.5函數(shù)的嵌套調(diào)用
C語言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之
間是平行的,不存在上一級函數(shù)利下一級函數(shù)的問
題。但是C語言允許在一個函數(shù)的定義中出現(xiàn)對另
一個函數(shù)的調(diào)用。這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。
即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。這與其它語言的
子程序嵌套的情形是類似的。其關(guān)系可表示如圖。
圖表示了兩層嵌套的情形。其執(zhí)行過程是:執(zhí)行
main函數(shù)中調(diào)用a函數(shù)的語句時,即轉(zhuǎn)去執(zhí)行a
函數(shù),在a函數(shù)中調(diào)用b函數(shù)時,又轉(zhuǎn)去執(zhí)行b
函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點繼續(xù)執(zhí)行,
a函數(shù)執(zhí)行完畢返回main函數(shù)的斷點繼續(xù)執(zhí)行。
【例8.4]計算s=22!+32!
本題可編寫兩個函數(shù),一個是用來計算平方值的函
數(shù)fl,另一個是用來計算階乘值的函數(shù)主函
數(shù)先調(diào)fl計算出平方值,再在fl中以平方值為實
參,調(diào)用f2計算其階乘值,然后返回fl,再返回
主函數(shù),在循環(huán)程序中計算累加和。
longfl(intp)
(
intk;
longr;
longf2(int);/*函數(shù)說明*/
k=p*p;
r=f2(k);
returnr;
)
longf2(intq)
longc=l;
inti;
for(i=l;i<=q;i++)
c=c*i;
returnc;
)
main()
(
inti;
longs=0;
for(i=2;i<=3;i++)
s=s+fl(i);
printf(',\ns=%ld\n,,,s)
)
在程序中,函數(shù)fl和f2均為長整型,都在主函數(shù)
之前定義,故不必再在主函數(shù)中對fl和我加以說
明。在主程序中,執(zhí)行循環(huán)程序依次把i值作為實
參調(diào)用函數(shù)fl求i2值。在fl中又發(fā)生對函數(shù)f2
的調(diào)用,這時是把i2的值作為實參去調(diào)12,在f2中
完成求i2!的計算。f2執(zhí)行完畢把C值(即i2!)返回
給門,再由fl返回主函數(shù)實現(xiàn)累加。至此,由函
數(shù)的嵌套調(diào)用實現(xiàn)了題目的要求。由于數(shù)值很大,
所以函數(shù)和一些變量的類型都說明為長整型,否則
會造成計算錯誤。
8.6函數(shù)的遞歸調(diào)用
一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)
用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞
歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。
執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)
入新的一層。
例如有函數(shù)f如下:
intf(intx)
(
inty;
z=f(y);
returnz;
)
這個函數(shù)是一個遞歸函數(shù)。但是運行該函數(shù)將無休
止地調(diào)用其自身,這當(dāng)然是不正確的。為了防止遞
歸調(diào)用無終止地進(jìn)行,必須在函數(shù)內(nèi)有終止遞歸調(diào)
用的手段。常用的辦法是加條件判斷,滿足某種條
件后就不再作遞歸調(diào)用,然后逐層返回。下面舉例
說明遞歸調(diào)用的執(zhí)行過程。
【例8.5]用遞歸法計算n!
用遞歸法計算n!可用下述公式表示:
n!=l(n=O,l)
nx(n-l)!(n>l)
按公式可編程如下:
longff(intn)
(
longf;
if(n<0)printf(nn<0,inputerror");
elseif(n=0lln==l)fi=l;
elsef=ff(n-l)*n;
return(f);
main()
{
intn;
longy;
printf(H\ninputainteagernumber:\nM);
scanf(u%d'\&n);
y=ff(n);
printf("%d!=%ld”,n,y);
程序中給出的函數(shù)ff是一個遞歸函數(shù)。主函數(shù)調(diào)
用ff后即進(jìn)入函數(shù)ff執(zhí)行,如果n<O,n=O或n=l
時都將結(jié)束函數(shù)的執(zhí)行,否則就遞歸調(diào)用ff函數(shù)
自身。由于每次遞歸調(diào)用的實參為n-1,即把n-I
的值賦予形參n,最后當(dāng)n-1的值為1時再作遞歸
調(diào)用,形參n的值也為1,將使遞歸終止。然后可
逐層退回。
下面我們再舉例說明該過程。設(shè)執(zhí)行本程序時輸入
為5,即R5!。在主函數(shù)中的調(diào)用語句即為y=ff(5),
進(jìn)入ff函數(shù)后,由于n=5,不等于0或1,故應(yīng)執(zhí)行
f=ff(n-l)*n,即f=ff(5-l)*5o該語句對ff作遞歸調(diào)用
即任(4)。
進(jìn)行四次遞歸調(diào)用后,ff函數(shù)形參取得的值變?yōu)?,
故不再繼續(xù)遞歸調(diào)用而開始逐層返回主調(diào)函數(shù)。
ff(l)的函數(shù)返回值為l,ff(2)的返回值為1*2=2,ff(3
的返回值為2*3=6,ff(4)的返回值為6*4=24,最后
返回值ff(5)為24*5=120。
例8.5也可以不用遞歸的方法來完成。如可以用遞
推法,即從1開始乘以2,再乘以3…直到n。遞
推法比遞歸法更容易理解和實現(xiàn)。但是有些問題則
只能用遞歸算法才能實現(xiàn)。典型的問題是Hanoi
塔問題。
【例8.61Hanoi塔問題
一塊板上有三根針,A,B,CoA針上套有
64個大小不等的圓盤,大的在下,小的在上。如
圖5.4所示?要把這64個圓盤從A針移動C針上,
每次只能移動一個圓盤,移動可以借助B針進(jìn)行。
但在任何時候,任何針上的圓盤都必須保持大盤在
下,小盤在上。求移動的步驟。
本題算法分析如下,設(shè)A上有n個盤子。
如果n=l,則將圓盤從A直接移動到Co
如果n=2,則:
1.將A上的n-1(等于1)個圓盤移到B上;
2.再將A上的一個圓盤移到C±;
3.最后將B上的n-l(等于1)個圓盤移到C上。
如果n=3,則:
A.將A上的n-l(等于2,令其為n')個圓盤移到
B(借助于C),步驟如下:
(1)將A上的n'-l(等于1)個圓盤移到C上。
⑵將A上的一個圓盤移到B,
⑶將C上的n'-l(等于1)個圓盤移到Bo
B.將A上的一個圓盤移到C。
C.將B上的n-1(等于2,令其為n')個圓盤移到
C(借助A),步驟如下:
⑴將B上的n'-l(等于1)個圓盤移到Ao
⑵將B上的一個盤子移到C。
(3)將A上的n'-l(等于1)個圓盤移到Co
至IJ此,完成了三個圓盤的移動過程。
從上面分析可以看出,當(dāng)n大于等于2時,移
動的過程可分解為三個步驟:
第一步把A上的n-1個圓盤移到B上;
第二步把A上的一個圓盤移到C上;
第三步把B上的n-1個圓盤移到C上;其中第
一步和第三步是類同的。
當(dāng)n=3時,第一步和第三步又分解為類同的三步,
即把n-1個圓盤從一個針移到另一個針上,這里
的n'=n-l。顯然這是一個遞歸過程,據(jù)此算法可
編程如下:
move(intn,intx,inty,intz)
{
if(n==l)
printf(H%c—>%c\nH,x,z);
else
(
move(n-l,x,z,y);
printf("%c—>%c\nH,x,z);
move(n-l,y,x,z);
)
)
main()
inth;
printf(H\ninputnumber:\nH);
scanf(u%d'\&h);
printf("thesteptomoving%2ddiskes:\n",h);
move(h/a'/bVc');
從程序中可以看出,move函數(shù)是一個遞歸函
數(shù),它有四個形參n,x,y,z。n表示圓盤數(shù),x,y,z分
別表示三根針。move函數(shù)的功能是把x上的n個
圓盤移動到z上。當(dāng)n==l時,直接把x上的圓盤
移至z上,輸出Xfz。如n!=l則分為三步:遞歸
調(diào)用move敏,把n-1個圓盤從x移至y;輸出x
一z;遞歸調(diào)用move函數(shù),把n-1個圓盤從y移到
zo在遞歸調(diào)用過程中n=n-l,故n的值逐次遞減,
最后n=l時,終止遞歸,逐層返回。當(dāng)n=4時程
序運行的結(jié)果為:
inputnumber:
4
thesteptomoving4diskes:
a-*b
。q
1Lqq
bfc
a-*b
a-^c
bfc
8.7數(shù)組作為函數(shù)參數(shù)
數(shù)組可以作為函數(shù)的參數(shù)使用,進(jìn)行數(shù)據(jù)傳送。數(shù)
組用作函數(shù)參數(shù)有兩種形式,一種是把數(shù)組元素
(下標(biāo)變量)作為實參使用;另一種是把數(shù)組名作為
函數(shù)的形參和實參使用。
1.數(shù)組元素作函數(shù)實參
數(shù)組元素就是下標(biāo)變量,它與普通變量并無區(qū)別。
因此它作為函數(shù)實參使用與普通變量是完全相同
的,在發(fā)生函數(shù)調(diào)用時,把作為實參的數(shù)組元素的
值傳送給形參,實現(xiàn)單向的值傳送。例5.4說明了
這種情況。
【例8.7]判別一個整數(shù)數(shù)組中各元素的值,若大
于0則輸出該值,若小于等于0則輸出0值。編
程如下:
voidnzp(intv)
{
if(v>0)
printf(n%d",v);
else
printf("%d\0);
)
main()
{
inta[5],i;
printf("input5numbers\nn);
for(i=0;i<5;i++)
{scanf(n%d';&a[i]);
nzp(a[i]);}
本程序中首先定義一個無返回值函數(shù)nzp,并
說明其形參v為整型變量。在函數(shù)體中根據(jù)v值輸
出相應(yīng)的結(jié)果。在main函數(shù)中用?個for語句輸
入數(shù)組各元素,每輸入一個就以該元素作實參調(diào)用
一次nzp函數(shù),即把a(bǔ)[i]的值傳送給形參v,供nzp
函數(shù)使用。
2.數(shù)組名作為函數(shù)參數(shù)
用數(shù)組名作函數(shù)參數(shù)與用數(shù)組元素作實參有幾點
不同:
1)用數(shù)組元素作實參時,只要數(shù)組類型和函數(shù)的
形參變量的類型一致,那么作為下標(biāo)變量的數(shù)組元
素的類型也和函數(shù)形參變量的類型是?致的。因
此,并不要求函數(shù)的形參也是下標(biāo)變量。換句話說,
對數(shù)組元素的處理是按普通變量對待的。用數(shù)組名
作函數(shù)參數(shù)時,則要求形參和相對應(yīng)的實參都必須
是類型相同的數(shù)組,都必須有明確的數(shù)組說明。當(dāng)
形參和實參二者不一致時,即會發(fā)生錯誤。
2)在普通變量或下標(biāo)變量作函數(shù)參數(shù)時,形參變
量和實參變量是由編譯系統(tǒng)分配的兩個不同的內(nèi)
存單元。在函數(shù)調(diào)用時發(fā)生的值傳送是把實參變量
的值賦予形參變量。在用數(shù)組名作函數(shù)參數(shù)時,不
是進(jìn)行值的傳送,即不是把實參數(shù)組的每一個元素
的值都賦予形參數(shù)組的各個元素。因為實際上形參
數(shù)組并不存在,編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存。
那么,數(shù)據(jù)的傳送是如何實現(xiàn)的呢?在我們曾介紹
過,數(shù)組名就是數(shù)組的首地址。因此在數(shù)組名作函
數(shù)參數(shù)時所進(jìn)行的傳送只是地址的傳送,也就是說
把實參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名
取得該首地址之后,也就等于有了實在的數(shù)組。實
際上是形參數(shù)組和實參數(shù)組為同一數(shù)組,共同擁有
一段內(nèi)存空間。
上圖說明了這種情形。圖中設(shè)a為實參數(shù)組,類型
為整型.a占有以2000為首地址的一塊內(nèi)存區(qū)。b
為形參數(shù)組名。當(dāng)發(fā)生函數(shù)調(diào)用時,進(jìn)行地址傳送,
把實參數(shù)組a的首地址傳送給形參數(shù)組名b,于是
b也取得該地址2000。于是a,b兩數(shù)組共同占有
以2000為首地址的一段連續(xù)內(nèi)存單元。從圖中還
可以看出a和b下標(biāo)相同的元素實際上也占相同的
兩個內(nèi)存單元(整型數(shù)組每個元素占二字節(jié))。例如
a⑼和b[0]都占用2000和2001單元,當(dāng)然a[0]等
于b[0]o類推則有a[i]等于b[i]?
【例8.8】數(shù)組a中存放了一個學(xué)生5門課程的成
績,求平均成績。
floataver(floata|5])
{
inti;
floatav,s=a[0];
foi(i=l;i<5;i++)
s=s+a[i];
av=s/5;
returnav;
)
voidmain()
(
floatsco[5],av;
inti;
printfCAninput5scores:\nM);
for(i=0;i<5;i++)
scanf(M%f,,&sco[i]);
av=aver(sco);
printf("averagescoreis%5.2fn,av);
)
本程序首先定義了一個實型函數(shù)aver,有一個形參
為實型數(shù)組a,長度為5。在函數(shù)aver中,把各元
素值相加求出平均值,返回給主函數(shù)。主函數(shù)main
中首先完成數(shù)組sc。的輸入,然后以sc。作為實參
調(diào)用aver函數(shù),函數(shù)返回值送av,最后輸出av值。
從運行情況可以看出,程序?qū)崿F(xiàn)了所要求的功能。
3)前面己經(jīng)討論過,在變量作函數(shù)參數(shù)時,所進(jìn)
行的值傳送是單向的。即只能從實參傳向形參,不
能從形參傳回實參。形參的初值和實參相同,而形
參的值發(fā)生改變后,實參并不變化,兩者的終值是
不同的。而當(dāng)用數(shù)組名作函數(shù)參數(shù)時,情況則不同。
由于實際上形參和實參為同一數(shù)組,因此當(dāng)形參數(shù)
組發(fā)生變化時,實參數(shù)組也隨之變化。當(dāng)然這種情
況不能理解為發(fā)生了“雙向”的值傳遞。但從實際
情況來看,調(diào)用函數(shù)之后實參數(shù)組的值將由于形參
數(shù)組值的變化而變化。為了說明這種情況,把例
5.4改為例5.6的形式。
【例8.9】題目同8.7例。改用數(shù)組名作函數(shù)參數(shù)。
voidnzp(inta[5])
{
inti;
printf(H\nvaluesofarrayaare:\nH);
for(i=0;i<5;i++)
(
if(a[iJ<0)a[i]=0;
printf(n%dM,a[i]);
main()
{
intb[5],i;
printf("\ninput5numbers:\nH);
for(i=0;i<5;i++)
scanf(”%d”,&b[i]);
printfC'initialvaluesofarraybare:\nn);
for(i=0;i<5;i++)
printf(M%d\b[i]);
nzp(b);
printf(H\nlastvaluesofarraybare:\nn);
for(i=0;i<5;i++)
printf(u%d\b[i]);
本程序中函數(shù)nzp的形參為整數(shù)組a,長度為5。
主函數(shù)中實參數(shù)組b也為整型,長度也為5。在主
函數(shù)中首先輸入數(shù)組b的值,然后輸出數(shù)組b的初
始值。然后以數(shù)組名b為實參調(diào)用nzp函數(shù)。在
nzp中,按要求把負(fù)值單元清0,并輸出形參數(shù)組
a的值。返回主函數(shù)之后,再次輸出數(shù)組b的值。
從運行結(jié)果可以看出,數(shù)組b的初值和終值是不同
的,數(shù)組b的終值和數(shù)組a是相同的。這說明實參
形參為同一數(shù)組,它們的值同時得以改變。
用數(shù)組名作為函數(shù)參數(shù)時還應(yīng)注意以下幾點:
a.形參數(shù)組和實參數(shù)組的類型必須一致,否則聘
引起錯誤。
b.形參數(shù)組和實參數(shù)組的長度可以不相同,因為
在調(diào)用時,只傳送首地址而不檢查形參數(shù)組的長
度。當(dāng)形參數(shù)組的長度與實參數(shù)組不一致時,雖不
至于出現(xiàn)語法錯誤(編譯能通過),但程序執(zhí)行結(jié)果
將與實際不符,這是應(yīng)予以注意的。
【例8.10]如把例8.9修改如下:
voidnzp(inta[8])
(
inti;
printf(M\nvaluesofarrayaare:\nn);
for(i=0;i<8;i++)
(
if(a[i]<0)a[i]=0;
printf("%dM,a[i]);
main()
{
intb[5],i;
printf(n\ninput5numbers:\nH);
for(i=0;i<5;i++)
scanf(n%dn,&b[i]);
printf("initialvaluesofarraybare:\nn);
for(i=0;i<5;i++)
printf("%dM,b[i]);
nzp(b);
printf("\nlastvaluesofarraybare:\n");
for(i=0;i<5;i++)
printf("%d",b[i]);
本程序與例8.9程序比,nzp函數(shù)的形參數(shù)組長度
改為8,函數(shù)體中,for語句的循環(huán)條件也改為i<8,
因此,形參數(shù)組a和實參數(shù)組b的長度不一致。編
譯能夠通過,但從結(jié)果看,數(shù)組a的元素a[5],a[6],
a[7]顯然是無意義的。
c.在函數(shù)形參表中,允許不給出形參數(shù)組的長
度,或用一個變量來表示數(shù)組元素的個數(shù)。
例如,可以寫為:
voidnzp(inta[])
或?qū)憺?/p>
voidnzp(inta[],intn)
其中形參數(shù)組a沒有給出長度,而由n值動態(tài)地表
示數(shù)組的長度。n的值由主調(diào)函數(shù)的實參進(jìn)行傳
送。
由此,例8.10又可改為例8.11的形式。
【例8.11】
voidnzp(inta[],intn)
{
inti;
printf(H\nvaluesofarrayaare:\nn);
for(i=0;i<n;i++)
(
if(a[iJ<0)a[i]=0;
printf(n%dM,a[i]);
main()
{
intb[5],i;
printf(H\ninput5numbersAn");
for(i=0;i<5;i++)
scanf(”%d”,&b[i]);
printfC'initialvaluesofarraybare:\nn);
for(i=0;i<5;i++)
printf(M%d\b[i]);
nzp(b,5);
printf(H\nlastvaluesofarraybare:\nn);
for(i=0;i<5;i++)
printf(u%d\b[i]);
本程序nzp函數(shù)形參數(shù)組a沒有給出長度,由
n動態(tài)確定該長度。在main函數(shù)中,函數(shù)調(diào)用語
句為nzp(b,5),其中實參5將賦予形參n作為形
參數(shù)組的長度。
d.多維數(shù)組也可以作為函數(shù)的參數(shù)。在函數(shù)定義
時對形參數(shù)組可以指定每一維的長度,也可省去第
一維的長度。因此,以下寫法都是合法的。
intMA(inta[3][10])
或
intMA(inta[][10])o
8.8局部變量和全局變量
在討論函數(shù)的形參變量時曾經(jīng)提到,形參變量只在
被調(diào)用期間才分配內(nèi)存單元,調(diào)用結(jié)束立即釋放。
這一點表明形參變量只有在函數(shù)內(nèi)才是有效的,離
開該函數(shù)就不能再使用了。這種變量有效性的范圍
稱變量的作用域。不僅對于形參變量,C語言中所
有的量都有自己的作用域。變量說明的方式不同,
其作用域也不同。C語言中的變量,按作用域范圍
可分為兩種,即局部變量和全局變量。
8.8.1局部變量
局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)
內(nèi)作定義說明的。其作用域僅限于函數(shù)內(nèi),離開
該函數(shù)后再使用這種變量是非法的。
例如:
intfl(inta)/*函數(shù)fl*/
intb,c;
)
Ab,c有效
intf2(intx)/*函數(shù)f2*/
(
inty,z;
)
x,y,z有效
main()
intm,n;
m,n有效
在函數(shù)fl內(nèi)定義了三個變量,a為形參,b,c為一
般變量。在fl的范圍內(nèi)a,b,c有效,或者說a,b,c
變量的作用域限于fl內(nèi)。同理,x,y,z的作用域限
于f2內(nèi)。m,n的作用域限于main函數(shù)內(nèi)。關(guān)于局
部變量的作用域還要說明以下幾點:
1)主函數(shù)中定義的變量也只能在主函數(shù)中使用,
不能在其它函數(shù)中使用。同時,主函數(shù)中也不能使
用其它函數(shù)中定義的變量。因為主函數(shù)也是一個函
數(shù),它與其它函數(shù)是平行關(guān)系。這一點是與其它語
言不同的,應(yīng)予以注意。
2)形參變量是屬于被調(diào)函數(shù)的局部變量,實參變
量是屬于主調(diào)函數(shù)的局部變量。
3)允許在不同的函數(shù)中使用相同的變量名,它們
代表不同的對象,分配不同的單元,互不干擾,也
不會發(fā)生混淆。如在前例中,形參和實參的變量名
都為n,是完全允許的。
4)在復(fù)合語句中也可定義變量,其作用域只在復(fù)
合語句范圍內(nèi)。
例如:
main。
(
ints,a;
intb;
s=a+b;
/*b作用域*/
)
/*s,a作用域*/
【例8.12]
main()
(
inti=2,j=3,k;
k=i+j;
(
intk=8;
printf("%d\n",k);
)
printf("%d\n",k);
本程序在main中定義了ij,k三個變量,其中k未
賦初值。而在復(fù)合語句內(nèi)又定義了一個變量k,并
賦初值為8。應(yīng)該注意這兩個k不是同一個變量。
在復(fù)合語句外由main定義的k起作用,而在復(fù)合
語句內(nèi)則由在復(fù)合語句內(nèi)定義的k起作用。因此程
序第4行的k為main所定義,其值應(yīng)為5。第7
行輸出k值,該行在復(fù)合語句內(nèi),由復(fù)合語句內(nèi)定
義的k起作用,其初值為8,故輸出值為8,第9
行輸出i,k值。i是在整個程序中有效的,第7行
對i賦值為3,故以輸出也為3。而第9行已在復(fù)
合語句之外,輸出的k應(yīng)為main所定義的k,此k
值由第4行已獲得為5,故輸出也為5。
8.8.2全局變量
全局變量也稱為外部變量,它是在函數(shù)外部定義的
變量。它不屬于哪一個函數(shù),它屬于一個源程序文
件。其作用域是整個源程序。在函數(shù)中使用全局變
量,一般應(yīng)作全局變量說明。只有在函數(shù)內(nèi)經(jīng)過
說明的全局變量才能使用。全局變量的說明符為
externo但在--個函數(shù)之前定義的全局變量,在該
函數(shù)內(nèi)使用可不再加以說明。
例如:
inta,b;/*外部變量*/
voidfl()/*函數(shù)fl*/
floatx,y;/*外部變量*/
inifz()/*函數(shù)fz*/
)
main()/*主函數(shù)*/
)
從上例可以看出a、b、x、y都是在函數(shù)外部定義
的外部變量,都是全局變量。但x,y定義在函數(shù)fl
之后,而在fl內(nèi)又無對x,y的說明,所以它們在
fl內(nèi)無效。定義在源程序最前面,因此在fl,f2
及main內(nèi)不加說明也可使用。
【例8.13]輸入正方體的長寬高l,w,ho求體積及
三個面x*y,x*z,y*z的面積。
intsl,s2,s3;
intvs(inta,intb,intc)
{
intv;
v=a*b*c;
sl=a*b;
s2=b*c;
s3=a*c;
returnv;
}
main()
(
intv,l,w,h;
printf("\ninputlength,widthandheight\nn);
scanf(”%d%d%d”,&I,&w,&h);
v=vs(l,w,h);
printf(u\nv=%d,sl=%d,s2=%d,s3=%d\n,\v,sl,s2,s3);
)
【例8.14]外部變量與局部變量同名。
inta=3,b=5;/*a,b為外部變量*/
max(inta,intb)/*a,b為外部變量*/
{intc;
c=a>b?a:b;
retum(c);
main()
{inta=8;
printf(u%d\nn,max(a,b));
)
如果同i個源文件中,外部變量與局部變量同名,
則在局部變量的作用范圍內(nèi),外部變量被“屏蔽”,
即它不起作用。
8.9變量的存儲類別
8.9.1動態(tài)存儲方式與靜態(tài)動態(tài)存儲方式
前面已經(jīng)介紹了,從變量的作用域(即從空間)角
度來分,可以分為全局變量和局部變量。
從另一個角度,從變量值存在的作時間(即生存期)
角度來分,可以分為靜態(tài)存儲方式和動態(tài)存儲方
式。
靜態(tài)存儲方式:是指在程序運行期間分配固定的存
儲空間的方式。
動態(tài)存儲方式:是在程序運行期間根據(jù)需要進(jìn)行動
態(tài)的分配存儲空間的方式。
用戶存儲空間可以分為三個部分:
1)程序區(qū);
2)靜態(tài)存儲區(qū);
3)動態(tài)存儲區(qū)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國廢物回收分類機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球X射線防護(hù)面罩行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球同軸微導(dǎo)管系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國高電壓鈷酸鋰正極材料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國新能源汽車鋰離子電池包密封材料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 采購技術(shù)服務(wù)合同范本
- 國稅保密協(xié)議
- 紡織面料購銷合同
- 物業(yè)管理委托合同與開發(fā)商
- 清淤工程合同范本
- (一模)蕪湖市2024-2025學(xué)年度第一學(xué)期中學(xué)教學(xué)質(zhì)量監(jiān)控 英語試卷(含答案)
- 完整版秸稈炭化成型綜合利用項目可行性研究報告
- 2025中國海油春季校園招聘1900人高頻重點提升(共500題)附帶答案詳解
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)內(nèi)容解讀
- 竣工資料封面
- 膿毒血癥指南
- 中國航天知識
- 安徽華納化學(xué)工業(yè)有限公司年產(chǎn)1000噸均苯四甲酸二酐、300噸潤滑油助劑項目環(huán)境影響報告書
- YY 9706.230-2023醫(yī)用電氣設(shè)備第2-30部分:自動無創(chuàng)血壓計的基本安全和基本性能專用要求
- 第8課紅樓春趣同步練習(xí)(含答案)
- 死亡醫(yī)學(xué)證明書辦理委托書
評論
0/150
提交評論