版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第05章_問(wèn)題求解模塊化第一頁(yè),共123頁(yè)。內(nèi)容提要5.1模塊化程序設(shè)計(jì)5.2函數(shù)的概念5.3函數(shù)調(diào)用和參數(shù)傳遞5.4函數(shù)的特殊調(diào)用形式5.5內(nèi)聯(lián)函數(shù)5.6函數(shù)重載5.7程序設(shè)計(jì)實(shí)例2第二頁(yè),共123頁(yè)。5.1模塊化程序設(shè)計(jì)模塊化程序規(guī)模較大的程序可以按功能劃分成若干個(gè)相對(duì)獨(dú)立的模塊每個(gè)模塊功能由一個(gè)函數(shù)實(shí)現(xiàn)通過(guò)函數(shù)調(diào)用將這些函數(shù)組織在一起C++程序的執(zhí)行從main()函數(shù)開(kāi)始;在main()中調(diào)用其它的函數(shù);其它函數(shù)執(zhí)行后返回到main(),最后在main()中結(jié)束運(yùn)行第三頁(yè),共123頁(yè)。函數(shù)之間的調(diào)用關(guān)系示意圖main函數(shù)調(diào)用了f1()、f2()、f3()這3個(gè)函數(shù)函數(shù)f1()調(diào)用了函數(shù)f3()函數(shù)f2()調(diào)用了函數(shù)f4()第四頁(yè),共123頁(yè)。C++程序框架通常由3個(gè)部分組成(1)第1部分:對(duì)每一個(gè)將被調(diào)用的函數(shù)進(jìn)行聲明voidf1();voidf2();voidf3();voidf4();(2)第2部分:定義main()函數(shù)voidmain(){……f1();//調(diào)用函數(shù)f1f2();//調(diào)用函數(shù)f2f3();//調(diào)用函數(shù)f3……}第五頁(yè),共123頁(yè)。(3)第3部分:定義其它的各個(gè)函數(shù)。voidf1()//定義函數(shù)f1{……f3();//調(diào)用函數(shù)f3}voidf2()//定義函數(shù)f2{……f4();//調(diào)用函數(shù)f4……}voidf3()//定義函數(shù)f3{……}第六頁(yè),共123頁(yè)。庫(kù)函數(shù)和自定義函數(shù)(1)庫(kù)函數(shù)在函數(shù)庫(kù)中已定義的函數(shù),也稱為標(biāo)準(zhǔn)函數(shù),分布在不同的函數(shù)庫(kù)中,例如iostream、cmath和string等。使用庫(kù)函數(shù)時(shí),在程序開(kāi)頭將該函數(shù)所在的函數(shù)庫(kù)進(jìn)行包含包含格式:#include“函數(shù)庫(kù)名”例如:#include<iostream>#include<cmath>usingnamespacestd;(2)自定義函數(shù):由用戶自行編寫第七頁(yè),共123頁(yè)?!纠?-1】計(jì)算圓的面積定義兩個(gè)函數(shù),根據(jù)半徑計(jì)算圓的面積和周長(zhǎng)。在主函數(shù)中,輸入一個(gè)圓的半徑值,然后對(duì)輸入的半徑值進(jìn)行判斷,當(dāng)該值大于零時(shí),調(diào)用函數(shù)計(jì)算這個(gè)圓的面積和周長(zhǎng),并輸出計(jì)算的結(jié)果;否則顯示“輸入錯(cuò)誤”的信息。第八頁(yè),共123頁(yè)?!驹闯绦颉?include<iostream>usingnamespacestd;doublearea(doubler);//聲明計(jì)算面積的函數(shù)area()doublelen(doubler); //聲明計(jì)算周長(zhǎng)的函數(shù)len()voidmain(){ doubler; //定義變量r保存圓的半徑
cout<<"請(qǐng)輸入圓的半徑:"; cin>>r;第九頁(yè),共123頁(yè)。 if(r>0) {cout<<"面積="<<area(r)<<endl; //調(diào)用函數(shù)area()計(jì)算面積
cout<<"周長(zhǎng)="<<len(r)<<endl; //調(diào)用函數(shù)len()計(jì)算周長(zhǎng)
} else cout<<"輸入錯(cuò)誤"<<endl;}第十頁(yè),共123頁(yè)。doublearea(doubler) //定義計(jì)算面積的函數(shù)area{ return3.1416*r*r;//計(jì)算并返回圓的面積}doublelen(doubler)//定義計(jì)算周長(zhǎng)的函數(shù)len{ return2*3.1416*r;//計(jì)算并返回圓的周長(zhǎng)}第十一頁(yè),共123頁(yè)。5.2函數(shù)的概念函數(shù)的定義方式返回值的概念函數(shù)的聲明第十二頁(yè),共123頁(yè)。5.2.1函數(shù)的定義1.函數(shù)定義的一般形式類型名函數(shù)名(類型名形參1,類型名形參2,…)
{函數(shù)體
}(1)類型名:函數(shù)返回值的類型(2)函數(shù)名:函數(shù)名的命名要符合標(biāo)識(shí)符命名的規(guī)則。(3)形參的類型和名稱:形參用來(lái)在函數(shù)調(diào)用時(shí)接收從主調(diào)函數(shù)那里傳遞過(guò)來(lái)的數(shù)據(jù)。(4)函數(shù)體:用來(lái)實(shí)現(xiàn)該函數(shù)的功能。第十三頁(yè),共123頁(yè)。2.幾種特殊形式的函數(shù)(1)無(wú)參函數(shù)沒(méi)有形參的函數(shù)稱為無(wú)參函數(shù),圓括號(hào)不能省略。(2)空函數(shù)如果函數(shù)體為空,該函數(shù)稱為空函數(shù),空函數(shù)也可以被調(diào)用,調(diào)用后也可以返回到主調(diào)函數(shù)。空函數(shù)通常用在程序設(shè)計(jì)的最初階段,目的是保證整個(gè)程序的完整性,以后再向函數(shù)體中填寫具體語(yǔ)句第十四頁(yè),共123頁(yè)。3.Void類型的函數(shù)用關(guān)鍵字void定義無(wú)類型或稱為空類型的函數(shù),明確表示不帶回值。例如:voidfun(){cout<<”Hello”;}該函數(shù)僅完成輸出一個(gè)字符串,不需要返回值第十五頁(yè),共123頁(yè)。根據(jù)參數(shù)及返回值的函數(shù)分類(1)帶參數(shù)并且有返回值函數(shù)類型函數(shù)名(形參表列){函數(shù)體}(2)不帶參數(shù)但有返回值函數(shù)類型函數(shù)名(){函數(shù)體}(3)帶參數(shù)但沒(méi)有返回值void函數(shù)名(形參表列){函數(shù)體}(4)不帶參數(shù)也沒(méi)有返回值void函數(shù)名(){函數(shù)體}第十六頁(yè),共123頁(yè)。5.2.2函數(shù)的返回1.return語(yǔ)句作用是返回到主調(diào)函數(shù),如果函數(shù)體中沒(méi)有該語(yǔ)句,則遇見(jiàn)函數(shù)體的右花括號(hào)時(shí)返回格式1:return;用于函數(shù)類型為void,返回時(shí)沒(méi)有返回值。格式2:return<表達(dá)式>;先計(jì)算表達(dá)式,然后將結(jié)果返回給主調(diào)函數(shù),只能帶回一個(gè)值例如:intmax(intx,inty){if(x>y)returnx;elsereturny;}第十七頁(yè),共123頁(yè)。2.返回值的類型與函數(shù)類型不一致的情況返回值的類型在定義函數(shù)時(shí)指定,如果return語(yǔ)句中表達(dá)式的類型與函數(shù)定義時(shí)的類型不一致,返回時(shí)以函數(shù)類型為準(zhǔn),這時(shí)系統(tǒng)會(huì)對(duì)return語(yǔ)句中表達(dá)式的值自動(dòng)進(jìn)行類型轉(zhuǎn)換。第十八頁(yè),共123頁(yè)?!纠?-2】返回值與函數(shù)類型不一致定義求兩個(gè)float型數(shù)的最大值的函數(shù),函數(shù)的返回類型是int,return語(yǔ)句的表達(dá)式結(jié)果類型為float,觀察主函數(shù)中的計(jì)算結(jié)果。第十九頁(yè),共123頁(yè)?!驹闯绦颉?include<iostream>usingnamespacestd;intmax(floatx,floaty){return(x>y?x:y);}voidmain(){floata,b;intc;cin>>a>>b;c=max(a,b);cout<<"Max="<<c;}第二十頁(yè),共123頁(yè)?!境绦蚍治觥亢瘮?shù)max的類型是int,return語(yǔ)句中表達(dá)式值的類型是float,二者不一致,先將x>y?x:y的結(jié)果轉(zhuǎn)換為int,然后再返回給main。第二十一頁(yè),共123頁(yè)。5.2.3函數(shù)的聲明1.函數(shù)調(diào)用的原則調(diào)用任何函數(shù)之前,應(yīng)該先對(duì)該函數(shù)進(jìn)行聲明如果被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,這時(shí),定義函數(shù)的同時(shí)也對(duì)該函數(shù)進(jìn)行了聲明,可以省略對(duì)該函數(shù)的聲明如果被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之后,就要在函數(shù)調(diào)用之前對(duì)該函數(shù)進(jìn)行聲明。第二十二頁(yè),共123頁(yè)。示例:被調(diào)函數(shù)在主調(diào)函數(shù)之前定義#include<iostream>usingnamespacestd;floatf(){return3.5;}voidmain(){cout<<f();}該程序可以正常的運(yùn)行。第二十三頁(yè),共123頁(yè)。出錯(cuò)的程序:交換兩個(gè)函數(shù)的順序#include<iostream>usingnamespacestd;voidmain(){cout<<f();}floatf(){return3.5;}編譯時(shí)會(huì)出錯(cuò),原因是未對(duì)函數(shù)進(jìn)行聲明。第二十四頁(yè),共123頁(yè)。2.函數(shù)的聲明和函數(shù)的原型聲明格式1:類型名函數(shù)名(類型名形參1,類型名形參2,…);聲明格式2:類型名函數(shù)名(類型名,類型名,…);聲明格式稱為函數(shù)原型,由函數(shù)頭部加上分號(hào)組成例如:以下是函數(shù)max的定義:intmax(intx,inty){return(x>y?x:y);}該函數(shù)的函數(shù)原型是:intmax(intx,inty);或intmax(int,int);第二十五頁(yè),共123頁(yè)。5.3函數(shù)調(diào)用和參數(shù)傳遞5.3.1函數(shù)調(diào)用的一般格式1.實(shí)參的幾種形式函數(shù)調(diào)用的一般形式:函數(shù)名(參數(shù)表列)調(diào)用函數(shù)時(shí),格式中參數(shù)表列的各個(gè)參數(shù)稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參,實(shí)參向被調(diào)函數(shù)的形參傳遞數(shù)據(jù)。例如:實(shí)參是變量: c=max(a,b);實(shí)參是常量: c=max(3,4);實(shí)參是表達(dá)式: c=max(3+5,4+3);實(shí)參是另一個(gè)函數(shù)調(diào)用的結(jié)果:c=sqrt(max(a,3));實(shí)參的個(gè)數(shù)、類型和次序應(yīng)與被調(diào)函數(shù)的形參一一對(duì)應(yīng)第二十六頁(yè),共123頁(yè)。【例5-3】函數(shù)調(diào)用時(shí)實(shí)參向形參傳遞數(shù)據(jù)編寫函數(shù),顯示指定的字符n次,n和字符作為參數(shù),函數(shù)不需要返回值。在主函數(shù)中,以不同的參數(shù)調(diào)用該函數(shù)兩次,比較運(yùn)行結(jié)果。第二十七頁(yè),共123頁(yè)。【源程序】#include<iostream>usingnamespacestd;voidprint_char(charc,intn)//兩個(gè)形參{inti;//定義循環(huán)變量for(i=0;i<n;i++)//執(zhí)行n次的循環(huán)cout<<c;//顯示字符cout<<endl;//換行}//函數(shù)沒(méi)有返回值,可以省略return語(yǔ)句第二十八頁(yè),共123頁(yè)。voidmain()//主函數(shù){print_char('*',15);//函數(shù)調(diào)用,括號(hào)中為實(shí)參,順序一致,類型一致
print_char('^',10);//函數(shù)調(diào)用,用另一組實(shí)參,第1個(gè)字符型,第2個(gè)整型}第二十九頁(yè),共123頁(yè)。2.函數(shù)調(diào)用的幾種形式(1)語(yǔ)句調(diào)用作為函數(shù)調(diào)用語(yǔ)句,完成一定的操作,不返回任何值。(2)表達(dá)式調(diào)用函數(shù)調(diào)用出現(xiàn)在表達(dá)式中,函數(shù)值參與表達(dá)式的運(yùn)算例如:c=2*max(a,b);(3)函數(shù)的值作為另一個(gè)函數(shù)調(diào)用的參數(shù)這時(shí)被調(diào)函數(shù)作為其它函數(shù)的參數(shù)例如:m=max(a,max(b,c));第三十頁(yè),共123頁(yè)。5.3.2參數(shù)的傳遞方式在C++語(yǔ)言中,函數(shù)之間調(diào)用時(shí)通過(guò)參數(shù)進(jìn)行數(shù)據(jù)傳遞,從傳遞內(nèi)容上看,參數(shù)傳遞有值傳遞、地址傳遞和引用傳遞3種方式第三十一頁(yè),共123頁(yè)。1.值傳遞將實(shí)參的值依次傳遞給對(duì)應(yīng)的形參,形參變量只有在發(fā)生函數(shù)調(diào)用時(shí)才分配內(nèi)存單元用來(lái)接受由實(shí)參傳過(guò)來(lái)的數(shù)據(jù)。實(shí)參與形參各占不同的單元,當(dāng)調(diào)用結(jié)束后,形參所在內(nèi)存單元被釋放,而實(shí)參仍保留原值。第三十二頁(yè),共123頁(yè)。【例5-4】值傳遞驗(yàn)證在值傳遞過(guò)程中,形參的改變對(duì)實(shí)參有無(wú)影響編寫函數(shù),交換兩個(gè)整型變量的值。在主函數(shù)中,使用值傳遞方式的調(diào)用該函數(shù),參數(shù)用兩個(gè)變量,觀察調(diào)用前后這兩個(gè)變量的值。第三十三頁(yè),共123頁(yè)?!驹闯绦颉恐祩鬟f的調(diào)用方式#include<iostream>usingnamespacestd;voidsx,inty);//swap()函數(shù)的聲明voidmain(){inta=3,b=4;cout<<"a="<<a<<"b="<<b<<endl; //顯示調(diào)用前的實(shí)參值
s); //函數(shù)的值傳遞調(diào)用
cout<<"a="<<a<<"b="<<b<<endl; //顯示調(diào)用后的實(shí)參值}第三十四頁(yè),共123頁(yè)。voidsx,inty)//swap()函數(shù)的定義{intz;cout<<"x="<<x<<"y="<<y<<endl; //顯示交換前的形參的值z(mì)=x;x=y;y=z; //交換兩個(gè)形參的值cout<<"x="<<x<<"y="<<y<<endl; //顯示交換后的形參的值}結(jié)論:變量a和b的值并沒(méi)有交換。第三十五頁(yè),共123頁(yè)。2.引用傳遞如果形參是引用名,在函數(shù)調(diào)用時(shí),形參變量與實(shí)參變量實(shí)際表示的是同一內(nèi)存單元,在被調(diào)函數(shù)中對(duì)引用變量的操作和在主調(diào)函數(shù)中使用實(shí)參的效果是一樣的,這樣,可以通過(guò)引用變量在被調(diào)函數(shù)中改變主調(diào)函數(shù)中變量的值。第三十六頁(yè),共123頁(yè)。【例5-5】引用傳遞使用引用傳遞在被調(diào)函數(shù)中改變實(shí)參的值。編寫函數(shù),交換兩個(gè)整型變量的值,形參采用引用傳遞在主函數(shù)中,調(diào)用該函數(shù),參數(shù)用兩個(gè)變量,觀察調(diào)用前后這兩個(gè)變量的值。第三十七頁(yè),共123頁(yè)。【源程序】引用傳遞#include<iostream>usingnamespacestd;voids&); //函數(shù)swap()的形參是引用名intmain(){inta=5,b=10;//定義并初始化兩個(gè)變量cout<<"a="<<a<<",b="<<b<<endl;//顯示調(diào)用前的實(shí)參值s); //函數(shù)的引用傳遞調(diào)用cout<<"a="<<a<<",b="<<b;//顯示調(diào)用后的實(shí)參值
return1;}第三十八頁(yè),共123頁(yè)。voids&m,int&n)//兩個(gè)形參都為引用名{intt=m;//交換變量m,n的值m=n;n=t;}第三十九頁(yè),共123頁(yè)。5.3.3設(shè)置形參的默認(rèn)值C++中允許為形參指定默認(rèn)的值,在函數(shù)調(diào)用時(shí)如果有實(shí)參,則形參使用實(shí)參的值,如果沒(méi)有指定與形參對(duì)應(yīng)的實(shí)參,形參自動(dòng)使用默認(rèn)的值指定參數(shù)的默認(rèn)值可以在函數(shù)定義中進(jìn)行,也可以在函數(shù)原型中進(jìn)行,通常是寫在函數(shù)名在程序中第一次出現(xiàn)的位置。例如:intadd(intx=0,inty=0);第四十頁(yè),共123頁(yè)?!纠?-6】默認(rèn)參數(shù)值的使用編寫函數(shù),計(jì)算兩個(gè)數(shù)的和并顯示,參數(shù)的默認(rèn)值為0,函數(shù)無(wú)返回值。編寫主函數(shù),提供不同的實(shí)參調(diào)用該函數(shù),觀察結(jié)果,分析原因。第四十一頁(yè),共123頁(yè)?!驹闯绦颉?include<iostream>usingnamespacestd;voidadd(intx=0,inty=0){cout<<x<<"+"<<y<<"="<<x+y<<endl; }intmain(){add(1,2);add();add(3);return1;}第四十二頁(yè),共123頁(yè)。對(duì)部分形參定義默認(rèn)值規(guī)定:沒(méi)有默認(rèn)值的形參只能出現(xiàn)在形參表列的前邊,默認(rèn)值出現(xiàn)在從右到左的連續(xù)若干個(gè)形參中。下面定義方法是允許的:
voidfun(inti=1,intj=2,intk=3);voidfun(inti,intj=2,intk=3);voidfun(inti,intj,intk=3);下面定義方法是不允許的:
voidfun(inti=1,intj=2,intk);voidfun(inti=1,intj,intk);voidfun(inti,intj=2,intk);第四十三頁(yè),共123頁(yè)。5.3.4一維數(shù)組名作為函數(shù)的參數(shù)數(shù)組名作參數(shù)時(shí),主調(diào)函數(shù)和被調(diào)函數(shù)的兩個(gè)數(shù)組共占相同的內(nèi)存單元,這樣,如果被調(diào)函數(shù)中各數(shù)組元素值發(fā)生變化,在返回主調(diào)函數(shù)后,實(shí)參數(shù)組中元素的值也同時(shí)變化第四十四頁(yè),共123頁(yè)?!纠?-7】數(shù)組名作為函數(shù)的參數(shù)。編寫函數(shù),計(jì)算數(shù)組中第m個(gè)元素(從0開(kāi)始)開(kāi)始的n個(gè)元素之和。第四十五頁(yè),共123頁(yè)?!驹闯绦颉?include<iostream>usingnamespacestd;intfun(intb[],intm,intn)//定義求數(shù)組元素和的函數(shù),數(shù)組作參數(shù),數(shù)組大小可以省略{ inti,s=0;//定義循環(huán)變量及和的初始值for(i=m;i<m+n;i=i+1)//用循環(huán)求和 s=s+b[i];//逐步加數(shù)組的元素 returns;//返回指定數(shù)組元素的和}第四十六頁(yè),共123頁(yè)。intmain(){intx,a[]={0,1,2,3,4,5,6,7,8,9};x=fun(a,0,10); //調(diào)用函數(shù),求第0個(gè)元素開(kāi)始的10個(gè)元素的和
cout<<x<<endl; //顯示結(jié)果
x=fun(a,3,5); //調(diào)用函數(shù),求第3個(gè)元素開(kāi)始的5個(gè)元素的和
cout<<x<<endl; //顯示結(jié)果
return1; //主函數(shù)結(jié)束}第四十七頁(yè),共123頁(yè)?!纠?-8】冒泡法排序編寫函數(shù),用冒泡法對(duì)一組整數(shù)進(jìn)行從小到大的升序排序。對(duì)數(shù)組中的數(shù)據(jù)進(jìn)行排序,就是重新調(diào)整每個(gè)元素的位置,保證元素的值按下標(biāo)的順序依次遞增(升序)或依次遞減(降序)。第四十八頁(yè),共123頁(yè)。冒泡法算法描述對(duì)n個(gè)數(shù)進(jìn)行n-1輪的冒泡比較:第一輪將最大的元素沉到最底部,即放到數(shù)組的最后一個(gè)位置;第二輪將剩余的n-1個(gè)數(shù)中的最大數(shù)即n個(gè)數(shù)中的次最大值下沉;依此類推,每一輪都將剩余的數(shù)中的最大數(shù)下沉;當(dāng)進(jìn)行n-1輪之后,最大的n-1個(gè)沉下去,最上面自然就是最小的數(shù),整個(gè)排序就此完成第四十九頁(yè),共123頁(yè)?!驹闯绦颉?include<iostream>usingnamespacestd;voidsort(intb[],intn)//冒泡法排序的函數(shù){ inti,j,t; for(j=0;j<n-1;j++)//外循環(huán)控制比較輪次為個(gè)數(shù)減1 for(i=0;i<n-j;i++)//內(nèi)循環(huán)控制每一輪的比較次數(shù)
if(b[i]>b[i+1])//相鄰兩個(gè)進(jìn)行比較第五十頁(yè),共123頁(yè)。
{ t=b[i];b[i]=b[i+1];b[i+1]=t;}//交換兩個(gè)數(shù)的位置
}voidprint(intb[],intn)//該函數(shù)順序顯示輸出數(shù)組元素{ inti; for(i=0;i<n;i++)cout<<b[i]<<""; cout<<endl;}第五十一頁(yè),共123頁(yè)。intmain(){ inta[10]={9,4,8,12,65,-76,1,0,100,-45};//定義并初始化一維數(shù)組
cout<<"排序前:";print(a,10);//調(diào)用print函數(shù)顯示排序前數(shù)組元素
sort(a,10);//調(diào)用sort函數(shù)對(duì)數(shù)組元素進(jìn)行排序
cout<<"排序后:"; print(a,10);//調(diào)用print函數(shù)顯示排序后數(shù)組元素
return1;}第五十二頁(yè),共123頁(yè)。5.4函數(shù)的特殊調(diào)用形式嵌套調(diào)用遞歸調(diào)用第五十三頁(yè),共123頁(yè)。5.5.1嵌套調(diào)用在一個(gè)函數(shù)的調(diào)用過(guò)程中,被調(diào)函數(shù)又調(diào)用了另一個(gè)函數(shù)。C++中可以嵌套調(diào)用,但是不可以嵌套定義函數(shù)。第五十四頁(yè),共123頁(yè)。【例5-9】函數(shù)的嵌套調(diào)用函數(shù)square()計(jì)算一個(gè)數(shù)的平方;另一個(gè)函數(shù)ssum(),計(jì)算兩個(gè)數(shù)的平方和,其中的平方要調(diào)用square()函數(shù)實(shí)現(xiàn);主函數(shù),調(diào)用函數(shù)ssum計(jì)算用戶輸入的兩個(gè)數(shù)的平方和。第五十五頁(yè),共123頁(yè)。【源程序】函數(shù)的嵌套調(diào)用#include<iostream>usingnamespacestd;intsquare(intn) //計(jì)算整數(shù)的平方{returnn*n;}intssum(intx,inty)//計(jì)算兩個(gè)數(shù)的平方和{returnsquare(x)+square(y);//調(diào)用計(jì)算平方的函數(shù)}第五十六頁(yè),共123頁(yè)。intmain(){intm,n;cout<<"Pleaseinputtwointeger:";cin>>m>>n;cout<<m<<"^2+"<<n<<"^2="<<ssum(m,n)<<endl;return1;}第五十七頁(yè),共123頁(yè)。在定義一個(gè)函數(shù)的過(guò)程中直接或間接地調(diào)用其自身,有兩個(gè)階段(1)遞推階段將原來(lái)的問(wèn)題不斷地分解為新的問(wèn)題,逐漸從未知向已知的方向推測(cè),最終到達(dá)已知的條件。(2)回歸階段從已知的條件出發(fā),按遞推的逆過(guò)程,逐個(gè)求值,最后到達(dá)遞推的開(kāi)始。5.5.2遞歸調(diào)用第五十八頁(yè),共123頁(yè)?!纠?-10】用遞歸調(diào)用計(jì)算階乘n!【問(wèn)題分析】由于5!=5×4!,4!=4×3!……2!=2×1!,1!=1,這樣,可以得到計(jì)算階乘n!的遞歸公式是:當(dāng)n=0或1時(shí),n!=1
當(dāng)n>1時(shí),n!=n×(n-1)!第五十九頁(yè),共123頁(yè)?!驹闯绦颉坑眠f歸調(diào)用計(jì)算階乘#include<iostream>usingnamespacestd;intfac(intn) //定義函數(shù),計(jì)算n的階乘{(lán)intf;//f保存n的階乘
if(n==0||n==1)//n是0或1時(shí)值是確定的、已知的
f=1;else//n大于1時(shí),n!=n*(n-1)!=n*fac(n-1)f=fac(n-1)*n;//如果n>1調(diào)用自身,即遞歸調(diào)用
returnf;//返回結(jié)果}第六十頁(yè),共123頁(yè)。voidmain()//主函數(shù){intn,y;cin>>n;//輸入nif(n>0)//n>0時(shí)才計(jì)算階乘
{y=fac(n);//調(diào)用函數(shù),計(jì)算階乘
cout<<n<<"!="<<y;//顯示結(jié)果
}else//n<=0的情況
cout<<"n的值應(yīng)大于0";}第六十一頁(yè),共123頁(yè)?!纠?-11】Hanoi塔問(wèn)題編程顯示每次移動(dòng)一個(gè)盤子的具體過(guò)程。圖5-4中,有幾個(gè)大小不同的圓盤和三根立柱,每個(gè)圓盤按由小到大順序插在A柱子上,B和C兩個(gè)柱子上是空的第六十二頁(yè),共123頁(yè)。要求將這幾個(gè)圓盤按由大到小順序搬到C柱子上,完成后的外觀和現(xiàn)在的A柱子上是一樣的,搬動(dòng)時(shí)按下面的規(guī)則進(jìn)行:(1)搬動(dòng)時(shí)可以借助B柱子;(2)每次只能搬動(dòng)一個(gè)圓盤;(3)任何時(shí)候不能將大圓盤放在小圓盤之上;(4)圓盤只能在這三根柱子之間搬動(dòng)。第六十三頁(yè),共123頁(yè)。問(wèn)題分析:3個(gè)步驟操作步驟:(1)將n-1個(gè)盤子從A柱移到B座;(2)將A柱上剩下的1個(gè)盤子移到C柱;(3)將n-1個(gè)盤子從B柱移到C柱。其中的(1)和(3)步并沒(méi)有直接完成,例如(1)可以用下面的步驟描述:1)將n-2個(gè)盤子從A柱移到C座;2)將A柱上剩下的1個(gè)盤子移到B柱;3)將n-2個(gè)盤子從C柱移到B柱。這里的1)和3)還可以再進(jìn)一步的描述,直到每一步中盤子個(gè)數(shù)只有一個(gè)時(shí)就可以像第(1)步那樣直接移動(dòng)了,顯然,這種分析反映了遞歸思想。第六十四頁(yè),共123頁(yè)。2類操作和2個(gè)函數(shù)3個(gè)步驟可以分成兩類操作:(1)n>1時(shí):將n-1個(gè)盤從一個(gè)柱移到另一個(gè)柱上,這是一個(gè)遞歸的過(guò)程。(2)n=1時(shí):將1個(gè)盤子從一個(gè)柱移到另一柱上。第1類操作可以定義下列函數(shù)完成:voidhanoi(intn,chara,charb,charc);該函數(shù)實(shí)現(xiàn)將n個(gè)盤子從a柱借助b柱移到c柱,形參a、b、c分別代表三根柱子。第2類操作可以定義下列函數(shù)完成:voidmove(charx,chary);該函數(shù)實(shí)現(xiàn)將1個(gè)盤子從x柱移到y(tǒng)柱,形參x、y分別代表三根柱子hanoi函數(shù)是一個(gè)遞歸函數(shù),當(dāng)參數(shù)n的值為1時(shí)調(diào)用move函數(shù),n大于1時(shí)進(jìn)行自身的遞歸調(diào)用。第六十五頁(yè),共123頁(yè)?!驹闯绦颉縃anoi塔問(wèn)題#include<iostream>usingnamespacestd;voidmove(charx,chary)//函數(shù)move將一個(gè)盤子從x移動(dòng)到y(tǒng){ cout<<x<<"---->"<<y<<endl;}第六十六頁(yè),共123頁(yè)。voidhanoi(intn,chara,charb,charc){if(n==1)//n=1時(shí)直接調(diào)用movemove(a,c);else
{hanoi(n-1,a,c,b);//n>1時(shí)調(diào)用自身,借助c將n-1個(gè)盤子從a移到bmove(a,c);hanoi(n-1,b,a,c);//n>1時(shí)調(diào)用自身,借助a將n-1個(gè)盤子從b移到c}}第六十七頁(yè),共123頁(yè)。intmain(){intm;cout<<"請(qǐng)輸入盤子個(gè)數(shù):";cin>>m;cout<<"移動(dòng)"<<m<<"個(gè)盤子的過(guò)程如下:"<<endl;hanoi(m,'A','B','C'); return1;}第六十八頁(yè),共123頁(yè)。5.5內(nèi)聯(lián)函數(shù)問(wèn)題:代碼不長(zhǎng)又經(jīng)常被調(diào)用的函數(shù),系統(tǒng)為調(diào)用所花費(fèi)的時(shí)間和空間開(kāi)銷較大,有時(shí)甚至?xí)绊懗绦虻倪\(yùn)行效率解決方法:將函數(shù)定義為內(nèi)聯(lián)函數(shù)定義格式:inline函數(shù)類型函數(shù)名(形參及其類型表列){函數(shù)體}程序編譯將內(nèi)聯(lián)函數(shù)調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)的函數(shù)體替代第六十九頁(yè),共123頁(yè)。【例5-12】?jī)?nèi)聯(lián)函數(shù)的使用。編寫函數(shù),計(jì)算函數(shù)的平方,該函數(shù)定義為內(nèi)聯(lián)函數(shù)。#include<iostream>usingnamespacestd;inlineintsquare(intx)//使用關(guān)鍵字inline表示定義內(nèi)聯(lián)函數(shù){ returnx*x; //該函數(shù)內(nèi)只有一條語(yǔ)句}voidmain(){inti,sum=0; for(i=1;i<=10;i++) sum=sum+square(i); cout<<"sum="<<sum;}第七十頁(yè),共123頁(yè)。5.6函數(shù)重載函數(shù)重載機(jī)制兩個(gè)或兩個(gè)以上的函數(shù)具有相同的函數(shù)名,這些函數(shù)被稱為重載函數(shù),只要這些函數(shù)形參的個(gè)數(shù)不同或形參類型不完全一樣,編譯系統(tǒng)根據(jù)實(shí)參和形參的個(gè)數(shù)或類型的匹配關(guān)系,在同名函數(shù)中自動(dòng)選擇調(diào)用某個(gè)函數(shù)。第七十一頁(yè),共123頁(yè)?!纠?-13】形參個(gè)數(shù)相同但類型不同的函數(shù)重載使用函數(shù)重載分別編寫求兩個(gè)整型、雙精度型和字符型的最大值的函數(shù)。本例中設(shè)計(jì)3個(gè)功能相同的函數(shù),都是求兩者中的最大值,只是每個(gè)函數(shù)形參的類型不同,分別是整型、雙精度型和字符型。第七十二頁(yè),共123頁(yè)。源程序#include<iostream>usingnamespacestd;intmax(intx,inty)//求整型數(shù)最大值的函數(shù){ returnx>y?x:y;}doublemax(doublex,doubley)//求雙精度型數(shù)最大值的函數(shù){ returnx>y?x:y;}第七十三頁(yè),共123頁(yè)。charmax(charx,chary)//求字符型數(shù)最大值的函數(shù){ returnx>y?x:y;}voidmain(){cout<<max(4,5)<<endl;//實(shí)參為整型數(shù)
cout<<max(5.6,1.2)<<endl;//實(shí)參為雙精度型數(shù)
cout<<max('x','y')<<endl;//實(shí)參為字符型數(shù)}第七十四頁(yè),共123頁(yè)?!纠?-14】形參個(gè)數(shù)不同的函數(shù)重載使用函數(shù)重載,分別編寫求兩個(gè)、三個(gè)、四個(gè)數(shù)的和的函數(shù)。設(shè)計(jì)3個(gè)功能相同的函數(shù),都是求形參變量之和并將結(jié)果返回到主調(diào)函數(shù),3個(gè)函數(shù)的參數(shù)類型一數(shù),但個(gè)數(shù)不同,分別是2、3、4個(gè)。第七十五頁(yè),共123頁(yè)?!驹闯绦颉?include<iostream>usingnamespacestd;intadd(intx,inty) //有兩個(gè)形參{intsum;sum=x+y;returnsum;}intadd(intx,inty,intz)//有3個(gè)形參{intsum;sum=x+y+z;returnsum;}intadd(intx,inty,intz,intt)//有4個(gè)形參{intsum;sum=x+y+z+t;returnsum;}第七十六頁(yè),共123頁(yè)。voidmain(){inta,b,c;a=add(3,5); //有2個(gè)實(shí)參b=add(3,5,7); //有3個(gè)實(shí)參c=add(3,5,7,9); //有4個(gè)實(shí)參cout<<a<<endl;cout<<b<<endl;cout<<c<<endl;}第七十七頁(yè),共123頁(yè)。5.7C++中的字符串處理函數(shù)1.字符串復(fù)制函數(shù)strcpy格式:strcpy(字符數(shù)組名,字符串)作用:將字符串復(fù)制到字符數(shù)組中字符串可以是字符數(shù)組名、字符串常量、指針變量示例:strcpy(str2,str1);strcpy(str1,"Friday");第七十八頁(yè),共123頁(yè)。2.字符串連接函數(shù)strcat格式:strcat(字符串1,字符串2)作用:將字符串2連接到字符串1之后第七十九頁(yè),共123頁(yè)?!纠?-15】將3個(gè)字符串連接成一個(gè)#include<iostream>#include<string>usingnamespacestd;intmain(){charstr1[20]={"computer"};//第1個(gè)字符串保存在str1中charstr2[]={"room"}; //第2個(gè)字符串保存在str2中strcat(str1,"-"); //第1個(gè)字符串和"-"連接strcat(str1,str2); //連接后的第1個(gè)字符串和第2個(gè)連接cout<<str1;return1;}第八十頁(yè),共123頁(yè)。3.字符串比較函數(shù)strcmp格式:strcmp(字符串1,字符串2)作用:比較兩個(gè)字符串的大小并返回一個(gè)整數(shù)。兩個(gè)字符串比較過(guò)程:兩個(gè)字符串自左到右逐個(gè)字符比較,即先比較兩個(gè)字符串的第0個(gè)字符,如果相等,再比較這兩個(gè)字符串的第1個(gè)字符,……參與比較的是這兩個(gè)字符對(duì)應(yīng)的ASCII碼。比較過(guò)程中,遇到對(duì)應(yīng)字符不相等或遇到某個(gè)字符串先到結(jié)束標(biāo)志’\0’時(shí),比較結(jié)束,如果兩個(gè)字符串長(zhǎng)度相等,并且對(duì)應(yīng)位置上的字符都相同,則比較的結(jié)果是兩個(gè)字符串相等。函數(shù)值的規(guī)定:(1)如果兩個(gè)字符串相等,函數(shù)值為0;(2)如果字符串1大于字符串2,函數(shù)值為1;(3)如果字符串1小于字符串2,函數(shù)值為-1。第八十一頁(yè),共123頁(yè)。字符串比較示例一:cout<<strcmp("aaa","aaaa")<<endl; //字符'\0'<'a',結(jié)果為-1cout<<strcmp("1a","aa")<<endl; //字符'1'<'a',結(jié)果為-1cout<<strcmp("Abc","abc")<<endl; //字符'A'<'a',結(jié)果為-1第八十二頁(yè),共123頁(yè)。字符串比較示例二:定義:chara[5]="1234",b[5]="4321";cout<<strcmp(a,"1234")<<endl; //兩個(gè)字符串相等,結(jié)果為0cout<<strcmp(a,"123")<<endl; //字符'4'>'\0',結(jié)果為1cout<<strcmp(a,b)<<endl; //字符'1'<'4',結(jié)果為-1第八十三頁(yè),共123頁(yè)。5.計(jì)算字符串長(zhǎng)度函數(shù)strlen格式:strlen(字符串)作用:返回字符串長(zhǎng)度,即字符串中包含的字符個(gè)數(shù)。不包括結(jié)束標(biāo)志’\0’。5.字母變小寫函數(shù)strlwr格式:strlwr(字符串)作用:將字符串中的大寫字母轉(zhuǎn)換成小寫字母。6.字母變大寫函數(shù)strupr格式:strupr(字符串)作用:將字符串中的小寫字符母轉(zhuǎn)換為大寫字母。第八十四頁(yè),共123頁(yè)。5.8變量的作用域和存儲(chǔ)類型變量作用域是指變量的作用范圍。根據(jù)變量的作用范圍不同,可以把變量分為局部變量和全局變量。第八十五頁(yè),共123頁(yè)。5.8.1局部變量(1)在一個(gè)函數(shù)內(nèi)部定義的變量(2)函數(shù)的形參是局部變量。(3)在main中定義的變量是局部變量。(4)在復(fù)合語(yǔ)句中定義是局部變量,僅在復(fù)合語(yǔ)句的范圍內(nèi)有效。第八十六頁(yè),共123頁(yè)?!纠?-16】main和復(fù)合語(yǔ)句中的局部變量#include<iostream>usingnamespacestd;voidmain(){inti=1,j=3;//main中定義的局部變量
cout<<i<<",";i++;{inti=0;//復(fù)合語(yǔ)句中定義的變量i,與上面的同名
i+=j*2;//這里是復(fù)合語(yǔ)句中定義的變量icout<<i<<","<<j<<",";} cout<<i<<","<<j;//這里是main中定義的變量i}第八十七頁(yè),共123頁(yè)。5.8.2全局變量在函數(shù)之外、類之外定義的變量,全局變量可以為本源程序中的所有函數(shù)、類或復(fù)合語(yǔ)句所訪問(wèn)。定義的全局變量如果沒(méi)有初始化,系統(tǒng)自動(dòng)將其初始化為0。全局變量和某個(gè)局部變量允許同名在局部變量的作用范圍內(nèi),如果要使用全局變量,應(yīng)在全局變量前使用作用域運(yùn)算符::第八十八頁(yè),共123頁(yè)。【例5-17】全局變量和局部變量#include<iostream>usingnamespacestd;inta=3,b=5;//這里定義了兩個(gè)全局變量intmax(inta,intb)//兩個(gè)形參是局部變量{returna>b?a:b;//這里使用的是局部變量}voidmain(){inta=8;//該處定義的局部變量與全局變量同名
cout<<max(a,b); //第1個(gè)實(shí)參是局部變量,第2個(gè)是全局變量}第八十九頁(yè),共123頁(yè)。5.8.3變量存儲(chǔ)類型
1.C++程序使用的內(nèi)存區(qū)域(1)程序代碼區(qū):存放各個(gè)函數(shù)的代碼;(2)全局?jǐn)?shù)據(jù)區(qū):存放全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù),該區(qū)域的數(shù)據(jù)一直保持到程序的結(jié)束;(3)棧區(qū):存放局部數(shù)據(jù),當(dāng)函數(shù)被調(diào)用時(shí),為函數(shù)中的局部變量分配存儲(chǔ)空間,函數(shù)調(diào)用結(jié)束時(shí)收回該函數(shù)在棧區(qū)分配的單元;(4)堆區(qū):存放程序的動(dòng)態(tài)數(shù)據(jù)。第九十頁(yè),共123頁(yè)。變量的存儲(chǔ)類型是指定變量的具體存儲(chǔ)區(qū)域,在默認(rèn)情況下,變量存儲(chǔ)區(qū)域:全局變量保存在全局?jǐn)?shù)據(jù)區(qū);局部變量保存在棧區(qū);用new或malloc動(dòng)態(tài)分配的變量保存在堆區(qū);第九十一頁(yè),共123頁(yè)。2.局部變量的存儲(chǔ)方式(1)auto類型又稱為自動(dòng)變量,分配在棧區(qū),缺省方式,關(guān)鍵字auto可以省略。(2)register寄存器變量用register將局部變量的值放在寄存器中,用來(lái)提高執(zhí)行效率,使用該類型時(shí)應(yīng)注意:僅局部變量和形參可作為寄存器變量;寄存器數(shù)目有限,如果定義了多個(gè)寄存器變量,多余的自動(dòng)作auto型處理;寄存器變量沒(méi)有地址,因此不能作地址運(yùn)算第九十二頁(yè),共123頁(yè)。(3)static靜態(tài)將局部變量分配到全局?jǐn)?shù)據(jù)區(qū)空間,這樣的變量稱為靜態(tài)局部變量,有以下特點(diǎn):初始值缺省為0;局部變量在函數(shù)調(diào)用結(jié)束后所占的內(nèi)存單元不釋放,其值可以保持到函數(shù)的下一次調(diào)用。第九十三頁(yè),共123頁(yè)。【例5-18】靜態(tài)局部變量的使用使用靜態(tài)局部變量統(tǒng)計(jì)某個(gè)函數(shù)被調(diào)用的次數(shù)。靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后所占的內(nèi)存單元不釋放,其值可以保持到函數(shù)的下一次調(diào)用,在每次調(diào)用該函數(shù)時(shí)使該變量的值加1,就可以統(tǒng)計(jì)被調(diào)用的次數(shù)。#include<iostream>usingnamespacestd;voidfun(){staticn=0;n++;cout<<"本函數(shù)被調(diào)用了"<<n<<"次"<<endl;}第九十四頁(yè),共123頁(yè)。voidfun1(){inti; for(i=1;i<=2;i++) fun();}intmain(){inti;for(i=1;i<=3;i++) fun(); fun1(); return1;}第九十五頁(yè),共123頁(yè)。5.9程序設(shè)計(jì)實(shí)例5.9.1使用遞歸求斐波那契序列的前30項(xiàng)【例5-19】使用遞歸調(diào)用的方法計(jì)算Fibonacci數(shù)列的前30項(xiàng),每行顯示7個(gè)。斐波那契數(shù)列的前幾項(xiàng)是:1、1、2、3、5、8、13、21,該數(shù)列的規(guī)律是前兩項(xiàng)為1,從第三項(xiàng)開(kāi)始,每一項(xiàng)是其前兩項(xiàng)之和,對(duì)于從第三項(xiàng)開(kāi)始的計(jì)算可以使用遞歸調(diào)用的方法。第九十六頁(yè),共123頁(yè)。【源程序】#include<iostream>usingnamespacestd;intfib(intn)//計(jì)算Fibonacci數(shù)列的函數(shù){if(n==0||n==1)//數(shù)列前2項(xiàng)直接賦值
return1;elsereturnfib(n-1)+fib(n-2); //從第3項(xiàng)起遞歸調(diào)用來(lái)計(jì)算}第九十七頁(yè),共123頁(yè)。voidmain(){inti;for(i=0;i<30;i++){if(i%7==0) cout<<endl; //每行顯示7項(xiàng) cout<<fib(i)<<"\t";}}第九十八頁(yè),共123頁(yè)。5.9.2求非線性方程的根【例5-20】用二分迭代法求方程2x3-4x2+3x-6=0在(-10,10)之間的根。【例5-21】用弦截法求方程x3-5x2+16x-80=0在(2,6)之間的根。第九十九頁(yè),共123頁(yè)。【例5-20】用二分迭代法求方程2x3-4x2+3x-6=0在(-10,10)之間的根。用二分法求方程根的前提是方程f(x)=0有兩個(gè)粗略的解x1和x0,這就是初值,對(duì)初值要求:(1)f(x1)和f(x0)符號(hào)相反;(2)f(x)在(x1,x0)內(nèi)單調(diào)升或單調(diào)降。【算法描述】(1)取兩點(diǎn)區(qū)間的中點(diǎn):x=(x1+x0)/2,這就是迭代公式。(2)測(cè)試中點(diǎn)的函數(shù)值f(x)是否滿足精度要求,這是迭代條件,若滿足則用x作為方程的近似根,迭代過(guò)程結(jié)束;(3)如果不滿足精度,則用x與x1和x0中的一個(gè)組成新的區(qū)間,重復(fù)過(guò)程(2)不斷地縮小區(qū)間。在組成新區(qū)間時(shí),如果中點(diǎn)的函數(shù)值與x1點(diǎn)的函數(shù)值同號(hào),則新區(qū)間為(x,x0),否則為(x1,x)。第一百頁(yè),共123頁(yè)?!驹闯绦颉?include<cmath>#include<iostream>usingnamespacestd;doublefun(doublex){ return((2*x-4)*x+3)*x-6;}第一百零一頁(yè),共123頁(yè)。intvoidmain(){ doubleeps=1e-5; doublex0=-10,x1=10,x,mid,mid0; x=(x0+x1)/2; mid=fun(x); while(fabs(mid)>eps)//循環(huán)執(zhí)行(即迭代)的條件
{ mid0=fun(x0);第一百零二頁(yè),共123頁(yè)。 if(mid0*mid<0)//判斷x0的函數(shù)值與中點(diǎn)的函數(shù)值是否同號(hào)
x1=x; else x0=x; x=(x0+x1)/2; mid=fun(x);} cout<<"root="<<x; return1;}第一百零三頁(yè),共123頁(yè)?!纠?-21】用弦截法求方程x3-5x2+16x-80=0在(2,6)之間的根。用弦截法求方程根的前提是方程f(x)=0有兩個(gè)粗略的解x1和x2,它們滿足以下條件:(1)f(x1)和f(x2)符號(hào)相反;(2)f(x)在(x1,x2)內(nèi)單調(diào)升或單調(diào)降。第一百零四頁(yè),共123頁(yè)。算法(1)求x1,x2兩點(diǎn)連線與x軸的交點(diǎn)x,計(jì)算方法是對(duì)兩點(diǎn)式直線方程令y=0,得:x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1))這就是計(jì)算近似根的迭代公式。(2)判斷新點(diǎn)x的函數(shù)值是否滿足精度要求(例如小于0.0001),如果是,則用x作為方程的近似根,迭代過(guò)程結(jié)束;(3)如果不滿足要求,則用x與x1和x2中的一個(gè)組成新的區(qū)間,重復(fù)過(guò)程(2)不斷地縮小區(qū)間。在組成新區(qū)間時(shí),如果x的函數(shù)值與x1點(diǎn)的函數(shù)值同號(hào),則新區(qū)間為(x,x2),否則為(x1,x)。第一百零五頁(yè),共123頁(yè)?!驹闯绦颉?include<cmath>#include<iostream>usingnamespacestd;doublefun(doublex)//計(jì)算方程f(x)的函數(shù){doubley; y=((x-5.0)*x+16.0)*x-80.0; returny;}第一百零六頁(yè),共123頁(yè)。intmain(){ doublex1=2,x2=6,x,y,y1;y1=fun(x1); do {x=(x1*fun(x2)-x2*fun(x1))/(fun(x2)-fun(x1));//迭代公式
y=fun(x);第一百零七頁(yè),共123頁(yè)。 if(y*y1>0)//判斷y與y1的值是否同號(hào) { y1=y;x1=x; } else x2=x; }while(fabs(y)>=0.0001);//迭代條件 cout<<"root="<<x;return1;}第一百零八頁(yè),共123頁(yè)。5.9.3有趣的數(shù)【例5-22】找出2~200之間的所有孿生素?cái)?shù)。【例5-23】使用200以內(nèi)的偶數(shù)驗(yàn)證哥德巴赫猜想。第一百零九頁(yè),共123頁(yè)?!纠?-22】找出2~200之間的所有孿生素?cái)?shù)。孿生素?cái)?shù)指間隔為2的相鄰素?cái)?shù),例如3和5,5和7,其中最小的孿生素?cái)?shù)是3和5。解決方法編寫一個(gè)函數(shù)用來(lái)判斷某個(gè)整數(shù)是否為素?cái)?shù),該函數(shù)的類型為bool型,如果判斷結(jié)果為素?cái)?shù)則返回true,否則返回false在主函數(shù)中調(diào)用該函數(shù),判斷某個(gè)整數(shù)i和i+2是否同時(shí)為素?cái)?shù)。第一百一十頁(yè),共123頁(yè)。【源程序】#include"iostream"usingnamespacestd;boolisprime(intn) //判斷某個(gè)整數(shù)是否為素?cái)?shù)的函數(shù){inti;for(i=2;i<n;i++)if(n%i==0)
returnfalse;//找到n的某個(gè)因子后返回false值returntrue;//沒(méi)有找到n的因子時(shí)返回true值}第一百一十一頁(yè),共123頁(yè)。intmain(){inti;cout<<"
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度倉(cāng)儲(chǔ)物流租賃管理協(xié)議范本2篇
- 個(gè)人場(chǎng)地租賃合同(2024版)6篇
- 專線接入服務(wù)個(gè)性化協(xié)議范例2024版A版
- 2024用戶服務(wù)合同模板
- 二零二五年度特色火鍋店租賃合同范本3篇
- 2025年度柴油產(chǎn)品質(zhì)量保證合同模板4篇
- 2024年規(guī)范珠寶玉石市場(chǎng)買賣協(xié)議樣本版B版
- 2025年度智能公寓租賃管理服務(wù)合同標(biāo)準(zhǔn)2篇
- 2025年度餐飲娛樂(lè)場(chǎng)地租賃合同范本12篇
- 2025年茶葉深加工項(xiàng)目合作協(xié)議4篇
- 三年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)附答案
- GB/T 12723-2024單位產(chǎn)品能源消耗限額編制通則
- 2024年廣東省深圳市中考英語(yǔ)試題含解析
- GB/T 16288-2024塑料制品的標(biāo)志
- 麻風(fēng)病防治知識(shí)課件
- 建筑工程施工圖設(shè)計(jì)文件審查辦法
- 干部職級(jí)晉升積分制管理辦法
- 培訓(xùn)機(jī)構(gòu)應(yīng)急預(yù)案6篇
- 北師大版數(shù)學(xué)五年級(jí)上冊(cè)口算專項(xiàng)練習(xí)
- 應(yīng)急物資智能調(diào)配系統(tǒng)解決方案
- 2025年公務(wù)員考試時(shí)政專項(xiàng)測(cè)驗(yàn)100題及答案
評(píng)論
0/150
提交評(píng)論