大學(xué)C語(yǔ)言第7章函數(shù)1_第1頁(yè)
大學(xué)C語(yǔ)言第7章函數(shù)1_第2頁(yè)
大學(xué)C語(yǔ)言第7章函數(shù)1_第3頁(yè)
大學(xué)C語(yǔ)言第7章函數(shù)1_第4頁(yè)
大學(xué)C語(yǔ)言第7章函數(shù)1_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第七章函數(shù)7.1函數(shù)概述7.2函數(shù)的定義7.3函數(shù)的調(diào)用7.4函數(shù)參數(shù)傳遞和函數(shù)的值7.5數(shù)組參數(shù)的傳遞7.6函數(shù)的嵌套調(diào)用和遞歸調(diào)用7.7變量的作用域與存儲(chǔ)類別7.8編譯預(yù)處理7.9綜合應(yīng)用7.1函數(shù)概述C語(yǔ)言是結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言。一個(gè)C程序可由一個(gè)主函數(shù)main()和若干個(gè)其他函數(shù)組成,每個(gè)函數(shù)(模塊)用來(lái)實(shí)現(xiàn)一個(gè)特定的功能。主函數(shù)可以調(diào)用其他函數(shù),其他函數(shù)之間也可相互調(diào)用。mainabdeahdcbf例7.1:通過(guò)編程求兩個(gè)數(shù)中的最大值,并且輸出的最大值上下分別有一行星號(hào)。#include<stdio.h>voidstar() /*star為輸出一行星號(hào)函數(shù)*/{printf("*************\n");} voidmain(){intx=6,y=3,z;

intmax(int,int);

/*對(duì)max函數(shù)進(jìn)行說(shuō)明*/

z=max(x,y);/*調(diào)用max函數(shù),將返回的最大值賦給z*/star(); /*調(diào)用star函數(shù),輸出一行星號(hào)*/

printf("maxis%d\n",z);

star();} intmax(inta,intb)/*max為求最大值函數(shù),a,b為形式參數(shù)*/{intc;if(a>b)c=a;elsec=b;return(c);} /*將最大值c返回main主函數(shù)*/程序運(yùn)行結(jié)果為:*************

maxis6*************函數(shù)分類(1)從函數(shù)定義來(lái)看:分為庫(kù)函數(shù)和用戶定義函數(shù)兩種。例如:printf、scanf

與star()、max()(2)從函數(shù)的返回值來(lái)看:分為有返回值函數(shù)和無(wú)返回值函數(shù)兩種。例如:voidstar()、intmax()(3)從主調(diào)函數(shù)和被調(diào)函數(shù)之間數(shù)據(jù)傳送的來(lái)看:分為無(wú)參函數(shù)和有參函數(shù)兩種例如:voidstar(void)、intmax(inta,intb)7.2.1函數(shù)的定義函數(shù)定義的格式:[類型說(shuō)明符]函數(shù)名([形式參數(shù)說(shuō)明列表]){

類型說(shuō)明部分語(yǔ)句部分(函數(shù)體部分)

[return表達(dá)式]}(1)類型說(shuō)明符:說(shuō)明函數(shù)名的類型。類型說(shuō)明符省略時(shí),

函數(shù)類型為整型,可用類型說(shuō)明符“void”說(shuō)明函數(shù)無(wú)返回值。(2)函數(shù)名:函數(shù)名的命名規(guī)則與變量的命名規(guī)則相同。在一個(gè)程序中不同的函數(shù)其名稱不能相同。(3)形式參數(shù)說(shuō)明列表:形式參數(shù)說(shuō)明列表是用于調(diào)用函數(shù)和被調(diào)函數(shù)之間進(jìn)行數(shù)據(jù)傳遞的,使用時(shí)需要在表中進(jìn)行類型說(shuō)明。其格式如下:

7.2.1函數(shù)的定義(續(xù))形式參數(shù)說(shuō)明列表格式:類型說(shuō)明符1參數(shù)1,類型說(shuō)明符2參數(shù)2,……,類型說(shuō)明符n參數(shù)n例如:inta,intb,longc形式參數(shù)說(shuō)明列表省略時(shí)為無(wú)參函數(shù),也可用“void”進(jìn)行無(wú)參說(shuō)明。例如,voidstar(void)為無(wú)參數(shù)傳遞且無(wú)返回值函數(shù)。形式參數(shù)簡(jiǎn)稱為形參。(4)return表達(dá)式:將表達(dá)式的值賦值給函數(shù)名,返回到主調(diào)函數(shù)??捎卸鄺lreturn語(yǔ)句,也可省略return語(yǔ)句,省略時(shí)為無(wú)返回值。Return語(yǔ)句后的表達(dá)式可以是單獨(dú)變量,常量,也可以是復(fù)雜的表達(dá)式;表達(dá)式外可以加圓括號(hào),也可以不加。例如,returnx,return(x),return56,returna+b,return(x)。(5)包含在{}內(nèi)部的部分稱為函數(shù)體,由說(shuō)明部分和語(yǔ)句部分組成。

例7.2編寫求n!的函數(shù)#include<stdio.h>intfact(intn); /*fact為求n!函數(shù),n為形式參數(shù)*/{inti,s;for(i=1,s=1;i<=n;i++)s=s*i; /*計(jì)算n!值*/

returns;/*將n!值s賦給函數(shù)名fact,帶回主函數(shù)*/}7.2.1函數(shù)的定義(續(xù))(6)沒有任何操作內(nèi)容的函數(shù)稱為空函數(shù)。該函數(shù)什么也不做,先占一個(gè)位置,需要擴(kuò)充功能時(shí),再用編好的有用函數(shù)取代它。例如:

