【文档说明】C语言程式设计--函数课件.ppt,共(28)页,342.866 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44473.html
以下为本文档部分文字说明:
C語言程式設計--函數本章學習重點7-1函數的概念7-2函數的基本形式7-3函數的呼叫7-4遞迴函數7-5常用的數學函數7-6儲存類別函數的概念函數的優點分工合作較好的可讀性便於修改、除錯提高撰寫程式的效
率函數可分成兩種型態函數庫中原先就有的現成函數使用者依程式需求設計的函數函數的基本形式函數定義的語法傳回值型態函數名稱(參數傳遞)參數傳遞型態{函數主體}範例Ch7_2Ch7_2兩數相加的函數1#in
clude<stdio.h>2voidmain()3{4inta=3,b=2,c;5intsum(int,int);6c=sum(a,b);7printf("sum(%d,%d)=%d\n",a,b,c);8}9
intsum(x,y)10intx,y;11{12intz;13z=x+y;14return(z);15}程式執行結果說明sum(3,2)=5範例Ch7_2主程式副程式3322abxy55cz函數呼叫的語法語法函數名稱(參數);說明
函數如果不需要呼叫參數,則括號內的參數可以省略。若參數包含一個以上時,需以逗號隔開。呼叫與被呼叫的函數其參數是相對應的,且型態要一致。函數的傳回值函數的傳回值,有以下幾種情況:函數沒有傳回值,傳回值型態為void函數傳回值為整數(int)時,
可以省略函數有傳回值時,可以在傳回值上做運算函數的傳回值型態應該和return中的型態要一樣使用return可以立即結束函數的執行Ch7_3計算圓面積的函數1#include<stdio.h>2do
ublearea(r)3floatr;4{5doubles;6s=r*r;7return(s);8}9voidmain()10{11floatr;12doublea;範例Ch7_3程式執行結果Pleaseinputthecircler:5
Thecircleareais78.54000013printf("Pleaseinputthecircler:\n");14scanf("%f",&r);15a=area(r)*3.1416;16printf("Thecircleareais%
f\n",a);17}範例Ch7_3範例Ch7_4Ch7_4函數求絕對值與平方值1#include<stdio.h>2voidmain()3{4intabs(int);5intsqrt(int);6inta=–3,b,c;7b=abs(a
);8c=sqrt(a);9printf("theabsofa=%d\n",b);10printf("thesqrtofa=%d\n",c);11}12intabs(intx)13{14inty;15if(x<0)16y=–x;17else18y
=x;19returny;20}21intsqrt(intz)22{23ints;24s=z*z;25returns;26}範例Ch7_4程式執行結果theabsofa=3thesqrtofa=9範例Ch7_4遞迴函數遞迴函數是指在程式中直接或間接呼叫該程式本身。程式中使用遞迴函數,將可
處理須重覆運算的問題。費氏數列費氏數列的規則如下所示:費氏數列的數學表示式:0ifn=0Fib(n)=1ifn=1fib(n–1)+fib(n–2)ifn>=2n0123456…fib(n)0112358…範例Ch7_5Ch7_5遞迴函數求費氏數列1#include<stdio.h
>2intfib(intn)3{4if(n==0)return(0);5elseif(n==1)return(1);6elsereturn(fib(n–1)+fib(n–2));7}8voidmain()9{10intfib(
int);11ints;12s=fib(6);13printf("Thefib(6)=%d\n",s);14}程式執行結果說明:Thefib(6)=8f(2)f(1)f(3)f(1)f(0)f(2)f(1)f(0)f(4)f(
2)f(1)f(3)f(1)f(0)f(2)f(1)f(0)f(4)f(2)f(1)f(3)f(1)f(0)f(5)f(6)範例Ch7_5階乘函數定義如下:1ifn=0n*fact(n–1)ifn>=1說明:fact(n)3!=3
*2!=3*2*1!=3*2*1*0!=3*2*1*1=6fact(3)=3*fact(2)=3*2*fact(1)=3*2*1*fact(0)=3*2*1*1=6範例Ch7_7Ch7_7利用遞迴函數求n階乘1#include<stdio.h>2void
main()3{4intfact(int);5intn;6printf("請輸入n階乘:");7scanf("%d",&n);8printf("%d!=%d\n",n,fact(n));9}10intfact(in
tn)11{12if(n==0)return(1);13elsereturn(n*fact(n–1));14}程式執行結果說明:請輸入n階乘:66!=7206!=6*fact(5)=6*5*fact(4)=6*5*4*fact(3)=6*5*4*3*fact(2)=
6*5*4*3*2*fact(1)=6*5*4*3*2*1*fact(0)=6*5*4*3*2*1*1=720範例Ch7_7常用的數學函數在程式中使用下列數學函數時,需在開頭加上#include<math.h>函數功能敘述格式x和y的資料型態exp指數函數exexp(x);double或fl
oatlog自然對數函數;ln(x)log(x);double或floatlog10以10為底的對數函數log10(x);double或floatsqrtx的開平方根值sqrt(x);double或floatfabsx的絕對值fabs(x);double或floatpow
x的y次方值;xypow(x,y)doublesin正弦函數sin(x)double或floatcos餘弦函數cos(x)double或floattan正切函數tan(x)double或float儲存類別
C語言的儲存類別(storageclass),也就是變數的生命期(lifetime)及可見度(scope)。一般儲存類別的宣告語法如下:儲存類別資料型態識別字一般將儲存類別區分為auto、static、register、extern四大類。儲存類別關鍵字生命期可見度自動auto暫時區域變數靜態
static永久可成為全域變數暫存器register暫時區域變數外部extern永久全域變數內在(auto)變數宣告為auto的變數,它的生命期只存活在函數的區塊(block)中。它是一個區域變數(localvariable)。#include<stdio.h>voidmain(){autoi
nti;.{autointj;.變數j變數i.可見度可見度}.}靜態(static)變數內部靜態(staticauto)變數內部靜態變數是屬於區域變數(localvariable)。外部靜態(staticexternal)變數外部靜態變數是屬於全域變數(globalvaria
ble)。staticintx;/*外部靜態變數*/voidmain(void){staticinty;/*內部靜態變數*/變數x.可見度(整個程式).變數y.可見度}範例Ch7_12Ch7_12全域變數
與區域變數1#include<stdio.h>2voidfunction(void);3staticintx=1;4voidmain()5{6staticintx=3;7printf("外在區域變數x=%d\n",x);8{9staticintx=10;10printf("內在區域變數x=%d\n
",x);11}12printf("外在區域變數x=%d\n",x);13function();14printf("區域變數x=%d\n",x);15}16voidfunction(void)17{18printf("全域變數x=%d\n",x);19}•程式執行結果外在
區域變數x=3內在區域變數x=10外在區域變數x=3全域變數x=1區域變數x=3範例Ch7_12語法extern資料型態變數名稱;inta;voidmain(){‧‧}voidadd(){externinta;‧‧}prog_1.cprog_2.c外在(external
)變數合併兩個程式:prog_1.c(主程式)prog_2.c編譯器prog_1.objprog_2.obj連結程式prog_1.exe外在(external)變數