




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計第8章函數第1講:簡單函數介紹1.函數的概述提綱2.函數的定義3.函數的調用1.函數的概述說明分類C語言程序設計注意說明:(1)C源程序是由函數組成的且只有一個主函數main()。(2)主函數可以調用其它函數,而不允許被其它函數調用。(3)程序由主函數開始執行,并且由主函數結束。源程序主函數自定義函數2自定義函數1…調用(4)主函數可以放在程序的任意位置。1.函數的概述說明分類C語言程序設計庫函數和自定義函數:(1)庫函數
C系統提供,用戶無須定義,只需在程序前包含有該函數原型的頭文件即可在程序中直接調用。
例如:printf、scanf、getchar、putchar、gets、puts等函數,都需要加上頭文件#include"stdio.h"。求的值。運行結果語句編寫#include"stdio.h"#include"math.h"main(){}intx;doubley;scanf("%d",&x);y=sqrt(x);printf("%lf\n",y);
5↙頭文件math.h中包含了sqrt函數,其功能就是開方。
2.236068
1.函數的概述說明分類C語言程序設計庫函數和自定義函數:(2)自定義函數
由用戶按實際需要自己編寫的函數,需要被調用才能實現其功能。求兩個整數之和。運行結果語句編寫intsum(intx,inty)//自定義函數{
}main()//主函數{}ints;s=sum(2,3);printf(“s=%d\n",s);
s=5returnx+y;2.函數的定義無返回值無參數無返回值有參數有返回值無參數有返回值有參數C語言程序設計一般形式:void函數名(){
函數體;}
注意說明:(1)其中void和函數名稱為函數頭。函數名后有一個空括號,其中無參數,但括號不可少。(2){}中的內容稱為函數體。(3)void代表函數無類型,即無返回值,不需要return。運行結果語句編寫voidHello()//自定義函數{printf("Helloworld!\n");}main()//主函數{}Hello();
Helloworld!2.函數的定義無返回值無參數無返回值有參數有返回值無參數有返回值有參數C語言程序設計一般形式:void函數名(形式參數表列){
函數體;}注意說明:(1)有參函數比無參函數多了一個內容,即形式參數表列。(2)形式參數可以是各種類型的變量,參數之間用逗號間隔。(3)進行函數調用時,主調函數將傳遞給形式參數實際的值。運行結果語句編寫voidsum(inta,intb)//自定義函數{ints;s=a+b;printf("s=%d\n",s);}main()//主函數{}intx=2,y=3;sum(x,y);
s=52.函數的定義無返回值無參數無返回值有參數有返回值無參數有返回值有參數C語言程序設計一般形式:類型標識符函數名(){
函數體;return表達式;}注意說明:(1)函數的類型實際上是函數返回值的類型。(2)return語句的作用是把值作為函數的值返回給主調函數。(3)有返回值的函數中至少應有一個return語句。運行結果語句編寫intsum()//自定義函數{inta,b,s;scanf("%d%d",&a,&b);s=a+b;returns;}main()//主函數{}ints;s=sum();printf("s=%d\n",s);
23↙
s=52.函數的定義無返回值無參數無返回值有參數有返回值無參數有返回值有參數
C語言程序設計一般形式:類型標識符函數名(形式參數表列){
函數體;return表達式;}注意說明:(1)在C程序中,一個自定義函數的定義可以放在任意位置。(2)如果放在main之后,在調用之前,需要對它進行說明。例如:intsum(inta,intb);運行結果語句編寫intsum(inta,intb)//自定義函數{ints;s=a+b;returns;}main()//主函數{}intx,y,s;scanf("%d%d",&x,&y);s=sum(x,y);printf("s=%d\n",s);
23↙
s=53.函數的調用形參實參返回值調用方式C語言程序設計內存注意說明:(1)形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。(2)實參可以是常量、變量、表達式等,在進行函數調用時,把具有確定的值傳送給形參。(3)函數調用中發生的數據傳送是單向的。x2y3實參形參ab23(4)實參和形參在數量、類型和順序上應嚴格一致。3.函數的調用形參實參返回值調用方式C語言程序設計return語句一般形式:return表達式;或者為:return(表達式);
注意說明:(1)在函數中允許有多個return語句,但每次調用只能有一個return語句被執行。(2)函數返回值的類型和函數定義中函數的類型應保持一致。(3)不返回函數值的函數,可以明確定義為“空類型”,類型說明符為“void”。3.函數的調用形參實參
返回值調用方式C語言程序設計函數調用的一般形式:函數名(實際參數表)實際參數表中的參數可以是常數、變量或表達式,各實參之間用逗號分隔。調用方式:(1)函數表達式:函數作為表達式中的一項出現在表達式中,這種方式要求函數有返回值。例如:s=sum(x,y);把sum的返回值賦予變量s。
(2)函數語句:函數調用的一般形式加上分號即構成函數語句,這種方式不要求函數有返回值。例如:sum(x,y);以函數語句的方式調用函數。(3)函數實參:函數作為另一個函數調用的實際參數出現。例如:printf("%d",sum(x,y));把sum調用的返回值作為printf函數的實參來使用的。C語言程序設計第8章函數第2講:特殊函數介紹1.函數的嵌套調用提綱2.函數的遞歸調用3.數組作為函數參數1.函數的嵌套調用調用過程應用實例C語言程序設計嵌套調用定義:main函數調用函數A
結束
C語言允許在被調函數中又調用其它函數,即函數的嵌套調用。調用過程描述圖:函數A調用函數B
函數B1.函數的嵌套調用調用過程應用實例C語言程序設計利用函數嵌套實現程序設計,求1!+2!+…+5!算法設計:1、編寫求階乘的函數fact;2、編寫求和的函數sum,嵌套調用函數fact;3、編寫主函數,其中調用函數sum;語句編寫intfact(intn)//求階乘函數{intf=1,i;for(i=1;i<=n;i++)f=f*i;returnf;}int
sum(inth)//求和函數{inti,s=0;for(i=1;i<=h;i++)s=s+fact(i);returns;}main()//主函數{ints;
s=sum(5);printf("s=%d\n",s);}運行結果s=153調用fact(1)調用fact(4)調用fact(2)調用fact(5)調用fact(3)2.函數的遞歸調用調用過程應用實例C語言程序設計遞歸調用定義:s=5*fact(4)一個函數在它的函數體內調用它自身稱為遞歸調用,這種函數稱為遞歸函數。
調用過程描述圖:4*fact(3)3*fact(2)2*fact(1)12*1=23*2=64*6=245*24=120調用過程應用實例C語言程序設計利用函數遞歸調用實現程序設計,求n!算法設計:1、編寫求階乘的函數fact;2、判斷n=1時,返回值1;3、判斷n≥2時,函數fact調用n*fact(n-1);語句編寫intfact(intn)//求階乘函數{}if(n==1)return1;main()//主函數{ints;s=fact(5);
printf("s=%d\n",s);}運行結果s=1202.函數的遞歸調用elsereturnn*fact(n-1);4、編寫主函數調用函數fact;3.數組作為函數參數C語言程序設計數組元素作函數實參:它作為函數實參使用與普通變量是完全相同的,在發生函數調用時,把作為實參的數組元素的值傳送給形參,實現單向的值傳送。例如:fun(a[1]);判別一個數組中各元素的值,若大于零則輸出該值,若小于等于零則輸出0值。語句編寫voidnzp(intv){if(v>0)printf("%d",v);elseprintf("%d",0);}main(){inta[5],i;printf("請輸入五個數據:");for(i=0;i<5;i++){scanf("%d",&a[i]);nzp(a[i]);}}運行結果請輸入五個數據:5-7-923↙數組元素數組名500233.數組作為函數參數C語言程序設計數組名作函數實參形式:函數定義時,形參應寫成如下的形式:
類型函數名稱(類型標識符數組名稱[])例如:voidfun(inta[])數組中存放了一名學生5門課程的成績,求平均成績。
語句編寫floataver(floata[]){inti;floatav,s=a[0];for(i=1;i<5;i++)s=s+a[i];av=s/5;returnav;}main(){floats[5],av;inti;printf("請輸入五門課的成績:");for(i=0;i<5;i++)scanf("%f",&s[i]);av=aver(s);printf("平均成績是:%5.2f\n",av);}運行結果請輸入五個數據:8898768993↙數組元素數組名平均成績是:88.80函數調用時,實參應寫成如下的形式:
函數名稱(數組名稱)例如:fun(a)
C語言程序設計第8章函數第3講:變量存儲類別及內外部函數1.局部變量和全局變量提綱2.動態變量和靜態變量3.變量的其他存儲類別4.內部函數與外部函數1.局部變量和全局變量局部變量全局變量C語言程序設計定義:局部變量也稱為內部變量。局部變量是在函數內作定義說明的,其作用域僅限于函數內。例如:intf1(inta){intb,c;……}intf2(intx){inty,z;……}main(){intm,n;……}函數f1:函數f2:主函數main:
C語言程序設計注意說明:(1)主函數中定義的變量也只能在主函數中使用,不能在其它函數中使用。
(2)形參變量是屬于被調函數的局部變量,實參變量是屬于主調函數的局部變量。
(3)允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾。運行結果語句編寫voidf(inta,intb){inti,j;i=a+2;j=b-1;printf("函數f中:a=%d,b=%d\n",a,b);printf("函數f中:i=%d,j=%d\n",i,j);}main(){inti=4,j=5;f(i,j);printf("主函數中:i=%d,j=%d\n",i,j);}函數f中:a=4,b=5函數f中:i=6,j=4主函數中:i=4,j=51.局部變量和全局變量局部變量全局變量1.局部變量和全局變量局部變量全局變量C語言程序設計定義:全局變量也稱為外部變量,它是在函數外部定義的變量,其作用域是整個源程序。例如:函數f1:函數f2:主函數main:
inta,b;voidf1(){……}floatx,y;intf2(){……}main(){……}1.局部變量和全局變量局部變量全局變量C語言程序設計輸入圓的半徑,求圓的周長和面積。
運行結果語句編寫floats;floatls(floatr){floatlen;
len=2*3.14*r;s=3.14*r*r;returnlen;}main(){floatc,r;printf("請輸入圓的半徑:");scanf("%f",&r);c=ls(r);printf("圓的周長為:%f\n",c);printf("圓的面積為:%f\n",s);}請輸入圓的半徑:5↙圓的周長為:31.400000圓的面積為:78.5000002.動態變量和靜態變量動態變量靜態變量C語言程序設計定義:變量前如不加以任何聲明或者專門聲明為auto存儲類別,稱為動態變量。f(inta){autointb,c=3;
……
}例題:說明:a是形參,屬于動態變量,b和c是函數中定義的變量,也屬于屬于動態變量,對c賦初值3。執行完f函數后,自動釋放a,b,c所占的存儲單元。2.動態變量和靜態變量動態變量靜態變量C語言程序設計定義:變量的值在函數調用結束后保留原值,用關鍵字static進行聲明,稱為靜態變量。注意說明:(1)靜態變量屬于靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放。(2)靜態變量在編譯時賦初值,即只賦初值一次。語句編寫f(inta){autob=2;staticc=3;b=b+1;c=c+1;returna+b+c;}main(){inta=1,i;for(i=1;i<=2;i++)printf("第%d次調用后結果:%d\n",i,f(a));}變量存儲圖:實參a1b2c3調用f(1)形參a134運行結果第1次調用后結果:8調用f(2)5第2次調用后結果:93.變量的其他存儲類別register
externC語言程序設計寄存器變量定義:C語言允許將局部變量的值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。注意說明:(1)只有局部自動變量和形式參數可以作為寄存器變量。(2)一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量。(3)局部靜態變量不能定義為寄存器變量。3.變量的其他存儲類別register
externC語言程序設計聲明外部變量定義:如果在定義點之前想引用某外部變量,則應該在引用之前用關鍵字extern作“外部變量聲明”。用extern聲明外部變量,擴展變量的作用域。語句編寫運行結果請輸入存款金額:800↙余額為:10800元voidsave(){intmoney;externamount;printf("請輸入存款金額:");scanf("%d",&money);amount=amount+money;}intamount=10000;main(){save();printf("余額為:%d元\n",amount);}如果沒有聲明語句externamount;那么在save函數中amount不會識別,系統報錯。4.內部函數與外部函數內部函數外部函數C語言程序設計定義:如果一個函數只能被本文件中其他函數所調用,它稱為內部函數。內部函數又稱靜態函數。格式:static
類型標識符函數名(形參表)static
int
fun(int
a,int
b)
例如:使用內部函數解決兩個文件中存在重名函數問題。文件test0.c文件test.cstaticintsum(inta,intb,intc){ints;s=a+b+c;returns;}#include"stdio.h"intsum(inta,intb){ints;s=a+b;returns;}main(){intx,y,s;scanf("%d%d",&x,&y);s=sum(x,y);printf("s=%d\n",s);}4.內部函數與外部函數內部函數外部函數C語言程序設計定義:在定義函數時,如果在函數首部的最左端冠以關鍵字extern,則表示此函數是外部函數。格式:extern
類型標識符函數名(形參表)extern
int
fun
(int
a,
int
b)
例如:使用外部函數解決一個文件調用其他文件中函數問題。文件test0.c文件test.cexternintdiffer(inta,intb){intz;z=a-b;returnz;}#include"stdio.h"intsum(inta,intb){ints;s=a+b;returns;}main(){intx,y,s,z;scanf("%d%d",&x,&y);s=sum(x,y);printf("s=%d\n",s);z=differ(x,y);printf("z=%d\n",z);}注意說明:(1)外部函數可供其他文件調用。(2)在定義函數時省略extern,則隱含為外部函數。C語言程序設計第4講:常見編譯錯誤與調試第8章函數1.庫函數引用問題提綱2.函數聲明問題3.形參和實參問題1.庫函數引用問題解決辦法:C語言程序設計問題描述:使用庫函數時,沒有加相應的頭文件。在頭文件中添加#include"math.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建立良好的溝通小班師生互動策略計劃
- 團隊協作與信息共享計劃
- 企業財務業務流程計劃
- 優化項目預算的管理措施計劃
- 企業并購的100%股權轉讓合同
- 品牌忠誠度提升的長效機制計劃
- 2024年淄博市市屬衛生健康系統事業單位招聘考試真題
- 2024年臺州椒江區招聘中小學幼兒園教師考試真題
- 2024年福建省腫瘤醫院招聘考試真題
- 教育扶貧中的心理輔導心得體會
- 教育評價改革的創新路徑與實踐方案
- 壁紙施工協議書范本
- 2025年遼寧沈陽地鐵集團有限公司所屬分公司招聘筆試參考題庫附帶答案詳解
- 學校健身俱樂部的盈利模式探索
- 2025年浙江嘉興市海寧實康水務有限公司招聘筆試參考題庫含答案解析
- 4-6歲幼兒同伴交往能力量表
- 人教版 數學一年級下冊 第三單元 100以內數的認識綜合素養評價(含答案)
- 無錫諾宇醫藥科技有限公司放射性藥物開發及核藥裝備研制項目報告表
- 2025年中考道德與法治仿真模擬測試卷(含答案)
- 工程造價司法鑒定與糾紛調解典型案例-記錄
- 2025年河南藝術職業學院單招職業技能測試題庫及參考答案
評論
0/150
提交評論