函數(shù)名(){}(7)C語(yǔ)言不允許在一個(gè)函數(shù)內(nèi)部定義另一個(gè)函數(shù),即不允許嵌套定義7.2.2函數(shù)的說(shuō)明(聲明)

在調(diào)用函數(shù)時(shí),不僅要在程序中定義函數(shù)本身,而且還要在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)進(jìn)行說(shuō)明,然后才可以調(diào)用。函數(shù)說(shuō)明格式:類型說(shuō)明符

被調(diào)函數(shù)名(類型說(shuō)明符1[形參1],類型說(shuō)明符2[形參2]…);說(shuō)明:中括號(hào)中的具體形參名可以省略。例如,例7.1中對(duì)max函數(shù)的說(shuō)明可寫為:intmax(int,int);/*一般我們寫為此種格式*/也可寫為:intmax(inta,intb);7.2.2函數(shù)的說(shuō)明(續(xù))關(guān)于是否對(duì)被調(diào)函數(shù)進(jìn)行說(shuō)明的幾種情況:(1)如果被調(diào)函數(shù)的定義是在主調(diào)函數(shù)之后,則必須在調(diào)用該被調(diào)函數(shù)之前對(duì)該被調(diào)函數(shù)進(jìn)行說(shuō)明,例如,例7.1中

在主函數(shù)main()內(nèi)部,對(duì)max函數(shù)的說(shuō)明。(2)若被調(diào)函數(shù)的定義在主調(diào)函數(shù)之前,則可省略對(duì)該被調(diào)函數(shù)進(jìn)行說(shuō)明,例如,例7.1中

的star()。(3)如在所有函數(shù)定義之前,在函數(shù)外預(yù)先說(shuō)明了各個(gè)函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不再對(duì)被調(diào)函數(shù)進(jìn)行說(shuō)明。例如:(4)對(duì)庫(kù)函數(shù)的調(diào)用不需要再做說(shuō)明,但必須把該函數(shù)的頭文件用#include命令包含在源文件前部,即是對(duì)相應(yīng)函數(shù)庫(kù)中的所有函數(shù)進(jìn)行了說(shuō)明。7.3函數(shù)的調(diào)用概述:當(dāng)函數(shù)定義及函數(shù)說(shuō)明過(guò)以后,就可以調(diào)用該函數(shù)來(lái)執(zhí)行函數(shù)體,完成相應(yīng)的功能。函數(shù)雖然不能嵌套定義,但是函數(shù)之間允許相互調(diào)用,也允許嵌套調(diào)用。習(xí)慣上把調(diào)用者稱為主調(diào)函數(shù),把被調(diào)用者稱為被調(diào)函數(shù)。函數(shù)還可以自己調(diào)用自己,稱為遞歸調(diào)用。

main函數(shù)是主函數(shù),它可以調(diào)用其他函數(shù),而不允許被其他函數(shù)調(diào)用。因此,C程序的執(zhí)行總是從main函數(shù)開始,完成對(duì)其他函數(shù)的調(diào)用后再返回到main函數(shù),最后由main函數(shù)結(jié)束整個(gè)程序。一個(gè)C源程序必須有也只能有一個(gè)主函數(shù)main。7.3.1函數(shù)調(diào)用的格式格式:函數(shù)名([實(shí)際參數(shù)表])說(shuō)明:(1)實(shí)際參數(shù)簡(jiǎn)稱實(shí)參,省略實(shí)際參數(shù)表為無(wú)參函數(shù)調(diào)用。(2)實(shí)際參數(shù)表中的參數(shù)可以是常數(shù)、變量或其他構(gòu)造類型數(shù)據(jù)及表達(dá)式。各實(shí)參之間用逗號(hào)分隔。7.3.2函數(shù)調(diào)用的方式1.函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項(xiàng)出現(xiàn)在表達(dá)式中,該方式要求函數(shù)是有返回值的。

變量=帶有函數(shù)(參數(shù))項(xiàng)的表達(dá)式;例如,例7.1中的z=max(x,y)語(yǔ)句2.函數(shù)語(yǔ)句:函數(shù)調(diào)用語(yǔ)句加上分號(hào)即可,該方式要求函數(shù)是無(wú)返回值的。

函數(shù)(參數(shù));例如例7.1中的star();3.函數(shù)實(shí)參:函數(shù)作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn),要求該函數(shù)必須是有返回值的。例如在例7.1中可以如此操作:z=max(x,y);printf("maxis%d",z);

簡(jiǎn)化為:printf(“maxis%d”,max(x,y));#include<stdio.h>voidstar(){printf("*************\n");}intmax(inta,intb){if(a>b)returna; elsereturnb; }例7.3

在例7.1基礎(chǔ)上,編程求任意3個(gè)數(shù)的最大值,并輸出最大值。

voidmain(){intx,y,z;printf("inputnumberx:\n");scanf("%d",&x);printf("inputnumbery:\n");scanf("%d",&y);printf("inputnumberz:\n");scanf("%d",&z);star();printf("maxis%d\n",max(max(x,y),z));/*函數(shù)max(x,y)為一個(gè)實(shí)際參數(shù)*/star();}程序運(yùn)行過(guò)程與結(jié)果為:inputnumberx:5↙inputnumbery:9↙inputnumberz:3↙"*************maxis9"*************7.4函數(shù)參數(shù)傳遞和函數(shù)的值函數(shù)的參數(shù)分為形參和實(shí)參兩種。形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。形參和實(shí)參的功能是傳送數(shù)據(jù)。當(dāng)發(fā)生函數(shù)調(diào)用時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參,從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。這樣的參數(shù)傳遞方式叫做“數(shù)值傳遞”,簡(jiǎn)稱“值傳遞”。7.4.1函數(shù)參數(shù)傳遞例7.4

