




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1請將您的手機鈴聲
設置為震動
2實驗講義
1、閱讀程序P573、修改程序P584、程序填空P59作業3函數的概念函數的定義函數的調用函數的嵌套函數的調用復習回顧4
方式:函數調用時才為形參分配單元,并將實參的值復制到形參單元值傳遞方式形參與實參占用不同的內存單元單方向傳遞函數的調用方式
特點:5#include<stdio.h>swap(inta,intb){inttemp;temp=a;a=b;b=temp;}main(){intx=7,y=11;
swap(x,y);printf("x=%d,\ty=%d\n",x,y);}例
值傳遞方式temp11x:y:
調用之前7a:b:711函數調用7117數據交換調用結束6方式:函數調用時,將數據的存儲地址傳遞給形參特點:地址傳遞形參與實參占用同樣的存儲單元“雙向”傳遞函數的調用方式7例
地址傳遞方式sort(inta[],intn){……}main(){…sort(x,10);….}x[0]x[1]x[2]…x[9]x=&x[0]a[0]a[1]a[2]…a[9]a=&a[0]10936852714123456789108函數的嵌套遞歸調用變量的作用區域變量的存儲類別講授分為兩種:嵌套調用和遞歸調用9函數的嵌套與遞歸調用C規定:函數定義不可嵌套,
1、函數的嵌套調用但可以嵌套調用函數main()調用函數a結束a函數b函數調用函數b
——函數嵌套調用的示意圖
10【例】計算三個數中最大數與最小數的差。#include<stdio.h>intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);d=dif(a,b,c);printf("Max-Min=%d\n",d);}intdif(intx,inty,intz){return(max(x,y,z)–min(x,y,z));}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()調用函數dif輸出結束dif函數max函數調用函數max調用函數minmin函數112、函數遞歸調用定義:函數直接或間接的調用自身叫函數的遞歸調用f()調f調f2調f1f1()f2()說明intf(intx){inty,z;……z=f(y);…….return(2*z);}intf1(intx){inty,z;……z=f2(y);…….return(2*z);}intf2(intt){inta,c;……c=f1(a);…….return(3+c);}直接遞歸間接遞歸C編譯系統對遞歸函數的自調用次數沒有限制
每調用函數一次,在內存堆棧區分配空間,用于存放函數變量、返回值等信息,所以遞歸次數過多,可能引起堆棧溢出12函數的遞歸調用特點:1.在函數里調用自身;2.在使用遞歸策略時,必須有一個明
確的遞歸結束條件,稱為遞歸出口。有一道這樣的題目..,求小明大哥多大?小明大哥,比小明二哥大兩歲;小明二哥比小明三哥大兩歲;小明三哥比小明大2歲。現在小明10歲,他大哥多大?13longfac(intn){longf;if(n==1)f=1;elsef=n*fac(n-1);return(f);}
1(n=1)n!=
n*(n-1)!(n2)例用遞歸算法計算n!==14main()調用fac(3)打印fac(3)fac(2)3*fac(2)
⑩例函數的遞歸調用2*fac(1)fac(1)12*13*26#include"stdio.h"longfac(intn){longf;if(n==1)f=1;elsef=n*fac(n-1);return(f);}voidmain(){intn;longy;scanf("%d",&n);y=fac(n);printf("%ld",y);}15如何使用遞歸計算斐波那契數列?思考
1(n=1)
Fib(n)=1(n=2)
Fib(n)=Fib(n-1)+Fib(n-2)(n3)1,1,2,3,5,8,13…16#include<stdio.h>Fib(intdata){if(data==0||data==1){returndata;}if(data>1){return(Fib(data-1)+Fib(data-2));
}}intmain(){intdata;printf("pleaseinputdata\n");scanf("%d",&data);data=Fib(data);printf("theresultis%d\n",data);}程序設計內容…變量的屬性:變量類型?變量的作用域?變量的存儲類別17變量的屬性變量類型確定變量的存儲長度和運算方式int、float、char、double…例
5/2=5/2.0=22.518變量的屬性變量類型確定變量的存儲長度和運算方式作用區域確定變量能被有效使用的范圍全局變量、局部變量19變量的屬性變量類型確定變量的存儲長度和運算方式作用區域確定變量能被有效使用的范圍確定變量能夠生存的時間auto、static、register、extern存儲類別20變量的屬性變量類型確定變量的存儲長度和運算方式作用區域確定變量能被有效使用的范圍存儲類別確定變量能夠生存的時間21局部變量floatf1(inta){intb,c;…….}main(){intm,n;…….}a,b,c有效m,n有效變量的作用域定義:在函數內部和{}內定義的變量22變量的作用域說明:各局部變量只在本函數有效#include"stdio.h"intsum(){inta=100;returnx+a;}voidmain(){intx=10;printf("%d",sum());}errorC2065:'x':undeclaredidentifier局部變量定義:在函數內部和{}內定義的變量23變量的作用域形式參數也是局部變量#include"stdio.h"floatf1(inta){intb,c;…….}main(){….}說明:各局部變量只在本函數有效局部變量定義:在函數內部和{}內定義的變量a,b,c有效24變量的作用域各函數中同名變量是不同對象形式參數也是局部變量說明:各局部變量只在本函數有效局部變量定義:在函數內部和{}內定義的變量總之,在花括號內定義的都是局部變量,形參也是25a:xx#include"stdio.h"sub(){inta;a=6;printf("sub:a=%d\n",a);}main(){inta;a=3;
printf("main:a=%d\n",a);sub();printf("main:a=%d\n",a);}運行結果:main:a=3sub:a=6main:a=3例不同函數中的同名變量3a:xx626變量的作用域可在復合語句中定義有效變量各函數中同名變量是不同對象形式參數也是局部變量說明:各局部變量只在本函數有效局部變量定義:在函數內部和{}內定義的變量27#include"stdio.h"#defineN5main(){inti,a[N]={1,2,3,4,5};for(i=0;i<N/2;i++){
intt;t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;
}for(i=0;i<N;i++)printf("%d\n",a[i]);}例復合語句中定義的變量t有效28下面程序最后是否能打印出t的值?#include"stdio.h"#defineN5main(){inti,a[N]={1,2,3,4,5};for(i=0;i<N/2;i++)
{
intt;t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;
}
printf("%d\n",t);}errorC2065:'t':undeclaredidentifier思考29下面程序最后是否能打印出t的值?#include"stdio.h"#defineN5main(){inti,a[N]={1,2,3,4,5},t=100;for(i=0;i<N/2;i++){intt;t=a[i];a[i]=a[N-i-1];a[N-i-1]=t; }for(i=0;i<N;i++)printf("%d\n",a[i]);printf("%d",t);}思考3031變量的作用域定義:在函數外部定義的變量全局變量#include"stdio.h"inta=3,b=5;max(intx,inty){return(x>y?x:y);}voidmain(){printf("%d",max(a,b));}局部變量定義:在函數內部定義的變量ab有效32作用范圍從定義起到文件尾定義:在函數外部定義的變量全局變量變量的作用域說明:#include"stdio.h"intp=1;floatf1(inta){intb,c;
…….}intm=3;main(){…….}p有效m有效33作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:34#include"stdio.h"inta=3,b=5;max(intx,inty){intc;c=x>y?x:y;return(c);}main(){inta=8;
printf("%d",max(a,b));}例全局變量與局部變量同名被屏蔽835作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:3)未初始化初值為'\0'#include"stdio.h"intc;main(){
printf("%d",c);}036作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:3)未初始化初值為‘\0’
4)能夠加強函數間數據聯系37#include"stdio.h"intx[2]={1,2};voidswap(){intt;t=x[0];x[0]=x[1];x[1]=t;}voidmain(){swap();printf("x[0]=%d,",x[0]);printf("x[1]=%d",x[1]);}例全局變量的優點x[0]x[1]有效38作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:3)未初始化初值為"0"
或'\0'4)能夠加強函數間數據聯系降低程序清晰性,容易出錯3940變量的存儲類別動態存儲程序運行時根據需要動態分配存儲空間靜態存儲程序運行時占據固定的存儲空間不釋放程序區靜態存儲區動態存儲區形式參數、自動變量全局變量、靜態變量41變量的存儲類別自動存儲#include"stdio.h"voidmain(){autointa,b;a=3;b=5;}定義:auto
類型名局部變量名;inta,b;42說明:函數內定義的局部變量為自動變量變量的存儲類別max(intx,inty){intc;c=x>y?x:y;return(c);}自動存儲定義:auto
類型名局部變量名;43變量的存儲類別變量存儲單元隨函數的調用而取得#include"stdio.h"max(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){inta=3,b=5,c;c=max(a,b);printf("%d",c);}說明:函數內定義的局部變量為自動變量自動存儲定義:auto
類型名局部變量名;max(intx,intyintz44變量的存儲類別若變量未被賦值,則其初值不確定#include"stdio.h"voidmain(){intc;printf("%d",c);}變量存儲單元隨函數的調用而取得說明:函數內定義的局部變量為自動變量自動存儲定義:auto
類型名局部變量名;45變量的存儲類別寄存器存儲定義:register
類型名局部變量名;fun(){registerinti;for(i=1;i<=100;i++)printf("%d",i*i);}46變量的存儲類別變量存儲單元分配在CPU寄存器中說明:只能定義有限數目的寄存器變量適用于同一變量頻繁出現的地方局部靜態變量不能定義為寄存器變量寄存器存儲定義:register
類型名局部變量名;47變量的存儲類別靜態存儲定義:static
類型名局部變量名;說明:程序執行時靜態內部變量始終存在#include"stdio.h"add(){staticintz=0;z++;return(z);}voidmain(){intc;c=add();printf("%d",c);}48變量的存儲類別變量僅僅在程序編譯時被賦值一次靜態存儲定義:static
類型名局部變量名;說明:程序執行時靜態內部變量始終存在49#include"stdio.h"voidinc(){intx=0;x++;printf("%d",x);}voidmain(){inc();inc();inc();}#include"stdio.h"voidinc(){staticintx=0;x++;printf("%d",x);}voidmain(){inc();inc();inc();}例動態與靜態局部變量的區別11112350變量的存儲類別變量不初始化自動賦以"0"
或'\0'#include"stdio.h"voidmain(){staticintc;printf("%d",c);}變量僅僅在程序編譯時被賦值一次靜態存儲定義:static
類型名局部變量名;說明:程序執行時靜態內部變量始終存在51變量的存儲類別定義:extern
類型名全局變量名;說明:變量可被同程序中前面的函數引用#include"stdio.h"voidgx(){externintx;printf("2:x=%d\n",x);}intx;main(){printf("1:x=%d\n",x);x=100;gx();}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 1《大堰河我的保姆》公開課一等獎創新教學設計統編版高中語文選擇性必修下冊
- 識別項目成功的關鍵性能指標試題及答案
- 2025銀行從業資格證考試必考試題與答案
- 2025年銀行從業資格證復習要點試題及答案
- 信息技術部門數字化轉型計劃
- 制定合理的工作時間表計劃
- 全景式2025年注冊會計師考試視角試題及答案
- 情感教育在幼兒園課程中的落實計劃
- 課題申報立項書語文
- 注冊會計師職業道德的考核標準試題及答案
- 電動吸引器的應用及護理培訓課件
- 人教版英語五年級下冊Unit-2復習課件
- 家庭農場相關規章制度
- 能源與環境概論(盧平)教案
- 24小時值班和領導帶班制度
- GB∕T 17602-2018 工業己烷-行業標準
- GB 38454-2019 墜落防護 水平生命線裝置
- 中考物理命題培訓講座
- 生產安全事故風險評估報告(參考模板)
- 125萬噸硫鐵礦斜坡道施工組織設計
- 畢業設計10層框架—剪力墻結構體系設計計算書
評論
0/150
提交評論