ch04-函數(shù)省公開課一等獎全國示范課微課金獎課件_第1頁
ch04-函數(shù)省公開課一等獎全國示范課微課金獎課件_第2頁
ch04-函數(shù)省公開課一等獎全國示范課微課金獎課件_第3頁
ch04-函數(shù)省公開課一等獎全國示范課微課金獎課件_第4頁
ch04-函數(shù)省公開課一等獎全國示范課微課金獎課件_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第四章函數(shù)帶子程序C程序函數(shù)程序設計實例第1頁帶子程序C程序編程計算

其中第2頁voidmain(){floaty,f,p0,p2,p5,x;printf("pleaseinputx:");scanf("%f",&x);f=((x+x)+(x*0.3))/(7*(x*0.3));

p0=(f+x/2)/(2*x);f=((x+(x+2))+((x+2)*0.3))/(7*((x+2)*0.3));

p2=(f+(x+2)/2)/(2*x);f=((x+(x+5))+((x+5)*0.3))/(7*((x+5)*0.3));

p5=(f+(x+5)/2)/(2*x);y=((p0*p0+5*x)/(p5-sqrt(x)))*p2;printf("y(x)=%8.4f\n",y);}第3頁floatx,y; /*3*/floatf(floatv,floatw){ /*4*/ return(w+v)/(7*v); /*5*/} /*6*/floatp(floatu){ /*7*/ return(f(u*0.3,x+u)+(u/2))/(2*x)); /*8*/} /*9*/voidmain(){ /*10*/ printf("pleaseinputx:"); /*11*/ scanf("%f",&x); /*12*/ y=(p(x)*p(x)+(5*x))/(p(x+5)-sqrt(x))*p(x+2);/*13*/printf("y(x)=%8.4f\n",y) /*14*/}第4頁程序執(zhí)行主要步驟從鍵盤讀入x值

printf("pleaseinputx:"); scanf("%f",&x);依次計算以x,x+5,x+2作為實參函數(shù)p值

y=(p(x)*p(x)+(5*x))/(p(x+5)-sqrt(x))*p(x+2)輸入出函數(shù)y值

printf("y(x)=%8.4f\n",y)第5頁計算p(x+5)過程

計算x+5得6.0;將6.0送入p形參u中,這時u值為6.0;進入函數(shù)p,執(zhí)行p操作部分(第8行),即返回語句“return...;”,先計算返回語句中表示式值。以u*0.3和u+x為實參調(diào)用函數(shù)f次序計算u*0.3、u+x得1.8、7.0;將1.8、7.0次序送入f形參v、w中,v=1.8、w=7.0;進入函數(shù)f執(zhí)行f操作部分(第5行),執(zhí)行返回語句計算出表示式值為0.698413帶著函數(shù)值0.698413返回調(diào)用處,p中返回語句內(nèi)(第8行)計算出返回語句中表示式值為1.84921即p值。帶著函數(shù)值1.84921返回調(diào)用處:主程序第13行表示式語句內(nèi)。第6頁主程序調(diào)用函數(shù)返回結(jié)束函數(shù)第7頁使用子程序技術(shù)分離了“做什么”與“怎么做”程序邏輯結(jié)構(gòu)清楚,易寫,易讀,易懂。程序設計,調(diào)試,維護變得輕易。第8頁函數(shù)數(shù)學中函數(shù)

函數(shù)概念組成函數(shù)定義函數(shù)調(diào)用使用函數(shù)注意事項先定義該函數(shù)(標準庫函數(shù)除外)

——類似于數(shù)學中函數(shù)定義。再在表示式中調(diào)用該函數(shù) ——數(shù)學中計算某函數(shù)一個特定值。第9頁函數(shù)調(diào)用(function-designator)調(diào)用過程形參實參結(jié)合進入函數(shù)執(zhí)行復合語句普通形式F(e,e,…,e)F()例子p(x+5)f(u*0.3,x+u)第10頁函數(shù)定義(function-declaration)除標準庫函數(shù)外,程序中使用函數(shù)必須先定義,然后再用“函數(shù)調(diào)用”調(diào)用它。標準函數(shù)是系統(tǒng)已經(jīng)定義好函數(shù),無須定義即可直接調(diào)用。在程序example401A中:floatf(floatv,floatw){ /*4*/ return(w+v)/(7*v); /*5*/} /*6*/floatp(floatu){ /*7*/ return(f(u*0.3,x+u)+(u/2))/(2*x)); /*8*/} /*9*/第11頁由上述語法可知,一個函數(shù)定義形式是:

類型說明符標識符(參數(shù)列表)復合語句floatf(floatu){ return(f(u*0.3,x+u)+(u/2))/(2*x); } 函數(shù)類型函數(shù)名字形參列表復合語句函數(shù)體函數(shù)定義說明符第12頁

函數(shù)定義說明符上述形式第一行稱“函數(shù)定義說明符”,形式以下

TTF(參數(shù)列表) 詳細指明以下點:函數(shù)結(jié)果類型

——由“類型說明符”(TT)標明;函數(shù)名字

——由類型說明符后“標識符”(F)標明;函數(shù)形式參數(shù)個數(shù)和每個形式參數(shù)特征 ——由“參數(shù)列表”標明。第13頁函數(shù)類型(返回值類型)不能是數(shù)組或函數(shù)沒有返回值函數(shù)類型是void函數(shù)返回返回方式:return;return表示式;函數(shù)運行到復合語句末尾(最終那個閉花括號“}”)后。第14頁intf(intx){ returnx*x;}inty=9;voidf(intx){ if(x<0) return; y=y+x;}第15頁參數(shù)列表(parameter-list)組成:每個參數(shù)申明詳細說明形式:

類型說明符標識符參數(shù)列表形式

Tid,Tid,...,TidC允許使用無參函數(shù),無參函數(shù)參數(shù)列表為空,或使用“空類型”類型說明符“void”

TTF()

TTF(void)第16頁intf(intx,inty,floatz)intf(intx,y;floatz)intf(intx,y,floatz)第17頁依據(jù)參數(shù)出現(xiàn)位置形式參數(shù)——函數(shù)申明(局部于函數(shù)變量)intf(intx,inty){

returnx+y;

}實際參數(shù)——函數(shù)調(diào)用

voidmain(){

inta=2,b=3;

f(a+b,b);

f(2+b,3);

}第18頁依據(jù)參數(shù)值傳遞規(guī)則值參

當調(diào)用函數(shù)時,把實參值傳入形參變量變參當調(diào)用函數(shù)時,把實參地址值傳入形參變量

C語言中參數(shù)都是值參第19頁3intf(intx,inty){returnx*y;}voidmain(){ inta=3,b=2,x=9; intc; c=f(a+b,a+x); printf(“%d\n”,c); printf(“%d\n”,x);}29程序輸出為: 60 9 abx返回值xycmainf內(nèi)存5126060第20頁復合語句(compound-statement)由申明和語句列表組成申明部分詳細說明本函數(shù)內(nèi)使用其它量;語句部分要求在本函數(shù)中要執(zhí)行算法動作。函數(shù)定義形式:

TTF(Tid,Tid,...,Tid){...}

第21頁參數(shù)結(jié)合規(guī)則靜態(tài)上看,實參表中實參加被調(diào)用函數(shù)中形參表形參,按位置從左向右依次一一對應對應位置上形實參間要賦值兼容各個實參計算次序是依賴于實現(xiàn)。參數(shù)結(jié)合動作計算實參表示式值把實參值按賦值轉(zhuǎn)換規(guī)則,轉(zhuǎn)換成形參類型。假如不能完成該轉(zhuǎn)換,則稱函數(shù)參數(shù)不一致,產(chǎn)生錯誤把轉(zhuǎn)換后實參值送入形參第22頁0xyvzumainf內(nèi)存……g返回值返回值由左至右#include"stdio.h"intx,y;intf(intz){x=x+1;return(z*z);}intg(intu,intv){……}voidmain(){x=0;g(x,f(2));}

02144第23頁0xyvzumainf內(nèi)存……g返回值返回值由右至左#include"stdio.h"intx,y;intf(intz){x=x+1;return(z*z);}intg(intu,intv){……}voidmain(){x=0;g(x,f(2));}