編程求任意3個(gè)數(shù)的階乘和。#include<stdio.h>intfact(intn){inti,s;for(i=1,s=1;i<=n;i++)s=s*i;returns;}voidmain(){intx,y,z;longss;printf("inputnumberx:\n");scanf("%d",&x);printf("inputnumbery:\n");scanf("%d",&y);printf("inputnumberz:\n");scanf("%d",&z);

ss=fact(x)+fact(y)+fact(z);

printf("*************\n");printf("x!+y!+z!is%ld\n",ss);printf("*************\n");}程序運(yùn)行過(guò)程與結(jié)果為:inputnumberx:3↙inputnumbery:5↙inputnumberz:7↙"*************x!+y!+z!is5166"*************關(guān)于函數(shù)形參和實(shí)參的說(shuō)明:(1)形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束,返回主調(diào)函數(shù)后,則不能再使用該形參變量。(2)實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參獲得確定值關(guān)于函數(shù)形參和實(shí)參的說(shuō)明:(3)實(shí)參和形參在數(shù)量上、類型上、順序上應(yīng)嚴(yán)格一致,否則會(huì)產(chǎn)生“類型不匹配”的錯(cuò)誤。(4)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的,即只能把實(shí)參的值傳送給(賦值給)形參,而不能把形參的值反向地傳送給實(shí)參,因此在函數(shù)調(diào)用過(guò)程中,若形參的值發(fā)生改變,則不會(huì)影響實(shí)參中的值發(fā)生變化。例7.5可以說(shuō)明這個(gè)問(wèn)題。(5)在函數(shù)調(diào)用時(shí),若存在多個(gè)參數(shù)的情況,實(shí)參表中各參數(shù)傳遞順序是自左至右使用還是自右至左使用,各系統(tǒng)的規(guī)定不一定相同。(自學(xué)例7.6

)函數(shù)調(diào)用過(guò)程中,若形參的值發(fā)生改變,不會(huì)影響實(shí)參中的值發(fā)生變化?!纠?.5】編程求n+(n-1)+(n-2)+…+1的和。#include<stdio.h>voidmain(){intn;printf("inputnumbern\n");scanf("%d",&n);printf("*********\n");printf("n=%d\n",n);/*調(diào)用函數(shù)s之前,輸出n值*/printf("*********\n");

voids(int);

/*調(diào)用前,說(shuō)明函數(shù)s*/

s(n);printf("*********\n");printf("n=%d\n",n);/*調(diào)用函數(shù)s之后,輸出n值*/printf("*********\n");}voids(intn){inti;for(i=n-1;i>=1;i--)n=n+i; printf("n=%d\n",n);}程序運(yùn)行過(guò)程與結(jié)果為:inputnumbern:5↙*********n=5 /*調(diào)用函數(shù)s之前,輸出n值*/*********n=15 /*在函數(shù)s內(nèi)部,輸出n值*/*********n=5/*調(diào)用函數(shù)s之后,輸出n值*/*********7.4.2函數(shù)的值函數(shù)的值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并要返回給主調(diào)函數(shù)的值。該值通過(guò)return語(yǔ)句將返回值賦值給函數(shù)名,由函數(shù)名帶回主調(diào)函數(shù)。關(guān)于函數(shù)值(或稱函數(shù)返回值)的說(shuō)明:(1)函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。在函數(shù)中允許有多個(gè)return語(yǔ)句,但每次調(diào)用只能有一個(gè)return語(yǔ)句被執(zhí)行,因此只能返回一個(gè)函數(shù)值。7.4.2函數(shù)的值(2)函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換。(3)如函數(shù)值為整型,在函數(shù)定義時(shí)可以省去類型說(shuō)明。(4)不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說(shuō)明符為“void”。如例7.5中函數(shù)s可定義為:voids(intn){……}【例7.7】有關(guān)函數(shù)返回值的例子,比較兩個(gè)字符的大小,并返回不同的值。#include"stdio.h"comp(charc1,charc2){floatk;if(c1>c2) returnk=1.0;elseif(c1<c2) returnk=-1.0;else returnk=0.0;}voidmain(){chars1,s2;intz;scanf("%c\n",&s1);scanf("%c",&s2);z=comp(s1,s2);if(z>0) printf("s1>s2\n");elseif(z<0) printf("s1<s2\n");else printf("s1=s2\n");}程序運(yùn)行過(guò)程與結(jié)果為:x↙p↙s1>s27.5數(shù)組參數(shù)的傳遞數(shù)組用作函數(shù)參數(shù)有兩種形式:一種是把數(shù)組元素(下標(biāo)變量)作為實(shí)參使用;另一種是把數(shù)組名作為函數(shù)的形參和實(shí)參使用。1.數(shù)組元素作為函數(shù)的實(shí)參與普通變量并無(wú)區(qū)別。請(qǐng)看例題7.8。例7.8

