版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Date: 04 August 2022C語言程序設(shè)計(jì)案例教程(三)第1頁(yè),共131頁(yè)。Date: 04 八月 2022第三章結(jié) 構(gòu) 化 程 序 設(shè) 計(jì)第2頁(yè),共131頁(yè)。授課要點(diǎn)循環(huán)的嵌套結(jié)構(gòu)第3頁(yè),共131頁(yè)。問題:打印如下圖案123456789123456789123456789123456789123456789112123123412345第4頁(yè),共131頁(yè)。問題解答1#include void main()int i,j;for(i=1;i=5;i+)for(j=1;j=9;j+)printf(%d,j);printf(n);第5頁(yè),共131頁(yè)。問題解答2#include void
2、 main()int i,j;for(i=1;i=5;i+)for(j=1;j=i;j+)printf(%d,j);printf(n);第6頁(yè),共131頁(yè)。問題:打印如下圖案* * * * *第7頁(yè),共131頁(yè)。問題解答3#include void main()int i,j;for(i=1;i=5;i+)for(j=1;j=i;j+)printf(“*);printf(n);第8頁(yè),共131頁(yè)。問題解答4#include void main()int i,j;for(i=1;i=5;i+)for(j=1;j=5-i;j+)printf( );for(j=1;j=i;j+)printf(*);
3、printf(n);第9頁(yè),共131頁(yè)。問題:打印如下圖案 * * * *第10頁(yè),共131頁(yè)。問題解答5#include void main()int i,j;for(i=1;i=5;i+)for(j=1;j=5-i;j+)printf( );for(j=1;j=2*i-1;j+)printf(*);printf(n);第11頁(yè),共131頁(yè)。模仿練習(xí)* * * * * * * * *第12頁(yè),共131頁(yè)。小組討論并總結(jié)循環(huán)嵌套的執(zhí)行過程“控制流程”編碼中的常見錯(cuò)誤。第13頁(yè),共131頁(yè)。結(jié)論1循環(huán)嵌套的執(zhí)行過程執(zhí)行順序:1、語句12、判斷表達(dá)式:如果為假,執(zhí)行語句5;如果為真執(zhí)行另一個(gè)循環(huán)語
4、句塊3、執(zhí)行語句24、判斷表達(dá)式2:如果為假,執(zhí)行語句4,轉(zhuǎn)回表達(dá)式1;如果為真,循環(huán)執(zhí)行語句3第14頁(yè),共131頁(yè)。結(jié)論2“控制流程”中常見錯(cuò)誤ifelse不配對(duì)switch中表達(dá)式類型與case語句的值不匹配 無結(jié)束條件,死循環(huán)循環(huán)次數(shù)不清楚誤用break和continue第15頁(yè),共131頁(yè)。學(xué)以致用尋找你身邊的一個(gè)實(shí)際問題,構(gòu)造出解決問題的表達(dá)式,描述解決問題的算法,以及編寫解決問題的程序。例如:假設(shè)你在某公司工作,老板要你打印一張表,買主可以用它來購(gòu)買多個(gè)特定部件的費(fèi)用。單個(gè)部件的價(jià)格從1元到9元不等。N件東西的費(fèi)用就是單價(jià)與數(shù)量相乘得出。因此,你要打印一張像下面這樣的數(shù)字表: 某公
5、司部件費(fèi)用明細(xì)表 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 2007年4月7日 第16頁(yè),共131頁(yè)。作業(yè)【練習(xí)1】將1、2、3、9打印15行?!揪毩?xí)2】打印如下圖案: * * * * * * *第17頁(yè),共131頁(yè)。【練習(xí)3】打印九九乘法表,如圖所示第18頁(yè),共131頁(yè)。Date: 04 八月 2022第三章結(jié) 構(gòu) 化 程 序 設(shè) 計(jì)第19頁(yè),共131頁(yè)。授課要點(diǎn)循環(huán)的嵌套結(jié)構(gòu)嵌套結(jié)構(gòu)的轉(zhuǎn)換第20頁(yè),共131頁(yè)。問題:輸入一個(gè)數(shù)n,求其階乘分析規(guī)律:1!=
6、12!=2*1=2*1!3!=3*2*1 =3*2!4!=4*3*2*1=4*3!n!=n*(n-1)*(n-2)*3*2*1=n*(n-1)!利用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)第21頁(yè),共131頁(yè)。編程思路(1)用變量n保存待計(jì)算階乘數(shù)的數(shù)據(jù),用p保存逐項(xiàng)累乘的結(jié)果,初值為1;(2)循環(huán)變量i的初值為1;(3)如果i超過n值,循環(huán)結(jié)束,轉(zhuǎn)(6);(4)每次循環(huán),將變量i與p相乘,結(jié)果保留到p中;(5)循環(huán)變量i增加1,轉(zhuǎn)回到(3);(6)輸出累乘結(jié)果p,結(jié)束運(yùn)行。第22頁(yè),共131頁(yè)。流程圖及代碼int n;/*存儲(chǔ)計(jì)算階乘的n值*/scanf(“%d”,&n); /*取得輸入值n*/int j; /*循環(huán)
7、變量j*/int p; /*累乘結(jié)果p*/for(j=1;j=n;j+)p=p*j; /*累乘,結(jié)果放到p中*/printf(“%d”,p);/*輸入累乘結(jié)果*/第23頁(yè),共131頁(yè)。問題:求1!+2!+3!+20!的值分析:1、1-20分別求階乘(p1,p2,p20),然后求各個(gè)階乘的和。2、兩重循環(huán)解決問題內(nèi)重循環(huán):n!123n的實(shí)現(xiàn)外重循環(huán):p1+p2+p3+p4+ +p20的實(shí)現(xiàn)第24頁(yè),共131頁(yè)。嵌套循環(huán)流程圖第25頁(yè),共131頁(yè)。循環(huán)嵌套雙重循環(huán)兩個(gè)while循環(huán)嵌套while()while()語句;內(nèi)重循環(huán)外重循環(huán)兩個(gè)for循環(huán)嵌套for()for()語句;第26頁(yè),共131頁(yè)
8、。雙重循環(huán)代碼分解/*內(nèi)重循環(huán)代碼*/int j; /*循環(huán)變量*/p=1;for(j=1;j=i;j+)p*=j;/*外重循環(huán)代碼*/int i; /*循環(huán)變量*/int sum=0;/*求和結(jié)果*/for(i=1;i=20;i+)sum=sum+p; /*累加*/printf(“%d”,sum);給出一個(gè)個(gè)i值得到p值第27頁(yè),共131頁(yè)。雙重循環(huán)代碼塊while雙重循環(huán)int i=1;int sum=0;while(i=20) int j=1; int p=1; while(j=i)p=p*j; /*累乘積*/j+;i=i+1;sum=sum+p;相應(yīng)的for雙重循環(huán)int i,j,su
9、m=0;int p=1;for(int i=1; i=20; i+)for(int j=1;j=i;j+)p=p*j;/*累乘積*/sum=sum+p;第28頁(yè),共131頁(yè)。問題擴(kuò)展在問題中,采用的是兩個(gè)while和for循環(huán)的嵌套。能不能換成兩個(gè)dowhile循環(huán)的嵌套?能不能換成for、dowhile、while的混合型嵌套?第29頁(yè),共131頁(yè)。for循環(huán)和dowhile循環(huán)互換int i=1;int p=1;while(i=20)int j=1; for(int j=1;j=i;j+) p=p*j; i=i+1; sum=sum+p;int i=p=1;while(i=20)int j
10、=1;dop=p*j;j+;while(j=i);i=i+1;sum=sum+p;第30頁(yè),共131頁(yè)。問題:搬運(yùn)磚塊假設(shè)有36塊磚,共需36個(gè)人搬,男人可搬4塊,女人可搬3塊,小孩兩人搬1塊,要求一次全部搬完,問男、女、小孩人數(shù)的可能組合。思路:男人的可能值是08;女人的可能值是011;小孩的取值是(36男人女人)。第31頁(yè),共131頁(yè)。問題:求100200之間的全部素?cái)?shù)什么是素?cái)?shù)?如何判斷m是否是素?cái)?shù)?思路:讓m被2到根號(hào)m除,如果m能被其中任何一個(gè)整數(shù)整除,則m不是素?cái)?shù)。第32頁(yè),共131頁(yè)。小組討論并總結(jié)循環(huán)主菜單是如何跳出循環(huán)的?第33頁(yè),共131頁(yè)。結(jié)論3循環(huán)主菜單如何跳出循環(huán)?v
11、oid main()int input;scanf(“%d”,&input);switch(input)case 1:/*語句*/break;/*跳出循環(huán)*/case 2:/*語句*/break; /*跳出循環(huán)*/使用break語句第34頁(yè),共131頁(yè)。Date: 04 八月 2022第四章模 塊 化 程 序 設(shè) 計(jì)第35頁(yè),共131頁(yè)。授課要點(diǎn)什么是結(jié)構(gòu)化程序設(shè)計(jì)函數(shù)的定義、聲明、調(diào)用無參無返回值的函數(shù)無參有返回值的函數(shù)第36頁(yè),共131頁(yè)。什么是結(jié)構(gòu)化程序設(shè)計(jì)?自上而下逐步細(xì)化的模塊化程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)的好處是什么?復(fù)雜問題簡(jiǎn)單化便于多人協(xié)作完成一個(gè)大的任務(wù)提高程序可維護(hù)性、可讀性
12、模塊復(fù)用C語言中如何實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)?模塊化在C語言中用函數(shù)實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)第37頁(yè),共131頁(yè)。#include #include main() /主函數(shù) int iNo,b;printf(“input a number:n”);/輸出函數(shù)scanf(“%d”,&iNo); /輸入函數(shù)b=sqrt(iNo); /求平方根函數(shù)printf(“%d”,b); /輸出函數(shù)初識(shí)函數(shù)1第38頁(yè),共131頁(yè)。/*從鍵盤輸入3個(gè)數(shù),求和并輸出。*/#include #include int myAdd(int x,int y,int z)int s;s=x+y+z;return s;main() /主
13、函數(shù)int iNo1,iNo2,iNo3,sum;printf(input 3 numbers:n);/輸出函數(shù)scanf(%d%d%d,&iNo1,&iNo2,&iNo3); /輸入函數(shù)sum=myAdd(iNo1,iNo2,iNo3); /用戶自定義函數(shù)printf(sum=%d,sum); /輸出函數(shù)初識(shí)函數(shù)2第39頁(yè),共131頁(yè)。函數(shù):一段函數(shù)就是一段實(shí)現(xiàn)一定功能的代碼,就像一臺(tái)具有某種功能機(jī)器。因此函數(shù)的調(diào)用就類似啟動(dòng)一臺(tái)機(jī)器來完成某個(gè)任務(wù)。C語言中,函數(shù)是實(shí)現(xiàn)模塊化的工具。什么是函數(shù)?第40頁(yè),共131頁(yè)。用函數(shù)解決問題輸入若干個(gè)學(xué)生的學(xué)號(hào)、某門課程的平時(shí)成績(jī)和期末成績(jī),計(jì)算出總評(píng)
14、成績(jī)。其中, 總評(píng)成績(jī) = 50%*平時(shí)成績(jī)50*期末成績(jī)最后,從鍵盤輸入一個(gè)學(xué)生的學(xué)號(hào),查詢?cè)撋钠綍r(shí)成績(jī)、期末成績(jī)和總評(píng)成績(jī)。第41頁(yè),共131頁(yè)。用函數(shù)解決的思路定義若干具有不同功能的函數(shù),在main函數(shù)中分別調(diào)用它們,用以解決這個(gè)問題。如:main() /定義必要的變量 inputScore(); /輸入學(xué)生學(xué)號(hào)及成績(jī)信息 computeTotalScore();/計(jì)算每個(gè)學(xué)生的總成績(jī) searchByNo(); /按學(xué)號(hào)查找某個(gè)學(xué)生的信息 printSearchInfo();/輸出查找到的學(xué)生信息main函數(shù)只負(fù)責(zé)解決問題的流程;具體子問題的實(shí)現(xiàn)交給不同的函數(shù)去處理。第42頁(yè),共13
15、1頁(yè)。函數(shù)的定義除了系統(tǒng)提供的函數(shù)外,我們都需要對(duì)函數(shù)進(jìn)行定義。函數(shù)定義的通用形式為: 返回值數(shù)據(jù)類型 函數(shù)名稱(參數(shù)數(shù)據(jù)類型 參數(shù)1 , 參數(shù)數(shù)據(jù)類型 參數(shù)2, ) 函數(shù)首部函數(shù)體第43頁(yè),共131頁(yè)。函數(shù)定義示例(1)無參數(shù)無返回值的函數(shù)如:定義printStar函數(shù),用以在屏幕上輸出5個(gè)*符號(hào)。void printStar( ) int star; for(star=1; star=5; star+) printf(*); printf(n) ;函數(shù)無返回值時(shí)使用的數(shù)據(jù)類型第44頁(yè),共131頁(yè)。 函數(shù)的調(diào)用無參的調(diào)用形式:函數(shù)名();第45頁(yè),共131頁(yè)。無參數(shù)無返回值的函數(shù)的調(diào)用#in
16、clude main( ) printStar( );/函數(shù)調(diào)用void printStar( ) int star; for(star=1; star=5; star+) printf(*); printf(n) ;第46頁(yè),共131頁(yè)。自定義函數(shù)的聲明在程序的開頭加上對(duì)應(yīng)函數(shù)的聲明,就不會(huì)出現(xiàn)函數(shù)未定義(或重復(fù)定義)的錯(cuò)誤。函數(shù)聲明的形式: 返回值類型 函數(shù)名稱(參數(shù)類型 參數(shù)1, ) ; 其中前面的與函數(shù)定義時(shí)的首部完全一樣,但末尾必須加“;”。如對(duì)printStar函數(shù)的聲明為: void printStar( );第47頁(yè),共131頁(yè)。無參數(shù)無返回值的函數(shù)的聲明#include vo
17、id printStar( ); /函數(shù)聲明main( ) printStar( ); /函數(shù)調(diào)用void printStar( ) /函數(shù)定義(首部) int star; for(star=1; star=5; star+) printf(*); printf(n) ;第48頁(yè),共131頁(yè)。 問題:過年回家,車票難買,到處托人。假如你先把車票錢給幫你買車票的朋友, 那么返回給你的應(yīng)該是一張車票(當(dāng)然要順利的話)。 同理,在C語言中,函數(shù)的調(diào)用有時(shí)候也是有返回值的,那么如何理解?第49頁(yè),共131頁(yè)。分析 對(duì)應(yīng)到函數(shù)上,你的朋友就是函數(shù),車票錢是函數(shù)輸入,車票就是函數(shù)的返回值,而你就是調(diào)用函數(shù)
18、的主程序。 第50頁(yè),共131頁(yè)。 函數(shù)的返回值函數(shù)的返回值返回語句形式: return(表達(dá)式); 或 return 表達(dá)式; 或 return;功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時(shí)把返值帶給調(diào)用函數(shù)第51頁(yè),共131頁(yè)。函數(shù)定義示例(2)無參數(shù)有返回值的函數(shù)如定義函數(shù)sum_100,用以求1+2+3+100的和,并將結(jié)果返回給調(diào)用它的函數(shù)。 int sum_100( ) int s=0, i; for(i=1; i=100; i+)s=s+i; return s; /用return返回一個(gè)值給主調(diào)函數(shù) 第52頁(yè),共131頁(yè)。無參數(shù)有返回值的函數(shù)示例 #include int
19、sum_100( ); /函數(shù)聲明 main( ) int s1; s1 = sum_100( ); /函數(shù)調(diào)用 printf(和值為:%dn, s1); int sum_100( ) /函數(shù)定義(首部) int s=0, i; for(i=1; i=100; i+)s=s+i; return s; /返回值給主調(diào)函數(shù) 第53頁(yè),共131頁(yè)。模仿練習(xí)無參無返回值函數(shù)編寫:1、自定義函數(shù)myPrint1(),在屏幕上輸出如下圖形(每行10個(gè)$符號(hào)),并在主函數(shù)中調(diào)用myPrint1()函數(shù)。 $ $ $第54頁(yè),共131頁(yè)。模仿練習(xí)無參無返回值函數(shù)編寫:2、自定義函數(shù)myPrint2(),在屏幕
20、上輸出如下圖形,并在主函數(shù)中調(diào)用myPrint2()函數(shù)。 第55頁(yè),共131頁(yè)。模仿練習(xí)無參有返回值函數(shù)編寫:3、自定義函數(shù)myFac(),計(jì)算10!,將計(jì)算結(jié)果返回給調(diào)用者。然后在主函數(shù)中調(diào)用myFac()函數(shù),輸出該結(jié)果。4、自定義函數(shù)myMax(),實(shí)現(xiàn)功能:從鍵盤輸入3個(gè)數(shù),求最大數(shù)并在主函數(shù)中調(diào)用myMax()函數(shù),輸出該結(jié)果。第56頁(yè),共131頁(yè)。小組討論并總結(jié)1、為什么使用函數(shù)?2、如何理解函數(shù)調(diào)用與函數(shù)定義的不同?3、空函數(shù)在程序結(jié)構(gòu)設(shè)計(jì)中有什么作用?第57頁(yè),共131頁(yè)。學(xué)以致用尋找你身邊的一個(gè)實(shí)際問題,編寫解決問題的程序,用到函數(shù)定義和調(diào)用。例、電視是我們?nèi)粘I钪兴煜?/p>
21、的,我們通過遙控器選擇不同的頻道,就可以播放相應(yīng)的頻道。請(qǐng)定義一個(gè)函數(shù)tvPlay( int channel) ,模擬根據(jù)遙控器的輸入的頻道號(hào)碼,播放相應(yīng)的頻道。然后給出調(diào)用的例子,比如,遙控器上選擇 5, 則播放CCTV-5體育頻道。第58頁(yè),共131頁(yè)。作業(yè)每人必做1 、編寫一個(gè)函數(shù)sum(n),計(jì)算1+2+n 之和,根據(jù)n值的不同,得到不同的值。要求分別計(jì)算n50,n80,n100的情況。2、 將自己的“學(xué)生成績(jī)管理系統(tǒng)”(循環(huán)菜單)以模塊化的形式進(jìn)行處理,具體實(shí)施方案:主菜單的顯示和選擇部分可定義函數(shù)menu_select()來調(diào)用,“編輯子菜單”可定義editmenu()來調(diào)用,“查
22、找”可定義serachmenu()來調(diào)用。第59頁(yè),共131頁(yè)。作業(yè)小組必做尋找你身邊的一個(gè)實(shí)際問題,構(gòu)造出解決問題的表達(dá)式,描述解決問題的算法,以及編寫解決問題的程序。例如,MP3可以播放不同的歌曲,請(qǐng)編寫一個(gè)MP3模擬函數(shù),根據(jù)輸入不同的歌曲代號(hào),可以顯示相應(yīng)的歌曲名。然后,調(diào)用該函數(shù)。第60頁(yè),共131頁(yè)。Date: 04 八月 2022第四章模 塊 化 程 序 設(shè) 計(jì)第61頁(yè),共131頁(yè)。授課要點(diǎn)有參無返回值的函數(shù)有參有返回值的函數(shù)第62頁(yè),共131頁(yè)。函數(shù)定義示例(3)有參數(shù)無返回值的函數(shù)如定義printStar_n()函數(shù),用以在屏幕的一行上輸出n個(gè)*號(hào)。其中n的值是由調(diào)用該函數(shù)的
23、函數(shù)傳遞過來的。 void printStar_n( int n) int star; for(star=1; star=n; star+)printf(*); printf(n); 函數(shù)參數(shù)(稱為形參)第63頁(yè),共131頁(yè)。 函數(shù)調(diào)用有參函數(shù)的調(diào)用形式:函數(shù)名(實(shí)參);實(shí)參與形參:個(gè)數(shù)相等類型一致按順序一一對(duì)應(yīng)第64頁(yè),共131頁(yè)。有參數(shù)無返回值的函數(shù)調(diào)用 #include void printStar2(int n); /函數(shù)聲明 main( ) int starNum; scanf(%d, &starNum); printStar_n(starNum); /函數(shù)調(diào)用 void print
24、Star_n( int n) /函數(shù)定義(首部) int star; for(star=1; star=n; star+)printf(*); printf(n); 函數(shù)參數(shù)(稱為形參)調(diào)用時(shí)傳遞的參數(shù)(稱為實(shí)參)第65頁(yè),共131頁(yè)。函數(shù)定義示例(4)有參數(shù)有返回值的函數(shù)如定義函數(shù)sum_n(),用以求1+2+3+n的和,并將結(jié)果返回給調(diào)用它的函數(shù)。 int sum_n( int n ) int s=0, i; for(i=1; i=n; i+)s=s+i;return s; /通過return返回一個(gè)值 函數(shù)參數(shù)(稱為形參)第66頁(yè),共131頁(yè)。 #include int sum_n( i
25、nt n ); /函數(shù)聲明 main( ) int s1, n; scanf(%d, &n); s1 = sum_n( n ); /函數(shù)調(diào)用 printf(和值為:%dn, s1); int sum_n( n ) /函數(shù)定義 (首部) int s=0, i; for(i=1; i=n; i+) s=s+i; return s; /返回一個(gè)值給主調(diào)函數(shù) 有參數(shù)有返回值的函數(shù)調(diào)用第67頁(yè),共131頁(yè)。 函數(shù)的調(diào)用1、語句調(diào)用方式2、函數(shù)表達(dá)式3、函數(shù)參數(shù) 第68頁(yè),共131頁(yè)。 函數(shù)的調(diào)用調(diào)用方式語句調(diào)用: 例 printmsg(); printf(“打印成功!n”);函數(shù)表達(dá)式調(diào)用: 例 res
26、ult=aver(totalscore, stuno);函數(shù)參數(shù)調(diào)用: 例 printf(“%f”,aver(totalscore, stuno); 第69頁(yè),共131頁(yè)。隨堂實(shí)踐有參無返回值函數(shù)編寫:1、自定義函數(shù)myprint_n(),在屏幕的一行上輸出n個(gè)$符號(hào)。在主函數(shù)中調(diào)用myprint_n()函數(shù),輸出如下圖形(每行上的符號(hào)個(gè)數(shù)由調(diào)用它的函數(shù)傳遞過來) 。函數(shù)首部為:void myprint_n( int n) $(5個(gè)$) $(10個(gè)) $(15個(gè)) $(20個(gè))2、修改以上程序,實(shí)現(xiàn)以下功能:打印個(gè)數(shù)由用戶輸入決定,支持用戶循環(huán)輸入,當(dāng)用戶輸入0時(shí)結(jié)束程序。第70頁(yè),共131頁(yè)
27、。有參有返回值函數(shù)編寫:3、自定義函數(shù)myfac_n(),求n!,并在主函數(shù)中調(diào)用myfac_n()函數(shù),輸出結(jié)果。 函數(shù)首部為: int myfac_n( int n)4、自定義函數(shù)mypower(),求x的y次冪,并在主函數(shù)中調(diào)用mypower()函數(shù),輸出結(jié)果。 函數(shù)首部為:double mypower( double x, int y)5、自定義函數(shù)circleArea(),用于計(jì)算圓的面積,其中半徑作為參數(shù)傳入。然后在主函數(shù)中調(diào)用它,并輸出結(jié)果。函數(shù)首部為: double circleArea(double radius) 隨堂實(shí)踐第71頁(yè),共131頁(yè)。小組討論并總結(jié)1、函數(shù)的功能應(yīng)
28、該盡量保持相對(duì)獨(dú)立還是依賴 函數(shù)外的數(shù)據(jù)為好 ?2、怎樣使一個(gè)函數(shù)具有更大的通用性? 3、函數(shù)參數(shù)的值傳遞有哪些特點(diǎn)?第72頁(yè),共131頁(yè)。學(xué)以致用尋找你身邊的一個(gè)實(shí)際問題,編寫解決問題的程序,要求用到函數(shù)調(diào)用、參數(shù)傳遞。例如:踢足球的時(shí)候,裁判要求換人,比如要用8號(hào)換下18號(hào),請(qǐng)用函數(shù)模擬換人,并在主函數(shù)中調(diào)用。 第73頁(yè),共131頁(yè)。作業(yè)每人必做 將“控制流程”階段完成的“小型計(jì)算器”功能改寫為函數(shù),并在主函數(shù)中調(diào)用,注意參數(shù)的類型定義及傳參過程。第74頁(yè),共131頁(yè)。Date: 04 八月 2022第四章模 塊 化 程 序 設(shè) 計(jì)第75頁(yè),共131頁(yè)。授課要點(diǎn)復(fù)習(xí),評(píng)講模擬練習(xí)參數(shù)的值傳
29、遞實(shí)訓(xùn)第76頁(yè),共131頁(yè)。函數(shù)的值傳遞方式#include void main() void swap(int a,int b); /*swap函數(shù)的聲明*/ int x=7,y=11; printf(x=%d,ty=%dn,x,y); printf(swapped:n); swap(x,y); /*調(diào)用swap函數(shù)*/ printf(x=%d,ty=%dn,x,y);void swap(int a,int b) /*定義swap函數(shù)*/ int temp; temp=a; a=b; b=temp; 輸出結(jié)果:x=7, y=11 swapped: x=7, y=11第77頁(yè),共131頁(yè)。 結(jié)
30、論:值傳遞方式方式:函數(shù)調(diào)用時(shí),為形參分配單元,并將實(shí)參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原值特點(diǎn):形參與實(shí)參占用不同的內(nèi)存單元單向傳遞第78頁(yè),共131頁(yè)。 結(jié)論:函數(shù)參數(shù)的傳遞方式還有另一種-地址傳遞方式其傳遞的參數(shù)為地址而不是值,具體內(nèi)容將在數(shù)組章節(jié)中學(xué)習(xí).第79頁(yè),共131頁(yè)。Date: 04 八月 2022第四章模 塊 化 程 序 設(shè) 計(jì)第80頁(yè),共131頁(yè)。授課要點(diǎn)作業(yè)評(píng)講變量的存儲(chǔ)類別第81頁(yè),共131頁(yè)。問題#include void prt();main() int x; for(x=1; x=5; x+)prt();void prt()stat
31、ic int y=0; y+;printf(%d, y);輸出結(jié)果:12345去掉static后的結(jié)果為多少?第82頁(yè),共131頁(yè)。問題分析動(dòng)態(tài)存儲(chǔ)變量和靜態(tài)存儲(chǔ)變量動(dòng)態(tài)變量:用auto關(guān)鍵字表示如auto int p, f; /p,f為兩個(gè)動(dòng)態(tài)變量在C中,默認(rèn)的變量定義就是定義為動(dòng)態(tài)變量即上述的p,f變量定義與 int p, f; 是完全等價(jià)的。靜態(tài)變量:在程序生存期內(nèi)一直有效。注意,如果靜態(tài)變量出現(xiàn)在函數(shù)中,不會(huì)因?yàn)楹瘮?shù)的調(diào)用結(jié)束而丟失這個(gè)變量的值第83頁(yè),共131頁(yè)。變量的生存期int a,b,c; /外部變量定義main() int x, y; /內(nèi)部變量 float f; /內(nèi)部變量
32、 /其他語句int sum(int n) int s=0, i; /內(nèi)部變量 /語句x, y, f的有效區(qū)域s,i的有效區(qū)域a, b, c的有效區(qū)域內(nèi)部變量與外部變量的作用區(qū)域是不一樣的。第84頁(yè),共131頁(yè)。1變量的存儲(chǔ)類型 計(jì)算機(jī)的存儲(chǔ)器分為內(nèi)存和外存。還有一個(gè)小小的臨時(shí)存儲(chǔ)器稱為寄存器,用以存儲(chǔ)一些反復(fù)被加工的數(shù)據(jù)。C語言允許程序員區(qū)分是在主存還是在寄存器中開辟變量的存儲(chǔ)空間。2變量的生存期(1)在編譯時(shí)分配存儲(chǔ)單元。這種變量的生存期為程序執(zhí)行的整個(gè)過程,在該過程中占有固定的存儲(chǔ)空間,稱為永久存儲(chǔ)。(2)只在程序執(zhí)行的某一段時(shí)間內(nèi)存在。比如在函數(shù)的執(zhí)行過程中存在。這種存儲(chǔ)方式稱為動(dòng)態(tài)存儲(chǔ)
33、。小結(jié)第85頁(yè),共131頁(yè)。小結(jié)3變量的可用域 變量的可用域也分為全局可用和局部可用。 C語言中,用“存儲(chǔ)屬性”來表示以上三個(gè)方面的屬性,如表所示。名稱寄存器變量自動(dòng)變量靜態(tài)變量外部變量存儲(chǔ)屬性registerautostaticextern存儲(chǔ)位置寄存器主存生存期動(dòng)態(tài)生存期永久生存 期作用域局部局部或全局全局第86頁(yè),共131頁(yè)。模仿練習(xí)1、寫出以下程序的運(yùn)行結(jié)果:int fun(int a)/*a為形參,自動(dòng)型局部變量*/ auto int b=0;/*b是自動(dòng)型局部變量*/ static int c=3; /*c是靜態(tài)型局部變量,初始化僅進(jìn)行一次*/ b+=1; c=c+1; retur
34、n a+b+c;main() int a=2,i; /*a和i都是自動(dòng)型局部變量*/ for(i=0;i3;i+) printf(%dt,fun(a);第87頁(yè),共131頁(yè)。模仿練習(xí)2、寫出以下程序的運(yùn)行結(jié)果:int sum(int n); /函數(shù)聲明int a=4,b=5,c=6; /外部變量定義main() int x=1, y=2; float f=3.0; x=sum(10); printf(x=%d,y=%d,f=%fn, x, y, f); printf(a=%d,b=%d,c=%dn, a, b, c); /printf(s=%d, i=%dn, s, i);int sum(in
35、t n) int s=0, i; for(i=1; i=n; i+) s = s+i; printf(s=%d, i=%dn, s, i); printf(a=%d,b=%d,c=%dn, a, b, c); /printf(x=%d,y=%d,f=%fn, x, y, f); return s;第88頁(yè),共131頁(yè)。Date: 04 八月 2022第四章模 塊 化 程 序 設(shè) 計(jì)第89頁(yè),共131頁(yè)。授課要點(diǎn)函數(shù)的嵌套調(diào)用函數(shù)的遞歸調(diào)用第90頁(yè),共131頁(yè)。函數(shù)的嵌套調(diào)用f1() f2(); f2() f3(); f3() 第91頁(yè),共131頁(yè)。函數(shù)的嵌套調(diào)用舉例1main() int a=
36、3,b=5,s; s=cal(a,b); printf(“%d”,s);int cal(int x,int y) int result,s1,s2; s1=powl(x,y); s2=pow(y,x); result=s1+s2; return result;int pow(int m,int n) int i,res=1; for(i=0;in;i+) res *=m; return res;求 3 5 。53第92頁(yè),共131頁(yè)。函數(shù)的嵌套調(diào)用舉例2 自定義函數(shù)mymax2(),求出2個(gè)參數(shù)的最大值,然后定義函數(shù) mymax3(),調(diào)用mymax2()求出3個(gè)參數(shù)中的最大值,將值返回給主函
37、數(shù),輸出該結(jié)果。函數(shù)首部為: float mymax3(float x, float y, float z) 第93頁(yè),共131頁(yè)。模仿練習(xí)1、自定義函數(shù)mymax (),求出3個(gè)參數(shù)的最大值; 自定義函數(shù) mymin(),求出3個(gè)參數(shù)的最小值; 自定義函數(shù)mysub(),調(diào)用mymax()和mymin()求出3個(gè)參數(shù)的最大值與最小值的差; 在主函數(shù)中調(diào)用mysub(),輸出結(jié)果。函數(shù)首部為: float mymax (float x, float y,float z) float mymin(float x,float y,float z) float mysub (float x,floa
38、t y,float z)2、計(jì)算s=1k+2k+3k+N k函數(shù)首部為:long f1(int n,int k)/*計(jì)算n的k次方*/ long f2(int n,int k)/*計(jì)算1到n的k次方之累加和*/ 第94頁(yè),共131頁(yè)。案例解答#define K 4#define N 5long f1(int n,int k)/*計(jì)算n的k次方*/ long power=n; int i; for(i=1;ik;i+) power *= n; return power;long f2(int n,int k)/*計(jì)算1到n的k次方之累加和*/ long sum=0; int i; for(i=1
39、;i=n;i+) sum += f1(i, k); return sum;main() printf(Sum of %d powers of integers from 1 to %ld = ,K,N); printf(%dn,f2(N,K);第95頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用C語言的函數(shù)調(diào)用允許直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。含有直接或間接調(diào)用自己的函數(shù)稱為遞歸函數(shù)。函數(shù)f調(diào)用函數(shù)f函數(shù)f1調(diào)用函數(shù)f2調(diào)用函數(shù)f1函數(shù)f2直接調(diào)用本身間接調(diào)用本身第96頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例用遞歸函數(shù)求4!4! = 4*3! ;3! = 3*2! ;2! = 2*1! ;1! =
40、 1 ;n! = n*(n-1)! 1! = 1第97頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例例:用遞歸函數(shù)求n! n! = n * (n-1)! int myFac( int n) if (n=1) return 1; /遞歸的結(jié)束條件 return n*myFac(n-1); myFac(n)就是求n!myFac(n-1)就是求(n-1)!第98頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例fac(3)*4fac(2)*3fac(1)*2reutrn(1)reutrn(1*2)reutrn(2*3)return(6*4)調(diào)用過程返回過程fac(4)reutrn(24)用遞歸函數(shù)求4!第99頁(yè),共131頁(yè)。函
41、數(shù)的遞歸調(diào)用舉例例:用遞歸函數(shù)求n!的完整程序#include int myFac(int n);main() int f, n;scanf(%d, &n);f = myFac(n);printf(%d!=%dn, n, f);int myFac( int n) int s; if (n=1) s= 1; /遞歸的結(jié)束條件 else s= n*myFac(n-1); return s;單步調(diào)試,理解遞歸程序的執(zhí)行流程第100頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例遞歸算法的組成:遞歸終止條件:當(dāng)滿足一定條件時(shí),遞歸調(diào)用必須可以結(jié)束,否則會(huì)無限地遞歸調(diào)用而導(dǎo)致程序無法結(jié)束。例如n!中當(dāng)n=1時(shí),令結(jié)果
42、為1則可以結(jié)束遞歸調(diào)用,否則它將繼續(xù)調(diào)用(0)!而無限繼續(xù)下去。對(duì)于由多個(gè)通項(xiàng)表示的情況,則需要給出最后一個(gè)遞歸調(diào)用的所有項(xiàng)的值。如an = an-1 + an-2 ,要給出n=1時(shí)的結(jié)果以及n=2時(shí)結(jié)果才可以結(jié)束遞歸調(diào)用。遞歸表達(dá)式,如fac(n)=n*fac(n-1)第101頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例求下數(shù)列的第20項(xiàng)的值。1,2,3,5,8,13,21,34a1=1;a2=2;a3=a1+a2;an=an-1 + an-2; 第102頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例求下數(shù)列的第20項(xiàng)的值。1,2,3,5,8,13,21,34f(1)=1;f(2)=2;f(n)=f(n-1)+f
43、(n-2); 第103頁(yè),共131頁(yè)。函數(shù)的遞歸調(diào)用舉例main() int a; a=f(20); printf(“%d”,a); int f(int n) int s; if(n=1) s= 1; else if(n=2) s= 2; else s= f(n-1)+f(n-2); return s; 第104頁(yè),共131頁(yè)。模仿練習(xí)遞歸函數(shù)的編寫:1、 用遞歸方法編寫函數(shù)求n!。 函數(shù)定義如下: int recFac(int n)2、用遞歸函數(shù)的方法編寫函數(shù)求 斐波納契(Fibonacci)數(shù)列的第20項(xiàng)的值。函數(shù)定義如下: int Fib (int n) 其中n為該數(shù)列中的第n項(xiàng)。 1,
44、1,2,3,5,8,13第105頁(yè),共131頁(yè)。模仿練習(xí)遞歸函數(shù)的編寫:3、用遞歸算法,計(jì)算:1 2 3 n 2222第106頁(yè),共131頁(yè)。Date: 04 八月 2022第四章模 塊 化 程 序 設(shè) 計(jì)第107頁(yè),共131頁(yè)。授課要點(diǎn)數(shù)組的概念一維數(shù)組的定義和引用一維數(shù)組的初始化和賦值數(shù)組元素的遍歷第108頁(yè),共131頁(yè)。這樣做好嗎?如果題目改為10個(gè)數(shù)、100個(gè)數(shù)該怎么做?問題1:從鍵盤輸入5個(gè)整數(shù),逆序輸出這5個(gè)數(shù)。main()int a0,a1,a2,a3,a4;scanf(“%d”,&a0); scanf(“%d”,&a1);scanf(“%d”,&a2);scanf(“%d”,&
45、a3);scanf(“%d”,&a4);printf(“%dn”,a4);printf(“%dn”,a3);printf(“%dn”,a2);printf(“%dn”,a1);printf(“%dn”,a0);第109頁(yè),共131頁(yè)。在“學(xué)生成績(jī)管理系統(tǒng)”中,我們需要對(duì)多個(gè)學(xué)生進(jìn)行處理,比如100個(gè)學(xué)生,是否必須定義100個(gè)變量呢?Student stu1;Student stu2;Student stu3;Student stu100;定義多個(gè)變量,在定義、輸入、輸出、處理的時(shí)候非常不方便。如果需要處理5000個(gè)學(xué)生的成績(jī),情況就更糟。問題2第110頁(yè),共131頁(yè)。以上兩個(gè)例子有什么共同之處
46、?問題2具有相同的數(shù)據(jù)類型!第111頁(yè),共131頁(yè)。數(shù)組的概念 數(shù)組是一組變量,滿足下列條件:(1)具有相同的名字(2)具有相同的數(shù)據(jù)類型(3)在存儲(chǔ)器中連續(xù)存放每個(gè)變量名字相同下標(biāo)不同,稱為“數(shù)組元素”“數(shù)組名”代表整個(gè)數(shù)組,其值是這組變量在內(nèi)存中所占連續(xù)存儲(chǔ)空間的首地址。數(shù)組要先定義后使用。數(shù)組名不能與相同作用域的其他變量名重名第112頁(yè),共131頁(yè)。問題如何定義數(shù)組?如何為數(shù)組元素賦值?如何引用數(shù)組元素?第113頁(yè),共131頁(yè)。一維數(shù)組的定義一維數(shù)組:只有一個(gè)下標(biāo)的數(shù)組定義形式為:類型說明符 數(shù)組名常量表達(dá)式例如:int a10;說明數(shù)組名為a數(shù)組中每個(gè)元素的數(shù)據(jù)類型為int類型10個(gè)數(shù)
47、組元素 內(nèi)是常量表達(dá)式,不能為變量第114頁(yè),共131頁(yè)。1、定義100個(gè)整型變量2、定義50個(gè)浮點(diǎn)型變量3、定義1000個(gè)“學(xué)生”變量,“學(xué)生”類型定義如下:typedef structchar acNum10;char acName15;Student;模仿練習(xí)第115頁(yè),共131頁(yè)。以下一維數(shù)組的定義是否正確?int a ;#define SIZE 100float bSIZE;int n=10;char cn;int 2a10;錯(cuò)誤,沒有指明數(shù)組的大小int a10;正確 ,SIZE是常量,相當(dāng)于 float b100;錯(cuò)誤,數(shù)組的大小不能是變量,應(yīng)為 int a10;錯(cuò)誤,數(shù)組名2a
48、 不符合標(biāo)識(shí)符的命名規(guī)則第116頁(yè),共131頁(yè)。數(shù)組元素的引用數(shù)組就是一組變量的集合,每個(gè)數(shù)組元素相當(dāng)于是一個(gè)變量數(shù)組元素的表示: 數(shù)組名下標(biāo)如:int a5;所定義的數(shù)組就是五個(gè)變量的集合,分別是: a0, a1,a2, a3, a4int aN; 下標(biāo)的取值范圍:0N-1 ,其中N為數(shù)組的大小下標(biāo)是整型值,可以是整型常量、整型變量或整型表達(dá)式 如:ai a3+1 a2*i-1注意:下標(biāo)不能越界,否則可能覆蓋其他數(shù)據(jù),造成嚴(yán)重后果第117頁(yè),共131頁(yè)。定義數(shù)組之后,與普通變量一樣,數(shù)組是沒有初始值的,各存儲(chǔ)單元的值都是不定的。初始化:定義數(shù)組的同時(shí)賦初值語法: 數(shù)據(jù)類型說明符 數(shù)組名長(zhǎng)度=
49、數(shù)值1,數(shù)值2,; 如 : int data10=0,1,2,3,4,5,6,7,8,9;一維數(shù)組的初始化第118頁(yè),共131頁(yè)。1、定義并初始化一個(gè)float型數(shù)組,包含5個(gè)元素。2、定義并初始化一個(gè)字符型數(shù)組,包含6個(gè)元素。3、定義一個(gè)全0的整形數(shù)組,包含15個(gè)元素。模仿練習(xí)第119頁(yè),共131頁(yè)。初始化注意事項(xiàng):(1) 允許初始化一部分元素,其他沒有賦初值的元素初值為0; int a10=0,1,2,3,4,5; 相當(dāng)于 int a10=0,1,2,3,4,5,0,0,0,0;(2)允許初始化時(shí)省略數(shù)組的長(zhǎng)度,數(shù)組的長(zhǎng)度為賦初值的個(gè)數(shù); int a=1,2,3,4,5; 相當(dāng)于 int a5=1,2,3,4,5; (3)不能對(duì)整個(gè)數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度產(chǎn)業(yè)園區(qū)入駐企業(yè)投資融資合作協(xié)議3篇
- 2025版房地產(chǎn)項(xiàng)目長(zhǎng)期投資價(jià)值評(píng)估與跟蹤服務(wù)合同3篇
- 2025年蘇科版三年級(jí)數(shù)學(xué)上冊(cè)階段測(cè)試試卷
- 二零二五年度出租車司機(jī)勞動(dòng)爭(zhēng)議預(yù)防與處理合同范本3篇
- 2025年度居家半包裝修與智能家居系統(tǒng)集成合同3篇
- 2025年度智能公寓按季度租金支付及設(shè)施維護(hù)服務(wù)合同3篇
- 二零二五年度建筑砂漿供應(yīng)商資質(zhì)認(rèn)證采購(gòu)合同3篇
- 2025年冀少新版八年級(jí)生物下冊(cè)月考試卷含答案
- 2025年冀教版七年級(jí)科學(xué)下冊(cè)月考試卷
- 連鎖超市(商場(chǎng))單店?duì)I銷管理辦法范文
- 遼寧省沈陽市五校協(xié)作體2024-2025學(xué)年高二上學(xué)期11月期中考試語文試題(含答案)
- 保密知識(shí)培訓(xùn)
- 江西省穩(wěn)派教育2025屆數(shù)學(xué)高二上期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 八年級(jí)歷史上冊(cè)(部編版)第六單元中華民族的抗日戰(zhàn)爭(zhēng)(大單元教學(xué)設(shè)計(jì))
- 2022-2023學(xué)年北京市海淀區(qū)高二(上)期末英語試卷(含答案解析)
- 2021-2022學(xué)年統(tǒng)編本五四制道德與法治五年級(jí)上冊(cè)期末檢測(cè)題及答案(共6套)
- (BRB)屈曲約束支撐施工專項(xiàng)方案
- 期末達(dá)標(biāo)測(cè)試卷(試題)-2024-2025學(xué)年人教PEP版英語四年級(jí)上冊(cè)
- 高職機(jī)電專業(yè)《液壓與氣動(dòng)技術(shù)》說課稿
- 青島版四年級(jí)上冊(cè)簡(jiǎn)便計(jì)算400道及答案
- 員工積分制管理實(shí)施方案細(xì)則
評(píng)論
0/150
提交評(píng)論