




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
7.1函數(shù)概述7.2函數(shù)的聲明7.3函數(shù)定義和函數(shù)調用7.4程序舉例7.5函數(shù)的嵌套調用和遞歸調用7.6變量的作用域7.7變量的存儲類別7.1函數(shù)概述模塊化程序設計基本思想:將一個大的程序按功能分割成一些小模塊。特點:各模塊相對獨立、功能單一、結構清晰、接口簡單控制了程序設計的復雜性縮短開發(fā)周期避免程序開發(fā)的重復勞動易于維護和功能擴充開發(fā)方法:自上向下,逐步分解,分而治之【例7.1】
計算5!+6!+7!并輸出結果。#include<stdio.h>main(){ inti,t,num1=5,num2=6,num3=7,sum=0;
for(i=1,t=1;i<=num1;i++) t=t*i; sum=sum+t;
for(i=1,t=1;i<=num2;i++) t=t*i; sum=sum+t; for(i=1,t=1;i<=num3;i++)
t=t*i; sum=sum+t; printf("5!+6!+7!=%d\n",sum);}出現(xiàn)重復#include<stdio.h>intfac(intnum); main(){ intt1,t2,t3,sum=0;
t1=fac(5); t2=fac(6); t3=fac(7); sum=t1+t2+t3; printf("5!+6!+7!=%d\n",sum);}intfac(intnum) /*定義fac函數(shù),num是形參*/{ inti,t; for(i=1,t=1;i<=num;i++) t=t*i; returnt; /*函數(shù)的返回值*/}7.2函數(shù)的聲明函數(shù)聲明的一般形式如下:類型標識符函數(shù)名(類型形參名1,類型形參名2,…);或類型標識符函數(shù)名(類型,類型,…);#include<stdio.h>intfac(intnum);/*對函數(shù)fac的聲明語句*/main(){ ...}7.3函數(shù)定義和函數(shù)調用函數(shù)類型函數(shù)名(形參類型說明表){
說明部分 語句部分}函數(shù)定義:函數(shù)的調用調用形式
函數(shù)名(實參表);說明:實參與形參個數(shù)相等,類型一致,按順序一一對應實參表求值順序,因系統(tǒng)而定#include<stdio.h>intmax(inta,intb);/*函數(shù)原型的聲明*/intmain(){ intx,y,z; printf("inputtwonumbers:\n"); scanf("%d%d",&x,&y);
z=max(x,y);/*函數(shù)的調用語句*/
printf("maxmum=%d",z); return0;}/*以下是函數(shù)的定義部分*/intmax(inta,intb){ if(a>b)returna; elsereturnb;}實參形參7.5函數(shù)的嵌套調用和遞歸調用7.5.1嵌套調用C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調用函數(shù)例7.7輸入兩個整數(shù),輸出較大值的函數(shù)調用過程如下圖所示。7.5.2函數(shù)的遞歸調用遞歸是一種特殊的解決問題的方法。其基本思想是:將要解決的問題分解成比原問題規(guī)模小的類似子問題,而解決這個類似子問題時,又可以用到原有問題的解決方法,按照這一原則,逐步遞推轉化下去,最終將原問題轉化成較小且有已知解的子問題。(1)遞推階段:將原問題不斷地轉化成子問題,逐漸從未知向已知推進,最終到達已知解的問題,遞推階段結束。(2)回歸階段:從已知解的問題出發(fā),按照遞推的逆過程,逐一求值回歸,最后到達遞歸的開始處,結束回歸階段,獲得問題的解。例如:求5!遞推階段5!=5×4!→4!=4×3!→3!=3×2!→2!=2×1!→1!停止,其中1!=1回歸階段5!=5×4!=120←4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1例:有5個人坐在一起,問第5個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第3個人,又說比第2個人大2歲。問第2個人,說比第1個人大2歲。最后問第1個人,他說是10歲。請問第5個人多大。
age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10用數(shù)學公式表述如下:age(n)=10(n=1)age(n-1)+2(n>1)age(5)
c=age(4)+2;
returnc;age(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;returnc;}遞歸過程跟蹤分析:age(4)
c=age(3)+2;
returnc;age(3)
c=age(2)+2;
returnc;age(2)
c=age(1)+2;
returnc;age(1)
c=10
returnc;c=10c=12c=14c=16c=187.6變量的作用域7.6.1局部變量1、定義:在一個函數(shù)(或復合語句)內部定義的變量。
2、作用域:本函數(shù)(或復合語句)
它只在本函數(shù)范圍(或復合語句)內有效,也就是說只有在本函數(shù)(或復合語句)內才能使用它們,在此函數(shù)以外是不能使用這些變量的。floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效3、說明(1)形式參數(shù)是局部變量。如f1中形參a,出了f1函數(shù)就無效。(2)main中定義的變量只在main中有效,也是局部變量。不能因為在main函數(shù)中定義就在整個文件或程序中有效。main函數(shù)也不能使用其它函數(shù)中定義的變量。例不同函數(shù)中同名變量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}運行結果:main:a=3,b=4sub:a=6,b=7main:a=3,b=43、說明(3)不同函數(shù)中的同名變量,占有不同內存單元,因此不會相互影響3、說明(4)復合語句中的變量運行結果:54321例復合語句中變量#defineN5main(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)
{
inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;
}for(i=0;i<N;i++)printf("%d",a[i]);}變量temp只在本復合語句中有效,離開該復合語句就無效,釋放內存。1、定義:在所有函數(shù)外部定義的變量。全局變量可以為本文件中其他函數(shù)所共用。2、作用域:從定義變量的位置開始到本源文件結束,及有
extern說明的其它源文件。7.6.2全局變量3、說明:(1)有效范圍:從定義或有extern聲明的位置開始,直至它所在源程序文件的結束。intp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2的作用范圍p,q的作用范圍3、說明:
(2)若外部變量與局部變量同名,則外部變量被屏蔽inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}例外部變量與局部變量運行結果:max=8內存…….main(){inta;a=10;printf(“%d”,a);}編譯或函數(shù)調用時為其分配內存單元1020002001程序中使用變量名對內存操作在C語言中每一個變量和函數(shù)有兩個屬性:數(shù)據(jù)類型和數(shù)據(jù)的存儲類別。7.7變量的存儲類別靜態(tài)變量:存儲在靜態(tài)存儲區(qū)的變量。在程序運行期間分配固定的存儲空間不釋放生存期:從程序開始執(zhí)行到程序結束動態(tài)變量:存儲在動態(tài)區(qū)的變量。在程序運行期間根據(jù)需要臨時分配存儲空間,離開即釋放生存期:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結束存儲類別:指變量、函數(shù)等存儲的方式和位置存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(autoregister)函數(shù)調用現(xiàn)場保護和返回地址等變量的存儲類型auto-----自動型register-----寄存器型static------靜態(tài)型extern-----外部型變量定義格式:[存儲類型]數(shù)據(jù)類型變量表;如:intsum;
autointa,b,c;
registerinti;
staticfloatx,y;auto(自動)變量沒有聲明為static的局部變量都屬于此類。如:函數(shù)中的形參和在函數(shù)中定義的變量(包括在復合語句中定義的變量)。存儲特性:存儲在動態(tài)存儲區(qū)。調用時自動動態(tài)分配存儲空間。調用結束后自動釋放存儲空間。例如:
intf(inta)/*定義f函數(shù),a為形參*/
{autointb,c=3;/*定義b、c為自動變量*/
…
}執(zhí)行完f后,自動釋放a、b、c所占的內存。
autointb,c=3和intb,c=3等價。register(寄存器)變量只有auto變量與形式參數(shù)可以作為register變量register變量和auto變量不同之處在于register變量存放在CPU的寄存器中,因此比auto變量存取速度快。通常將頻繁使用的變量放在寄存器中,以提高程序執(zhí)行速度不能對寄存器變量使用取地址運算符&計算機中寄存器的數(shù)量是有限的,而且寄存器的數(shù)據(jù)長度也是有限的。因此register變量不能定義太多,也不能是數(shù)據(jù)類型太大的變量(long、float、double型)目前register變量定義通常是不必要的,優(yōu)化的編譯系統(tǒng)能夠識別使用頻繁的變量,并將其放到寄存器中static(靜態(tài))變量static變量存放在內存的靜態(tài)存儲區(qū),在整個程序運行期間占用固定的內存單元??梢孕揎椌植孔兞亢腿肿兞?。系統(tǒng)在編譯時為static變量分配空間并賦初值,對未賦值的局部static數(shù)值型變量,系統(tǒng)自動給它賦值為0;對未賦值的局部static字符型變量,自動賦值為空字符。因為在編譯時賦初值,所以只能賦一次初值且只能在定義時進行。由于變量占用的存儲單元不消失,再次調用static局部變量時,static局部變量的值為上次調用結束時的值。注意:static局部變量的生存期是整個程序運行期間,但作用域仍然是定義該變量的函數(shù)體(或復合語句)內部。即:靜態(tài)局部變量在函數(shù)調用結束后仍然存在,但其他函數(shù)不能引用它。static修飾全局變量,將使全局變量作用域局限于本文件內。main(){voidincrement(void);increment();increment();increment();}voidincrement(void){intx=0;x++;printf(“%d\n”,x);}練習局部靜態(tài)變量值具有可繼承性運行結果:111main(){voidincrement(void);increment();increment();increment();}voidincrement(void){staticintx=0;x++;printf(“%d\n”,x);}運行結果:123#include<stdio.h>voidmain(){
intf(int);inta=2,i;for(i=0;i<3;i++)printf(“%d”,f(a));
}
intf(inta){autointb=0;
intc=3;
b=b+1;
c=c+1;return(a+b+c);}考察靜態(tài)局部變量的值。#include<stdio.h>voidmain(){
intf(int);inta=2,i;for(i=0;i<3;i++)printf(“%d”,f(a));
}
intf(inta){autointb=0;
staticintc=3;
b=b+1;
c=c+1;return(a+b+c);}結果:7,8,9b、c是自動變量,函數(shù)調用結束后,b、c的存儲空間釋放。再一次調用,b、c重新賦值。c是靜態(tài)局部變量
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政權的偏離與糾正機制試題及答案
- 高考語文內容考察方式的多樣性試題及答案
- 高?;馂木仍畱鳖A案(3篇)
- 社區(qū)防火災工作應急預案(3篇)
- 行業(yè)標準化對市場競爭的影響試題及答案
- 電影院火災突發(fā)應急預案(3篇)
- 出租車行業(yè)火災應急預案(3篇)
- 泵站火災事故應急預案(3篇)
- 《教育統(tǒng)計與測量評價新編教程》課件-教育統(tǒng)計與測量評價新編教程-第07章
- 2025年風險管理工具的應用與分析及試題及答案
- 大學生勞動教育課件:樹立新時代的勞動觀
- 營養(yǎng)篩查及營養(yǎng)實施流程圖課件
- 建筑材料損耗率定額
- 有機化學課后習題答案-李艷梅版
- 國企控股公司所屬公司經(jīng)理層成員任期制和契約化管理辦法(試行)
- 海地軟件幫助
- 現(xiàn)代紡織技術專業(yè)調研報告
- 淺析《山海經(jīng)》的鬼神形象
- 部編版六年級語文下冊期末專題復習課件全套
- 高三化學復習【有機合成與推斷】課件
- 機械通氣常見并發(fā)癥的預防與處理課件
評論
0/150
提交評論