編程判別一個(gè)整數(shù)數(shù)組中各元素的正負(fù),若為正或零,輸出1;若為負(fù)輸出-1,并計(jì)算正數(shù)的個(gè)數(shù),輸出數(shù)組元素的值及正數(shù)的個(gè)數(shù)。main(){inta[5],i;printf("input5numbers:\n");for(i=0;i<5;i++){scanf("%d",&a[i]);nzp(a[i]);}for(i=0;i<5;i++)printf("%4d",a[i]);printf("\npositivenumberscount:%d\n",k);}#include<stdio.h>intk;voidnzp(intx){if(x>=0){x=1;printf("xispositive%d\n",x);k++;}else{x=-1;printf("xisminus%d\n",x);}}程序運(yùn)行過(guò)程與結(jié)果為:input5numbers:3↙xispositive1-7↙xisminus-15↙xispositive1-9↙xisminus-16↙xispositive13-75-96positivenumberscount:37.5.2數(shù)組名作為函數(shù)參數(shù)用數(shù)組元素作實(shí)參時(shí),對(duì)數(shù)組元素的處理是按普通變量對(duì)待的,實(shí)參向形參傳遞的方式是單向的“數(shù)值傳遞”。用數(shù)組名作函數(shù)參數(shù)時(shí),不是采用的“數(shù)值傳遞”方式,而是“地址傳遞”方式。1.“數(shù)值傳遞”方式與“地址傳遞”方式的比較“數(shù)值傳遞”方式:形參變量是普通變量,實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。在函數(shù)調(diào)用時(shí)發(fā)生的值傳遞是把實(shí)參變量的值賦給形參變量。數(shù)值傳遞的特點(diǎn)是形參的變化不能改變實(shí)參的變化?!暗刂穫鬟f”方式:形參變量和實(shí)參變量都是地址型的變量或數(shù)組名,由編譯系統(tǒng)分配兩個(gè)不同的內(nèi)存單元,在單元內(nèi)存儲(chǔ)的是某內(nèi)存單元的地址。在函數(shù)調(diào)用時(shí)發(fā)生的地址傳遞是把實(shí)參變量中所存儲(chǔ)的某內(nèi)存單元的地址賦值給形參變量。地址傳遞的特點(diǎn)是指由實(shí)參變量中所存儲(chǔ)的地址而標(biāo)定的內(nèi)存單元中的數(shù)值會(huì)隨著形參變量中所存儲(chǔ)的地址而標(biāo)定的內(nèi)存單元中數(shù)值的變化而變化?!纠?.9】數(shù)值傳遞。#include<stdio.h>voidp(inta){a=a+5;}voidmain(){intx=10;p(x);printf("x=%d\n",x);}程序運(yùn)行結(jié)果為:x=10【例7.10】地址傳遞。#include<stdio.h>voidp(int*px)

/*定義px

為地址變量*/{*px=*px+5;}

/**px表示所標(biāo)定的內(nèi)存單元里的值,px所標(biāo)定內(nèi)存單元里的值加5*/voidmain(){intx=10;p(&x);/*調(diào)用函數(shù)p,將x的地址傳給px

*/printf("x=%d\n",x);}程序運(yùn)行結(jié)果為:x=152.?dāng)?shù)組名作為函數(shù)參數(shù)由數(shù)組一章我們知道,數(shù)組名代表了數(shù)組的首地址。在參數(shù)傳遞的時(shí)候,實(shí)參數(shù)組名把實(shí)參數(shù)組的首地址賦值給形參數(shù)組名,換句話說(shuō),形參數(shù)組名也代表了實(shí)參數(shù)組的首地址。在C語(yǔ)言中,實(shí)際上編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存,形參數(shù)組與實(shí)參數(shù)組占用同一段內(nèi)存空間,實(shí)參數(shù)組的數(shù)組值就是形參數(shù)組的數(shù)組值,就像一個(gè)人有兩個(gè)名字一樣。若形參數(shù)組的數(shù)組值發(fā)生變化,則實(shí)參數(shù)組的數(shù)組值也要發(fā)生相同變化,因?yàn)閷?shí)際上他們就是一個(gè)數(shù)組的兩個(gè)名字。例7.11數(shù)組a中存放了10個(gè)數(shù),用選擇法對(duì)數(shù)組a中的元素進(jìn)行升序排序,并輸出。#include<stdio.h>voidsort(intb[],intn){inti,j,t=0,imin;for(i=0;i<n-1;i++){imin=i;for(j=i+1;j<n;j++)if(b[j]<b[imin]) imin=j;

