版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1請將您的手機鈴聲
設置為震動
2實驗講義
1、閱讀程序P573、修改程序P584、程序填空P59作業(yè)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函數的遞歸調用變量的作用區(qū)域變量的存儲類別新課講授9定義:函數在自身的定義中又調用自身的過程稱為函數的遞歸調用函數的遞歸調用f()調f特點:1.在函數里調用自身;2.在使用遞歸策略時,必須有一個明
確的遞歸結束條件,稱為遞歸出口。10longfac(intn){longf;if(n==1)f=1;elsef=n*fac(n-1);return(f);}
1(n=1)n!=
n*(n-1)!(n2)例用遞歸算法計算n!==11main()調用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);}12如何使用遞歸計算斐波那契數列?思考
1(n=1)
Fib(n)=1(n=2)
Fib(n)=Fib(n-1)+Fib(n-2)(n3)13變量的屬性變量類型確定變量的存儲長度和運算方式int、float、char、double…例
5/2=5/2.0=22.514變量的屬性變量類型確定變量的存儲長度和運算方式作用區(qū)域確定變量能被有效使用的范圍全局變量、局部變量15變量的屬性變量類型確定變量的存儲長度和運算方式作用區(qū)域確定變量能被有效使用的范圍確定變量能夠生存的時間auto、static、register、extern存儲類別16變量的屬性變量類型確定變量的存儲長度和運算方式作用區(qū)域確定變量能被有效使用的范圍存儲類別確定變量能夠生存的時間17局部變量floatf1(inta){intb,c;…….}main(){intm,n;…….}a,b,c有效m,n有效變量的作用域定義:在函數內部定義的變量18變量的作用域說明:各局部變量只在本函數有效#include"stdio.h"intsum(){inta=100;returnx+a;}voidmain(){intx=10;printf("%d",sum());}errorC2065:'x':undeclaredidentifier局部變量定義:在函數內部定義的變量19變量的作用域形式參數也是局部變量#include"stdio.h"floatf1(inta){intb,c;…….}main(){….}說明:各局部變量只在本函數有效局部變量定義:在函數內部定義的變量a,b,c有效20變量的作用域各函數中同名變量是不同對象形式參數也是局部變量說明:各局部變量只在本函數有效局部變量定義:在函數內部定義的變量21a: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:xx622變量的作用域可在復合語句中定義有效變量各函數中同名變量是不同對象形式參數也是局部變量說明:各局部變量只在本函數有效局部變量定義:在函數內部定義的變量23#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有效24下面程序最后是否能打印出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思考25變量的作用域定義:在函數外部定義的變量全局變量#include"stdio.h"inta=3,b=5;max(intx,inty){return(x>y?x:y);}voidmain(){printf("%d",max(a,b));}局部變量定義:在函數內部定義的變量ab有效26作用范圍從定義起到文件尾定義:在函數外部定義的變量全局變量變量的作用域說明:#include"stdio.h"intp=1;floatf1(inta){intb,c;
…….}intm=3;main(){…….}p有效m有效27作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:28#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));}例全局變量與局部變量同名被屏蔽829作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:3)未初始化初值為"0"
或'\0'#include"stdio.h"intc;main(){
printf("%d",c);}030作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:3)未初始化初值為"0"
或'\0'4)能夠加強函數間數據聯(lián)系31#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]);}例全局變量的優(yōu)點x[0]x[1]有效32作用范圍從定義起到文件尾變量的作用域與局部變量同名時被屏蔽定義:在函數外部定義的變量全局變量說明:3)未初始化初值為"0"
或'\0'4)能夠加強函數間數據聯(lián)系降低程序清晰性,容易出錯33變量的存儲類別動態(tài)存儲程序運行時根據需要動態(tài)分配存儲空間靜態(tài)存儲程序運行時占據固定的存儲空間不釋放程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)形式參數、自動變量全局變量、靜態(tài)變量34變量的存儲類別自動存儲#include"stdio.h"voidmain(){autointa,b;a=3;b=5;}定義:auto
類型名局部變量名;inta,b;35說明:函數內定義的局部變量為自動變量變量的存儲類別max(intx,inty){intc;c=x>y?x:y;return(c);}自動存儲定義:auto
類型名局部變量名;36變量的存儲類別變量存儲單元隨函數的調用而取得#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,intyintz37變量的存儲類別若變量未被賦值,則其初值不確定#include"stdio.h"voidmain(){intc;printf("%d",c);}變量存儲單元隨函數的調用而取得說明:函數內定義的局部變量為自動變量自動存儲定義:auto
類型名局部變量名;38變量的存儲類別寄存器存儲定義:register
類型名局部變量名;fun(){registerinti;for(i=1;i<=100;i++)printf("%d",i*i);}39變量的存儲類別變量存儲單元分配在CPU寄存器中說明:只能定義有限數目的寄存器變量適用于同一變量頻繁出現(xiàn)的地方局部靜態(tài)變量不能定義為寄存器變量寄存器存儲定義:register
類型名局部變量名;40變量的存儲類別靜態(tài)存儲定義:static
類型名局部變量名;說明:程序執(zhí)行時靜態(tài)內部變量始終存在#include"stdio.h"add(){staticintz=0;z++;return(z);}voidmain(){intc;c=add();printf("%d",c);}41變量的存儲類別變量僅僅在程序編譯時被賦值一次靜態(tài)存儲定義:static
類型名局部變量名;說明:程序執(zhí)行時靜態(tài)內部變量始終存在42#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();}例動態(tài)與靜態(tài)局部變量的區(qū)別11112343變量的存儲類別變量不初始化自動賦以"0"
或'\0'#include"stdio.h"voidmain(){staticintc;printf("%d",c);}變量僅僅在程序編譯時被賦值一次靜態(tài)存儲定義:static
類型名局部變量名;說明:程序執(zhí)行時靜態(tài)內部變量始終存在44變量的存儲類別定義:extern
類型名全局變量名;說明:變量可被同程序中前面的函數引用#include"stdio.h"voidgx(){externintx;printf("2:x=%d\n",x);}intx;main(){printf("1:x=%d\n",x);x=100;gx();}外部存儲1:x=02:x=10045變量的存儲類別定義:extern
類型名全局變量名;說明:變量可被同程序中前面的函數引用外部存儲變量被另外一個C源程序文件引用46intglobal;fun1(){intlocal; . .
.}file1.cexternintglobal;func2(){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度原創(chuàng)音樂版權獨家代理合同
- 二零二五年度駕校教練員學員駕駛習慣養(yǎng)成聘用合同
- 2025年度解除終止貨物買賣合同模板二零二五年度
- 酒吧智能點餐系統(tǒng)開發(fā)與應用服務合同
- 2025年度電子版合同在線簽訂與自動生成合同
- 2025年度競業(yè)限制期限及競業(yè)禁止解除條件及違約責任合同
- 音樂課程設計制作方案
- 美術班標題課程設計
- 智能駕駛仿真課程設計
- 經營場所租賃合同
- 2025年度土地經營權流轉合同補充條款范本
- 0的認識和加、減法(說課稿)-2024-2025學年一年級上冊數學人教版(2024)001
- 醫(yī)院安全生產治本攻堅三年行動實施方案
- 工程項目合作備忘錄范本
- 碳排放監(jiān)測技術
- 江西省2023-2024學年高二上學期期末教學檢測數學試題 附答案
- 倉儲配送合同范本
- 《機器學習(含實驗實踐)》課程教學大綱(機械設計制造及其自動化專業(yè))
- 健康管理服務協(xié)議合同范例
- 食堂燃氣安全專項培訓
- 服務響應時間和服務保障方案
評論
0/150
提交評論