版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十五章 異常 Chapter 15 Exception 第1頁(yè)/共63頁(yè)異常是一種程序控制機(jī)制,與函數(shù)機(jī)制獨(dú)立和互補(bǔ) 函數(shù)是一種以棧結(jié)構(gòu)展開(kāi)的上下函數(shù)銜接的程序控制系統(tǒng),異常是另一種控制結(jié)構(gòu),它依附于棧結(jié)構(gòu),卻可以同時(shí)設(shè)置多個(gè)異常類(lèi)型作為網(wǎng)捕條件,從而以類(lèi)型匹配在棧機(jī)制中跳躍回饋.異常設(shè)計(jì)目的: 棧機(jī)制是一種高度節(jié)律性控制機(jī)制,面向?qū)ο缶幊虆s要求對(duì)象之間有方向、有目的的控制傳動(dòng),從一開(kāi)始,異常就是沖著改變程序控制結(jié)構(gòu),以適應(yīng)面向?qū)ο蟪绦蚋行У毓ぷ鬟@個(gè)主題,而不是僅為了進(jìn)行錯(cuò)誤處理。異常設(shè)計(jì)出來(lái)之后,卻發(fā)現(xiàn)在錯(cuò)誤處理方面獲得了最大的好處第2頁(yè)/共63頁(yè)第十五章內(nèi)容第十五章內(nèi)容1.錯(cuò)誤處理的復(fù)
2、雜性(Error Processing Complexity) 2. 使用異常(Using Exception) 3.捕捉異常(Catching Exception) 4. 異常申述(Exception Description) 5. 異常繼承體系(Exception Inheritance System) 6. 異常應(yīng)用 (Exception Applications) 7. 非錯(cuò)誤處理(Non-Error Processing)第3頁(yè)/共63頁(yè)15.1.1 錯(cuò)誤種類(lèi) C+語(yǔ)言是按函數(shù)調(diào)用機(jī)制展開(kāi)程序執(zhí)行的,一般對(duì)處理錯(cuò)誤的編程有下列常規(guī)手段: 1.遇到錯(cuò)誤,立即終止程序運(yùn)行。如打不開(kāi)文件,
3、或者讀不到所要求的數(shù)據(jù),則只能終止運(yùn)行:第4頁(yè)/共63頁(yè) #include #include #include using namespace std; void fn() ifstream in(abc.txt); if(!in) couta; coutsqrt(a*1.0)n) if(a0) cout=size)下標(biāo)溢出接受外來(lái)申請(qǐng)if(vi溢出) 說(shuō)明資源不足應(yīng)用模塊2應(yīng)用模塊1向量模塊第10頁(yè)/共63頁(yè)15.1.3 調(diào)用鏈的牽制 函數(shù)是棧式管理的,從一個(gè)被調(diào)用的函數(shù)現(xiàn)場(chǎng)要把信息傳遞到相隔若干調(diào)用的主調(diào)函數(shù),需要逐層退棧,一邊退棧,一邊通過(guò)函數(shù)返回值回饋,而且,每個(gè)函數(shù)都需要相應(yīng)的接受判
4、斷以及接力傳遞的工作。如有一個(gè)簡(jiǎn)單的系列文件處理程序,假定文件在打開(kāi)前,要經(jīng)歷文件名確定和打開(kāi)方式確定的工作,如圖15-2:第11頁(yè)/共63頁(yè)圖15-2 鏈?zhǔn)秸{(diào)用與出錯(cuò)后跳躍返回主函數(shù)文件名處理打開(kāi)方式處理打開(kāi)輸入文件打開(kāi)輸出文件出錯(cuò)跳回第12頁(yè)/共63頁(yè) #include #include using namespace std; void procFileName(string s); bool procOpenMode(string s); bool openIn(string s); bool openOut(string s); int main() procFileName(iab
5、c); procFileName(oabc); void procFileName(string s) for(char c=0; c=9; c+) string t = s + c + .txt; if(!procOpenMode(t) couterror opening tn; return; 第13頁(yè)/共63頁(yè) bool procOpenMode(string s) if(s0=i & openIn(s) | s0=o & openOut(s) return true; return false; bool openIn(string s) ifstream in(s.c
6、_str(); if(!in) return false; for(string line; getline(in, line); coutlinen); return true; bool openOut(string s) fstream out(s.c_str(), ios:in|ios:out|ios:ate); if(!out) return false; couts+ is here.n; outs+ is ok.n; return true;第14頁(yè)/共63頁(yè)15.2 使用異常 異常是專(zhuān)門(mén)針對(duì)抽象編程中的一系列錯(cuò)誤處理的,C+中不能借助函數(shù)機(jī)制,因?yàn)闂=Y(jié)構(gòu)的本質(zhì)是先進(jìn)后出,依次訪
7、問(wèn),無(wú)法進(jìn)行跳躍,但錯(cuò)誤處理的特征卻是遇到錯(cuò)誤信息就想要轉(zhuǎn)到若干級(jí)之上進(jìn)行重新嘗試,如圖:第15頁(yè)/共63頁(yè)v錯(cuò)誤處理示意:放棄一棵子樹(shù),循調(diào)用鏈跳到祖先函數(shù)發(fā)現(xiàn)錯(cuò)誤處第16頁(yè)/共63頁(yè) 異常超脫于函數(shù)機(jī)制,決定了其對(duì)函數(shù)的跨越式回跳。第17頁(yè)/共63頁(yè)15.2.1 異常使用三部曲 1.框定異常(try 語(yǔ)句塊) 在祖先函數(shù)處,框定可能產(chǎn)生錯(cuò)誤的語(yǔ)句序列,它是異常的根據(jù),若不框定異常,則沒(méi)有異常。 2.定義異常處理(catch 語(yǔ)句塊) 將出現(xiàn)異常后的處理過(guò)程放在catch塊中,以便當(dāng)異常被拋出,因類(lèi)型匹配而捕捉時(shí),就處理之。 3.拋擲異常(throw 語(yǔ)句) 在可能產(chǎn)生異常的語(yǔ)句中進(jìn)行錯(cuò)誤檢
8、測(cè),有錯(cuò)就拋擲異常 第18頁(yè)/共63頁(yè)19異常處理的實(shí)現(xiàn)機(jī)制 拋擲異常的程序段void Fun().throw 表達(dá)式;. 捕獲并處理異常的程序段try 復(fù)合語(yǔ)句catch(異常類(lèi)型聲明) 復(fù)合語(yǔ)句catch(類(lèi)型 (形參) 復(fù)合語(yǔ)句 第19頁(yè)/共63頁(yè)20例12-1處理除零異常#include#includeint Div(int x,int y);int Div(int x,int y);int main()int main() trytry cout5/2=Div(5,2)endl; cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout8/0=
9、Div(8,0)endl; cout7/1=Div(7,1)endl; cout7/1=Div(7,1)endl; catch(int) catch(int) coutexcept of deviding zero.n; coutexcept of deviding zero.n; coutthat is ok.n;coutthat is ok.n; int Div(int x,int y)int Div(int x,int y) if(y=0) throw y;if(y=0) throw y;return x/y;return x/y; 程序運(yùn)行結(jié)果如下:5/2=25/2=2except o
10、f deviding zero.except of deviding zero.that is ok.that is ok.第20頁(yè)/共63頁(yè) 前兩個(gè)步驟是一個(gè)函數(shù)中定義的,而拋擲異常則可以跨函數(shù)使用。 當(dāng)直接在try語(yǔ)句塊中使用時(shí),異常處理退化為一般的錯(cuò)誤處理模式。 在try語(yǔ)句塊中,會(huì)有一些語(yǔ)句調(diào)用了其他函數(shù),它們之間則構(gòu)成一個(gè)調(diào)用鏈,在調(diào)用鏈中的某一個(gè)結(jié)點(diǎn)上,如果出現(xiàn)拋擲語(yǔ)句,則便是一般意義上的異常了。第21頁(yè)/共63頁(yè)22異常處理的基本思想函數(shù)f()捕獲并處理異常函數(shù)h() 引發(fā)異常函數(shù)g()調(diào)用者異常傳播方向調(diào)用關(guān)系第22頁(yè)/共63頁(yè)23異常處理的實(shí)現(xiàn)機(jī)制(續(xù)) 1 若有異常則通過(guò)t
11、hrow操作創(chuàng)建一個(gè)異常對(duì)象并拋擲。 2 將可能拋出異常的程序段嵌在try塊之中。控制通過(guò)正常的順序執(zhí)行到達(dá)try語(yǔ)句,然后執(zhí)行try塊內(nèi)的保護(hù)段。 3 如果在保護(hù)段執(zhí)行期間沒(méi)有引起異常,那么跟在try塊后的catch子句就不執(zhí)行。程序從try塊后跟隨的最后一個(gè)catch子句后面的語(yǔ)句繼續(xù)執(zhí)行下去。 4 catch子句按其在try塊后出現(xiàn)的順序被檢查。匹配的catch子句將捕獲并處理異常(或繼續(xù)拋擲異常)。 5 如果匹配的處理器未找到,則運(yùn)行函數(shù)terminate將被自動(dòng)調(diào)用,其缺省功能是調(diào)用abort終止程序。第23頁(yè)/共63頁(yè)24異常接口聲明 可以在函數(shù)的聲明中列出這個(gè)函數(shù)可能拋擲的所有異
12、常類(lèi)型。 例如:void fun() throw(A,B,C,D); 若無(wú)異常接口聲明,則此函數(shù)可以拋擲任何類(lèi)型的異常。 不拋擲任何類(lèi)型異常的函數(shù)聲明如下:void fun() throw();第24頁(yè)/共63頁(yè)25異常處理中的構(gòu)造與析構(gòu) 找到一個(gè)匹配的catch異常處理后 初始化參數(shù)。 將從對(duì)應(yīng)的try塊開(kāi)始到異常被拋擲處之間構(gòu)造(且尚未析構(gòu))的所有自動(dòng)對(duì)象進(jìn)行析構(gòu)。 從最后一個(gè)catch處理之后開(kāi)始恢復(fù)執(zhí)行。第25頁(yè)/共63頁(yè)26例12-2 異常處理時(shí)的析構(gòu)#include void MyFunc( void );class Expt public: Expt(); Expt(); con
13、st char *ShowReason() const return Expt類(lèi)異常。; ;void MyFunc() Demo D; cout在MyFunc()中拋擲Expt類(lèi)異常。endl; throw Expt();class Demo public: Demo(); Demo();Demo:Demo() cout構(gòu)造 Demo.endl;Demo:Demo() cout析構(gòu) Demo.endl;第26頁(yè)/共63頁(yè)int main() cout在main函數(shù)中。endl; try cout在try塊中,調(diào)用MyFunc()。 endl; MyFunc(); catch( Expt E )
14、 cout在catch異常處理程序中。endl; cout捕獲到Expt類(lèi)型異常:; coutE.ShowReason()endl; catch( char *str ) cout捕獲到其他的異常:strendl; cout回到main函數(shù)。從這里恢復(fù)執(zhí)行。 endl; return 0;27第27頁(yè)/共63頁(yè)程序運(yùn)行時(shí)輸出:在main函數(shù)中。在try塊中,調(diào)用MyFunc()。構(gòu)造 Demo.在MyFunc()中拋擲Expt類(lèi)異常。析構(gòu) Demo.在catch異常處理程序中。捕獲到Expt類(lèi)型異常:Expt類(lèi)異常?;氐絤ain函數(shù)。從這里恢復(fù)執(zhí)行。28第28頁(yè)/共63頁(yè)15.2.2 退化為普
15、通錯(cuò)誤處理 如下面的程序是退化為普通錯(cuò)誤處理的異常方式:第29頁(yè)/共63頁(yè) #include #include using namespace std; int main(int argc, char* argv) ifstream in(argv1); try if(!in) throw string(argv1); catch(string s) couts+ File Opening Error.n; return 1; for(string s; getline(in, s); coutsendl ); 第30頁(yè)/共63頁(yè) 在這種簡(jiǎn)單應(yīng)用的場(chǎng)合,沒(méi)必要使用異常,可以用下列代碼替代: i
16、f(!in) cout“Error Opening File”argv1“n”; return 1; for(string s; getline(in, s); coutsendl );第31頁(yè)/共63頁(yè)15.2.3 跨越函數(shù)的異常處理 在中,是在出現(xiàn)錯(cuò)誤時(shí),從出現(xiàn)錯(cuò)誤處到處理錯(cuò)誤處,沿著函數(shù)調(diào)用的足跡,一步步往上返回,幾經(jīng)周折后,出錯(cuò)信息早已丟失,剩下的只有出錯(cuò)狀態(tài),程序改寫(xiě)為異常處理方式處理,就可以實(shí)現(xiàn)跨函數(shù)的大跳轉(zhuǎn)了:第32頁(yè)/共63頁(yè) #include #include using namespace std; void procFileName(string s); void pro
17、cOpenMode(string s); void openIn(string s); void openOut(string s); int main() procFileName(iabc); procFileName(oabc); void procFileName(string s) try for(char c=0; c=9; c+) procOpenMode(s + c+.txt); catch(string s) couterror opening s not existed.n;第33頁(yè)/共63頁(yè) void procOpenMode(string s) if(s0=i) ope
18、nIn(s); else openOut(s); void openIn(string s) ifstream in(s.c_str(); if(!in) throw s+ inFile; for(string line; getline(in, line); coutlinen); void openOut(string s) fstream out(s.c_str(),ios:in|ios:out|ios:ate); if(!out) throw s+string( outFile); outs+ outFile is ok.n; couts+ is here.n;第34頁(yè)/共63頁(yè)15.
19、3.1 類(lèi)型匹配 try語(yǔ)句中,涉及到類(lèi)的,本質(zhì)上都是函數(shù)調(diào)用。 throw A() 異常機(jī)制與函數(shù)機(jī)制正交(互不干涉),但捕捉的方式是基于類(lèi)型匹配。捕捉相當(dāng)于函數(shù)返回類(lèi)型的匹配,而不是函數(shù)參數(shù)的匹配,所以捕捉不用考慮一個(gè)拋擲中的多種數(shù)據(jù)類(lèi)型匹配問(wèn)題,如:第35頁(yè)/共63頁(yè) #include using namespace std; class A; class B; int main() try int j=0; double d=2.3; char str20=Hello; couta; switch(a) case 1: throw d; case 2: throw j; case 3:
20、 throw str; case 4: throw A(); case 5: throw B(); default: coutNo throws here.n; 第36頁(yè)/共63頁(yè) catch(int) coutint exception.n; catch(double) coutdouble exception.n; catch(char*) coutchar* exception.n; catch(A) coutclass A exception.n; catch(B) coutclass B exception.n; coutThats ok.n; /=第37頁(yè)/共63頁(yè) catch代碼
21、塊必須出現(xiàn)在try后,并且在try塊后可以出現(xiàn)多個(gè)catch代碼塊,以捕捉各種不同類(lèi)型的拋擲。 異常機(jī)制是基于這樣的原理:程序運(yùn)行實(shí)質(zhì)上是數(shù)據(jù)實(shí)體在做一些操作,因此發(fā)生異?,F(xiàn)象的地方,一定是某個(gè)實(shí)體出了差錯(cuò),該實(shí)體所對(duì)應(yīng)的數(shù)據(jù)類(lèi)型便作為拋擲和捕捉的依據(jù)。第38頁(yè)/共63頁(yè) 拋擲的實(shí)體已經(jīng)存在,不需要通過(guò)類(lèi)型轉(zhuǎn)換來(lái)創(chuàng)建一個(gè)臨時(shí)實(shí)體,實(shí)參與形參也不能用相容類(lèi)型提升這一規(guī)則。另一方面,捕捉處理并不一定需要實(shí)參傳遞。第39頁(yè)/共63頁(yè)u 異常捕捉的類(lèi)型匹配之苛刻程度可以和模板的類(lèi)型匹配媲美,它不允許相容類(lèi)型的隱式轉(zhuǎn)換,比如,拋擲char類(lèi)型用int型就捕捉不到例如下列代碼不會(huì)輸出“int except
22、ion.”,從而也不會(huì)輸出“Thats ok.” 因?yàn)槌霈F(xiàn)異常后提示退出int main()int main() try try throwthrow H; catchcatch(intint) coutint exception.n; coutThats ok.n;第40頁(yè)/共63頁(yè)15.3.2 撒網(wǎng)捕捉 程序中可以設(shè)置一道道捕捉的關(guān)卡,如果拋擲的異常,循著調(diào)用鏈往上,在最近的捕捉關(guān)卡未被捉住,則還會(huì)被更上端的捕捉關(guān)卡追捕,直逼到系統(tǒng)的最后一道防線, terminate.第41頁(yè)/共63頁(yè)15.4.1 申述異常 異常拋擲后總是沿著函數(shù)調(diào)用鏈往上,直到被某個(gè)函數(shù)捉住,因此,異常拋擲、捕捉以及處
23、理都依附于函數(shù),函數(shù)承載著異常。 上下游函數(shù)的聯(lián)系,可以通過(guò)異常申述來(lái)獲得,異常申述就是在函數(shù)聲明和函數(shù)定義的頭部加上可能拋擲的異常集合,如:第42頁(yè)/共63頁(yè)異常申述示例 void f() throw(A,B); void g(); void h() throw(); 說(shuō)明f函數(shù)可能會(huì)拋擲出A和B類(lèi)的異常,g函數(shù)內(nèi)可能會(huì)拋擲出任何類(lèi)型的異常,h函數(shù)內(nèi)不會(huì)拋擲出任何異常。 如果h函數(shù)拋出異常或者f函數(shù)拋擲出非A或非B類(lèi)的異常,這是沒(méi)有預(yù)料到的,稱其為未料到異常。第43頁(yè)/共63頁(yè) 異常申述是一種對(duì)設(shè)計(jì)的描述,從而給程序員一個(gè)編程的參照,所以應(yīng)作為界面,而放在函數(shù)聲明中,并通過(guò)頭文件的形式,擴(kuò)散
24、到程序員那里。 其次,要使用異常申述,函數(shù)聲明和函數(shù)定義中的異常申述必須保持一致,否則無(wú)法一一對(duì)應(yīng)。第44頁(yè)/共63頁(yè)沒(méi)有申述的函數(shù),默認(rèn)為任何拋擲都可穿透該函數(shù)聲明:class A;class B;void f1()throw(A,B);void f2();void f3()throw();-對(duì)于函數(shù)g中的調(diào)用,可能捕捉到函數(shù)f1的和函數(shù)f2的異常拋擲 , 但 捕 捉 不 到 函 數(shù)f3中的任何拋擲VC中可以注:同一個(gè)函數(shù),其聲明與定義中的申述應(yīng)一致class A;class B;void f1()throw(A,B) if(.) throw A();void f2() if(.) thro
25、w B();void f3()throw() if(.) throw A();void g() try f1(); f2(); f3(); catch(A) cout“exception in An”; catch(B) cout“exception in Bn”; 第45頁(yè)/共63頁(yè)15.4.2 捉不住處理 如果代碼中沒(méi)有徹底捕捉的異常處理,則對(duì)于拋擲的異常,有可能發(fā)生捕捉不住的情況。如向量的下標(biāo)溢出時(shí),系統(tǒng)會(huì)拋擲一個(gè)runtime_error異常,但許多程序都不屑一捕,因?yàn)槌绦蚨颊{(diào)通了,邏輯可靠,不會(huì)出現(xiàn)下標(biāo)溢出的錯(cuò)誤了。這類(lèi)異常只能被系統(tǒng)默認(rèn)的“強(qiáng)制捕捉器” terminate 捕捉了。
26、 Terminate是系統(tǒng)資源,默認(rèn)操作是系統(tǒng)的abort函數(shù),從而無(wú)條件地終止程序的執(zhí)行。第46頁(yè)/共63頁(yè) 另外,未料到異常,如果不去理它,被系統(tǒng)截獲后會(huì)轉(zhuǎn)而執(zhí)行unexpected函數(shù),而unexpected函數(shù)的默認(rèn)行為是執(zhí)行terminate函數(shù)。如:第47頁(yè)/共63頁(yè)捉不住處理:拋擲而無(wú)布網(wǎng)捕捉的異常將直逼系統(tǒng)的最后一道防線void f() if(.) throw A;void g() try f(); catch(B) cout“exception Bn”; int main() g();throw A將穿透函數(shù)f,g和main,抵達(dá)系統(tǒng)的最后一道防線激發(fā)terminate函數(shù)該
27、函數(shù)調(diào)用引起運(yùn)行終止的abort函數(shù)最后一道防線的函數(shù)可以由程序員設(shè)置從而規(guī)定其終止前的行為第48頁(yè)/共63頁(yè)u可以通過(guò)set_terminate函數(shù)修改捕捉不住異常的默認(rèn)處理器,從而使得發(fā)生捉不住異常時(shí),被自定義函數(shù)處理:u void myTerminate()cout“HereIsMyTerminaten”;u set_terminate(myTerminate);u set_terminate函數(shù)在頭文件exception中聲明,參數(shù)為函數(shù)指針void(*)().第49頁(yè)/共63頁(yè)第50頁(yè)/共63頁(yè)15.6.1 構(gòu)造函數(shù)的錯(cuò)誤處理 構(gòu)造函數(shù)正象一個(gè)封閉的模塊,輸出狀態(tài)是一個(gè)新創(chuàng)對(duì)象任何創(chuàng)
28、建過(guò)程中的錯(cuò)誤(例如,動(dòng)態(tài)內(nèi)存申請(qǐng)失敗等)都會(huì)導(dǎo)致模板的出乎意料這時(shí)候的狀態(tài)是不能接續(xù)后繼操作的,如:捆綁對(duì)象的操作因?yàn)闆](méi)有對(duì)象而招致失敗如果敢于正常返回,則又招致荒謬的結(jié)果如:第51頁(yè)/共63頁(yè)class Date int year, month, day; void init(int y, int m, int d) if(y1|m12|d31) return; /? public: Date(int y=2000, int m=1, int d=1) :year(y),month(m),day(d) init(); void print() coutyear“-”month“-” day
29、“n”; ;int main() Date ad(2000,13,1); ad.print(); / 荒謬:月份為13第52頁(yè)/共63頁(yè)異常操作應(yīng)該恢復(fù)到對(duì)類(lèi)對(duì)象進(jìn)行創(chuàng)建和使用以前的狀態(tài)void f() Date(2000,13,1); ad.print();int main() try f(); /其他操作 catch(out_of_range) cout“對(duì)象創(chuàng)建失敗,改換門(mén)庭”; class Date int year, month, day; void init(int y, int m, int d) if(y1|m12|d31) throw out_of_range; public
30、: Date(int y=2000, int m=1, int d=1) :year(y),month(m),day(d) init(); void print() coutyear“-”month“-” day“n”; ;第53頁(yè)/共63頁(yè) 構(gòu)造函數(shù)沒(méi)有返回類(lèi)型,無(wú)法通過(guò)返回值來(lái)報(bào)告運(yùn)行狀態(tài),所以只通過(guò)一種非函數(shù)機(jī)制的途徑,即異常機(jī)制,來(lái)解決構(gòu)造函數(shù)的出錯(cuò)問(wèn)題。第54頁(yè)/共63頁(yè)15.7.1 另一種循環(huán)控制法 多重循環(huán)控制中,當(dāng)某個(gè)條件滿足時(shí),需要立刻退出所有循環(huán)體時(shí),一般用goto語(yǔ)句反而比較現(xiàn)實(shí)否則一重一重地退,編程復(fù)雜,性能也連累這是在一個(gè)函數(shù)中時(shí)的做法 在一個(gè)循環(huán)中,遇到一個(gè),當(dāng)某個(gè)
31、條件滿足時(shí),需要立刻退出函數(shù)函數(shù)調(diào)用鏈調(diào)用鏈所在的循環(huán)時(shí),就不能用goto語(yǔ)句,因?yàn)椴辉谕粋€(gè)函數(shù)中此時(shí),程序員渴望函數(shù)能奇跡般地跳躍用異??刂平Y(jié)構(gòu)便能滿足編程要求如圖:第55頁(yè)/共63頁(yè)圖15-6 另一種控制結(jié)構(gòu) throw catch try第56頁(yè)/共63頁(yè) 不能說(shuō)異常發(fā)生一定是一種錯(cuò)誤,它已經(jīng)成為了一種有效的控制手段。 異常并非一定是針對(duì)錯(cuò)誤時(shí)刻處理。第57頁(yè)/共63頁(yè)15.7.2 遞歸控制法u遞歸函數(shù)本身就是一個(gè)深不可測(cè)的調(diào)用鏈,要立刻從調(diào)用鏈中徹底退出,若走函數(shù)控制這條線,那么,必須逐個(gè)進(jìn)行函數(shù)返回u而異??刂瓶梢詫?shí)現(xiàn)瞬間跳躍u如求解”n皇后問(wèn)題”,代碼如下:第58頁(yè)/共63頁(yè) #include #include #inclu
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版簡(jiǎn)單的土石方承包合同范本
- 臨時(shí)安保服務(wù)定制協(xié)議:2024年標(biāo)準(zhǔn)版B版
- 二零二五年跨境電商平臺(tái)合作銷(xiāo)售合同3篇
- 個(gè)性化制作服務(wù)費(fèi)及銷(xiāo)售權(quán)合同(2024版)版
- 二零二五年度高端房地產(chǎn)信托借款服務(wù)合同3篇
- 2025年度企業(yè)社會(huì)責(zé)任報(bào)告編輯服務(wù)合同范本3篇
- 天津城市職業(yè)學(xué)院《鑄造工藝》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘇州大學(xué)應(yīng)用技術(shù)學(xué)院《生物工程單元操作原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 四川鐵道職業(yè)學(xué)院《游戲治療》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度門(mén)窗安裝與建筑一體化設(shè)計(jì)合同協(xié)議3篇
- 專(zhuān)題6.8 一次函數(shù)章末測(cè)試卷(拔尖卷)(學(xué)生版)八年級(jí)數(shù)學(xué)上冊(cè)舉一反三系列(蘇科版)
- GB/T 4167-2024砝碼
- 老年人視覺(jué)障礙護(hù)理
- 《腦梗塞的健康教育》課件
- 《請(qǐng)柬及邀請(qǐng)函》課件
- 遼寧省普通高中2024-2025學(xué)年高一上學(xué)期12月聯(lián)合考試語(yǔ)文試題(含答案)
- 《個(gè)體防護(hù)裝備安全管理規(guī)范AQ 6111-2023》知識(shí)培訓(xùn)
- 青海原子城的課程設(shè)計(jì)
- 2023年年北京市各區(qū)初三語(yǔ)文一模分類(lèi)試題匯編 - 作文
- 常州大學(xué)《新媒體文案創(chuàng)作與傳播》2023-2024學(xué)年第一學(xué)期期末試卷
- 麻醉蘇醒期躁動(dòng)患者護(hù)理
評(píng)論
0/150
提交評(píng)論