t=b[i];b[i]=b[imin];b[imin]=t;}}voidmain(){inta[10]={5,67,3,89,8,1,7,23,9,12};inti;for(i=0;i<10;i++)printf("%4d",a[i]);

/*排序前輸出a數(shù)組元素值*/printf("\n");

sort(a,10);for(i=0;i<10;i++)printf("%4d",a[i]);

/*排序后輸出a數(shù)組元素值*/printf("\n");}運(yùn)行結(jié)果為:5673898172391213578912236789排序前a數(shù)組存儲(chǔ)情況排序后a數(shù)組存儲(chǔ)情況

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]56738981723912b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]13578912236789b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]調(diào)用sort時(shí)b數(shù)組才存在調(diào)用sort結(jié)束時(shí)b數(shù)組消失關(guān)于數(shù)組名作函數(shù)參數(shù)的說(shuō)明:(1)用數(shù)組名作函數(shù)參數(shù),必須在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義實(shí)參數(shù)組和形參數(shù)組。(2)形參數(shù)組和相對(duì)應(yīng)的實(shí)參數(shù)組類型、位置必須一一對(duì)應(yīng),二者不一致時(shí),即會(huì)發(fā)生錯(cuò)誤。(3)定義形參數(shù)組時(shí),可以說(shuō)明數(shù)組的大小,也可以不說(shuō)明數(shù)組的大小,但空方括號(hào)不能省略。若需知道數(shù)組的大小,可另設(shè)一個(gè)參數(shù),傳遞需處理的數(shù)組元素個(gè)數(shù),如例7.11所示。關(guān)于數(shù)組名作函數(shù)參數(shù)的說(shuō)明:(4)數(shù)組名作函數(shù)參數(shù)時(shí),若形參數(shù)組的數(shù)組值發(fā)生變化,則實(shí)參數(shù)組的數(shù)組值也要發(fā)生相同變化。由這點(diǎn)看,似乎參數(shù)的傳遞是雙向的,但這是錯(cuò)的。在C語(yǔ)言中,無(wú)論是數(shù)值傳遞還是地址傳遞都是是單向的,只能是由實(shí)參數(shù)組傳遞給形參數(shù)組,不能反向傳遞。(5)形參數(shù)組和實(shí)參數(shù)組的長(zhǎng)度可以不相同,因?yàn)樵谡{(diào)用時(shí),只傳送首地址而不檢查形參數(shù)組的長(zhǎng)度。當(dāng)形參數(shù)組的長(zhǎng)度與實(shí)參數(shù)組不一致時(shí),雖不致于出現(xiàn)語(yǔ)法錯(cuò)誤(編譯能通過(guò)),但程序的運(yùn)行結(jié)果將與實(shí)際不符,這是應(yīng)予以注意的。(自學(xué)例7.12

)多維數(shù)組作為函數(shù)的參數(shù)多維數(shù)組名作為函數(shù)的參數(shù)時(shí),在函數(shù)定義時(shí)對(duì)形參數(shù)組可以指定每一維的長(zhǎng)度,也可省去第一維的長(zhǎng)度。以下寫法都是合法的。

intMA(inta[3][10])或intMA(inta[][10])字符串可以理解為字符數(shù)組,字符數(shù)組名也可以作為函數(shù)的參數(shù)。其詳細(xì)操作見指針一章?!纠?.13】在一個(gè)3×3的二維數(shù)組中,求所有元素中的最大值。#include<stdio.h>intMax(intarray[][3]){inti,j,k,max; max=array[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(array[i][j]>max)max=array[i][j];

returnmax;}voidmain(){inta[3][3]={{8,3,5},{1,4,6},{15,17,34}}; printf("\nmaxvalueis%d\n",Max(a));}運(yùn)行結(jié)果為:maxvalueis347.6函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)的嵌套調(diào)用C語(yǔ)言中各函數(shù)之間是平行的,不存在相互包含的關(guān)系。雖然C語(yǔ)言不允許函數(shù)嵌套定義,但允許函數(shù)的嵌套調(diào)用。即在調(diào)用一個(gè)函數(shù)的過(guò)程中,又調(diào)用另一個(gè)函數(shù)。main函數(shù)調(diào)用A函數(shù)結(jié)束A函數(shù)調(diào)用B函數(shù)B函數(shù)①⑧⑦⑥⑤④③②⑨此位置為斷點(diǎn)【例7.14】計(jì)算22!+32!的階乘和s。#include<stdio.h>

longf1(intp)/*計(jì)算平方值*/

{intk;

longr;

longf2(int);

k=p*p;

r=f2(k); returnr;}longf2(intq)/*計(jì)算階乘值*/{longc=1;inti;for(i=1;i<=q;i++)c=c*i;returnc; }main(){inti;longs=0;for(i=2;i<=3;i++) s=s+f1(i); printf("\ns=%ld\n",s);}運(yùn)行結(jié)果為:S=3629042函數(shù)的遞歸調(diào)用在調(diào)用一個(gè)函數(shù)的過(guò)程中又直接或間接地調(diào)用函數(shù)本身稱為遞歸調(diào)用,這種函數(shù)稱為遞歸函數(shù)。f函數(shù)調(diào)用f函數(shù)f1函數(shù)調(diào)用f2函數(shù)f2函數(shù)調(diào)用f1函數(shù)圖7-6直接遞歸調(diào)用圖7-7間接遞歸調(diào)用【例7.15】用遞歸法計(jì)算n!??捎孟率龉奖硎荆簄!=1(n=0,1)

;n!=n×(n-1)!(n>1)longfact(intn){longf;if(n<0)printf("n<0,inputerror"); elseif(n==0||n==1)f=1; elsef=fact(n-1)*n; return(f);}main(){intn;longy;printf("\ninputaintegernumber:\n");scanf("%d",&n);y=fact(n);printf("%d!=%ld",n,y);}函數(shù)的遞歸調(diào)用有兩個(gè)過(guò)程,一是下推,一是回代。fact(9)=9*fact(8)fact(8)=8*fact(7)fact(2)=2*fact(1)fact(1)=1fact(9)=9*8*7*6*5*4*3*2*1fact(8)=8*7*6*5*4*3*2*1fact(2)=2*1fact(3)=3*fact(2)fact(3)=3*2*1············下推回代7.7變量的作用域與存儲(chǔ)類別變量的有效使用范圍稱為變量的作用域。C語(yǔ)言中所有的變量都有自己的作用域。變量說(shuō)明的方式不同,其作用域也不同。變量的作用域可分為局部變量和全局變量?jī)煞N。局部變量(內(nèi)部變量)是在函數(shù)內(nèi)部定義的變量。其作用域僅限于函數(shù)內(nèi),在該函數(shù)以外使用這種變量,就是非法的。以前學(xué)的變量都是局部變量。全局變量(外部變量)是在函數(shù)外部定義的變量。其作用范圍是在其所定義點(diǎn)之后一直到本程序結(jié)束的程序部分中有效。7.7.1變量的作用域局部變量main(){ ints,m; …… { intn; …… } ……}注意:(1)形參變量和實(shí)參變量都是局部變量。(2)在不同的函數(shù)中允許使用相同名稱的局部變量。(3)在復(fù)合語(yǔ)句中也可定義變量,其作用域只在復(fù)合語(yǔ)句范圍內(nèi)。s,m的作用域n作用域【例7.16】關(guān)于局部變量的例題。#include<stdio.h>voidmain(){ intk=5; { intk=8; printf("k=%d\n",k); } printf("k=%d\n",k);}

