版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第8章 函 數(shù) 本章主要介紹函數(shù)的定義格式、函數(shù)的調(diào)用方法、函數(shù)的參數(shù)傳遞方式以及變量的作用域及其存儲類型等。8.1 C函數(shù)概述在第1章中已初步介紹了C語言程序是由一個(gè)或多個(gè)函數(shù)組成的。在前面章節(jié)中,也已經(jīng)涉及到了函數(shù)的概念。如標(biāo)準(zhǔn)輸入函數(shù)scanf,標(biāo)準(zhǔn)輸出函數(shù)printf,以及其它一些數(shù)學(xué)函數(shù)、字符串函數(shù)等。當(dāng)然這一類函數(shù)稱為C的標(biāo)準(zhǔn)函數(shù)(或庫函數(shù)),它們是由C系統(tǒng)提供的。對于用戶來說,根據(jù)需要,只要調(diào)用這些函數(shù)即可,并不需要知道這些函數(shù)是如何實(shí)現(xiàn)這些功能的。因此,有了這些C的標(biāo)準(zhǔn)函數(shù)(或庫函數(shù)),既可以加強(qiáng)用戶所編程序的功能,又可以提高程序設(shè)計(jì)的效率。然而,在實(shí)際編程中僅依靠C的標(biāo)準(zhǔn)函數(shù)
2、是不夠的。如統(tǒng)計(jì)若干個(gè)班級某門課程(如數(shù)學(xué))的平均成績,用前面幾章所學(xué)的知識來解決會很繁瑣,而C的標(biāo)準(zhǔn)函數(shù)又無解決此類問題的函數(shù)。為此,可以采用自定義函數(shù)(也可稱為用戶函數(shù))來解決。即將班級名稱和人數(shù)作為自定義函數(shù)的參數(shù),在該函數(shù)內(nèi)部求出對應(yīng)班級某門課程的平均成績,并將結(jié)果輸出。這樣,若想統(tǒng)計(jì)10 個(gè)班級某門課程的平均成績,在一個(gè)程序中可以10次調(diào)用這個(gè)自定義函數(shù),每次所提供的班級名稱和人數(shù)不同即可方便地求出各個(gè)班對應(yīng)的平均成績。通常一個(gè)具有一定規(guī)模的C程序往往由多個(gè)函數(shù)組成。其中必有(且僅有)一個(gè)主函數(shù),由主函數(shù)來調(diào)用其它函數(shù)。根據(jù)需要,其它函數(shù)之間可以相互調(diào)用。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函
3、數(shù)調(diào)用一次或多次。也就是說,C語言程序的全部功能都是由函數(shù)實(shí)現(xiàn)的。每個(gè)函數(shù)相對獨(dú)立并具有特定的功能。可以通過函數(shù)間的調(diào)用來實(shí)現(xiàn)程序總體功能。圖8-1是一個(gè)程序中函數(shù)調(diào)用的示意圖。 main主函數(shù) a函數(shù) b函數(shù) c函數(shù) d函數(shù) d函數(shù) e函數(shù) 圖8-1在C語言中,主函數(shù)可以調(diào)用其它函數(shù),而其它函數(shù)均不能調(diào)用主函數(shù)。通常把調(diào)用其它函數(shù)的函數(shù)稱為主調(diào)函數(shù),而將被調(diào)用的函數(shù)稱為被調(diào)函數(shù)??梢娭骱瘮?shù)只能是主調(diào)函數(shù),而其它非主函數(shù)既可以是主調(diào)函數(shù),也可以是被調(diào)函數(shù)。C語言中,函數(shù)可按多種方式來分類:從使用的角度來分,可以分為標(biāo)準(zhǔn)函數(shù)和用戶函數(shù)。標(biāo)準(zhǔn)函數(shù)(也稱系統(tǒng)函數(shù)或庫函數(shù))是指由系統(tǒng)提供的、已定義好(
4、即已在C庫函數(shù)頭文件中定義)的函數(shù)。用戶函數(shù)(也稱自定義函數(shù))是指用戶在源程序文件中定義的函數(shù)。從形式上來分,可以分為無參函數(shù)和有參函數(shù)。這是根據(jù)函數(shù)定義時(shí)是否設(shè)置參數(shù)來劃分的。從作用范圍來分,可以分為外部函數(shù)和內(nèi)部函數(shù)。外部函數(shù)是指可以被任何源程序文件中的函數(shù)所調(diào)用的函數(shù)。內(nèi)部函數(shù)是指只能被其所在的源程序文件中的函數(shù)所調(diào)用的函數(shù)。從返回值來分,可以分為無返回值函數(shù)和有返回值函數(shù)。8.2 C函數(shù)一般形式由前述已知,變量和數(shù)組在使用之前必須先定義。函數(shù)也類似,一般情況下,函數(shù)應(yīng)先定義,后調(diào)用(若是處于先調(diào)用,后定義情況下,則需加適當(dāng)?shù)穆暶?。在?jié)中介紹。)。用戶函數(shù)的定義,必須符合C語言規(guī)定的格式
5、。下面分別介紹無參函數(shù)和有參函數(shù)的定義格式。1. 無參函數(shù)的一般形式無參函數(shù)的定義格式為:函數(shù)類型說明符 函數(shù)名( ) 變量定義或有關(guān)聲明部分 語句部分2. 有參函數(shù)的一般形式有參函數(shù)的定義格式為:函數(shù)類型說明符 函數(shù)名( 數(shù)據(jù)類型符 形式參數(shù)1, ) 變量定義或有關(guān)聲明部分 語句部分說明:用戶函數(shù)的定義通常分為兩部分:一是函數(shù)體(即一對花括號括住的部分);二是函數(shù)頭(即函數(shù)體前面的部分)。函數(shù)頭包含了函數(shù)說明和參數(shù)說明等幾項(xiàng)。(1) 函數(shù)類型說明符:用來指定本函數(shù)返回值的數(shù)據(jù)類型,可以是前面介紹的各種基本類型,也可以是后面將要介紹的其它類型(如結(jié)構(gòu)體等)。函數(shù)類型說明符也可以省略,若省略,則
6、系統(tǒng)默認(rèn)函數(shù)返回值的數(shù)據(jù)類型是int。無參函數(shù)一般不需要帶回函數(shù)值,因此可以在該處放置關(guān)鍵字void,“void”代表“無類型”(或稱“空類型”),它表示本函數(shù)是沒有返回值的。(2) 函數(shù)名:是由用戶命名的,命名規(guī)則同用戶標(biāo)識符。在同一個(gè)文件中,函數(shù)是不允許重名的。(3) 無參函數(shù)的函數(shù)名后面的“( )”不能省略。在調(diào)用無參函數(shù)時(shí),沒有參數(shù)傳遞。有參函數(shù)的函數(shù)名后面的“( )”內(nèi)是用逗號分隔的若干個(gè)形式參數(shù),每個(gè)參數(shù)也必須指定數(shù)據(jù)類型。有參函數(shù)的函數(shù)頭可以有兩種寫法,常稱為現(xiàn)代方式和傳統(tǒng)方式,舉例說明如下。 現(xiàn)代方式:float fun( int x,int y ) 傳統(tǒng)方式:float fu
7、n( x,y )int x,y;本教材統(tǒng)一采用現(xiàn)代方式。即對形式參數(shù)的說明均放在函數(shù)名后的括號內(nèi)。函數(shù)體:則包含該函數(shù)所用到的變量的定義或有關(guān)聲明部分(如后續(xù)將介紹的外部變量聲明)及實(shí)現(xiàn)該函數(shù)功能的相關(guān)程序段部分。每個(gè)函數(shù)必須單獨(dú)定義,不允許嵌套定義,即不能在一個(gè)函數(shù)的內(nèi)部再定義另一個(gè)函數(shù)。注意:用戶函數(shù)不能單獨(dú)運(yùn)行。其可以被主函數(shù)或其它函數(shù)所調(diào)用,它也可以調(diào)用其它函數(shù)。所有用戶函數(shù)均不能調(diào)用主函數(shù)?!纠?-1】用戶函數(shù)的定義例子。該函數(shù)的功能是求三個(gè)整數(shù)中的最大值,并返回之。程序如下:int max(int x,int y,int z) int max1; if(x>y) max1=x
8、; else max1=y; if(z>max1) max1=z; return(max1);說明:由上面用戶函數(shù)的定義可知,該函數(shù)返回值的類型為int,函數(shù)名為max,它有3個(gè)形式參數(shù)x,y,z,它們都是int。另外,該函數(shù)體中還定義了int變量max1,其它語句為求三個(gè)整數(shù)中的最大值的程序段。注意:該用戶函數(shù)不能單獨(dú)運(yùn)行。若配以如下的主函數(shù)后,就可上機(jī)運(yùn)行了。關(guān)于函數(shù)的調(diào)用方法及參數(shù)的傳遞方式將在后面章節(jié)中陸續(xù)介紹。main( ) int n1,n2,n3,n_max; scanf("%d%d%d",&n1,&n2,&n3); n_max=
9、max(n1,n2,n3); printf("max=%dn",n_max);8.3 函數(shù)的參數(shù)與函數(shù)的返回值8.3.1 形式參數(shù)與實(shí)際參數(shù)所謂“形式參數(shù)”是指在進(jìn)行函數(shù)定義時(shí)設(shè)定的參數(shù)。由上一節(jié)有參函數(shù)的定義格式可知,形式參數(shù)(以下簡稱為“形參”)固定位于函數(shù)名后的括號內(nèi),在此既給定了形參的個(gè)數(shù),又對每個(gè)形參的數(shù)據(jù)類型加以設(shè)定。而所謂“實(shí)際參數(shù)” 是指在進(jìn)行有參函數(shù)調(diào)用時(shí)所用的參數(shù)(以下簡稱為“實(shí)參”)。實(shí)參則固定位于主調(diào)函數(shù)的調(diào)用語句的函數(shù)名后的括號內(nèi)。如【例8-1】的主函數(shù)就可稱為主調(diào)函數(shù),其中的調(diào)用語句為“n_max=max(n1,n2,n3);” 函數(shù)名max后括
10、號內(nèi)的n1,n2,n3就是實(shí)參。在調(diào)用有參函數(shù)時(shí),主調(diào)函數(shù)和被調(diào)函數(shù)之間必有數(shù)據(jù)傳遞過程,即由實(shí)參傳遞給形參。而具體的傳遞方式有以下兩類:1 值傳遞方式(值單向傳遞方式)所謂“值傳遞方式”是指將實(shí)參的具體數(shù)值單向傳遞給形參的一種方式。注意:值單向傳遞是指只能由實(shí)參傳遞給形參,而不能由形參傳遞給實(shí)參。如【例8-1】中,只能由實(shí)參n1,n2,n3依次對應(yīng)傳遞給形參x,y,z,反之則不行。采用這種方式時(shí),實(shí)參可以是已賦值的變量、常量或表達(dá)式(表達(dá)式要有確定的值)。形參通常是變量。且要求實(shí)參與形參的類型應(yīng)相同。在程序運(yùn)行過程中,系統(tǒng)分配給實(shí)參和形參的內(nèi)存單元是不同的(即實(shí)參、形參各自有屬于自己的存儲空
11、間),分配內(nèi)存單元的時(shí)刻也不同(即被調(diào)函數(shù)只在其被調(diào)用時(shí),形參才被分配內(nèi)存單元。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元即被釋放)?!纠?-2】值單向傳遞方式的例子。有以下程序:void fun( int a,int b,int c) a=456; b=567; c=678;main( ) int x=10,y=20;z=30; fun( x,y,z ); printf(“%d,%d,%dn”,z,y,x);輸出結(jié)果是A) 30,20,10B) 10,20,30C) 456,567,678D) 678,567,456由該例可知:實(shí)參為x,y,z,形參為a,b,c,它們都是int,類型一致。當(dāng)調(diào)用fun
12、函數(shù)時(shí),x值(10)單向傳遞給a,y值(20)單向傳遞給b,z值(30)單向傳遞給c。盡管在被調(diào)函數(shù)fun內(nèi),a,b,c三個(gè)形參變量又都重新賦予新值,但并不能影響實(shí)參x,y,z,所以其輸出結(jié)果是A)。2 地址傳遞方式所謂“地址傳遞方式”是指將實(shí)參所代表的地址傳遞給形參的一種方式。采用這種方式時(shí),實(shí)參可以是變量的地址、數(shù)組名、也可以是后續(xù)章節(jié)要介紹的相關(guān)指針變量,形參通常是數(shù)組或指針變量。在程序運(yùn)行過程中,系統(tǒng)分配給實(shí)參和形參的內(nèi)存單元是相同的(即形參對應(yīng)的內(nèi)存空間與實(shí)參的內(nèi)存空間是同一存儲空間),分配內(nèi)存單元的時(shí)刻也是不同的。采用地址傳遞方式的函數(shù)調(diào)用方法在下節(jié)中再詳細(xì)介紹。8.3.2 函數(shù)的
13、返回值每一個(gè)函數(shù)都具有一定的功能。如【例8-1】中的max函數(shù),其功能是求三個(gè)整數(shù)中的最大值。若主調(diào)函數(shù)根據(jù)需要調(diào)用了該函數(shù),自然希望能將求得的結(jié)果返饋回來。在C語言中,可以在被調(diào)函數(shù)內(nèi)采用return語句獲得函數(shù)的返回值。一個(gè)函數(shù)利用return語句只能返回一個(gè)值。return語句的格式為:(以下兩種寫法均可)return(表達(dá)式);或return 表達(dá)式;從前面介紹的有參函數(shù)定義格式可知,函數(shù)名前面的函數(shù)類型說明符是用來指定本函數(shù)返回值的數(shù)據(jù)類型。例如int max(int x ,int y,int z)float fun( double n)上面max函數(shù)的返回值的數(shù)據(jù)類型是整型;下面f
14、un函數(shù)的返回值的數(shù)據(jù)類型是單精度型。在進(jìn)行函數(shù)定義時(shí),應(yīng)使return語句中的表達(dá)式的類型與函數(shù)類型說明一致。即若函數(shù)類型說明為整型,return語句中的表達(dá)式的類型也應(yīng)是整型。若函數(shù)類型說明為單精度型,return語句中的表達(dá)式的類型也應(yīng)是單精度型,以此類推。當(dāng)return語句中的表達(dá)式的類型與函數(shù)類型說明不一致時(shí),則以函數(shù)類型說明為準(zhǔn),系統(tǒng)自動將return語句中的表達(dá)式的值轉(zhuǎn)換為函數(shù)類型說明所指定的類型。當(dāng)函數(shù)的返回值的數(shù)據(jù)類型是int(整型)時(shí),在函數(shù)定義時(shí),函數(shù)類型說明符可以省略,也就是說,系統(tǒng)默認(rèn)的返回值類型是整型。當(dāng)函數(shù)沒有返回值時(shí),在函數(shù)定義時(shí),函數(shù)類型說明符可以為void(
15、“空類型”)。如例8-2中fun函數(shù)的函數(shù)類型說明符為void,它表示本函數(shù)是沒有返回值的。8.4 函數(shù)調(diào)用8.4.1 函數(shù)調(diào)用的方法函數(shù)調(diào)用的一般方法為:函數(shù)名(實(shí)參表列);或函數(shù)名();前者用于有參函數(shù),若實(shí)參表列包含了兩個(gè)以上實(shí)參時(shí),各參數(shù)之間用逗號分隔。實(shí)參的個(gè)數(shù)應(yīng)與形參的個(gè)數(shù)相同,且按順序?qū)?yīng)的參數(shù)的類型應(yīng)一致(或兼容)。后者用于無參函數(shù)的調(diào)用。注意,括號不能省略。從函數(shù)調(diào)用在程序中可能出現(xiàn)的位置這個(gè)角度來看,函數(shù)調(diào)用大致可分為以下幾種形式: 以語句的形式進(jìn)行函數(shù)調(diào)用。例如:puts(str1);/* 上一章介紹的字符串輸出函數(shù),是系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)之一 */swap(x1,x2);
16、/* 調(diào)用用戶自定義的有參函數(shù)swap */printstr( ); /* 調(diào)用用戶自定義的無參函數(shù)printstr */以語句的形式進(jìn)行函數(shù)調(diào)用一般不需要返回值,只是通過函數(shù)調(diào)用完成某些操作。(1) 以表達(dá)式的形式進(jìn)行函數(shù)調(diào)用。例如:if(strcmp(s1,s2)>0) /* 函數(shù)調(diào)用位于條件式中*/n_max=max(x,y,z); /* 函數(shù)調(diào)用位于賦值語句右側(cè)的表達(dá)式中*/for(j=strlen(str)-1;j>0;j-);/* 函數(shù)調(diào)用位于循環(huán)語句的表達(dá)式1中*/以表達(dá)式的形式進(jìn)行函數(shù)調(diào)用,被調(diào)用函數(shù)必須返回一個(gè)函數(shù)值,以便參加主調(diào)函數(shù)的相關(guān)計(jì)算或后續(xù)操作。如上面第
17、一個(gè)語句,字符串的比較函數(shù)必須返回一個(gè)函數(shù)值以便進(jìn)行大于的比較;下面兩個(gè)語句中,相應(yīng)的函數(shù)必須返回一個(gè)函數(shù)值以便進(jìn)行賦值操作。(2) 以函數(shù)的參數(shù)形式進(jìn)行函數(shù)調(diào)用。例如:printf(“%dn”,max(x,y,z);/* max函數(shù)是printf函數(shù)的部分參數(shù) */fun1 ( fun2 ( t ) ); /* fun2函數(shù)是fun1函數(shù)的實(shí)參 */以函數(shù)的參數(shù)形式進(jìn)行函數(shù)調(diào)用,被調(diào)用函數(shù)必須返回一個(gè)函數(shù)值,以便參加主調(diào)函數(shù)的后續(xù)操作。如上面第一個(gè)語句,max函數(shù)是被調(diào)用函數(shù),其必須返回一個(gè)函數(shù)值,以便參加主調(diào)函數(shù)printf的輸出操作。下面語句中的fun2函數(shù)必須返回一個(gè)函數(shù)值,以便作為f
18、un1函數(shù)的實(shí)參繼續(xù)進(jìn)行函數(shù)調(diào)用?!纠?-3】以表達(dá)式的形式進(jìn)行函數(shù)調(diào)用的例子。閱讀程序,從四個(gè)選項(xiàng)中選擇正確答案:func(int a,int b) int c; c=a+b; return c;main( )int x=6,y=7,z=8,r; r=func(x-,y+,x+y),z-); printf("%dn",r);上面程序的輸出結(jié)果是A) 11B) 20C) 21D) 31該例中的函數(shù)func是以表達(dá)式的形式進(jìn)行調(diào)用的。其函數(shù)名func前面省略了函數(shù)類型說明符,則該函數(shù)返回值的類型默認(rèn)為int(整型)。主調(diào)函數(shù)(main函數(shù))與被調(diào)函數(shù)(func函數(shù))之間的參數(shù)
19、傳遞是采用值單向傳遞的方式,即第1個(gè)實(shí)參13(x+y=6+7)單向傳遞給形參a,第2個(gè)實(shí)參8單向傳遞給形參b。函數(shù)的返回值為21。故該題選C)。注意:該例中第1個(gè)實(shí)參是逗號表達(dá)式,取最右側(cè)值;另外需注意+、-的后綴的作用。8.4.2 函數(shù)調(diào)用時(shí)參數(shù)間的傳遞C語言所定義的函數(shù),本身是獨(dú)立的。函數(shù)之間是通過調(diào)用函數(shù)時(shí)參數(shù)的傳遞及函數(shù)值的返回來相互聯(lián)系的。1 變量、常量、數(shù)組元素作為函數(shù)實(shí)參在函數(shù)調(diào)用時(shí),使用變量或常量或數(shù)組元素作為函數(shù)實(shí)參,變量作為函數(shù)形參,在此情況下,實(shí)參與形參之間的參數(shù)的傳遞屬于前面介紹過的值單向傳遞方式,即將實(shí)參的值傳送(復(fù)制)到形參相應(yīng)的存儲單元中,此時(shí)形參和實(shí)參分別占用不
20、同存儲單元。前面所列舉的例8-1、例8-2和例8-3均屬于變量及含變量的表達(dá)式作為函數(shù)實(shí)參的運(yùn)用,也就是實(shí)參向形參單向傳遞具體值的方式運(yùn)用。2 數(shù)組名作為函數(shù)實(shí)參由第6章可知,數(shù)組名本身代表該數(shù)組在內(nèi)存中存放的首地址。在函數(shù)調(diào)用時(shí),使用數(shù)組名作為函數(shù)實(shí)參,數(shù)組作為函數(shù)形參(此種情況下,實(shí)參和形參類型必須一致),則實(shí)參與形參之間的參數(shù)的傳遞屬于前面介紹過的地址傳遞方式。【例8-4】求某班若干學(xué)生的平均成績。程序如下:float ave(float b,int n1) int i; float aver1,sum=0; for(i=0;i<n1;i+) sum+=bi; aver1=sum/
21、n1; return(aver1);main( ) float a50,aver;/* 假設(shè)班級的學(xué)生人數(shù)最多不超過50人 */ int j,n; scanf("%d",&n);/* 輸入班級的學(xué)生人數(shù)n50 */ printf("Input %d scores:n",n); for(j=0;j<n;j+) scanf("%f",&aj); aver=ave(a,n);/* 調(diào)用ave函數(shù),第1個(gè)實(shí)參為數(shù)組名a */ printf("average score is %.1fn",aver);
22、該程序運(yùn)行的情況為:6Input 6 scores:<CR>average score is說明:在主調(diào)函數(shù)main中,定義了數(shù)組a50,并根據(jù)輸入的班級人數(shù)控制將n個(gè)學(xué)生成績輸入至a數(shù)組中,然后調(diào)用ave函數(shù),數(shù)組名a和n作為實(shí)參。在被調(diào)函數(shù)ave中,b為形參數(shù)組名,形參數(shù)組b與實(shí)參數(shù)組a的類型必須一致(此例中均為float)。在具體的調(diào)用過程中,實(shí)參數(shù)組名a并不是將數(shù)組a中的所有學(xué)生成績傳送給形參數(shù)組b,而只是將實(shí)參數(shù)組的首地址傳遞給形參數(shù)組,從而使這兩個(gè)數(shù)組共用同一存儲空間,即a0與b0占據(jù)同一單元,a1與b1占據(jù)同一單元,。若n為50時(shí),如圖8-2所示。實(shí)參數(shù)組 形參數(shù)組a
23、 a0××b0 ba1××b1a2××b2a3××b3a48××b48a49××b49圖8-28.4.3 函數(shù)的聲明從前面的介紹中可知,用戶函數(shù)(即自定義函數(shù))一般應(yīng)定義在前,調(diào)用在后。如果用戶在編制程序時(shí)都按這個(gè)規(guī)律來進(jìn)行,則不需要進(jìn)行函數(shù)的聲明(或者說,函數(shù)的聲明可以省略)。但從另一個(gè)角度來看,由于C語言中的函數(shù)定義是各自獨(dú)立的。函數(shù)與函數(shù)之間的排放位置并沒有先后順序關(guān)系,只有調(diào)用與被調(diào)用的關(guān)系。也就是說,在一個(gè)含有多個(gè)函數(shù)的源程序中,各個(gè)函數(shù)的放置(即先后位置)是可隨機(jī)
24、的。例如,有三個(gè)函數(shù)main( )、fun1( )和fun2( ),它們的排列可以有6種情況,現(xiàn)給出如下3種排列:float fun1( int x)int fun2( char c )main( ) int fun2( char c )main( ) float fun1( int x) main( ) float fun1( int x) int fun2( char c ) 當(dāng)各個(gè)函數(shù)隨機(jī)排列時(shí),就會出現(xiàn)調(diào)用在前,定義在后的情況。當(dāng)被調(diào)函數(shù)放置在主調(diào)函數(shù)之后,且函數(shù)值的類型不是整型時(shí),則應(yīng)在主調(diào)函數(shù)的適當(dāng)位置,對被調(diào)函數(shù)作聲明。否則,編譯時(shí)就會給出相應(yīng)的錯(cuò)誤信息。所謂“函數(shù)聲明”是指向C
25、編譯系統(tǒng)提供有關(guān)信息,如函數(shù)值的類型、函數(shù)名及函數(shù)的參數(shù)個(gè)數(shù)等,以便C編譯系統(tǒng)對函數(shù)調(diào)用時(shí)進(jìn)行核查。函數(shù)聲明的一般格式為:函數(shù)類型 函數(shù)名(參數(shù)類型1, 參數(shù)類型2,)或函數(shù)類型 函數(shù)名(參數(shù)類型1 參數(shù)名1, 參數(shù)類型2 參數(shù)名2,)【例8-5】函數(shù)聲明應(yīng)用例子。求兩個(gè)實(shí)數(shù)之積。程序如下:main() float mul(float x1,float y1);/* 函數(shù)的聲明*/ float x,y,z; scanf("%f%f",&x,&y); z=mul(x,y); printf("%f*%f=%fn",x,y,z);float m
26、ul(float x1,float y1) float z1; z1=x1*y1; return(z1);說明:(1) 求乘積的函數(shù)mul的類型是float,且其定義在主函數(shù)之后,屬于先調(diào)用,后定義的情況,所以,在主函數(shù)內(nèi)首部對函數(shù)mul加以聲明“float mul(float x1,float y1);”。(2) 聲明中的x1,y1可以不寫“float mul(float ,float );”。(3) 若將其函數(shù)mul聲明去掉(可在其首尾添加注釋符號,使之不起作用即可),則編譯時(shí)會給出相關(guān)的錯(cuò)誤信息。讀者可試一試。(4) 若將該例中的變量(x,y,z,z1)、形參(x1,y1)的數(shù)據(jù)類型和函
27、數(shù)的類型都改為int,盡管函數(shù)mul仍放置在主函數(shù)之后,也可省略相應(yīng)的聲明。8.5 函數(shù)的嵌套調(diào)用和遞歸調(diào)用C語言中的函數(shù)不允許嵌套定義(即函數(shù)定義是相互獨(dú)立的),但允許嵌套調(diào)用和遞歸調(diào)用。8.5.1 函數(shù)的嵌套調(diào)用所謂函數(shù)的“嵌套調(diào)用”是指函數(shù)1調(diào)用了函數(shù)2,而函數(shù)2又調(diào)用了函數(shù)3。也就是說,函數(shù)和函數(shù)之間沒有從屬關(guān)系,一個(gè)函數(shù)既可以被其它函數(shù)調(diào)用,同時(shí)該函數(shù)也可以調(diào)用另外別的函數(shù)。【例8-6】由鍵盤任意輸入兩個(gè)整數(shù),求這兩個(gè)整數(shù)的最小公倍數(shù)。程序如下:int fun1(int n1,int n2)/* fun1函數(shù)可求出最小公倍數(shù)gbs1 */ int gbs1; gbs1=n1*n2/f
28、un2(n1,n2); return(gbs1);int fun2(int u,int v) /* fun2函數(shù)可求出最大公約數(shù)v */ int t,r; if(v>u) t=u;u=v;v=t; while(r=u%v)!=0) u=v;v=r; return(v);main( ) int num1,num2,gbs; printf("input 2 numbers:"); scanf("%d%d",&num1,&num2); gbs=fun1(num1,num2);/* gbs變量中存放的是最小公倍數(shù) */ printf(&qu
29、ot;gbs=%dn",gbs);程序運(yùn)行時(shí)顯示并輸入: input 2 numbers:8 12<Enter>則輸出結(jié)果為 : gbs=24從數(shù)學(xué)知識可知道,任何兩個(gè)整數(shù)的最小公倍數(shù)等于這兩個(gè)數(shù)之積再除以這兩個(gè)數(shù)的最大公約數(shù)。該例中共有3個(gè)函數(shù),即main(),fun1()和fun2()。fun1()和fun2()這兩個(gè)函數(shù)的定義是并列的、相互獨(dú)立的。在程序運(yùn)行過程中,main()調(diào)用了fun1()函數(shù)以求出最小公倍數(shù),而fun1()函數(shù)又調(diào)用了fun2()函數(shù)以求出最大公約數(shù)。這就是函數(shù)的嵌套調(diào)用。見圖8-3所示。main函數(shù)調(diào)用fun1函數(shù)調(diào)用fun2函數(shù)fun2函
30、數(shù)fun1函數(shù)輸出結(jié)果圖8-38.5.2 函數(shù)的遞歸調(diào)用所謂函數(shù)的“遞歸調(diào)用”是指一個(gè)函數(shù)直接調(diào)用自己(即直接遞歸調(diào)用)或通過其它函數(shù)間接地調(diào)用自己(即間接遞歸調(diào)用)。下面用一個(gè)例子來說明函數(shù)的遞歸調(diào)用方法?!纠?-7】用遞歸方法求n!。由數(shù)學(xué)知識可知,正整數(shù)n的階乘為:n×(n-1)×(n-2)××2×1。若n為5,從遞歸方法可有:5!=5×4??;4!=4×3??;1!=1。即可用下面的遞歸公式表示:1n=0,1n·(n-1)!n>1n! =n>1程序如下:int func(int n) int s;
31、if(n=1 | n=0) s=1; else s=n*func(n-1); return(s);main() int n,t; printf("input a number(n>1):"); scanf("%d",&n); t=func(n); printf("%d!=%dn",n,t);程序運(yùn)行時(shí)顯示并輸入: input a number(n>1):4<CR>輸 出 結(jié) 果 為 : 4!=24上例中的函數(shù)func()的遞歸調(diào)用過程可用圖8-4來說明。func(4) 欲計(jì)算4×func(3)
32、 欲計(jì)算3×func(2) 欲計(jì)算2×func(1) n=1,有返回值1 返回func(1)的值為1 返回func(3)的值為6 返回func(2)的值為2 返回func(4)的值為24 圖8-4 由圖8-4可以看到函數(shù)func()的遞歸調(diào)用過程分為兩個(gè)階段:第一是“遞推調(diào)用” 階段,即n值不為1時(shí),則不斷地調(diào)用函數(shù)func()自己,只是每次的參數(shù)不同而已;第二是“回歸計(jì)算” 階段,即先獲得func(1)值返回,接著依次計(jì)算出func(2)、 func(3)、 func(4)的值并返回,最終得到遞歸調(diào)用的結(jié)果。從程序設(shè)計(jì)角度來說,遞歸過程必須解決兩個(gè)問題:一是遞歸計(jì)算的公式
33、,二是遞歸結(jié)束的條件。如上例中:遞歸計(jì)算公式是,func(n)=n*func(n-1), 遞歸結(jié)束條件是func(1)=1。8.6 變量的作用域在前面各章中,用戶已用到了整型變量、實(shí)型變量和字符型變量等各種類型變量,這是從變量中存放的數(shù)據(jù)類型的角度來劃分的。若從變量定義的位置或者說從變量的作用域(即變量的有效范圍)來劃分的話,變量還可分為局部變量和全局變量。8.6.1 局部變量所謂“局部變量”是指在一定范圍內(nèi)有效的變量。在C語言中,在以下各位置定義的變量均屬于局部變量,其作用域也不同。 在函數(shù)體內(nèi)定義的變量,在本函數(shù)范圍內(nèi)有效,即其作用域只局限在本函數(shù)體內(nèi)。 在復(fù)合語句內(nèi)定義的變量,僅在本復(fù)合
34、語句范圍內(nèi)有效。 有參函數(shù)中的形式參數(shù)也是局部變量,只在其所在的函數(shù)范圍內(nèi)有效。例如:double fun1(int x,int y)/* fun1函數(shù)中,形參x,y和m,n均是局部變量 */ int m,n; int fun2(char ch)/* fun2函數(shù)中,形參ch和a,b均是局部變量 */ int a,b; main( )/* main函數(shù)中,a,b均是局部變量 */ int a,b; int x,y;/* main函數(shù)的復(fù)合語句中,x,y均是局部變量 */ 說明:(1) fun1函數(shù)中的形參x,y和定義的m,n變量,均只在fun1函數(shù)中有效;fun2函數(shù)中的形參ch和定義的a,b
35、變量,均只在fun2函數(shù)中有效;main函數(shù)中定義的a,b變量,均只在main函數(shù)中有效;main函數(shù)的復(fù)合語句中定義的x,y變量,僅在該復(fù)合語句中有效。(2) 不同函數(shù)中和不同的復(fù)合語句中可以使用(即定義)同名變量。因?yàn)樗鼈兊淖饔糜虿煌?,程序運(yùn)行時(shí)在內(nèi)存中占據(jù)不同的存儲單元,各自代表不同的對象,所以它們之間互不干預(yù)。如上例中fun1函數(shù)中的形參x,y和main函數(shù)的復(fù)合語句中定義的x,y變量同名;fun2函數(shù)中定義的a,b變量和main函數(shù)中定義的a,b變量也是同名。但是它們之間互不干擾,各行其責(zé)。(3) 局部變量所在的函數(shù)被調(diào)用或執(zhí)行時(shí),系統(tǒng)臨時(shí)給相應(yīng)的局部變量分配存儲單元,一旦函數(shù)執(zhí)行結(jié)
36、束,則系統(tǒng)立即釋放這些存儲單元。所以在各個(gè)函數(shù)中的局部變量起作用的時(shí)刻是不同的。(4) 因?yàn)樗芯植孔兞康亩x都位于函數(shù)中,且從宏觀角度來說,局部變量的作用域也都局限于函數(shù)內(nèi),所以局部變量也可稱作內(nèi)部變量。【例8-8】各函數(shù)局部變量同名的應(yīng)用例子。程序如下:main() int i=5; fun1(i/2); printf("i=%dn",i); fun1(i=i/2); printf("i=%dn",i); fun1(i/2); printf("i=%dn",i); fun2(i); printf("i=%dn"
37、,i);fun1(int i) i=i<=2? 15:0; return(i);fun2(int i) i=(i%i)*(i*i)/(2*i)+4); printf("i=%dn",i); return(i);該程序運(yùn)行結(jié)果為:i=5 i=2 i=2 i=0 i=2該例中三個(gè)函數(shù)main、fun1和fun2中的局部變量均是i,要注意它們各自的作用域。8.6.2 全局變量所謂“全局變量”是指在函數(shù)之外定義的變量。全局變量的定義位置可以在所有函數(shù)之前,也可以在各個(gè)函數(shù)之間。當(dāng)然從理論上講,也可以在所有函數(shù)之后(但實(shí)際應(yīng)用中很少用)。一般情況下,全局變量的作用范圍是:從定義
38、全局變量的位置起到本源程序結(jié)束止。例如:int x,y,z;/* x,y,z均是全局變量 */float f1(float a,float b) char ch1,ch2;/* ch1,ch2均是全局變量 */int f2( int m) double t,p;/* t,p均是全局變量 */main( ) 說明:(1) 在f1函數(shù)中,可以使用全局變量x,y,z;在f2函數(shù)中,可以使用全局變量x,y,z和ch1,ch2;在main函數(shù)中,可以使用所有定義的全局變量,即x,y,z,ch1,ch2,t,p。(2) 全局變量可以和局部變量同名,當(dāng)局部變量有效時(shí),同名的全局變量不起作用。(3) 因?yàn)槿?/p>
39、變量的定義位置都在函數(shù)之外(且作用域范圍較廣,不局限于一個(gè)函數(shù)內(nèi)),所以全局變量又可稱為外部變量。(4) 使用全局變量可以增加各個(gè)函數(shù)之間數(shù)據(jù)傳輸?shù)那?,即在某個(gè)函數(shù)中改變一全局變量的值,就可能影響到其它函數(shù)的執(zhí)行結(jié)果。但它會使函數(shù)的通用性降低,使程序的模塊化、結(jié)構(gòu)化變差,所以應(yīng)慎用、少用全局變量。【例8-9】全局變量和局部變量同名的應(yīng)用例子。程序如下:int d=1;fun(int p) int d=5; d+=p+; printf("%d",d);main( ) int a=3; fun(3); d+=a+; printf("%dn",d);以上程序
40、運(yùn)行后,輸出結(jié)果是A) 84B)99C)95D)44由程序可見,全局變量d和fun函數(shù)中定義的局部變量d同名了。根據(jù)它們的作用域及使用規(guī)律可知,在fun函數(shù)中局部變量d起作用,全局變量d不起作用,在main函數(shù)中全局變量d起作用。故該題結(jié)果應(yīng)選A)。【例8-10】全局變量和局部變量的應(yīng)用例子。程序如下:int x1=30,x2=40;main( ) int x3=10,x4=20; sub(x3,x4); sub(x2,x1); printf("%d,%d,%d,%dn",x3,x4,x1,x2);sub(int x,int y) x1=x;x=y;y=x1;該程序的運(yùn)行結(jié)
41、果為:10,20,40,40說明:該程序在運(yùn)行過程中,全局變量x1發(fā)生兩次變化。第一次是調(diào)用sub函數(shù)后,x1變?yōu)?0, 第二次也是調(diào)用sub函數(shù)后,x1變?yōu)?0。8.7 變量的存儲類別8.7.1 存儲分類上一節(jié)介紹的局部變量和全局變量是從變量的作用域(即從空間)來劃分的。若從變量值存在的時(shí)間長短(即變量的生存期,或稱時(shí)域)來劃分的話,變量還可分為動態(tài)存儲變量(包括自動變量和寄存器變量兩種)和靜態(tài)存儲變量。也就是說,變量的生存期取決于變量的存儲方式。在C語言中,變量的存儲方式可分為:1. 動態(tài)存儲方式(1) 自動型存儲方式(auto)(2) 寄存器型存儲方式(register)2. 靜態(tài)存儲方
42、式(具體包括靜態(tài)型存儲方式static)。8.7.2 動態(tài)存儲方式所謂“動態(tài)存儲方式”指的是在程序運(yùn)行期間根據(jù)需要為相關(guān)的變量動態(tài)分配存儲空間的方式。在C語言中,變量的動態(tài)存儲方式主要有自動型存儲方式和寄存器型存儲方式等兩種形式,下面分別加以介紹。1 自動型存儲方式(auto)自動型存儲方式(auto)是C語言中使用最多的存儲方式,也是系統(tǒng)默認(rèn)的存儲方式。由自動型存儲的變量也可稱為自動變量。自動變量定義的一般格式為:auto 類型說明符 變量名1,變量名2,;其中,auto為自動存儲類別符,它可以省略。當(dāng)其缺省時(shí),系統(tǒng)默認(rèn)為auto。前面各章中所有程序中所用到的各個(gè)變量,都未說明存儲方式,都是
43、自動型(auto)存儲方式,都屬于自動變量。在函數(shù)體內(nèi)定義變量時(shí),下面兩種寫法是等價(jià)的。int x,y,z; auto int x,y,z;說明: 自動變量屬于局部變量范疇。通常情況下,其作用域局限于定義它的函數(shù)范圍內(nèi)。 C語言允許在復(fù)合語句內(nèi)定義自動變量,此時(shí),其作用域僅局限于該復(fù)合語句內(nèi)。 當(dāng)自動變量所在函數(shù)(或復(fù)合語句)執(zhí)行后,系統(tǒng)即動態(tài)地為相應(yīng)的自動變量分配存儲單元。 自動變量的生存期為該變量所在的函數(shù)(或復(fù)合語句)的執(zhí)行時(shí)間,當(dāng)函數(shù)(或復(fù)合語句)執(zhí)行結(jié)束后,自動變量已失效,即其存儲單元被系統(tǒng)釋放掉了。所以,其原來的值不能保留下來。若對同一函數(shù)進(jìn)行再次調(diào)用時(shí),系統(tǒng)會對相應(yīng)的自動變量重新
44、分配存儲單元。2 寄存器型存儲方式(register)寄存器型存儲方式(register)是C語言中使用較少的一種存儲方式。該存儲方式是將相關(guān)變量的值存儲在CPU的通用寄存器內(nèi)。由于計(jì)算機(jī)的運(yùn)算器和通用寄存器均集成在CPU芯片內(nèi),所以,從通用寄存器內(nèi)讀取數(shù)據(jù)比由內(nèi)存中讀取數(shù)據(jù)要快得多。因此,對于一些需要反復(fù)操作的數(shù)據(jù),可使用寄存器型存儲方式。由該存儲方式存儲的變量也可稱為寄存器變量。寄存器變量定義的一般格式為:register 類型說明符 變量名1,變量名2,;其中,register是寄存器型存儲方式類別符,不可省略。寄存器變量也屬于局部變量范疇。【例8-11】寄存器變量的應(yīng)用例子。程序如下:
45、long fun(register int n)/* fun函數(shù)中的形參n是寄存器存儲的整型變量 */ register long s; /* s是寄存器存儲的長整型變量 */ for(s=0;n;n-) s+=n; return(s);main() int num; long sum; scanf("%d",&num); sum=fun(num); printf("sum=%ldn",sum);程序運(yùn)行時(shí)若輸入:100<CR>10000<CR>則輸出結(jié)果為:sum=5050sum=50005000說明:該例中的寄存器變量
46、n和s,均只在fun函數(shù)中有效。8.7.3 靜態(tài)存儲方式所謂“靜態(tài)存儲方式”指的是在程序編譯時(shí)就給相關(guān)的變量分配固定的存儲空間(即在程序運(yùn)行的整個(gè)期間內(nèi)都不變)的方式。1. 靜態(tài)存儲的局部變量由靜態(tài)存儲方式存儲的局部變量也可稱為靜態(tài)局部變量。該類變量的定義格式為:static 類型說明符 變量名=初始化值,;其中,static是靜態(tài)型存儲方式類別符,不可省略。例如:static int a=10,b;說明:(1) 靜態(tài)局部變量的存儲空間是在程序編譯時(shí)由系統(tǒng)分配的,且在程序運(yùn)行的整個(gè)期間都固定不變。因此,該類變量在其所在函數(shù)調(diào)用結(jié)束后仍然可以保留變量值。(2) 靜態(tài)局部變量的初值是在程序編譯時(shí)一
47、次性賦予的,即在程序運(yùn)行期間不再賦初值。如上例在程序編譯時(shí)給變量a賦予10,對未給定初值的變量b,C 編譯系統(tǒng)自動給它賦0值。若變量b為字符型變量,則C 編譯系統(tǒng)自動給它賦x0(即ASCII代碼為0的字符)?!纠?-12】靜態(tài)局部變量的應(yīng)用例子。程序如下:func(int a,int b) static int m=0,i=2; i+=m+1; m=i+a+b; return(m);main( ) int k=4,m=1,p; p=func(k,m); printf("%d,",p); p=func(k,m); printf("%dn",p);程序運(yùn)行結(jié)
48、果為:8,17該例中func函數(shù)中的變量m和i是靜態(tài)局部變量,其值的變化如表8-1所示。 表8-1函數(shù)調(diào)用次數(shù)函數(shù)調(diào)用時(shí)初值函數(shù)調(diào)用結(jié)束時(shí)的值imim第1次2038第2次3812172靜態(tài)存儲的全局變量在C語言中,全局變量的存儲都采用靜態(tài)存儲方式。即在程序編譯時(shí)就對相應(yīng)的全局變量分配固定的存儲單元,且在程序執(zhí)行的全過程中始終保持不變。全局變量賦初值的方法同靜態(tài)局部變量,即在程序編譯時(shí)一次性完成。注意:在全局變量定義時(shí),在其最前面也可加上static關(guān)鍵字。例如: static int x;/* 在函數(shù)外定義 */此時(shí)static的作用不是限定全局變量x為靜態(tài)存儲,而是聲明全局變量x只能用于本文
49、件,不能被其他文件所引用。也就是說,不加static關(guān)鍵字聲明的全局變量x(即int x;)是可以被其他文件所引用的。需要指出的是這兩種形式所定義的全局變量x都是靜態(tài)存儲方式,只是作用范圍不同而已。3. 用extern聲明全局變量由節(jié)可知,全局變量(即外部變量)的作用域是從定義的位置起到本文件的末尾止。采用extern來聲明全局變量可以擴(kuò)大全局變量的作用域。(1) 在多個(gè)文件中聲明全局變量例如:file1.cfileint x;extern x;main( )func(int a) x=x+a; 文件1(即名為file1.c)中定義了一個(gè)全局變量x,文件2(即名為file2.c)中欲引用,則必
50、須在引用前的適當(dāng)位置用extern聲明全局變量x。也就是說,采用extern來聲明全局變量x后。已使變量x的作用域由file1.c范圍擴(kuò)展到file2.c。(2) 在一個(gè)文件中聲明全局變量【例8-13】聲明全局變量的應(yīng)用例子。程序如下:main() extern x,y;/* 聲明全局變量x,y */ printf("%dn",min(x,y);int x=22,y=11;/* 定義全局變量x,y */int min(int a,int b) int c; c=a<b?a:b; return(c);程序運(yùn)行結(jié)果為:11該例中,全局變量x,y是在main和min兩個(gè)函數(shù)
51、之間定義的,其作用域并不包含main函數(shù)。而main函數(shù)中欲使用全局變量x,y,只要在使用之前加以聲明即可。可見,由于在main函數(shù)首部采用extern來聲明全局變量x, y后, 已使變量x, y的作用域由min函數(shù)范圍擴(kuò)展到main函數(shù)。當(dāng)然,若在main函數(shù)之前定義全局變量x,y的話,就可省略聲明全局變量語句了。8.8 內(nèi)部函數(shù)和外部函數(shù)C語言程序是由函數(shù)構(gòu)成的。函數(shù)的本性是屬于全局的(外部的)、通用的。也就是說,函數(shù)通常即可以被本文件中的各個(gè)函數(shù)所調(diào)用,也可以被其他文件中的函數(shù)所調(diào)用。如C語言所提供的庫函數(shù),任何用戶的任何程序均可調(diào)用。當(dāng)然,為了某種需求,也可以限定函數(shù)不能被其他文件中的
52、函數(shù)所調(diào)用。因此,在C語言中,根據(jù)函數(shù)的使用范圍,可分為內(nèi)部函數(shù)和外部函數(shù)。8.8.1 內(nèi)部函數(shù)所謂“內(nèi)部函數(shù)”是指只能被本文件中的各個(gè)函數(shù)所調(diào)用,不能被其他文件中的函數(shù)所調(diào)用的一類函數(shù)而言。它們必須用static來說明,其一般格式為:static 函數(shù)類型說明符 函數(shù)名( 形式參數(shù) ) 說明:(1) 內(nèi)部函數(shù)又可稱為靜態(tài)函數(shù)。它的使用范圍僅限于定義它的源程序文件內(nèi)。對其他文件而言,它是屏蔽的、不可見的。因而,內(nèi)部函數(shù)的保密性很好。(2) 不同文件中的內(nèi)部函數(shù)可以同名,因它們的作用范圍不同,不會造成混淆。(3) 內(nèi)部函數(shù)的static不可省略。8.8.2 外部函數(shù)所謂“外部函數(shù)” 是指可以被任
53、何文件的任何函數(shù)所調(diào)用的一類函數(shù)。它們可以用extern來說明,其一般格式為:extern 函數(shù)類型說明符 函數(shù)名( 形式參數(shù) ) 說明:(1) 外部函數(shù)的extern可省略。如果在定義函數(shù)時(shí)省略extern,則系統(tǒng)默認(rèn)該函數(shù)是外部函數(shù)。本章前面介紹的函數(shù),其定義時(shí)均沒有extern,都是外部函數(shù)。(2) 外部函數(shù)可以被其他文件所調(diào)用。當(dāng)某文件需調(diào)用其他文件定義的外部函數(shù)時(shí),需在該文件的適當(dāng)位置(通常在其首部)用extern來聲明所用的函數(shù)是外部函數(shù)。8.9 應(yīng)用舉例【例8-14】在主函數(shù)中輸入一字符串,通過調(diào)用一函數(shù)使該字符串逆序存放,并在主函數(shù)中輸出。程序如下:main( ) void func(char s );/* 函數(shù)聲明*/ char str80; printf("Input string:"); scanf("%s",str); func(str);/* 函數(shù)調(diào)用*/ puts(str);void func(char s ) char c; int i,j; j=strlen(s)-1; for(i=0;i<j;i+,j-) c=si;si=sj;sj=c;該程序運(yùn)行情況為:Input st
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新型城鎮(zhèn)化土地使用權(quán)出讓合同
- 2025年度環(huán)保型家用天然氣熱水器防爆安裝及節(jié)能改造合同
- 二零二五版變壓器租賃與電力節(jié)能減排合同2篇
- 2025年跨境電商平臺居間服務(wù)及傭金分配合同
- 文教用品運(yùn)輸保險(xiǎn)合同
- 能源環(huán)保技術(shù)專利轉(zhuǎn)讓合同
- 港口裝卸合同
- 智能家居設(shè)備研發(fā)合同
- 物流速遞服務(wù)合同
- 精準(zhǔn)農(nóng)業(yè)技術(shù)應(yīng)用推廣合同
- 2024年云南省公務(wù)員考試【申論縣鄉(xiāng)卷、行測、事業(yè)單位招聘】3套 真題及答案
- 湖南省長沙市長郡教育集團(tuán)2024-2025學(xué)年七年級上學(xué)期期末考試英語試題(含答案)
- 2024上海市招聘社區(qū)工作者考試題及參考答案
- 2024-2025學(xué)年人教版三年級(上)英語寒假作業(yè)(九)
- 《招標(biāo)投標(biāo)法》考試題庫200題(含答案)
- 立春氣象與健康
- 河南退役軍人專升本計(jì)算機(jī)真題答案
- 室內(nèi)空氣治理技術(shù)培訓(xùn)
- 2024-2025學(xué)年上外版高二上學(xué)期期中英語試卷與參考答案
- DB52T 1167-2017 含笑屬栽培技術(shù)規(guī)程 樂昌含笑
- 2025年全國高考體育單招考試政治模擬試卷試題(含答案詳解)
評論
0/150
提交評論