12144第24頁并行計算-----不知道結(jié)果#include"stdio.h"intx,y;intf(intz){x=x+1;return(z*z);}intg(intu,intv){……}voidmain(){x=0;g(x,f(2));}

第25頁

函數(shù)值有返回類型函數(shù)

intf(intx,inty){

if(x>=y)

returnx;

else

returny;

}無返回類型函數(shù)

voidg(intw){

if(w==1)

return;

else

x=3;

}第26頁有返回類型函數(shù)函數(shù)值使用returne;向調(diào)用函數(shù)主程序傳遞函數(shù)值returne;執(zhí)行過程是:計算表示式e值把表示式值按賦值轉(zhuǎn)換規(guī)則,轉(zhuǎn)換成函數(shù)結(jié)果類型;返回語句中表示式類型與函數(shù)結(jié)果類型必須賦值兼容。用類型轉(zhuǎn)換后值作為函數(shù)值,并帶著它返回到調(diào)用該函數(shù)處第27頁無返回類型函數(shù)函數(shù)值voidg(intw){

if(w==1)

return;

else

x=3;

}在函數(shù)調(diào)用處,所調(diào)函數(shù)無值能夠帶回。對于無類型函數(shù),在函數(shù)調(diào)用處不需要函數(shù)值,這種返回是正常;對于有類型函數(shù),在函數(shù)調(diào)用處極可能需要函數(shù)值參加下一步運算,這將帶來不可預料結(jié)果第28頁函數(shù)原型為何使用函數(shù)原型任何標識符都必須申明,而且必須先申明后使用在申明定義函數(shù)時必須確保函數(shù)申明位置在使用前出現(xiàn)從程序行文次序上控制——普通比較難實現(xiàn)函數(shù)原型——方便靈活第29頁普通形式

TTF(T,T,...,T); TTF(Tid,Tid,...,Tid);例子floatf(int,float,int,char);floatf(intz,floatu,intv,charw);第30頁函數(shù)原型功效滿足了C標識符先定義后使用要求并向編譯系統(tǒng)提供所調(diào)用函數(shù)信息函數(shù)返回類型函數(shù)參數(shù)個數(shù)函數(shù)參數(shù)特征等信息程序設計格調(diào)最好把全部函數(shù)原型集中,放在主函數(shù)之前第31頁floatx,y; floatf(float,float);floatp(float);

voidmain(){ printf("pleaseinputx:"); scanf("%f",&x); y=(p(x)*p(x)+(5*x))/(p(x+5)-sqrt(x))*p(x+2);printf("y(x)=%8.4f\n",y) }floatf(floatv,floatw){ return(w+v)/(7*v); } floatp(floatu){ return(f(u*0.3,x+u)+(u/2))/(2*x)); } 第32頁例4-3生成偽隨機數(shù)生成偽隨機數(shù)公式

rk

=(multiplier*rk-1+increment)%modulus以下給定三個常數(shù)值,產(chǎn)生65536個隨機數(shù)multiplier=25173increment=13849modulus=216=65536第33頁#definemultiplier25173#defineincrement13849#definemodulus65536intseed=0;intrandom(void){seed

=(multiplier*seed+increment)%modulus;returnseed;}第34頁模擬擲骰子,函數(shù)修改成:intrandom(void){seed

=(multiplier*seed+increment)%modulus;returnseed%6+1;}產(chǎn)生0與1之間實數(shù)型隨機數(shù)序列,函數(shù)修改成:floatrandom(void){seed

=(multiplier*seed+increment)%modulus;return(float)seed/modulus;}第35頁例4-4驗證Pascal定理圓內(nèi)接六邊形三雙對邊延線交點在一條直線上ABCDEFB1B2B3讀入六個極角值求六個頂點A,B,C,D,E,F在直角坐標系中坐標求三雙對邊交點B1,B2,B3坐標驗證B1,B2,B3是否在一條直線上開始結(jié)束第36頁將6個點極坐標