運(yùn)行結(jié)果為:k=8k=5全局變量關(guān)于全局變量的說(shuō)明:(1)在函數(shù)之前定義全局變量,在函數(shù)內(nèi)使用該變量可不加說(shuō)明;在函數(shù)之后定義全局變量,則必須在函數(shù)中對(duì)該全局變量進(jìn)行說(shuō)明,才能使用該全局變量。且在整個(gè)程序內(nèi),可對(duì)全局變量進(jìn)行多次說(shuō)明。全局變量說(shuō)明的一般形式為:extern類型說(shuō)明符變量名,變量名,…;全局變量定義時(shí)可賦初值,但說(shuō)明全局變量時(shí)是不能賦初值的。(2)全局變量可加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,若全局變量在其中一個(gè)函數(shù)中發(fā)生變化,則在其他函數(shù)中該全局變量要同時(shí)發(fā)生變化,用時(shí)一定注意。(3)在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),全局變量不起作用?!纠?.17】利用全局變量,編程求半徑為r的圓的周長(zhǎng)和面積以及半徑為r的球體的體積#include<stdio.h>#definePi3.1415926floatS,V;floatf(floatr){floatL;L=2*Pi*r;S=Pi*r*r;V=4.0/3*Pi*r*r*r;return(L);}main(){floatr,L;printf("\ninputanumberr:\n");scanf("%f",&r);L=f(r);printf("L=%6.2f,S=%6.2f,V=%6.2f\n",L,S,V);}運(yùn)行過(guò)程與結(jié)果為:inputanumberr:4L=25.13,S=50.27,V=268.08【例7.18】全局變量和局部變量同名。#include<stdio.h>intf(inta,intb){externinth; /*說(shuō)明全局變量h*/intv;v=a*b*h;returnv;}main(){externintb,h; /*說(shuō)明全局變量b,h*/inta=5;printf("v=%d",f(a,b));}inta=3,b=4,h=5; /*定義全局變量a,b,h*/運(yùn)行結(jié)果為:v=1007.7.3變量的存儲(chǔ)類型變量存儲(chǔ)類型是指變量占用內(nèi)存空間的方式,也稱為存儲(chǔ)方式。變量的存儲(chǔ)方式可分為“靜態(tài)存儲(chǔ)”和“動(dòng)態(tài)存儲(chǔ)”兩種。靜態(tài)存儲(chǔ)變量通常是在變量定義時(shí)就分配存儲(chǔ)單元并一直保持不變,直至整個(gè)程序結(jié)束。外部變量即屬于此類存儲(chǔ)方式。動(dòng)態(tài)存儲(chǔ)變量是在程序執(zhí)行過(guò)程中,使用它時(shí)才分配存儲(chǔ)單元,使用完畢立即釋放。典型的例子是函數(shù)的形式參數(shù),在函數(shù)定義時(shí)并不給形參分配存儲(chǔ)單元,只是在函數(shù)被調(diào)用時(shí),才予以分配,調(diào)用函數(shù)完畢立即釋放。7.7.3變量的存儲(chǔ)類型靜態(tài)存儲(chǔ)變量是一直存在的,而動(dòng)態(tài)存儲(chǔ)變量則時(shí)而存在,時(shí)而消失。運(yùn)行程序時(shí),變量存在的時(shí)間稱作變量的生存期。生存期的長(zhǎng)短取決于變量存儲(chǔ)方式。生存期和作用域是從時(shí)間和空間這兩個(gè)不同的角度來(lái)描述變量的特性,這兩者既有聯(lián)系,又有區(qū)別。變量的存儲(chǔ)類型說(shuō)明在C語(yǔ)言中,對(duì)變量的存儲(chǔ)類型說(shuō)明有以下4種:auto:自動(dòng)變量register:寄存器變量extern:外部變量static:靜態(tài)變量存儲(chǔ)類型說(shuō)明格式如下:

存儲(chǔ)類型說(shuō)明符數(shù)據(jù)類型說(shuō)明符變量名,變量名…;例如:staticinta,b; 定義a,b為靜態(tài)類型變量autocharc1,c2; 定義c1,c2為自動(dòng)字符變量staticintx[5]={1,2,3,4,5}; 定義x為靜態(tài)整型數(shù)組externintx,y; 定義x,y為外部整型變量變量的存儲(chǔ)類型說(shuō)明(續(xù))1.a(chǎn)uto型自動(dòng)變量這種存儲(chǔ)類型是C語(yǔ)言程序中使用最廣泛的一種類型。C語(yǔ)言規(guī)定,函數(shù)內(nèi)凡未加存儲(chǔ)類型說(shuō)明的局部變量均視為自動(dòng)變量。在前面各章的程序中凡未加auto存儲(chǔ)類型說(shuō)明符的局部變量都是自動(dòng)變量。自動(dòng)變量屬于動(dòng)態(tài)存儲(chǔ)方式。

2.extern型外部變量全局變量就是外部變量。全局變量是從它的作用域提出的,外部變量是從它的存儲(chǔ)方式提出的,表示了它的生存期。外部變量不僅可以在同一個(gè)文件的不同函數(shù)中應(yīng)用,還可以在多個(gè)文件中應(yīng)用。外部變量屬于靜態(tài)存儲(chǔ)方式。外部變量在多個(gè)文件中的應(yīng)用/*F1.c*/#include<stdio.h>#include"F2.c"

/*包含文件F2.c*/intx,y;charz;main(){externfunc();/*說(shuō)明外部函數(shù)*/x=5;y=9;z='k';

func();}/*F2.c*/#include<stdio.h>externintx,y;/*外部變量說(shuō)明*/externcharz;/*外部變量說(shuō)明*/func(){printf("x=%d,y=%d,z=%c",x,y,z);}運(yùn)行結(jié)果為:x=5,y=9,z=k有一個(gè)程序由文件F1.c和F2.c組成:變量的存儲(chǔ)類型說(shuō)明(續(xù))3.static型靜態(tài)變量用static定義的變量為靜態(tài)變量靜態(tài)變量屬于靜態(tài)存儲(chǔ)方式。用static定義的外部變量就是靜態(tài)外部變量。用static定義的自動(dòng)變量就是靜態(tài)自動(dòng)變量(靜態(tài)局部變量),由動(dòng)態(tài)存儲(chǔ)方式變?yōu)殪o態(tài)存儲(chǔ)方式。對(duì)基本類型的靜態(tài)局部變量若在說(shuō)明時(shí)未賦以初值,則系統(tǒng)自動(dòng)賦予0值。而對(duì)自動(dòng)變量不賦初值,則其值是不定的。變量的存儲(chǔ)類型說(shuō)明(續(xù))main(){f();f();f();}

