高考山東卷理科綜合試題及參考答案.ppt_第1頁
高考山東卷理科綜合試題及參考答案.ppt_第2頁
高考山東卷理科綜合試題及參考答案.ppt_第3頁
高考山東卷理科綜合試題及參考答案.ppt_第4頁
高考山東卷理科綜合試題及參考答案.ppt_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

VIP免費(fèi)下載

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

文檔簡介

第7章 函數(shù),課堂提問 1.用循環(huán)編程計(jì)算輸出6! 2.輸入m,n,計(jì)算并輸出Cnm =n!/(m!*(n-m)!),7.0 引例,第八章 函數(shù),7.1 概述-為什么要用函數(shù) 模塊化程序設(shè)計(jì) 基本思想:將一個大的程序按功能分割成一些小模塊, 特點(diǎn): 各模塊相對獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡單 控制了程序設(shè)計(jì)的復(fù)雜性 提高元件的可靠性 縮短開發(fā)周期 避免程序開發(fā)的重復(fù)勞動 易于維護(hù)和功能擴(kuò)充 開發(fā)方法: 自上向下,逐步分解,分而治之,C是模塊化程序設(shè)計(jì)語言,C程序結(jié)構(gòu),C是函數(shù)式語言 必須有且只能有一個名為main的主函數(shù) C程序的執(zhí)行總是從main函數(shù)開始,在main中結(jié)束 函數(shù)不能嵌套定義,可以嵌套調(diào)用,函數(shù)分類 從用戶角度 標(biāo)準(zhǔn)函數(shù)(庫函數(shù)):由系統(tǒng)提供 用戶自定義函數(shù) 從函數(shù)形式 無參函數(shù) 有參函數(shù),使用庫函數(shù)應(yīng)注意: 1、函數(shù)功能 2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型 3、函數(shù)返回值意義和類型 4、需要使用的包含文件,Ch7_201.c,7.2 函數(shù)的定義,7.2.1 為什么要定義函數(shù) C語言要求,在程序中用到的所有函數(shù),必須“先定義,后使用” 指定函數(shù)名字、函數(shù)返回值類型、函數(shù)實(shí)現(xiàn)的功能以及參數(shù)的個數(shù)與類型,將這些信息通知編譯系統(tǒng)。 指定函數(shù)的名字,以便以后按名調(diào)用 指定函數(shù)類型,即函數(shù)返回值的類型 指定函數(shù)參數(shù)的名字和類型,以便在調(diào)用函數(shù)時向它們傳遞數(shù)據(jù) 指定函數(shù)的功能。,一般格式,合法標(biāo)識符,函數(shù)返回值類型 缺省int型 無返回值void,函數(shù)體,函數(shù)類型 函數(shù)名(形參類型說明表) 說明部分 語句部分 ,例 有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x,int y) int z; z=xy?x:y; return(z); ,例 無參函數(shù) printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); ,7.3 調(diào)用函數(shù),7.3.1函數(shù)調(diào)用的形式 7.3.2函數(shù)調(diào)用時的數(shù)據(jù)傳遞 7.3.3函數(shù)調(diào)用的過程 7.3.4函數(shù)的返回值,7.3.1函數(shù)調(diào)用的形式,按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來分,可以有以下3種函數(shù)調(diào)用方式: . 函數(shù)調(diào)用語句 如 printf_star(); 這時不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作 2.函數(shù)調(diào)用出現(xiàn)在另一個表達(dá)式中 如c=max(a,b); . 函數(shù)參數(shù) 函數(shù)調(diào)用作為另一函數(shù)調(diào)用時的實(shí)參 如mmax(a,max(b,c);,7.3.2 函數(shù)調(diào)用時的數(shù)據(jù)傳遞,1.形式參數(shù)和實(shí)際參數(shù) 在調(diào)用有參函數(shù)時,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系 定義函數(shù)時函數(shù)名后面的變量名稱為“形式參數(shù)”(簡稱“形參”) 主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面參數(shù)稱為“實(shí)際參數(shù)”(調(diào)用函數(shù)時函數(shù)名后面括號中的表達(dá)式,簡稱“實(shí)參”) 實(shí)際參數(shù)可以是常量、變量或表達(dá)式,7.3.2 函數(shù)調(diào)用時的數(shù)據(jù)傳遞,例7.2輸入兩個整數(shù),要求輸出其中值較大者。要求用函數(shù)來找到大數(shù)。,main() int a,b,c; scanf(“%d,%d“, ,說明: 實(shí)參必須有確定的值 形參必須指定類型 形參與實(shí)參類型一致,個數(shù)相同 若形參與實(shí)參類型不一致,自動按形參類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換 形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放,7.3.2 函數(shù)調(diào)用時的數(shù)據(jù)傳遞 形參與實(shí)參 形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名 實(shí)際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中的表達(dá)式,例 計(jì)算x的立方,#include float cube(float x) return(x*x*x); main() float a, product; printf(“Please input value of a:“); scanf(“%f“, ,x,1.2,1.2,1.728,參數(shù)傳遞方式 值傳遞方式 方式:函數(shù)調(diào)用時,為形參分配單元,并將實(shí)參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原值 特點(diǎn): 形參與實(shí)參占用不同的內(nèi)存單元 單向傳遞,地址傳遞 方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參 特點(diǎn): 形參與實(shí)參占用同樣的存儲單元 “雙向”傳遞 實(shí)參和形參必須是地址常量或變量,7.3.3 函數(shù)調(diào)用的過程,在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元。在發(fā)生函數(shù)調(diào)用時,函數(shù)max的形參被臨時分配內(nèi)存單元。,2,a,3,b,x,y,2,3,實(shí)參,形參,7.3.3 函數(shù)調(diào)用的過程,調(diào)用結(jié)束,形參單元被釋放 實(shí)參單元仍保留并維持原值,沒有改變 如果在執(zhí)行一個被調(diào)用函數(shù)時,形參的值發(fā)生改變,不會改變主調(diào)函數(shù)的實(shí)參的值,2,a,3,b,x,y,2,3,實(shí)參,形參,7.3.4 函數(shù)的返回值 返回語句 形式: return(表達(dá)式); 或 return 表達(dá)式; 或 return; 功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時把返值帶給調(diào)用函數(shù) 說明: 函數(shù)中可有多個return語句,執(zhí)行到哪一個return語句,哪一個就起作用 若無return語句,遇時,自動返回調(diào)用函數(shù) 若函數(shù)類型與return語句中表達(dá)式值的類型不一致,按前者為準(zhǔn),自動轉(zhuǎn)換-函數(shù)調(diào)用轉(zhuǎn)換 void型函數(shù),例 無返回值函數(shù) void swap(int x,int y ) int temp; temp=x; x=y; y=temp; ,#include int main() int max(float x,float y); float a,b; int c; scanf(“%f,%f,“, ,1.5,2.6,2.6,2,變?yōu)?,printstar() printf(“*“); main() int a; a=printstar(); printf(“%d“,a); ,例 函數(shù)帶回不確定值,輸出:10,void printstar() printf(“*“); main() int a; a=printstar(); printf(“%d“,a); ,編譯錯誤!,例 函數(shù)返回值類型轉(zhuǎn)換,main() float a,b; int c; scanf(“%f,%f“, ,7.4對被調(diào)用函數(shù)的聲明和函數(shù)原型 調(diào)用形式 函數(shù)名(實(shí)參表); 說明: 實(shí)參與形參個數(shù)相等,類型一致,按順序一一對應(yīng) 實(shí)參表求值順序,因系統(tǒng)而定(Turbo C 自右向左),調(diào)用方式 函數(shù)語句: 例 printstar(); printf(“Hello,World!n”); 函數(shù)表達(dá)式: 例 m=max(a,b)*2; 函數(shù)參數(shù): 例 printf(“%d”,max(a,b); m=max(a,max(b,c);,函數(shù)聲明 對被調(diào)用函數(shù)要求: 必須是已存在的函數(shù) 庫函數(shù): #include 用戶自定義函數(shù): 函數(shù)類型說明 函數(shù)聲明 一般形式: 函數(shù)類型 函數(shù)名(形參類型 形參名, ); 或 函數(shù)類型 函數(shù)名(); 作用:告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個數(shù)及類型,以便檢驗(yàn) 函數(shù)定義與函數(shù)說明不同 函數(shù)說明位置:程序的數(shù)據(jù)說明部分(函數(shù)內(nèi)或外) 下列情況下,可不作函數(shù)說明 若函數(shù)返值是char或int型,系統(tǒng)自動按int型處理 被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前 有些系統(tǒng)(如Borland C+)要求函數(shù)說明指出函數(shù)返值類型和形參類型,并且對void 和 int 型函數(shù)也要進(jìn)行函數(shù)說明,函數(shù)聲明舉例 /*例7.4 輸入兩個實(shí)數(shù),用一個函數(shù)求出它們之和*/,7.5 函數(shù)的嵌套 嵌套調(diào)用 C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù),例 求三個數(shù)中最大數(shù)和最小數(shù)的差值,#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z); void main() int a,b,c,d; scanf(“%d%d%d“, ,Ch7_202.c,int dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); ,7. 6函數(shù)的遞歸調(diào)用 定義:函數(shù)直接或間接的調(diào)用自身叫函數(shù)的遞歸調(diào)用,說明 C編譯系統(tǒng)對遞歸函數(shù)的自調(diào)用次數(shù)沒有限制 每調(diào)用函數(shù)一次,在內(nèi)存堆棧區(qū)分配空間,用于存放函數(shù)變量、返回值等信息,所以遞歸次數(shù)過多,可能引起堆棧溢出,int f(int x) int y,z; z=f(y); . return(2*z); ,例7.8 求n的階乘,#include int fac(int n) int f; if(n0) printf(“n0,data error!“); else if(n=0|n=1) f=1; else f=fac(n-1)*n; return(f); main() int n, y; printf(“Input a integer number:“); scanf(“%d“, ,課堂提問:,1.用循環(huán)編程計(jì)算輸出26 2.編寫函數(shù)power(x,y)計(jì)算x y 輸入n,m,通過調(diào)用power(n,m)計(jì)算nm,輸出結(jié)果 3.使用遞歸編寫函數(shù)power(x,y)計(jì)算x y,例 7. (漢諾)塔問題。這是一個古典的數(shù)學(xué)問題,是一個用遞歸方法解題的典型例子。問題是這樣的:古代有一個梵塔,塔內(nèi)有3個座A、B、C,開始時座上有個盤子,盤子大小不等,大的在下,小的在上(見圖7.)。有一個老和尚想把這個盤子從座移到座,但每次只允許移動一個盤,且在移動過程中在3個座上都始終保持大盤在下,小盤在上。在移動過程中可以利用座,要求編程序打印出移動的步驟。,為便于理解,我們先分析將座上個盤子移到座上的過程:,(1) 將座上個盤子移到座上(借助); (2) 將座上個盤子移到座上; (3) 將座上個盤子移到座上(借助)。 其中第()步可以直接實(shí)現(xiàn)。第步又可用遞歸方法分解為: 將上個盤子從移到; 將上個盤子從移到; 將上個盤子從移到。 第()步可以分解為: 將上個盤子從移到上; 將上個盤子從移到上; 將上個盤子從移到上。,將以上綜合起來,可得到移動3個盤子的步驟為 ,。,由上面的分析可知:將個盤子從座移到座可以分解為以下3個步驟: (1) 將上個盤借助座先移到座上。 (2) 把座上剩下的一個盤移到座上。 (3) 將個盤從座借助于座移到座上。,程序如下: #include void main() void hanoi(int n,char one,char two,char three); /* 對hanoi函數(shù)的聲明 */ int m; printf(“input the number of diskes:“); scanf(“%d”, ,void hanoi(int n,char one,char two,char three) /* 定義hanoi函數(shù),將個盤從one座借助two座,移到three座 */ void move(char x,char y); /* 對move函數(shù)的聲明 */ if(n=1) move(one,three); else hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); void move(char x,char y) /* 定義move函數(shù) */ printf(“%c%cn“,x,y); ,運(yùn)行情況如下: input the number of diskes:3 The steps to noving 3 diskes: ,7.7 數(shù)組作為函數(shù)參數(shù) 7.7.1數(shù)組元素作函數(shù)實(shí)參 數(shù)組元素作函數(shù)實(shí)參值傳遞,例7.9 輸入10個數(shù),要求輸出其中值最大的元素和該數(shù)是第幾個數(shù)。 解題思路: 定義數(shù)組a,用來存放10個數(shù) 設(shè)計(jì)函數(shù)max,用來求兩個數(shù)中的大者 在主函數(shù)中定義變量m,初值為a0,每次調(diào)用max函數(shù)后的返回值存放在m中 用“打擂臺”算法,依次將數(shù)組元素a1到a9與m比較,最后得到的m值就是10個數(shù)中的最大者,#include int main() int max(int x,int y); int a10,m,n,i; printf(“10 integer numbers:n“); for(i=0;i10;i+) scanf(“%d“,for(i=1,m=a0,n=0;im) m=max(m,ai); n=i; printf(“l(fā)argest number is %dn“,m); printf(“%dth number.n“,n+1); ,int max(int x,int y) return(xy?x:y); ,7.7.1數(shù)組元素作函數(shù)實(shí)參值傳遞,例 兩個數(shù)組大小比較(課本無本例),n=0 m=0 k=0,a和b為有10個元素的整型數(shù)組 比較兩數(shù)組對應(yīng)元素 變量n,m,k記錄aibi, ai=bi, aik,認(rèn)為數(shù)組ab 若nk,認(rèn)為數(shù)組ab 若n=k,認(rèn)為數(shù)組a=b,7.7.2數(shù)組名作函數(shù)參數(shù) 地址傳遞 在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類型應(yīng)一致 形參數(shù)組大小(多維數(shù)組第一維)可不指定 形參數(shù)組名是地址變量,例例7.11 有一個一維數(shù)組,內(nèi)放個學(xué)生成績,求平均成績。,#include float average(int stu10, int n); void main() int score10, i; float av; printf(“Input 10 scores:n“); for( i=0; i10; i+ ) scanf(“%d“, ,float average(int stu10, int n) int i; float av,total=0; for( i=0; in; i+ ) total += stui; av = total/n; return av; ,實(shí)參用數(shù)組名,形參用數(shù)組定義, int stu ,例 數(shù)組元素與 數(shù)組名 作函數(shù)參數(shù)比較,#include void swap2(int x,int y) int z; z=x; x=y; y=z; main() int a2=1,2; swap2(a0,a1); printf(“a0=%dna1=%dn“,a0,a1); ,值傳遞,#include void swap2(int x) int z; z=x0; x0=x1; x1=z; main() int a2=1,2; swap2(a); printf(“a0=%dna1=%dn“,a0,a1); ,地址傳遞,例 數(shù)組元素與 數(shù)組名 作函數(shù)參數(shù)比較,例7.12用選擇法對數(shù)組中10個整數(shù)按由小到大排序。 解題思路: 所謂選擇法就是先將10個數(shù)中最小的數(shù)與a0對換;再將a1到a9中最小的數(shù)與a1對換每比較一輪,找出一個未經(jīng)排序的數(shù)中最小的一個 共比較9輪,例 7.13 用選擇法對數(shù)組中10個整數(shù)按由小到大排序,9,49,i=0,例題 7.12 用選擇法對數(shù)組中10個整數(shù)按由小到大排序,13,68,i=1,i=8,例 數(shù)組排序-簡單選擇排序,小結(jié): 一維數(shù)組名作為函數(shù)實(shí)際參數(shù)時,傳遞的值是數(shù)組首元素的地址; 一維數(shù)組形式參數(shù)變量本質(zhì)上是一個存儲地址的變量.,例7.13 有一個的矩陣,求所有元素中的最大值。,int max_value(int array34) int i,j,k,max; max=array00; for(i=0;imax) max=arrayij; return(max); main() int a34=1,3,5,7, 2,4,6,8,15,17,34,12; printf(“max value is %dn“,max_value(a); ,7.7.3多維數(shù)組名作為函數(shù)參數(shù),例 求二維數(shù)組中各行元素之和,get_sum_row(int x3, int result ,int row, int col) int i,j; for(i=0;irow;i+) resulti=0; for(j=0;jcol;j+) resulti+=xij; main() int a23=3,6,9,1,4,7; int sum_row2,row=2,col=3,i; get_sum_row(a,sum_row,row,col); for(i=0;irow;i+) printf(“The sum of row%d=%dn“,i+1,sum_rowi); ,18,12,7.8局部變量和全局變量 變量的存儲屬性 概述 變量是對程序中數(shù)據(jù)的存儲空間的抽象,編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元,10,程序中使用變量名對內(nèi)存操作,變量的屬性 數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性) 存儲屬性 存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū) 生存期:變量在某一時刻存在-靜態(tài)變量與動態(tài)變量 作用域:變量在某區(qū)域內(nèi)有效-局部變量與全局變量 變量的存儲類型 auto -自動型 register-寄存器型 static -靜態(tài)型 extern -外部型 變量定義格式: 存儲類型 數(shù)據(jù)類型 變量表;,7.8 變量的存儲屬性 概述 變量是對程序中數(shù)據(jù)的存儲空間的抽象,如: int sum; auto int a,b,c; register int i; static float x,y;,局部變量與全局變量 局部變量-內(nèi)部變量 定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效 說明: main中定義的變量只在main中有效 不同函數(shù)中同名變量,占不同內(nèi)存單元 形參屬于局部變量 可定義在復(fù)合語句中有效的變量 局部變量可用存儲類型:auto register static (默認(rèn)為auto),全局變量-外部變量 定義:在函數(shù)外定義,可為本文件所有函數(shù)共用 有效范圍:從定義變量的位置開始到本源文件結(jié)束,及有extern說明的其它源文件,應(yīng)盡量少使用全局變量,因?yàn)椋?全局變量在程序全部執(zhí)行過程中占用存儲單元 降低了函數(shù)的通用性、可靠性,可移植性 降低程序清晰性,容易出錯,定義 說明 次數(shù): 只能1次 可說明多次 位置: 所有函數(shù)之外 函數(shù)內(nèi)或函數(shù)外 分配內(nèi)存: 分配內(nèi)存,可初始化 不分配內(nèi)存,不可初始化,外部變量說明: extern 數(shù)據(jù)類型 變量表;,外部變量定義與外部變量說明不同,若外部變量與局部變量同名,則外部變量被屏蔽,外部變量可用存儲類型:缺省 或 static,float max,min; float average(float array, int n) int i; float sum=array0; max=min=array0; for(i=1;imax) max=arrayi; else if(arrayimin) min=arrayi; sum+=arrayi; return(sum/n); main() int i; float ave,score10; /*Input */ ave=average(score,10); printf(“max=%6.2fnmin=%6.2fn average=%6.2fn“,max,min,ave); ,例7.14 有一個一維數(shù)組,內(nèi)放10個學(xué)生成績,寫一個函數(shù),當(dāng)主函數(shù)調(diào)用此函數(shù)后,能求出平均分、最高分和最低分,extern char c1,c2;,extern char c1,c2;,例 外部變量定義與說明,int max(int x, int y) int z; z=xy?x:y; return(z); main() extern int a,b; printf(“max=%d“,max(a,b); int a=13,b=-8;,運(yùn)行結(jié)果:max=13,extern int a,b; int max() int z; z=ab?a:b; return(z); main() printf(“max=%d“,max(); int a=13,b=-8;,/*ch7_17.c*/ int a=3,b=5; max(int a, int b) int c; c=ab?a:b; return(c); main() int a=8; printf(“max=%d“,max(a,b); ,例 7.16 外部變量與局部變量同名,運(yùn)行結(jié)果:max=8,int i; main() void prt(); for(i=0;i5;i+) prt(); void prt() for(i=0;i5;i+) printf(“%c”,*); printf(“n”); ,例 外部變量副作用,運(yùn)行結(jié)果:*,7.9變量的存儲方式和生存期-動態(tài)變量與靜態(tài)變量 存儲方式 靜態(tài)存儲:程序運(yùn)行期間分配固定存儲空間 動態(tài)存儲:程序運(yùn)行期間根據(jù)需要動態(tài)分配存儲空間 內(nèi)存用戶區(qū),生存期 靜態(tài)變量:從程序開始執(zhí)行到程序結(jié)束 動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束,變量存儲類型,局部變量默認(rèn)為auto型 register型變量個數(shù)受限,且不能為long, double, float型 局部static變量具有全局壽命和局部可見性 局部static變量具有可繼承性 extern不是變量定義,可擴(kuò)展外部變量作用域,例 文件file1.c int a; main( ) . . f2; . f1; . f1( ) auto int b; f2; f2( ) static int c; ,例 auto 變量的作用域,main() int x=1; void prt(void); int x=3; prt(); printf(“2nd x=%dn”,x); printf(“1st x=%dn”,x); void prt(void) int x=5; printf(“3th x=%dn”,x); ,運(yùn)行結(jié)果: 3th x=5 2nd x=3 1st x=1,f(int a) auto b0; static c3; bb1; cc1; return(abc); void main() int a2,i; for(i0;i3;i) printf(“d “,f(a); ,例7.17考察靜態(tài)局部變量的值。,運(yùn)行結(jié)果: 7 8 9,靜態(tài)局部變量 特點(diǎn): 函數(shù)中的靜態(tài)局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲單元不釋放,在下一次該函數(shù)調(diào)用時,該變量已有值,就是上一次函數(shù)調(diào)用結(jié)束時的值。,例7.18打印1到5的階乘值。 int fac(int n) static int f1; ff*n; return(f); main() int i; for(i1;i5;i) printf(“d!dn“,i,fac(i); ,在什么情況下需要用局部靜態(tài)變量呢? 需要保留函數(shù)上一次調(diào)用結(jié)束時的值; 如果初始化后,變量只被引用而不改變其值,則這時用靜態(tài)局部變量比較方便,以免每次調(diào)用時重新賦值。,例7.19使用寄存器變量 #include void main ( ) long fac(long); long i,n; scanf(“%ld“, ,main() void gx(),gy(); extern int x,y; printf(“1: x=%dty=%dn”,x,y); y=246; gx(); gy(); void gx() extern int x,y; x=135; printf(“2: x=%dty=%dn”,x,y); int x,y; void gy() printf(“3: x=%dty=%dn”,x,y); ,例 用extern聲明外部變量,擴(kuò)展程序文件中的作用域。,運(yùn)行結(jié)果: 1: x=0 y=0 2: x=135 y=246 3: x=135 y=246,例 引用其它文件中的外部變量 在外部變量前加static限制該變量只能在本文件中引用,例7.21用extern將外部變量的作用域擴(kuò)展到其他文件。 本程序的作用是給定b的值,輸入a和m,求ab和am的值。,7.11 內(nèi)部函數(shù)和外部函數(shù),函數(shù)本質(zhì)上是全局的,因?yàn)橐粋€函數(shù)要被另外的函數(shù)調(diào)用,但是,也可以指定函數(shù)不能被其他文件調(diào)用。根據(jù)函數(shù)能否被其他源文件調(diào)用,將函數(shù)區(qū)分為內(nèi)部函數(shù)和外部函數(shù)。,7.11.1內(nèi)部函數(shù),如果一個函數(shù)只能被本文件中其他函數(shù)所調(diào)用,它稱為內(nèi)部函數(shù)。在定義內(nèi)部函數(shù)時,在函數(shù)名和函數(shù)類型的前面加static。即 static 類型標(biāo)識符 函數(shù)名(形參表) 如 static int fun ( int a , int b ),7.11.2外部函數(shù),(1) 在定義函數(shù)時,如果在函數(shù)首部的最左端加關(guān)鍵字extern,則表示此函數(shù)是外部函數(shù),可供其他文件調(diào)用。如函數(shù)首部可以寫為extern int fun (int a, int b) 這樣,函數(shù)fun就可以為其他文件調(diào)用。C語言規(guī)定,如果在定義函數(shù)時省略extern,則隱含為外部函數(shù)。,(2) 在需要調(diào)用此函數(shù)的文件中,用extern對函數(shù)作聲明,表示該函數(shù)是在其他文件中定義的外部函數(shù),例 7.22 有一個字符串,內(nèi)有若干個字符,今輸入一個字符,要求程序?qū)⒆址性撟址麆h去。用外部函數(shù)實(shí)現(xiàn),File.c(文件) #include void main() extern void enter_string(char str); extern void detele_string(char str,char ch); extern void print_string(char str);*以上3行聲明在本函數(shù)中將要調(diào)用的在其他文件中定義的3個函數(shù)* char c; char str80; enter_string(str); scanf(“%c“, ,file(文件) #include void enter_string(char str80) * 定義外部函數(shù) enter-string* gets(str); *向字符數(shù)組輸入字符串* file(文件) void delete_string(char str,char ch) *定義外部函數(shù) delete_string * int i,j; for(i=j=0;stri!=0;i+) if(stri!=ch) strj+=stri; stri=0; ,file(文件) #include void print_string(char str) printf(“%sn“,str); ,運(yùn)行情況如下: (輸入) (輸入要刪去的字符) (輸出已刪去指定字符的字符串),main() void increment(void); increment(); increment(); increment(); void increment(void) int x=0; x+; printf(“%dn”,x); ,課堂練習(xí)1(提問) - (若有時間,否則做為課外學(xué)習(xí)材料),運(yùn)行結(jié)果:1 1 1,main() void increment(void); increment(); increment(); increment(); void increment(void) static int x=0; x+; printf(“%dn”,x); ,運(yùn)行結(jié)果:1 2 3,課堂練習(xí)2 變量的壽命與可見性,#include int i=1; main() static int a; register int b=-10; int c=0; printf(“-MAIN-n“); printf(“i:%d a:%d b:%d c:%dn“,i,a,b,c); c=c+8; other(); printf(“-MAIN-n“); printf(“i:%d a:%d b:%d c:%dn

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論