




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第七章l 本章要點(diǎn)本章要點(diǎn) 函數(shù)的概念函數(shù)的概念 函數(shù)的定義與調(diào)用函數(shù)的定義與調(diào)用 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 變量的作用域變量的作用域 函數(shù)的作用域函數(shù)的作用域程序設(shè)計(jì)的藝術(shù) 三國(guó)演義三國(guó)演義中有這樣一段描寫(xiě):中有這樣一段描寫(xiě):懿問(wèn)曰:懿問(wèn)曰:“孔明寢食及事之煩簡(jiǎn)若何?孔明寢食及事之煩簡(jiǎn)若何?”使者曰:使者曰:“丞相夙興夜寐,罰二十以上皆親覽焉。所啖之食,丞相夙興夜寐,罰二十以上皆親覽焉。所啖之食,日不過(guò)數(shù)升。日不過(guò)數(shù)升?!避差欀^諸將曰:懿顧謂諸將曰:“孔明食少事煩,孔明食少事煩,其能久乎?其能久乎?”此話音落不久,諸葛亮果然病故于五丈原。此話音落不久,諸葛亮果然病故于五丈原。 “事無(wú)巨細(xì)
2、事無(wú)巨細(xì)”,“事必躬親事必躬親” 管理學(xué)的觀點(diǎn)是極其排斥這種做法的,認(rèn)為工作必管理學(xué)的觀點(diǎn)是極其排斥這種做法的,認(rèn)為工作必須分工,各司其職須分工,各司其職其中的思想,在程序設(shè)計(jì)里也適用其中的思想,在程序設(shè)計(jì)里也適用 假如不模塊化 讀多少行的程序能讓你不頭疼? main()當(dāng)中能放多少行程序? 假如printf()函數(shù)由10行代碼替換,那么你見(jiàn)過(guò)的程序會(huì)成什么樣子? 如果所有代碼都在main()當(dāng)中,怎么團(tuán)隊(duì)合作? 如果代碼都在一個(gè)文件中,怎么團(tuán)隊(duì)合作? C是模塊化程序設(shè)計(jì)語(yǔ)言是模塊化程序設(shè)計(jì)語(yǔ)言 源程序文件1預(yù)編譯命令說(shuō)明部分執(zhí)行部分函數(shù)1函數(shù)n源程序文件i源程序文件nC程序C程序結(jié)構(gòu)概述vo
3、id main() : x=x*x*x; y=y*y*y; z=z*z*z; ans1=x+y+z; a=a*a*a; b=b*b*b; c=c*c*c; ans2=a+b+c; :為什么使用函數(shù)重復(fù)多次的同一計(jì)算類型void main() : ans1=cube(x,y,z); ans2=cube(a,b,c); :int cube(int a,b,c) int ans; ans=(a*a*a)+(b*b*b)+(c*c*c); return ans;函數(shù)主程序ans函數(shù)可以把相對(duì)獨(dú)立的某個(gè)功能抽象出來(lái),使之成為程序中的一個(gè)獨(dú)立實(shí)體??梢栽谕粋€(gè)程序或其他程序中多次重復(fù)使用【例】編寫(xiě)一個(gè)兒童
4、算術(shù)能力測(cè)試軟件main() char ans = y; clrscr( ); cover( ); /*調(diào)用軟件封面顯示函數(shù)*/ password( ); /*調(diào)用密碼檢查函數(shù)*/ while (ans =y| ans =Y) question( ); /*調(diào)用產(chǎn)生題目函數(shù)*/ answers( ); /*調(diào)用接受回答函數(shù)*/ marks( ); /*調(diào)用評(píng)分函數(shù)*/ results( ); /*調(diào)用結(jié)果顯示函數(shù)*/ printf(“是否繼續(xù)練習(xí)?(Y/N)n”); ans=getch ( ); printf(“謝謝使用,再見(jiàn)!”); 自定義函數(shù)為什么使用函數(shù)為什么使用函數(shù)【例二】編寫(xiě)一個(gè)兒童
5、算術(shù)能力測(cè)試軟件main() char ans = y; clrscr( ); cover( ); /*調(diào)用軟件封面顯示函數(shù)*/ password( ); /*調(diào)用密碼檢查函數(shù)*/ while (ans =y| ans =Y) question( ); /*調(diào)用產(chǎn)生題目函數(shù)*/ answers( ); /*調(diào)用接受回答函數(shù)*/ marks( ); /*調(diào)用評(píng)分函數(shù)*/ results( ); /*調(diào)用結(jié)果顯示函數(shù)*/ printf(是否繼續(xù)練習(xí)?(Y/N)n); ans=getch ( ); printf(謝謝使用,再見(jiàn)!);/*定義所用函數(shù)*/cover() /*軟件封面顯示函數(shù)*/pass
6、word() /*密碼檢查函數(shù)*/question() /*產(chǎn)生題目函數(shù)*/answers() /*接受回答函數(shù)*/marks() /*評(píng)分函數(shù)*/results() /*結(jié)果顯示函數(shù)*/ n 這些函數(shù)現(xiàn)在不編程或還不會(huì)編程,可先放空。n 可以多人合作,每人完成若干個(gè)函數(shù)(模塊化)。n 可在另一個(gè)源程序文件中定義。Lets try l 如果把編程比做制造一臺(tái)機(jī)器,函數(shù)就好比其零部件。l可將這些“零部件”單獨(dú)設(shè)計(jì)、調(diào)試、測(cè)試好,用時(shí)拿出來(lái)裝配,再總體調(diào)試。l這些“零部件”可以是自己設(shè)計(jì)制造/別人設(shè)計(jì)制造/現(xiàn)在的標(biāo)準(zhǔn)產(chǎn)品函數(shù)機(jī)制的優(yōu)點(diǎn) 使程序變得更簡(jiǎn)短而清晰 有利于程序維護(hù) 可以提高程序開(kāi)發(fā)的效率
7、 提高了代碼的重用性 函數(shù)類型 庫(kù)函數(shù):由語(yǔ)言系統(tǒng)提供;用戶無(wú)須定義,也不必在程序中作類型說(shuō)明;只需在程序前包含有該函數(shù)定義的頭文件; 自定義函數(shù):用戶在程序中根據(jù)需要而編寫(xiě)的函數(shù);void main() float x=2,y; y=sqrt(x); printf(“ny=%.3f”, y);必須加上必須加上math.h這個(gè)頭文件這個(gè)頭文件#include 函數(shù)的使用 Step1. 函數(shù)的聲明(為調(diào)用做準(zhǔn)備)聲明(為調(diào)用做準(zhǔn)備) Step2. 函數(shù)的定義定義 Step3. 函數(shù)的調(diào)用調(diào)用函數(shù)使用是通過(guò)調(diào)用完成的函數(shù)的定義函數(shù)定義函數(shù)類型 函數(shù)名(形參類型說(shuō)明表)說(shuō)明部分語(yǔ)句部分現(xiàn)代風(fēng)格現(xiàn)代風(fēng)
8、格: :合法標(biāo)識(shí)符函數(shù)返回函數(shù)返回值類型值類型缺省缺省int型型函數(shù)體 有參函數(shù)(現(xiàn)代風(fēng)格)有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x,int y) int z; z=xy?x:y; return(z); 有參函數(shù)(現(xiàn)代風(fēng)格)有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x, y) int z; z=xy?x:y; return(z); 空函數(shù)空函數(shù) dummy( ) 函數(shù)體為空無(wú)參函數(shù)無(wú)參函數(shù) void printstar( ) printf(“*n”); 或或void printstar(void ) printf(“*n”); 形式參數(shù)表形式參數(shù)表: :是用逗號(hào)分開(kāi)的一組變量,用來(lái)
9、接是用逗號(hào)分開(kāi)的一組變量,用來(lái)接收調(diào)用時(shí)傳入的數(shù)據(jù)。收調(diào)用時(shí)傳入的數(shù)據(jù)。函數(shù)類型 函數(shù)名(形參表)形參類型說(shuō)明說(shuō)明部分語(yǔ)句部分傳統(tǒng)風(fēng)格傳統(tǒng)風(fēng)格: : int max(x,y) int x,y; int z; z=xy?x:y; return(z); 函數(shù)定義函數(shù)定義 函數(shù)名:需是合法標(biāo)識(shí)符 函數(shù)類型:函數(shù)返回值類型 如無(wú)返回值,則定義為void 缺省的返回值為int類型 形參表:被調(diào)用函數(shù)接受調(diào)用數(shù)據(jù)的主要 途徑,定義時(shí)分別給出類型,并用逗號(hào)隔開(kāi)。形參表可以為空,但是圓括號(hào)()不能省略函數(shù)定義 函數(shù)體可以為空,稱為空函數(shù) 例如 void empty() 函數(shù)定義 return語(yǔ)句的格式有三種
10、1、return (expression); 2、return expression; 3、return; 如果函數(shù)體中無(wú)return語(yǔ)句,則執(zhí)行到函數(shù)末尾時(shí)自動(dòng)返回到調(diào)用函數(shù) 函數(shù)的返回值最多只有一個(gè),可通過(guò)return語(yǔ)句返回主調(diào)函數(shù)函數(shù)定義 1、函數(shù)類型為void的可以無(wú)return語(yǔ)句也可以用return; (但無(wú)返回值) 2、其他類型等需要用return語(yǔ)句 3、return語(yǔ)句的功能使程序控制從被調(diào)用函數(shù)返回到主調(diào)函數(shù)中,同時(shí)把返回值帶回給主調(diào)函數(shù)函數(shù)定義void displayDiscount()float price, discount;printf(請(qǐng)輸入價(jià)格);scanf(
11、%f, &price);discount = 0.75 * price;printf(折扣額為 %f, discount);double max(double x, double y) double m; m=xy?x:y; return m;該函數(shù)名為displayDiscount,無(wú)參數(shù),使用void說(shuō)明無(wú)返回值,函數(shù)體內(nèi)的語(yǔ)句用于根據(jù)產(chǎn)品的價(jià)格求折扣后的價(jià)格。該函數(shù)名為max,它有兩個(gè)double類型的參數(shù),返回值為double類型。在函數(shù)體內(nèi)有三條語(yǔ)句實(shí)現(xiàn)了求兩個(gè)數(shù)中較大的數(shù),并將它返回。函數(shù)定義 練習(xí):定義一個(gè)函數(shù),參數(shù)為兩個(gè)int類型變量,a,b;函數(shù)返回值為a,b內(nèi)的所有
12、自然數(shù)累加和int sum(int a, int b) int s = 0; int i = a; while (iy?x:y: return(z); 實(shí)參實(shí)參形參形參c=max(a, b); (main函數(shù)函數(shù))int max(int x,int y) (max函數(shù)函數(shù)) int z; z=xy?x:y: return(z); z函數(shù)參數(shù)說(shuō)明說(shuō)明實(shí)參和形參數(shù)據(jù)傳遞是實(shí)參和形參數(shù)據(jù)傳遞是“值傳遞值傳遞”,即,即單向傳遞單向傳遞實(shí)參可以是常量、變量或表達(dá)式,但必須是實(shí)參可以是常量、變量或表達(dá)式,但必須是確定確定的值的值a=5;b=2;c=max(3, a+b);形參必須指定類型,形參與形參必須指
13、定類型,形參與實(shí)參類型一致,個(gè)數(shù)相同實(shí)參類型一致,個(gè)數(shù)相同若形參與實(shí)參類型不一致,自動(dòng)將實(shí)參按形參類型若形參與實(shí)參類型不一致,自動(dòng)將實(shí)參按形參類型轉(zhuǎn)換轉(zhuǎn)換函數(shù)調(diào)用時(shí)轉(zhuǎn)換函數(shù)調(diào)用時(shí)轉(zhuǎn)換c=max(3, 6.8);函數(shù)參數(shù)abc xy 353592534運(yùn)行結(jié)果:運(yùn)行結(jié)果:3,5,34void main() int a=3,b=5,c; c = n2(a,b); printf(%d,%d,%d,a,b,c);int n2(int x,int y) x=x*x; y=y*y; return(x+y);函數(shù)參數(shù) 函數(shù)相互調(diào)用的基本方式:函數(shù)相互調(diào)用的基本方式:1、函數(shù)沒(méi)有返回值、函數(shù)沒(méi)有返回值使用函數(shù)
14、調(diào)用語(yǔ)句:例如,使用函數(shù)調(diào)用語(yǔ)句:例如,printstar();2、函數(shù)有返回值、函數(shù)有返回值A(chǔ)、賦值,例如,、賦值,例如,c=2*max(a,b);B、函數(shù)作為參數(shù)、函數(shù)作為參數(shù) 例例1:printf(%d,max(a,b);例例2:m=max(c,max(a,b);函數(shù)調(diào)用總結(jié)函數(shù)正確調(diào)用的基本條件 在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需具備的條件:在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需具備的條件:被調(diào)用函數(shù)必須是被調(diào)用函數(shù)必須是已經(jīng)存在的函數(shù)已經(jīng)存在的函數(shù)庫(kù)函數(shù)庫(kù)函數(shù):在程序開(kāi)頭將定義該庫(kù)函:在程序開(kāi)頭將定義該庫(kù)函數(shù)的頭文件包含數(shù)的頭文件包含#include*.h自定義函數(shù)自定義函數(shù):1、自定義函數(shù)在被調(diào)函
15、數(shù)之前、自定義函數(shù)在被調(diào)函數(shù)之前2、自定義函數(shù)在被調(diào)函數(shù)之后、自定義函數(shù)在被調(diào)函數(shù)之后 需要需要聲明聲明函數(shù)正確調(diào)用自定義函數(shù)自定義函數(shù)在被調(diào)函數(shù)在被調(diào)函數(shù)之前之前正確!函數(shù)的正確調(diào)用自定義函數(shù)自定義函數(shù)在被調(diào)函數(shù)在被調(diào)函數(shù)之后之后出錯(cuò)!對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型聲明的作用聲明的作用:告訴編譯系統(tǒng)函數(shù)名、參數(shù)個(gè)數(shù)及類型,以:告訴編譯系統(tǒng)函數(shù)名、參數(shù)個(gè)數(shù)及類型,以便檢查。便檢查。要在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作要在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作聲明聲明,是由,是由函數(shù)原型函數(shù)原型來(lái)完成來(lái)完成的。的。自定義函數(shù)在被調(diào)函數(shù)之后,自定義函數(shù)在被調(diào)函數(shù)之后,需要進(jìn)行函數(shù)的聲明!需要進(jìn)行函
16、數(shù)的聲明!函數(shù)的正確調(diào)用函數(shù)原型的一般形式:函數(shù)原型的一般形式: 函數(shù)類型函數(shù)類型 函數(shù)名(參數(shù)類型函數(shù)名(參數(shù)類型1 參數(shù)名參數(shù)名1, 參數(shù)類型參數(shù)類型2 參數(shù)名參數(shù)名2,);或或函數(shù)類型函數(shù)類型 函數(shù)名(參數(shù)類型函數(shù)名(參數(shù)類型1, 參數(shù)類型參數(shù)類型2,);float add(float x,float y);main() float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(%f,c);float add(float x,float y)return(x+y);對(duì)函數(shù)對(duì)函數(shù)addadd的聲明也可以寫(xiě)成:的聲明也可以寫(xiě)成:f
17、loat add(float,float)float add(float,float); ;函數(shù)的正確調(diào)用函數(shù)的正確調(diào)用函數(shù)原型的說(shuō)明:函數(shù)原型的說(shuō)明: 被調(diào)函數(shù)定義在主調(diào)函數(shù)定義之前,不用作函數(shù)聲明被調(diào)函數(shù)定義在主調(diào)函數(shù)定義之前,不用作函數(shù)聲明 函數(shù)聲明在所有函數(shù)定義之前,則在主調(diào)函數(shù)中不必函數(shù)聲明在所有函數(shù)定義之前,則在主調(diào)函數(shù)中不必對(duì)所調(diào)用的函數(shù)作聲明對(duì)所調(diào)用的函數(shù)作聲明 float add(float x,float y) return(x+y);void main() float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); print
18、f(%f,c);float add(float x,float y);void main() float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(%f,c);float add(float x,float y) return(x+y);函數(shù)的正確調(diào)用問(wèn)題描述:根據(jù)用戶的選擇求不同形狀的面積。函數(shù)調(diào)用示例#includevoid AreaOfRect();void AreaOfTriangle();void AreaOfRound();void main() int select; do printf( 0、退出n 1、長(zhǎng)方形n
19、 2、三角形n 3、圓形n);printf(請(qǐng)選擇功能:);scanf(%d,&select);if(select = 0) break;switch(select) case 1 : AreaOfRect(); break; /長(zhǎng)方形 case 2 : AreaOfTriangle(); break; /三角形 case 3 : AreaOfRound(); break; /圓形 default : printf(輸入有誤,請(qǐng)?jiān)?04 之間選擇。n); while(1);void AreaOfRect() int x,y; printf(請(qǐng)輸入長(zhǎng)方形的長(zhǎng):); scanf(%d,&a
20、mp;x); printf(請(qǐng)輸入長(zhǎng)方形的寬:); scanf(%d,&y); printf(面積為:%dn,(x * y); void AreaOfTriangle() int x,y; printf(請(qǐng)輸入三角形的底:); scanf(%d,&x); printf(請(qǐng)輸入三角形的高:); scanf(%d,&y); printf(面積為:%dn,(x * y)/2); void AreaOfRound() int r; printf(請(qǐng)輸入圓形的半徑:); scanf(%d,&r); printf(面積為:%dn,3.14*r*r); 函數(shù)原型通過(guò)通過(guò)函數(shù)調(diào)
21、用函數(shù)調(diào)用使使主調(diào)函數(shù)主調(diào)函數(shù)得到一個(gè)得到一個(gè)確定確定的值,這個(gè)值就是函的值,這個(gè)值就是函數(shù)的返回值。數(shù)的返回值。函數(shù)的返回值是通過(guò)函數(shù)中的函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句實(shí)現(xiàn)的語(yǔ)句實(shí)現(xiàn)的return語(yǔ)句的三種形式:語(yǔ)句的三種形式:return(表達(dá)式表達(dá)式); return 表達(dá)式表達(dá)式;return; 比較兩個(gè)數(shù)大小比較兩個(gè)數(shù)大小int max(int x,int y) int z; z=xy?x:y: return(z); void main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %
22、d,c);return(xy?x:y);函數(shù)返回值說(shuō)明:說(shuō)明:n 如果需要返回值,則有如果需要返回值,則有return語(yǔ)句;如果主調(diào)函數(shù)語(yǔ)句;如果主調(diào)函數(shù)不不需需要返回值,則不用要返回值,則不用return,例如,例如void main( )n 函數(shù)中可以有多個(gè)函數(shù)中可以有多個(gè)return,判斷是哪個(gè),判斷是哪個(gè)return退出函數(shù)退出函數(shù)int max(int x,int y) if (xy) return x; else return y; void main() int a; a=m(3, 5); printf(a%d,a);運(yùn)行結(jié)果:a5函數(shù)返回值函數(shù)返回值n函數(shù)值的類型函數(shù)值的類型一
23、般應(yīng)與一般應(yīng)與return語(yǔ)句中語(yǔ)句中表達(dá)式值的類型表達(dá)式值的類型一致一致,如若不一致,在如若不一致,在函數(shù)調(diào)用時(shí)函數(shù)調(diào)用時(shí)自動(dòng)轉(zhuǎn)換成函數(shù)值的類型自動(dòng)轉(zhuǎn)換成函數(shù)值的類型int max(float,float);void main() float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %d,c); int max(float x,int y) float z; z=xy?x:y: return(z); 輸入:輸入:2.5,3.8運(yùn)行結(jié)果:運(yùn)行結(jié)果: Max is 3函數(shù)值的類型函數(shù)值的類型決定決定ret
24、urn回去的類型回去的類型n 如果函數(shù)中沒(méi)有如果函數(shù)中沒(méi)有return語(yǔ)句,則返回值是一個(gè)無(wú)意義的值語(yǔ)句,則返回值是一個(gè)無(wú)意義的值 如果希望函數(shù)沒(méi)有返回值,則在函數(shù)名前加上如果希望函數(shù)沒(méi)有返回值,則在函數(shù)名前加上voidvoid printstar() printf(*); main() int a; a=printstar(); printf(%d,a);編譯出錯(cuò)編譯出錯(cuò)良好的程序設(shè)計(jì)習(xí)慣良好的程序設(shè)計(jì)習(xí)慣為了使程序具有良好的為了使程序具有良好的可讀性并減少出錯(cuò),凡不可讀性并減少出錯(cuò),凡不要求返回值的函數(shù)都應(yīng)定要求返回值的函數(shù)都應(yīng)定義為義為void類型;類型;即使函數(shù)類型為即使函數(shù)類型為in
25、t型,型,也不要缺省不寫(xiě)也不要缺省不寫(xiě)函數(shù)返回值n return只能返回一個(gè)變量值。如果想返回多只能返回一個(gè)變量值。如果想返回多個(gè)變量,怎么辦?個(gè)變量,怎么辦?函數(shù)返回值講指針時(shí)候再給大家詳細(xì)介紹函數(shù)調(diào)用庫(kù)函數(shù)的調(diào)用庫(kù)函數(shù)的調(diào)用u輸入輸出庫(kù)函數(shù)uMath中的庫(kù)函數(shù)u字符串庫(kù)函數(shù)u函數(shù)調(diào)用的其他形式u值調(diào)用u嵌套調(diào)用u遞歸調(diào)用函數(shù)調(diào)用 前面介紹的是函數(shù)之間的相互調(diào)用 最典型的是傳值調(diào)用 即:數(shù)據(jù)從實(shí)參 單向傳遞 到形參值傳遞實(shí)參單向傳遞到形參函數(shù)的值調(diào)用 函數(shù)之間允許相互調(diào)用,也允許嵌套調(diào)用 函數(shù)還可以自己調(diào)用自己,稱為遞歸調(diào)用#includevoid main():set_discount()
26、;displayDiscount();:float set_discount() : :float displayDiscount() : :函數(shù)調(diào)用 void reverse() : :#includevoid main():palindrome();:void palindrome() : reverse(); :函數(shù)嵌套調(diào)用 函數(shù)函數(shù)A調(diào)用函數(shù)調(diào)用函數(shù)B,函數(shù),函數(shù)B調(diào)用函數(shù)調(diào)用函數(shù)C,一層層嵌套,一層層嵌套計(jì)算計(jì)算a,b中自然數(shù)的階乘之和中自然數(shù)的階乘之和SSS/* 此函數(shù)用于計(jì)算 a 的階乘 */int factorial(int a) if (a = 1) return 1; el
27、se a = a * factorial(a-1); return a; 函數(shù)遞歸調(diào)用 在一個(gè)函數(shù)體內(nèi)調(diào)用自身稱為函數(shù)的遞歸調(diào)用 Hanoi(漢諾)塔問(wèn)題。古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A、B、C,開(kāi)始時(shí)座上有64個(gè)盤(pán)子,盤(pán)子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤(pán)子從座移到座,但規(guī)定每次只允許移動(dòng)一個(gè)盤(pán),且在移動(dòng)過(guò)程中在3個(gè)座上都始終保持大盤(pán)在下,小盤(pán)在上。在移動(dòng)過(guò)程中可以利用B座。要求編程序輸出移動(dòng)一盤(pán)子的步驟。函數(shù)遞歸調(diào)用 ABCABC將將3個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到C的全過(guò)程的全過(guò)程將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到BABC將將3個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到C的全過(guò)程的全過(guò)程
28、將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到BABC將將3個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到C的全過(guò)程的全過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到CABC將將3個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到C的全過(guò)程的全過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到CABC將將3個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到C的全過(guò)程的全過(guò)程將將2個(gè)盤(pán)子從個(gè)盤(pán)子從B移到移到CABC將將3個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到C的全過(guò)程的全過(guò)程將將2個(gè)盤(pán)子從個(gè)盤(pán)子從B移到移到CABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到B的過(guò)程的過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到CABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到B的過(guò)程的過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到CABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到
29、移到B的過(guò)程的過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到BABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到B的過(guò)程的過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到BABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到B的過(guò)程的過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從C移到移到BABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從A移到移到B的過(guò)程的過(guò)程將將1個(gè)盤(pán)子從個(gè)盤(pán)子從C移到移到BABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從B移到移到C的過(guò)程的過(guò)程ABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從B移到移到C的過(guò)程的過(guò)程ABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從B移到移到C的過(guò)程的過(guò)程ABC將將2個(gè)盤(pán)子從個(gè)盤(pán)子從B移到移到C的過(guò)程的過(guò)程 由上面的分析可知:將n個(gè)盤(pán)子從A座移到C座可以分解為以下3個(gè)步驟:(1) 將A上
30、n-1個(gè)盤(pán)借助C座先移到B座上(2) 把A座上剩下的一個(gè)盤(pán)移到C座上(3) 將n-1個(gè)盤(pán)從B座借助于座移到C座上 把上面3個(gè)步驟分成兩類操作:(1) 將n-1個(gè)盤(pán)從一個(gè)座移到另一個(gè)座上(n1)。(2) 將1個(gè)盤(pán)子從一個(gè)座上移到另一座上. 編寫(xiě)程序 用hanoi函數(shù)實(shí)現(xiàn)第1類操作 用move函數(shù)實(shí)現(xiàn)第2類操作 函數(shù)調(diào)用hanoi(n,one,two,three)表示將n個(gè)盤(pán)子從“one”座移到“three”座的過(guò)程(借助“two”座) 函數(shù)調(diào)用move(x,y)表示將1個(gè)盤(pán)子從x 座移到y(tǒng) 座的過(guò)程。x和y是代表A、B、C座之一,根據(jù)每次不同情況分別取A、B、C代入#include void h
31、anoi(int n,char one, char two, char three);void move(char x,char y); int main()int m; printf(“the number of diskes:); scanf(%d,&m); printf(move %d diskes:n,m); hanoi(m,A,B,C);void hanoi(int n,char one,char two, char three) if(n=1) move(one,three); else hanoi(n-1,one,three,two); move(one,three);
32、hanoi(n-1,two,one,three); void move(char x,char y) printf(%c-%cn,x,y); 可以用數(shù)組名作函數(shù)參數(shù),此時(shí)形參應(yīng)當(dāng)用數(shù)組名可以用數(shù)組名作函數(shù)參數(shù),此時(shí)形參應(yīng)當(dāng)用數(shù)組名或用指針變量或用指針變量 。數(shù)組名和指針變量都當(dāng)作指針來(lái)用例例 有一個(gè)一維數(shù)組有一個(gè)一維數(shù)組score,內(nèi)放,內(nèi)放10個(gè)學(xué)個(gè)學(xué)生成績(jī),求平均成績(jī)。生成績(jī),求平均成績(jī)。#include float average(float array10); /* 函數(shù)聲明函數(shù)聲明 */void main()() float score10 , aver; int ; printf(
33、input scores:n);); for(i=0; i10; i+) scanf(%f,score);); printf(n);); averaverage( score );); printf ( average score is 5.2fn, aver););float average (float array10) int ; float aver,sum=0; for (i=0;i10;i+) sum += arrayi;aver = sum/10;return(aver););運(yùn)行情況如下:運(yùn)行情況如下:input 10 scores: 100 56 78 98.5 76 87
34、99 67.5 75 97 average score is 83.40 形參數(shù)組不定義長(zhǎng)度形參數(shù)組不定義長(zhǎng)度形參數(shù)組不定義長(zhǎng)度。形參數(shù)組名當(dāng)作指針來(lái)用運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:the average of class A is 80.40The average of class is 78.20可以用數(shù)組名作函數(shù)參數(shù),此時(shí)形參應(yīng)當(dāng)用數(shù)組名可以用數(shù)組名作函數(shù)參數(shù),此時(shí)形參應(yīng)當(dāng)用數(shù)組名或用指針變量或用指針變量 。數(shù)組名和指針變量都當(dāng)作指針來(lái)用運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:Max value is 34變量的作用域變量的作用域作用域是某些事物起作用或有效的區(qū)域。限于陸地限于海洋限于空中 程序中變量
35、也有不同的使用范圍,稱為變量的作用域。變量的作用域決定變量的可訪問(wèn)性void displayDiscount() float discount; . . . . . . . . .局部變量:不能在函數(shù)外使用float discount;void main() . . . . . .void displayDiscount() . . . . . .全局變量:可以在整個(gè)程序中使用 局部變量局部變量-內(nèi)部變量?jī)?nèi)部變量定義:在定義:在函數(shù)內(nèi)定義函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效只在本函數(shù)內(nèi)有效說(shuō)明:說(shuō)明: mainmain中定義的變量只在中定義的變量只在mainmain中有效中有效 不同函數(shù)中同名變量,占
36、不同內(nèi)存單元不同函數(shù)中同名變量,占不同內(nèi)存單元 形參屬于局部變量形參屬于局部變量 可定義在復(fù)合語(yǔ)句中有效的變量可定義在復(fù)合語(yǔ)句中有效的變量float f1(int a) int b,c; .char f2(int x,int y) int i,j; main() int m,n; .a,b,c有效x,y,i,j有效m,n有效不同函數(shù)中同名變量void main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);void sub() int a,b; a=6; b=7; pri
37、ntf(sub:a=%d,b=%dn,a,b);復(fù)合語(yǔ)句中變量#define N 5void main() int i; int aN=1,2,3,4,5; for(i=0;iN/2;i+) int temp;temp=ai;ai=aN-i-1;aN-i-1=temp; for(i=0;ib?a:b; return(c);void main() int a=8; printf(max=%d,max(a,b); 全局變量與局部變量運(yùn)行結(jié)果:max=8局部變量和全局變量局部變量和全局變量變量的存儲(chǔ)類型 存儲(chǔ)類別存儲(chǔ)類別: : 規(guī)定了變量在計(jì)算機(jī)內(nèi)部的存放位置規(guī)定了變量在計(jì)算機(jī)內(nèi)部的存放位置決定變量
38、的決定變量的“壽壽命命”(何時(shí)(何時(shí)“生生”,何時(shí),何時(shí)“滅滅”) 一個(gè)完整的變量說(shuō)明格式如下:一個(gè)完整的變量說(shuō)明格式如下: 存儲(chǔ)類別存儲(chǔ)類別 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名 如如 static int x , y ;static int x , y ;C程序的存儲(chǔ)類別有:程序的存儲(chǔ)類別有: register型型(寄存器型)(寄存器型) auto型型(自動(dòng)變量型)(自動(dòng)變量型) static型型(靜態(tài)變量型)(靜態(tài)變量型) extern型型(外部變量型)(外部變量型)C程序的變量存儲(chǔ)位置變量的生存期變量的生存期 靜態(tài)存儲(chǔ)區(qū)中的變量:靜態(tài)存儲(chǔ)區(qū)中的變量:與程序與程序“共存亡共存亡” 動(dòng)態(tài)存儲(chǔ)區(qū)中的變量:動(dòng)態(tài)存儲(chǔ)區(qū)中的變量:與函數(shù)與函數(shù)“共存亡共存亡” 寄存器中的變量:寄存器中的變量:同動(dòng)態(tài)存儲(chǔ)區(qū)同動(dòng)態(tài)存儲(chǔ)區(qū)C程序的變量存儲(chǔ)類別變量的生存期變量的生存期 靜態(tài)存儲(chǔ)區(qū)中的變量靜態(tài)存儲(chǔ)區(qū)中的變量 與程序與程序“共存亡共存亡” 動(dòng)態(tài)存儲(chǔ)區(qū)中的變量動(dòng)態(tài)存儲(chǔ)區(qū)中的變量 與函數(shù)與函數(shù)“共存亡共存亡” 寄存器中的變量寄存器中的變量 同動(dòng)態(tài)存儲(chǔ)區(qū)同動(dòng)態(tài)存儲(chǔ)區(qū) register型(寄存器型)型(寄存器型)變量值存放在運(yùn)算器的寄存器中存取速度快,一般只允許23個(gè),且限于char型和int型,通常用于循環(huán)變量 auto型
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大型游樂(lè)設(shè)施租賃合同樣本
- 商業(yè)綜合體地簧門改造合同
- 國(guó)內(nèi)海運(yùn)貨物保險(xiǎn)合同樣本
- 擔(dān)架使用培訓(xùn)課件
- 壓力容器安全管理考核試卷
- 動(dòng)物用藥品店面的環(huán)境設(shè)計(jì)與氛圍營(yíng)造考核試卷
- 有機(jī)合成原料在綠色涂料技術(shù)的創(chuàng)新考核試卷
- 木材產(chǎn)品環(huán)保性能提升考核試卷
- 整流器在數(shù)據(jù)中心能源效率優(yōu)化考核試卷
- 智慧城市和自然資源的合理利用考核試卷
- 幼兒園中班跳繩實(shí)施方案及措施
- 《行行重行行-》-大學(xué)語(yǔ)文-教案省公開(kāi)課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件
- 2024年中考政治總復(fù)習(xí)初中道德與法治知識(shí)點(diǎn)總結(jié)(重點(diǎn)標(biāo)記版)
- 小學(xué)學(xué)校培優(yōu)輔差計(jì)劃
- 【真題】2023年常州市中考道德與法治試卷(含答案解析)
- 高速公路工程項(xiàng)目監(jiān)理質(zhì)量控制
- 肺結(jié)節(jié)圍術(shù)期護(hù)理
- 馬錫五審判方式
- 礦物加工工程概論
- 《護(hù)理管理學(xué)》課程說(shuō)課
- 慢阻肺疑難護(hù)理病例討論
評(píng)論
0/150
提交評(píng)論