運(yùn)行結(jié)果為:j=10j=20j=30#include<stdio.h>voidf(){staticintj=10;printf("j=%d\n",j);j=j+10;}靜態(tài)變量的生存期為整個(gè)源程序。雖然離開定義它的函數(shù)后不能使用,但如再次調(diào)用定義它的函數(shù)時(shí),它又可繼續(xù)使用,而且保存了前次被調(diào)用后留下的值。全局變量與靜態(tài)全局變量的存儲(chǔ)方式相同,都是靜態(tài)的,但作用域不同。當(dāng)一個(gè)程序由多個(gè)文件組成時(shí),非靜態(tài)的全局變量在各個(gè)文件中都是有效的;而靜態(tài)全局變量只在定義該變量的文件內(nèi)有效,在同一程序的其他文件中不能使用它。變量的存儲(chǔ)類型說(shuō)明(續(xù))4.register型寄存器變量寄存器變量存放在CPU的寄存器中,使用時(shí),不需要訪問(wèn)內(nèi)存,而直接從寄存器中存取,這樣可提高效率。例7.20求12~1002的平方和。#include<stdio.h>main(){registeri;registerlongs=0;for(i=1;i<=100;i++)s=s+i*i;printf("s=%ld\n",s);}變量的存儲(chǔ)類型說(shuō)明(續(xù))運(yùn)行結(jié)果為:S=3383507.7.4函數(shù)的作用域C語(yǔ)言按作用域不同將函數(shù)分為兩類:內(nèi)部函數(shù)和外部函數(shù)。1.內(nèi)部函數(shù)如果在一個(gè)源文件中定義的函數(shù)只能被本文件中的函數(shù)調(diào)用,而不能被同一源程序其他文件中的函數(shù)調(diào)用,這種函數(shù)稱為內(nèi)部函數(shù)。定義內(nèi)部函數(shù)的一般形式如下。格式:static類型說(shuō)明符函數(shù)名(形參表)例如:staticintf(inta,intb)2.外部函數(shù)外部函數(shù)在整個(gè)源程序中都有效,其定義的一般形式如下。格式:extern類型說(shuō)明符函數(shù)名(形參表)例如:externintf(inta,intb)注意:如在函數(shù)定義中沒有說(shuō)明extern或static,則隱含為extern。7.8編譯預(yù)處理在C語(yǔ)言中,以“#”號(hào)開頭的命令為預(yù)處理命令。它不是C語(yǔ)言本身的組成部分,而是ANSIC統(tǒng)一規(guī)定的。C編譯系統(tǒng)不能對(duì)預(yù)處理命令進(jìn)行直接編譯,因此在程序編譯之前,必須對(duì)這些特殊的命令進(jìn)行“預(yù)處理”,使之在運(yùn)行時(shí)可以執(zhí)行。預(yù)處理命令包括:文件包含、宏定義常量、條件編譯

由于預(yù)處理命令不是C語(yǔ)言本身的組成部分,因此書寫程序時(shí)預(yù)處理命令應(yīng)寫在函數(shù)的外部,通常是源程序的開始部分,且命令后不加“;”

7.8.1文件包含格式:#include"文件名"

或#include<文件名>例如:#include"stdio.h"、#include"math.h"功能:是把指定的文件插入該命令行位置取代該命令行,從而把指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件。<文件名>:表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時(shí)設(shè)置的;“文件名”:表示首先在當(dāng)前的源文件目錄中查找,若未找到才到包含目錄中去查找。一個(gè)包含命令只能指定一個(gè)被包含文件,若有多個(gè)文件要包含,則需用多個(gè)包含命令。(3)文件包含允許嵌套,即在一個(gè)被包含的文件中又可以包含另一個(gè)文件。例7.21多文件調(diào)用。由鍵盤輸入10個(gè)數(shù),找出其最大值與最小值并計(jì)算出平均值。/*func7.21.cpp*/#include<stdio.h>#include“7.211.c” /*包含文件7.211.c,程序7.211.c見教材*/#include"7.212.c" /*包含文件7.212.c,程序7.212.c見教材*/#include"7.213.c" /*包含文件7.213.c,程序7.213.c見教材*/main(){ externintmmax(inta[],intn); /*聲明外部函數(shù)mmax*/

externintmmin(inta[],intn); /*聲明外部函數(shù)mmin*/

externfloatavg(inta[],intn); /*聲明外部函數(shù)avg*/ floataverage; inti,max,min,b[10]; for(i=0;i<10;i++) scanf("%d",&b[i]);

max=mmax(b,10); /*調(diào)用外部函數(shù)mmax*/

min=mmin(b,10); /*調(diào)用外部函數(shù)mmin*/

average=avg(b,10); /*調(diào)用外部函數(shù)avg*/ printf("max=%d,min=%d,average=%.2f",max,min,average);}7.8.2宏定義宏定義是指用一個(gè)宏名(即名字)來(lái)代表一個(gè)字符串。格式:#define宏名[(形參表)]字符串