轉(zhuǎn)換成直角坐標已知極角theta,矢徑r,求一點直角坐標(px,py)coordinatepx=r*cos(theta);py=r*sin(theta);returntrans_abcdef轉(zhuǎn)換a→xa,ya轉(zhuǎn)換b→xb,yb轉(zhuǎn)換d→xd,yd轉(zhuǎn)換f→xf,yf轉(zhuǎn)換e→xe,ye轉(zhuǎn)換c→xc,ycreturn第37頁求交點B1,B2,B3坐標已知四點r,s,t,u

求兩條直線交點Bthree_inter求AB、DE交點B1求BC、EF交點B2求CD、FA交點B3returnintersection求r,s;t,u直線方程l1,l2求l1、l2交點Breturn第38頁已知四點r,s,t,u

求兩條直線l1,l2方程已知兩點坐標px,py,qx,qy,求直線斜率a和截距bequtionreturn求r,s直線方程l1求t,u直線方程l2straightlineb=(py*qx-qy*px)/(qx-px)returna=(py-qy)/(px-qx)第39頁已知兩條直線方程斜率分別為ma,na;截距mb,nb;求直線交點(wx,wy)驗證B1,B2,B3

是否在一條直線上interwx=(nb-mb)/(ma-na);wy=ma*px+mb;returntestreturn求過B1,B2直線方程L判斷B3是否在直線L上第40頁/*PROGRAMPascaltheorem*/#include"math.h"#include"stdio.h"#definePI3.1415927#defineeps1e-5floatradius;/*圓半徑*/floattheta1,theta2,theta3,theta4,theta5,theta6;/*六個極角度數(shù)*/floatxa,ya,xb,yb,xc,yc,xd,yd,xe,ye,xf,yf;/*六個頂點直角坐標*/floatb1_x,b1_y,b2_x,b2_y,b3_x,b3_y;/*三個交點直角坐標*/floatb12_a,b12_b;/*B1和B2組成直線斜率和截距*/第41頁/*主程序之前這段為“函數(shù)原型”以及各個函數(shù)返回結(jié)果所用變量*/voidtrans_abcdef();floatpx,py;/*用來保留coordinate()轉(zhuǎn)換直角坐標*/voidcoordinate(float,float);voidthree_inter();voidintersection(float,float,float,float,float,float,float,float);floatl1_a,l1_b,l2_a,l2_b; /*兩條直線斜率和截距*/voidequation(float,float,float,float,float,float,float,float);floata,b; /*直線方程斜率和截距*/voidstraightline(float,float,float,float);floatwx,wy; /*直線交點直角坐標*/voidinter(float,float,float,float);inttest(float,float,float,float,float,float);第42頁/*主函數(shù)*/voidmain(){/*讀入圓形半徑*/printf("pleaseinputtheradiusofthecircle:");scanf("%f",&radius);/*讀入六個角*/printf("pleaseinputsixangle:");scanf("%f%f%f%f%f%f",&theta1,&theta3,&theta3,&theta4,&theta5,&theta6);trans_abcdef();/*計算六個定點坐標*/three_inter();/*求三個交點*/if(test(b1_x,b1_y,b2_x,b2_y,b3_x,b3_y))/*驗證*/printf("ok");else{printf("Thereisanerrorwhen:\n");printf("theta1=%dtheta2=%d\n",theta1,theta2);printf("theta3=%dtheta4=%d\n",theta3,theta4);printf("theta5=%dtheta6=%d\n",theta5,theta6);}}第43頁/*計算六個頂點坐標*/voidtrans_abcdef(){coordinate(radius,theta1);xa=px;ya=py;coordinate(radius,theta2);xb=px;yb=py;coordinate(radius,theta3);xc=px;yc=py;coordinate(radius,theta4);xd=px;yd=py;coordinate(radius,theta5);xe=px;ye=py;coordinate(radius,theta6);xf=px;yf=py;}第44頁/*計算一個頂點坐標*/voidcoordinate(floatr,floattheta){/*先把“角度”轉(zhuǎn)換成“弧度”,再轉(zhuǎn)換成直角坐標*/px=r*cos(PI*theta/180);py=r*sin(PI*theta/180);}第45頁/*求三個交點*/voidthree_inter(){intersection(xa,ya,xb,yb,xd,yd,xe,ye);b1_x=wx;b1_y=wy;intersection(xb,yb,xc,yc,xe,ye,xf,yf);b2_x=wx;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論