功能:在編譯預(yù)處理時(shí),對(duì)程序中所有出現(xiàn)的“宏名”都用宏定義中的字符串去代換,這稱為“宏代換”或“宏展開”。例如:#definePi3.1415926#defineS(Pi*R*R)“宏名”為所定義的宏的名字,一般用大寫字符表示。形參表:形參之間用“,”隔開。在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。對(duì)于帶參數(shù)的宏

在調(diào)用中,不僅要將宏展開,而且要用實(shí)參去代換形參。帶參宏調(diào)用的一般形式如下。

宏名(實(shí)參表);3.字符串:可以是常數(shù)、表達(dá)式、格式串等。7.8.2宏定義(續(xù))4.宏定義允許嵌套,在宏定義的字符串中可以使用已經(jīng)定義的宏名。在宏展開時(shí)由預(yù)處理程序?qū)訉哟鷵Q。

但預(yù)處理程序?qū)甏鷵Q不做任何檢查直接替換。5.宏定義必須寫在函數(shù)之外,其作用域?yàn)閺暮甓x命令起到源程序結(jié)束。如要終止其作用域,可使用#undef命令,例如:

#definePI3.14159main(){……}PI的作用域#undefPIf1(){……}/*表示PI只在main函數(shù)中有效,在f1中無(wú)效*/7.8.2宏定義(續(xù))6.可用宏定義表示數(shù)據(jù)類型,使書寫方便。例如:

#defineSTUstructstu(結(jié)構(gòu)體類型)STUstud,*p(stud為結(jié)構(gòu)體類型的一個(gè)變量)1.無(wú)參數(shù)宏定義的應(yīng)用例7.22計(jì)算3!+5!+7!的和。#include<stdio.h>#defineM1*2*3#defineNM*4*5#defineQN*6*7voidmain(){ intS=0; S=M+N+Q; printf("3!+5!+7!=%d\n",S);}

運(yùn)行結(jié)果為:

3!+5!+7!=5166S=M+N+Q替換后為S=1*2*3+1*2*3*4*5+1*2*3*4*5*6*7=5166例7.23計(jì)算4(4x+y2)+5(x2-5y)/*a程序(字符串不加圓括號(hào))*/#include<stdio.h>#defineM4*x+y*y#defineNx*x-5*yvoidmain(){floatx,y,z;scanf("%f",&x);scanf("%f",&y);z=4*M+5*N;printf("z=%.2f\n",z);}運(yùn)行過(guò)程與結(jié)果:2↙3↙z=46.00運(yùn)行過(guò)程與結(jié)果:2↙3↙z=13.00/*b程序(字符串加圓括號(hào))*/#include<stdio.h>#defineM(4*x+y*y)#defineN(x*x-5*y)voidmain(){ floatx,y,z; scanf("%f",&x); scanf("%f",&y); z=4*M+5*N; printf("z=%.2f\n",z);}a程序:z=4*M+5*N=4*4*x+y*y+5*x*x-5*y=4*4*2+3*3+5*2*2-5*3=32+9+20-15=46b程序:z=4*M+5*N=4*(4*x+y*y)+5*(x*x-5*y)=4*(4*2+3*3)+5*(2*2-5*3)=4*17-5*11=68-55=13例7.24對(duì)“輸出格式”進(jìn)行宏定義。#include<stdio.h>#definePprintf#defineD"%d\n"#defineF"%.2f\n"#defineS"%s\n"main(){intx=5,y=8;floata=3.8,b=9.7;charstr1[]="China",str2[]="Beijing";P(DF,x,a);P(DS,y,str1);P(FS,b,str2);}運(yùn)行結(jié)果為:53.808China9.70Beijing例7.24可改為:還可以將“輸出格式”編輯成頭文件,只要將該頭文件包含進(jìn)源程序中,就可應(yīng)用頭文件中的“輸出格式”。建頭文件的過(guò)程與C源程序相同,只是保存時(shí)將擴(kuò)展名設(shè)為.h即可。#include<stdio.h>#include"format.h"main(){ intx=5,y=8; floata=3.8,b=9.7; charstr1[]="China",str2[]="Beijing"; P(DF,x,a); P(DS,y,str1); P(FS,b,str2);}/*頭文件format.h*/#definePprintf#defineD"%d\n"#defineF"%.2f\n"#defineS"%s\n"2.有參數(shù)宏定義的應(yīng)用對(duì)于帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實(shí)參去代換形參。例如:#defineY(x)x*x-3*x+4 /*宏定義*/k=Y(5); /*宏調(diào)用*/k=5*5-3*5+4(1)空格問(wèn)題:宏名和形參表之間不能有空格出現(xiàn),有空格認(rèn)為是無(wú)參宏定義,會(huì)將空格后的字符都當(dāng)作替換字符串的一部分。例如,若Y與(x)之間有空格:#defineY(x)x*x-3*x+4 /*宏定義*/k=Y(5); /*宏調(diào)用*/則k=Y(5)的宏展開后的語(yǔ)句為:k=(x)x*x-3*x+4(5)顯然是錯(cuò)誤的。(3)在宏定義中,字符串內(nèi)的形參通常要用括號(hào)括起來(lái)以避免出錯(cuò),見下面例題。/*7.25b*/#include<stdio.h>#defineS(x)x*xmain(){inta=2,sum;sum=S(a)+S(a+2)+S(a+4);printf("sum=%d\n",sum);}運(yùn)行結(jié)果為:sum=26【例7.25】計(jì)算22+42+62的和。/*7.25a*/#include<stdio.h>#defineS(x)(x)*(x)main(){inta=2,sum;sum=S(a)+S(a+2)+S(a+4);printf("sum=%d\n",sum);}運(yùn)行結(jié)果為:sum=567.25asum=S(a)+S(a+2)+S(a+4)=a*a+(a+2)*(a+2)+(a+4)*(a+4)7.25

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論