![《C++程序設(shè)計(jì)語(yǔ)言快速入門(mén)》校本課程_第1頁(yè)](http://file4.renrendoc.com/view/b3902883d9891f41c6ff6c306339508c/b3902883d9891f41c6ff6c306339508c1.gif)
![《C++程序設(shè)計(jì)語(yǔ)言快速入門(mén)》校本課程_第2頁(yè)](http://file4.renrendoc.com/view/b3902883d9891f41c6ff6c306339508c/b3902883d9891f41c6ff6c306339508c2.gif)
![《C++程序設(shè)計(jì)語(yǔ)言快速入門(mén)》校本課程_第3頁(yè)](http://file4.renrendoc.com/view/b3902883d9891f41c6ff6c306339508c/b3902883d9891f41c6ff6c306339508c3.gif)
![《C++程序設(shè)計(jì)語(yǔ)言快速入門(mén)》校本課程_第4頁(yè)](http://file4.renrendoc.com/view/b3902883d9891f41c6ff6c306339508c/b3902883d9891f41c6ff6c306339508c4.gif)
![《C++程序設(shè)計(jì)語(yǔ)言快速入門(mén)》校本課程_第5頁(yè)](http://file4.renrendoc.com/view/b3902883d9891f41c6ff6c306339508c/b3902883d9891f41c6ff6c306339508c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+快速入門(mén) 以下將引導(dǎo)你快速進(jìn)入編程的世界。前言:學(xué)習(xí)編程,選何種語(yǔ)言不是關(guān)鍵點(diǎn),能快速入門(mén)并使用它建立自己的工程并解決問(wèn)題是本課程考慮的重點(diǎn)。C+本身的代碼簡(jiǎn)潔性以及傳承于C的特性,便利的現(xiàn)成的代碼復(fù)用使得其有很多優(yōu)勢(shì),適合課堂教學(xué)的同時(shí),兼顧了工程開(kāi)發(fā)應(yīng)用,就選它吧。第一部分:1、學(xué)習(xí)環(huán)境的搭建:為了方便學(xué)習(xí),我們?cè)趙indows系統(tǒng)下寫(xiě)代碼,用在線評(píng)測(cè)系統(tǒng)OJ評(píng)測(cè)。本教程使用評(píng)測(cè)練習(xí)。十一中OJ的域名目前為。首先下載devc+安裝,裝完然后可以選擇Chinese simple語(yǔ)言,以及debug編譯模式,其他一切默認(rèn)。2、第一個(gè)程序:1.Hello World!noi題庫(kù)1.1.01C
2、trl N新建文檔。#include /包含庫(kù)文件#include /包含庫(kù)文件,一些基本輸入輸出的語(yǔ)句定義在此using namespace std; /聲明命名空間int main() /主函數(shù)printf(Hello, World!); /我們要編寫(xiě)的代碼區(qū)域return 0; /表示程序正常運(yùn)行結(jié)束并返回鍵入以下代碼: /為注釋語(yǔ)句,用于幫助閱讀代碼含義注意標(biāo)點(diǎn)符號(hào),c+每一個(gè)語(yǔ)句以分號(hào)結(jié)尾“;”是英文狀態(tài)下的標(biāo)點(diǎn)符號(hào),否則會(huì)編譯錯(cuò)誤。C+編譯生成二進(jìn)制的可執(zhí)行exe文件。編譯運(yùn)行(F11),將在屏幕上輸出Hello, World!。今后我們的主要工作就是編寫(xiě)紅色部分內(nèi)容的代碼。3、c
3、+是函數(shù)式語(yǔ)言,利用函數(shù)實(shí)現(xiàn)各種功能操作例子2.noi題庫(kù)1.3.01:A+B問(wèn)題總時(shí)間限制:1000ms內(nèi)存限制:65536kB描述在大部分的在線題庫(kù)中,都會(huì)將A+B問(wèn)題作為第一題,以幫助新手熟悉平臺(tái)的使用方法。A+B問(wèn)題的題目描述如下:給定兩個(gè)整數(shù)A和B,輸出A+B的值。保證A、B及結(jié)果均在整型范圍內(nèi)?,F(xiàn)在請(qǐng)你解決這一問(wèn)題。輸入一行,包含兩個(gè)整數(shù)A,B,中間用單個(gè)空格隔開(kāi)。A和B均在整型范圍內(nèi)。輸出一個(gè)整數(shù),即A+B的值。保證結(jié)果在整型范圍內(nèi)。樣例輸入1 2樣例輸出3#include /包含庫(kù)文件#include /包含庫(kù)文件,一些基本輸入輸出的語(yǔ)句定義在此using namespace
4、std; /聲明命名空間int main() /主函數(shù)int a,b;/定義兩個(gè)整數(shù)型變量scanf(%d%d,&a,&b); /&取變量的地址,從鍵盤(pán)讀入,以空格分隔,分別賦值給兩個(gè)變量a和b printf(%d,a+b); /輸出a+b的值return 0; /表示程序正常運(yùn)行返回4、變量:變量:可視為在計(jì)算機(jī)的內(nèi)存中開(kāi)辟的一段用于臨時(shí)存儲(chǔ)數(shù)據(jù)的容器。約定:變量使用前要事先聲明數(shù)據(jù)類型。標(biāo)識(shí)符就是程序員自己起的名字,除了變量名,后面還會(huì)講到函數(shù)名、標(biāo)號(hào)等。不過(guò),名字也不能隨便起,C語(yǔ)言規(guī)定,標(biāo)識(shí)符只能由字母(AZ, az)、數(shù)字(09)和下劃線(_)組成,并且第一個(gè)字符必須是字母或下劃線。
5、以下標(biāo)識(shí)符是合法的:a, x, x3, BOOK_1, sum5以下標(biāo)識(shí)符是非法的:3s 不能以數(shù)字開(kāi)頭s*T 出現(xiàn)非法字符*-3x 不能以減號(hào)(-)開(kāi)頭bowy-1 出現(xiàn)非法字符減號(hào)(-)另一份a加b的代碼:例2.1#include #include /包含庫(kù)文件,一些基本輸入輸出的語(yǔ)句定義在此using namespace std; /聲明命名空間int main() /主函數(shù)int a,b,sum;/定義兩個(gè)整數(shù)型變量cinab; /&取變量的地址,從鍵盤(pán)讀入以空格分隔的數(shù),分別賦值給變量a和b sum=a+b;/a+b的和復(fù)制給變量sum coutsum; /輸出sum的值return
6、 0; /表示程序正常運(yùn)行返回函數(shù)cin和cout功能類似于scanf和printf,為流式輸入輸出,函數(shù)scanf和printf是格式化輸入輸出,使用時(shí)格式更嚴(yán)格。注意這里的“=”是賦值語(yǔ)句操作符,不是數(shù)學(xué)上的等號(hào)。第二部分:順序,分支,循環(huán)語(yǔ)言結(jié)構(gòu)1、選擇結(jié)構(gòu):以上為順序執(zhí)行的一系列語(yǔ)句。程序設(shè)計(jì)一般分為順序,分支,循環(huán)。以下為分支語(yǔ)句代碼例子,以if語(yǔ)句為例基本語(yǔ)法為:if else 語(yǔ)句的結(jié)構(gòu)為:if(表達(dá)式)語(yǔ)句塊1else語(yǔ)句塊2意思是:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句塊1,否則執(zhí)行語(yǔ)句塊2 。其執(zhí)行過(guò)程可表示為下圖:可以只有if而沒(méi)有else,但要注意if和else的配對(duì)關(guān)系,最好
7、利用縮進(jìn)對(duì)齊,養(yǎng)成好的書(shū)寫(xiě)代碼習(xí)慣,提高代碼可讀性,便于以后自己閱讀調(diào)試,也利于在大型工程中便于協(xié)同合作??梢郧短祝赫Z(yǔ)句塊1和語(yǔ)句塊2中,可以包含if語(yǔ)句或者其他,稱為嵌套。例如:1.4.03 奇偶數(shù)判斷總時(shí)間限制:1000ms內(nèi)存限制:65536kB描述給定一個(gè)整數(shù),判斷該數(shù)是奇數(shù)還是偶數(shù)。輸入輸入僅一行,一個(gè)大于零的正整數(shù)n。輸出輸出僅一行,如果n是奇數(shù),輸出odd;如果n是偶數(shù),輸出even。樣例輸入5樣例輸出odd來(lái)源北京大學(xué) 計(jì)算概論 06參考源代碼#include #include using namespace std;int main()int n;cinn;if (n%2=1
8、) coutodd;else couteven;return 0;#includeusing namespace std;int main()int a;scanf(%d,&a);if (90=a&a=100)printf(Great);elseif (70=a&a=89)printf(Good);else if (60=a&a=69)printf(Average);else if (0=a&a b) mymax = a;else mymax = b;上面的 if else 語(yǔ)句等價(jià)于:mymax = (ab) ? a : b;該語(yǔ)句的語(yǔ)義是:如ab為真,則把a(bǔ)賦予mymax,否則把b 賦予m
9、ymax。你可以認(rèn)為條件運(yùn)算符是一種簡(jiǎn)寫(xiě)的 if else,你完全可以用 if else 代替條件運(yùn)算符。2、循環(huán)結(jié)構(gòu):例如,輸出1到100的所有整數(shù)之和。語(yǔ)法:while(邏輯表達(dá)式)循環(huán)體語(yǔ)句塊注意循環(huán)條件,要能夠正常結(jié)束循環(huán),一般在循環(huán)體中不斷更新循環(huán)條件,最終循環(huán)條件不滿足,跳出循環(huán),否則死循環(huán)將導(dǎo)致程序不能正常結(jié)束。同時(shí)循環(huán)體內(nèi)也可以有新的循環(huán)語(yǔ)句,構(gòu)成循環(huán)的嵌套。例3.1#include #include using namespace std;int main()int a=1,s=0;/變量要初始化,否則可能是個(gè)隨機(jī)的值while (a=100)/循環(huán)條件s=s+a;/每循環(huán)一
10、次,累加到變量s a+;/a=a+1的簡(jiǎn)寫(xiě)printf(%dn,s); /輸出s變量的值并換行return 0;延伸:偶數(shù)和?3、程序的調(diào)試,debug點(diǎn)擊行號(hào)可以為程序添加斷點(diǎn),使程序運(yùn)行到某一步停下來(lái),等待我們手動(dòng)執(zhí)行下一步,此時(shí)可以查看某些變量實(shí)時(shí)的值,或者在程序中添加中間變量輸出,以判斷程序執(zhí)行中是否按我們的意愿執(zhí)行。作業(yè):完成十一中OJ上的8號(hào)題目。參考代碼:#includeint main()int n,a,sum=0;scanf(%d,&n);int i=1; while(i=n)scanf(%d,&a);sum=sum+a;i+;printf(%d,sum);return 0;
11、十一中OJ上的13號(hào)題目例:假設(shè)一個(gè)三位數(shù)x的百位、十位、個(gè)位上的數(shù)字分別為a、b、c,如果a3+b3+c3恰好等于x,則稱x為水仙花數(shù),如:153就是一個(gè)水仙花數(shù),13+53+33 =1+125+27=153。請(qǐng)編寫(xiě)程序判斷一個(gè)三位正整數(shù)是否是水仙花數(shù)。用到取余運(yùn)算符%參考代碼:#include #include using namespace std;int main()int number,gewei,shiwei,baiwei;scanf(%d,&number);gewei=number%10;shiwei=number/10%10;baiwei=number/100;if (gewe
12、i*gewei*gewei+shiwei*shiwei*shiwei+baiwei*baiwei*baiwei=number)printf(TRUE);elseprintf(FALSE);return 0;我國(guó)古代算術(shù)問(wèn)題,百錢百雞問(wèn)題:#include #include using namespace std;int main()int a,b,c;a=1;while(a=100)b=1;while(b=100)c=3;while(c=99)if(5*a+3*b+c/3=100)&(a+b+c=100)printf(公雞=%d,母雞=%d,小雞=%dn,a,b,c);c=c+3;b+; a+
13、; return 0;綜合練習(xí):計(jì)算1到100能被3整除或者能被5整除的所有數(shù)之和。#include #include using namespace std;int main()int a=1,s=0;while (a=100)if(a%3=0|a%5=0)s+=a;a+;printf(%dn,s);return 0;邏輯運(yùn)算符| & !scanf()語(yǔ)句和printf()語(yǔ)句是標(biāo)準(zhǔn)格式化輸入輸出語(yǔ)句參考scanf和printf這兩個(gè)函數(shù)分別稱為格式輸入函數(shù)和格式輸出函數(shù)。其意義是按指定的格式輸入輸出值。因此,這兩個(gè)函數(shù)在括號(hào)中的參數(shù)都由以下兩部分組成:1) 格式控制串:格式控制串是一個(gè)字符
14、串,必須用雙引號(hào)括起來(lái),它表示了輸入輸出量的數(shù)據(jù)類型。在printf函數(shù)中可以在格式控制串內(nèi)出現(xiàn)非格式控制字符,這時(shí)在顯示屏幕上會(huì)顯示源字符串。各種類型的格式表示方式請(qǐng)參考:C語(yǔ)言格式輸出函數(shù)printf()詳解。 HYPERLINK /cpp/html/33.html t _blank C語(yǔ)言格式輸出函數(shù)printf()詳解在scanf函數(shù)中也可以在格式控制串內(nèi)出現(xiàn)非格式控制符,這時(shí)會(huì)將輸入的數(shù)據(jù)以該字符為分隔。各種類型的格式表示方式請(qǐng)參考:C語(yǔ)言scanf()函數(shù)。 HYPERLINK /cpp/html/2521.html t _blank C語(yǔ)言scanf()函數(shù)。2) 參數(shù)表:參數(shù)表
15、中給出了輸入或輸出的變量。當(dāng)有多個(gè)變量時(shí),用英文逗號(hào)(,)分開(kāi)。例如:printf(sine of %lf is %lfn,x,s);/ %lf為格式字符,表示按雙精度浮點(diǎn)數(shù)處理,它在格式串中兩次現(xiàn),對(duì)應(yīng)了x和s兩個(gè)變量/ 其余字符為非格式字符則照原樣輸出在屏幕上。scanf(%d %fa%c, &intNum, &floatNum, &c);/ %d, %f, %c為格式字符/ 表示將輸入的數(shù)據(jù)分別以整數(shù)、浮點(diǎn)數(shù)和字符形式賦值給變量intNum, floatNum,c/ 其中的空格和a為分隔符/ 變量intNum, floatNum,c都有一個(gè)&符號(hào),表示取地址例如計(jì)算兩個(gè)實(shí)數(shù)的和a+b,c
16、in和cout更簡(jiǎn)潔一些#include #include using namespace std; int main() float a,b;scanf(%f%f,&a,&b);printf(%fn,a+b); return 0; #include #include using namespace std; int main() float a,b;cinab;couta+bendl;return 0; 4、for循環(huán)結(jié)構(gòu)格式:for(語(yǔ)句1;邏輯表達(dá)式2;語(yǔ)句3) 語(yǔ)句塊:循環(huán)體 先執(zhí)行語(yǔ)句1,然后邏輯表達(dá)式2,分兩種情況:如為真(非0),則執(zhí)行循環(huán)體,然后執(zhí)行語(yǔ)句3;如為假,則不執(zhí)行循環(huán)
17、體,結(jié)束循環(huán)。注意:表達(dá)式1僅在第一次循環(huán)時(shí)求解,以后都不會(huì)再執(zhí)行,可以認(rèn)為這是一個(gè)初始化語(yǔ)句。1) for循環(huán)中的“表達(dá)式1(循環(huán)變量賦初值)”、“表達(dá)式2(循環(huán)條件)”和“表達(dá)式3(循環(huán)變量增量)”都是選擇項(xiàng),即可以缺省,但分號(hào)(;)不能缺省。2) 省略了“表達(dá)式1(循環(huán)變量賦初值)”,表示不對(duì)循環(huán)控制變量賦初值。3) 省略了“表達(dá)式2(循環(huán)條件)”,如果不做其它處理就會(huì)成為死循環(huán)。for循環(huán)的執(zhí)行過(guò)程可用下圖表示:高斯求和問(wèn)題循環(huán)代碼對(duì)比:#include #include using namespace std;int main()int i,s=0;for(i=1;i=100;i+)
18、s+=i;couts; return 0;#include #include using namespace std;int main()int a=1,s=0;while (a=100)s+=a;/s=s+aa+;printf(%dn,s);return 0;練習(xí)使用for語(yǔ)句改寫(xiě)百錢百雞問(wèn)題求解。樣例代碼:#include #include using namespace std;int main()for(int a=1;a=20;a+)for(int b=1;b=33;b+)for(int c=3;c=99;c=c+3)if(5*a+3*b+c/3=100)&(a+b+c=100)co
19、uta b cendl;return 0;請(qǐng)自行學(xué)習(xí)和驗(yàn)證break和continue語(yǔ)句。break語(yǔ)句break可以用來(lái)跳出switch語(yǔ)句。當(dāng)break語(yǔ)句用于 while、for 循環(huán)語(yǔ)句中時(shí),會(huì)終止循環(huán)而執(zhí)行循環(huán)語(yǔ)句后面的代碼。break語(yǔ)句通常和 if 語(yǔ)句一起使用,即滿足條件時(shí)便跳出循環(huán)。continue語(yǔ)句continue語(yǔ)句的作用是跳過(guò)循環(huán)體中剩余的語(yǔ)句而強(qiáng)行執(zhí)行下一次循環(huán)。continue語(yǔ)句只用在 while、for 循環(huán)中,常與 if 條件語(yǔ)句一起使用,判斷條件是否成立。第三部分 數(shù)組和指針數(shù)組問(wèn)題:觀察以下代碼:并運(yùn)行之。#include #include using
20、 namespace std;int a110 ;int main()int i,s=0;for(i=1;i=100;i+)ai=i;for(i=1;i=100;i+)s=s+ai;couts; return 0;該代碼表示開(kāi)一個(gè)大小為110的數(shù)組(相當(dāng)于110個(gè)變量),分別給a1=1;a2=2;a3=3;a100=100;然后將這100各變量的值累加。定義數(shù)組就是定義一批變量,然后通過(guò)下標(biāo)序號(hào)方便地引用變量。數(shù)組可以是多維的,如3維數(shù)組arr100010001000,其包含的變量數(shù)為1e9.注意定義數(shù)組要放在主函數(shù)之外,以免內(nèi)存不足,特別注意的是,數(shù)組內(nèi)第一個(gè)元素是arr0,而不是arr1。
21、同理也要注意最后一個(gè)元素的編號(hào)。完成十一中上的習(xí)題15,數(shù)組練習(xí)。有n個(gè)整數(shù),分別為a(1),a(2),a(3).a(n)?,F(xiàn)在詢問(wèn)你m次,第i次詢問(wèn)一個(gè)整數(shù)q(i),問(wèn)你a(q(i)是什么?參考代碼:#include #includeusing namespace std;const int kN = 1e5+10;int arrkN;int main ()int n, m;cinnm;for (int i = 1; i arri;for (int i = 1; i x;coutarrxendl;return 0;數(shù)組名為該數(shù)組的首地址。數(shù)組名字退化為指針,所以數(shù)組名arr實(shí)際指的是數(shù)組的第
22、一個(gè)元素的地址,初學(xué)者建議使用&arrnumber訪問(wèn)數(shù)組的地址。變量的內(nèi)存地址:系統(tǒng)分配內(nèi)的變量編號(hào)。類似于學(xué)籍號(hào)或者身份證號(hào),變量名是我們給變量起的昵稱,便于我們?nèi)四X的閱讀和識(shí)別。第四部分:文件輸入輸出重定向:以十一中第8題為例:freopen函數(shù),源程序*.cpp和讀入數(shù)據(jù)文件*.in放在同一層目錄下,否則需加路徑。將樣例數(shù)據(jù)寫(xiě)入data.in,運(yùn)行程序后,將會(huì)把結(jié)果輸出到文件result.out主要用于本地測(cè)試。在調(diào)試環(huán)境中運(yùn)行程序,輸入測(cè)試數(shù)據(jù),當(dāng)能得到正確運(yùn)行結(jié)果后,才將程序提交到oj中#includeint main()freopen(data.in,r,stdin);freop
23、en(result.out,w,stdout);int n,b,sum=0;scanf(%d,&b); int i=1; while(i 2交換(內(nèi)循環(huán))交換前狀態(tài)| 6 | 2 |4 | 1 | 5 | 9 |交換后狀態(tài)| 2 | 6 |4 | 1 | 5 | 9 |第二次兩兩比較,6 4交換交換前狀態(tài)| 2| 6 | 4 |1 | 5 | 9 |交換后狀態(tài)| 2| 4 | 6 |1 | 5 | 9 |第三次兩兩比較,6 1交換交換前狀態(tài)| 2 | 4| 6 | 1 |5 | 9 |交換后狀態(tài)| 2 | 4| 1 | 6 |5 | 9 |第四次兩兩比較,6 5交換交換前狀態(tài)| 2 | 4 |
24、 1| 6 | 5 |9 |交換后狀態(tài)| 2 | 4 | 1| 5 | 6 |9 |第五次兩兩比較,6 9不交換交換前狀態(tài)| 2 | 4 | 1 | 5| 6 | 9 |交換后狀態(tài)| 2 | 4 | 1 | 5| 6 | 9 |第二趟排序(外循環(huán))第一次兩兩比較2 1交換交換前狀態(tài)| 2| 4 | 1 |5 | 6 | 9 |交換后狀態(tài)| 2| 1 | 4 |5 | 6 | 9 |第三次兩兩比較,4 5不交換交換前狀態(tài)| 2 | 1| 4 | 5 |6 | 9 |交換后狀態(tài)| 2 | 1| 4 | 5 |6 | 9 |第四次兩兩比較,5 1交換交換后狀態(tài)| 2 | 1 |4 | 5 | 6 |
25、 9 |交換后狀態(tài)| 1 | 2 |4 | 5 | 6 | 9 |第二次兩兩比較,2 4不交換交換后狀態(tài)| 1| 2 | 4 |5 | 6 | 9 |交換后狀態(tài)| 1| 2 | 4 |5 | 6 | 9 |第三次兩兩比較,4 5不交換交換后狀態(tài)| 1 | 2| 4 | 5 |6 | 9 |交換后狀態(tài)| 1 | 2| 4 | 5 |6 | 9 |第四趟排序(外循環(huán))無(wú)交換第五趟排序(外循環(huán))無(wú)交換排序完畢,輸出最終結(jié)果1 2 4 5 6 9復(fù)雜度分析:#include #include using namespace std;int main() int array10 = 15, 225, 3
26、4, 42, 52, 6, 7856, 865, 954, 10; int i, j; for (i = 0; i 10; i+) /每一次由底至上地上升 for (j = 0; j 9-i;j+) if (arrayj+1arrayj) /大數(shù)往后移 int temp; temp = arrayj+1; arrayj+1 = arrayj; arrayj = temp; for (i = 0; i 10; i+) printf(%dn, arrayi); return 0; n+n2+n/ 解法一:冒泡排序/ 空間復(fù)雜度:O(n),時(shí)間復(fù)雜度:O(n2)/ 預(yù)計(jì)得分:70#include u
27、sing namespace std;const int kN = 1e5+10;int arrkN, N;int main ()scanf(%d, &N);for (int i = 1; i = N; i+)scanf(%d, &arri);for (int i = 1; i i; j-)if (arrj arrj-1) /小數(shù)往前移int t = arrj;arrj = arrj-1;arrj-1 = t;for (int i = 1; i = N; i+)printf(%d , arri);return 0;Debug兩份代碼,查看數(shù)組元素中的值是如何交換的。2、桶排序。/ 解法二:桶排
28、序/ 空間復(fù)雜度:O(m),時(shí)間復(fù)雜度:O(n+m) m為需要排序的數(shù)字的最大值/ 預(yù)計(jì)得分:100#include using namespace std;const int kM = 5e5+10; int cntkM, N;int main ()scanf(%d, &N);for (int i = 1; i = N; i+)int x;scanf(%d, &x);cntx += 1;for (int i = 0; i kM; i+)for (int j = 0; j cnti; j+)printf(%d , i); return 0;桶排序顧名思義是把數(shù)據(jù)按照大小分塊,每一塊的放到一個(gè)桶
29、里,第二個(gè)桶的所有數(shù)大于第一個(gè)桶的所有數(shù),第三個(gè)桶的所有數(shù)大于第二個(gè)桶所有的數(shù)這一步的實(shí)現(xiàn)有多種方法,如果要在O(n)內(nèi)一般要用類似于建立哈希表的方法(但并不完全相同,桶排序要求桶之間是有大小順序的)。然后每個(gè)桶里的數(shù)據(jù)然后再進(jìn)行排序,排序方法任選,當(dāng)然也可以再用桶排序(例如先以最高位為鍵值進(jìn)行桶排序,再以次高位為鍵值進(jìn)行桶排序,直到個(gè)位)。字符:char data字符數(shù)組:char arr110字符串:string s數(shù)據(jù)類型為字符型的變量,在內(nèi)存中和int型變量的存儲(chǔ)是一樣的。數(shù)組名是字符數(shù)組的首地址,和數(shù)組首元素的地址相等。例如char ascanf(%c,&a); /表示由控制臺(tái)讀入一
30、個(gè)字符字符在計(jì)算機(jī)中是以二進(jìn)制存儲(chǔ)的,ASCII碼規(guī)定了128個(gè)英文字符與二進(jìn)制的對(duì)應(yīng)關(guān)系,占用一個(gè)字節(jié)(實(shí)際上只占用了一個(gè)字節(jié)的后面7位,最前面1位統(tǒng)一規(guī)定為0)。例如,字母 a 的的ASCII碼為 01100001,那么你暫時(shí)可以理解為字母 a 存儲(chǔ)到內(nèi)存之前會(huì)被轉(zhuǎn)換為01100001,讀取時(shí)遇到01100001 也會(huì)轉(zhuǎn)換為 a。請(qǐng)嘗試編程輸出表中的字符。延伸知識(shí):ASCII碼和Unicode碼#include #include using namespace std;int main() for (int i = 0; i 128; i+) printf(%cn, char(i); re
31、turn 0; 第六部分:自定義函數(shù)函數(shù)#include #include using namespace std;int max(int m,int n) if(mn)return m;elsereturn n; int main() int a,b, ans; printf(Input two number: ); scanf(%d%d,&a,&b); ans = max(a,b); printf(The biger is %d n,ans); return 0;Max函數(shù)的實(shí)現(xiàn)也可用三元運(yùn)算符返回,比如max=(mn)?m:n;#include #include using namesp
32、ace std; char s100;int main()int len=0;while(cinslen)len+;for(int i=len-1;i=0;i-)coutsi;return 0;例:將組成單詞的字母反序輸出:示例:計(jì)算 1+2+3+.+(n-1)+n 的值。#include #include using namespace std;int sum(int n) int i;for(i=n-1; i=1; i-) n+=i; printf(The inner n = %dn,n); return n;int main() int n, total; scanf(%d,&n); t
33、otal = sum(n); printf(1+2+3+.+(n-1)+n = %dn, total); return 0;階乘函數(shù)一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用,這種函數(shù)稱為遞歸函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。 【示例】用遞歸計(jì)算 n!。階乘 n! 的計(jì)算公式如下:根據(jù)公式編程:#include #include using namespace std;long long fac(int n) long long f;if (n=1)f=1;elsef=n*fac(n-1);return f; int main() int a;long long
34、result; cina;for(int i=1;i=a;i+) result = fac(i); coutresultendl; return 0;第七部分:遞歸一般來(lái)說(shuō),遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回。 注意: 遞歸就是調(diào)用自身,在使用遞歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口。遞歸算法一般用于解決三類問(wèn)題:(1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci函數(shù))(2)問(wèn)題解法按遞歸算法實(shí)現(xiàn)。(回溯)(3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹(shù)的遍歷,圖的搜索)遞歸的缺點(diǎn):遞歸算法解題的運(yùn)行效率較低。在遞歸調(diào)用
35、的過(guò)程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)、局部量等開(kāi)辟了棧來(lái)存儲(chǔ)。遞歸次數(shù)過(guò)多容易造成棧溢出等。練習(xí):的第20題。階乘,一個(gè)正整數(shù)的階乘(英語(yǔ):factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且有0的階乘為1。自然數(shù)n的階乘寫(xiě)作n!。1808年,基斯頓卡曼引進(jìn)這個(gè)表示法。任何大于 1 的自然數(shù)n 階乘表示方法:#include #include using namespace std;long long fact(int n) long long f=1; for(int i=1;ia; coutfact(a)= 2)#include #include using namespace std;i
36、nt f(int i)if(i=0) return 0;if(i=1) return 1;else return f(i-1)+f(i-2); int main() inti=0,n,m,p=1,q=1,an=0;cinnm;for(i=0;i=40;i+)p=f(i);coutp=n&p=m) an=an+1;coutan; return 0;現(xiàn)在給你兩個(gè)整數(shù)a和b,問(wèn)你有多少個(gè)f(n),使得a = f(n) = b另外一份代碼,比較并體會(huì)代碼執(zhí)行效率。#include #include using namespace std;#define N 100int aN;int main() i
37、nti=0,n,m,p=1,q=1,an=0; cinnm; a0=0;a1=1;couta0endla1endl;for(i=2;i=40;i+)ai=ai-1+ai-2; p=ai;coutai=n&p=m) an=an+1;cout符號(hào)來(lái)訪問(wèn)成員例如:#include#includeusing namespace std;struct test/定義一個(gè)名為test的結(jié)構(gòu)體int a;/定義結(jié)構(gòu)體成員aint b;/定義結(jié)構(gòu)體成員bchar address100; /定義結(jié)構(gòu)體成員adress;int main()test data1;/定義結(jié)構(gòu)體變量data1test data2;/定
38、義結(jié)構(gòu)體變量data2data2.a=10;/通過(guò)成員操作符.給結(jié)構(gòu)體變量data2中的成員a賦值data2.b=3;/通過(guò)成員操作符.給結(jié)構(gòu)體變量data2中的成員b賦值data1=data2;/把data2中所有的成員值復(fù)制給具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量data1coutdata1.a|data1.bendl;coutdata2.a|data2.bendl;test *point;/定義結(jié)構(gòu)指針point=&data2;/ 指針指向結(jié)構(gòu)體變量data2的內(nèi)存地址 coutdata2.a|data2.ba=99;/通過(guò)結(jié)構(gòu)指針修改結(jié)構(gòu)體變量data2成員a的值coutdata2.a|data2.
39、bendl;couta|bendl; 第九部分:字符串選用C+標(biāo)準(zhǔn)程序庫(kù)中的string類,是因?yàn)樗蚦-string比較起來(lái),不必?fù)?dān)心內(nèi)存是否足夠、字符串長(zhǎng)度等等,而且作為一個(gè)類出現(xiàn),他集成的操作函數(shù)足以完成我們大多數(shù)情況下(甚至是100%)的需要。我們可以用 = 進(jìn)行賦值操作,= 進(jìn)行比較,+ 做串聯(lián)(是不是很簡(jiǎn)單?)。首先,為了在我們的程序中使用string類型,我們必須包含頭文件 。如下: #include /注意這里不是string.h string.h是C字符串頭文件 1.定義和構(gòu)造初始化(參考百科,自己動(dòng)手體會(huì)用法) 聲明一個(gè)字符串變量很簡(jiǎn)單: string Str; 這樣我們就
40、聲明了一個(gè)字符串變量,但既然是一個(gè)類,就有構(gòu)造函數(shù)和析構(gòu)函數(shù)。上面的聲明沒(méi)有傳入?yún)?shù),所以就直接使用了string的默認(rèn)的構(gòu)造函數(shù),這個(gè)函數(shù)所作的就是把Str初始化為一個(gè)空字符串。String類的構(gòu)造函數(shù)和析構(gòu)函數(shù)如下: a) string s; /生成一個(gè)空字符串s b) string s(str) /拷貝構(gòu)造函數(shù) 生成str的復(fù)制品 c) string s(str,stridx) /將字符串str內(nèi)“始于位置stridx”的部分當(dāng)作字符串的初值 d) string s(str,stridx,strlen) /將字符串str內(nèi)“始于stridx且長(zhǎng)度頂多strlen”的部分作為字符串的初值
41、e) string s(cstr) /將C字符串作為s的初值 f) string s(chars,chars_len) /將C字符串前chars_len個(gè)字符作為字符串s的初值。 g) string s(num,c) /生成一個(gè)字符串,包含num個(gè)c字符 h) string s(beg,end) /以區(qū)間beg;end(不包含end)內(nèi)的字符作為字符串s的初值 i) s.string() /銷毀所有字符,釋放內(nèi)存 測(cè)試如下:# include # include using namespace std;int main() string str1 = yesterday once more;
42、string str2 (my heart go on); string str3 (str1,6); / = day once more string str4 (str1,6,3); / = day char ch_music = Roly-Poly; string str5 = ch_music; / = Roly-Poly string str6 (ch_music); / = Roly-Poly string str7 (ch_music,4); / = Roly string str8 (10,i); / = iiiiiiii string str9 (ch_music+5, ch
43、_music+9); / = Poly str9.string(); /coutstr9endl; / 測(cè)試輸出 getchar(); return 0;2.字符串操作函數(shù) 這里是C+字符串的重點(diǎn) 1) =,assign() /賦以新值 “=”的用法不作詳細(xì)說(shuō)明,assign用法如下:# include # include using namespace std;int main() string str1 = yesterday once more; string str2 (my heart go on); string str3,str4; str3.assign(str2,3,6);
44、/ = heart str4.assign(str2,3,string:npos); / = heart go on (從2開(kāi)始到結(jié)尾賦給str4) str4.assign(gaint); / =gaint str4.assign(nico,5); / = nico,超出長(zhǎng)度會(huì)發(fā)生什么。 str4.assign(5,x); / = xxxxx coutstr4endl; getchar(); return 0;2) swap() /交換兩個(gè)字符串的內(nèi)容 # include # include using namespace std;int main() string str1 = yester
45、day once more; string str2 (my heart go on); str2.swap(str1); coutstr1endl; / = my heart go on coutstr2endl; / = yesterday once more getchar(); return 0;用法如下:3) +=,append(),push_back() */在尾部添加字符* 增加字符(這里說(shuō)的增加是在尾巴上),函數(shù)有 +=、append()、push_back()。舉例如下: s+=str;/加個(gè)字符串 s+=”my name is jiayp”;/加個(gè)C字符串 s+=a;/加個(gè)
46、字符 s.append(str); s.append(str,1,3);/不解釋了同前面的函數(shù)參數(shù)assign的解釋 s.append(str,2,string:npos)/不解釋了 s.append(“my name is jiayp”); s.append(“nico”,5); s.append(5,x); s.push_back(a);/這個(gè)函數(shù)只能增加單個(gè)字符4) insert() /插入字符* 在string中間的某個(gè)位置插入字符串,可以用insert()函數(shù),這個(gè)函數(shù)需要指定一個(gè)安插位置的索引,被插入的字符串將放在這個(gè)索引的后面。 s.insert(0,”my name”); s.
47、insert(1,str); 這種形式的insert()函數(shù)不支持傳入單個(gè)字符,這時(shí)的單個(gè)字符必須寫(xiě)成字符串形式。注意:為了插入單個(gè)字符,insert()函數(shù)提供了兩個(gè)對(duì)插入單個(gè)字符操作的重載函數(shù):insert(size_type index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是無(wú)符號(hào)整數(shù),iterator是char*,所以,這么調(diào)用insert函數(shù)是不行的:insert(0,1, j);這時(shí)候第一個(gè)參數(shù)將轉(zhuǎn)換成哪一個(gè)呢?所以必須這么寫(xiě):insert(string:size_
48、type)0,1,j)!第二種形式指出了使用迭代器安插字符的形式,在后面會(huì)提及。順便提一下,string有很多操作是使用STL的迭代器的,他也盡量做得和STL靠近。 5) erase() /刪除字符*s.erase(13);/從索引13開(kāi)始往后全刪除 s.erase(7,5);/從索引7開(kāi)始往后刪5個(gè) 6) clear() /刪除全部字符* 用法不作說(shuō)明; 7) replace() /替換字符* string s=”il8n”; s.replace(1,2,”nternationalizatio”);/從索引1開(kāi)始的2個(gè)替換成后面的 C_string s = internationalizat
49、ion 8) + /串聯(lián)字符串* 9) =,!=,=,compare() /比較字符串 C +字符串支持常見(jiàn)的比較操作符(,=,=,=,!=),甚至支持string與C-string的比較(如 str,=,0-大于 0-小于。舉例如下: string s(“abcd”); pare(“abcd”); /返回0 pare(“dcba”); /返回一個(gè)小于0的值 pare(“ab”); /返回大于0的值 pare(s); /相等 pare(0,2,s,2,2); /用”ab”和”cd”進(jìn)行比較小于零 pare(1,2,”bcx”,2); /用”bc”和”bc”比較。 10) size(),leng
50、th() /返回字符數(shù)量 現(xiàn)有的字符數(shù),函數(shù)是size()和length(),他們等效。 11) max_size() /返回字符的可能最大個(gè)數(shù)? max_size() 這個(gè)大小是指當(dāng)前C+字符串最多能包含的字符數(shù),很可能和機(jī)器本身的限制或者字符串所在位置連續(xù)內(nèi)存的大小有關(guān)系。我們一般情況下不用關(guān)心他,應(yīng)該大小足夠我們用的。但是不夠用的話,會(huì)拋出length_error異常 12) empty() /判斷字符串是否為空 Empty()用來(lái)檢查字符串是否為空。 13) capacity() /返回重新分配之前的字符容量 capacity()重新分配內(nèi)存之前 string所能包含的最大字符數(shù)。 1
51、4) reserve() /保留一定量?jī)?nèi)存以容納一定數(shù)量的字符 這個(gè)函數(shù)為string重新分配內(nèi)存。重新分配的大小由其參數(shù)決定,默認(rèn)參數(shù)為0,這時(shí)候會(huì)對(duì)string進(jìn)行非強(qiáng)制性縮減。 15) , at() /存取單一字符 可以使用下標(biāo)操作符和函數(shù)at()對(duì)元素包含的字符進(jìn)行訪問(wèn)。但是應(yīng)該注意的是操作符并不檢查索引是否有效(有效索引0str.length()),如果索引失效,會(huì)引起未定義的行為。而at()會(huì)檢查,如果使用 at()的時(shí)候索引無(wú)效,會(huì)拋出out_of_range異常。 string str1 = Iphone 5; coutstr12endl; / = h coutstr1.at(
52、4)endl; / = n string stuff; getline(cin,stuff); / 輸入一行字符賦值給stuff getline(cin,stuff,!); / 輸入一行字符以“!”結(jié)束 coutstuff,getline() /從stream讀取某值 17) /將謀值寫(xiě)入stream 18) copy() /將某值賦值為一個(gè)C_string c_str() /將內(nèi)容以C_string返回 data() /將內(nèi)容以字符數(shù)組形式返回 C +提供的由C+字符串得到對(duì)應(yīng)的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符數(shù)組的形式返回字符
53、串內(nèi)容,但并不添加0。c_str()返回一個(gè)以0結(jié)尾的字符數(shù)組,而copy()則把字符串的內(nèi)容復(fù)制或?qū)懭爰扔械腸_string或字符數(shù)組內(nèi)。C+字符串并不以0結(jié)尾。我的建議是在程序中能使用C+字符串就使用,除非萬(wàn)不得已不選用c_string。 19) substr() /返回某個(gè)子字符串 substr(),形式如下: s.substr();/返回s的全部?jī)?nèi)容 s.substr(11);/從索引11往后的子串 s.substr(5,6);/從索引5開(kāi)始6個(gè)字符 20)查找函數(shù) 查找函數(shù)很多,功能也很強(qiáng)大,包括了: find() rfind() find_first_of() find_last_
54、of() find_first_not_of() find_last_not_of() 這些函數(shù)返回符合搜索條件的字符區(qū)間內(nèi)的第一個(gè)字符的索引,沒(méi)找到目標(biāo)就返回npos。所有的函數(shù)的參數(shù)說(shuō)明如下: 第一個(gè)參數(shù)是被搜尋的對(duì)象。第二個(gè)參數(shù)(可有可無(wú))指出string內(nèi)的搜尋起點(diǎn)索引,第三個(gè)參數(shù)(可有可無(wú))指出搜尋的字符個(gè)數(shù)。比較簡(jiǎn)單,不多說(shuō)不理解的可以向我提出,我再仔細(xì)的解答。當(dāng)然,更加強(qiáng)大的STL搜尋在后面會(huì)有提及。 最后再說(shuō)說(shuō)npos的含義,string:npos的類型是string:size_type,所以,一旦需要把一個(gè)索引與npos相比,這個(gè)索引值必須是string:size)type類
55、型的,更多的情況下,我們可以直接把函數(shù)和npos進(jìn)行比較(如:if(s.find(“jia”)= string:npos))。# include # include using namespace std;int main() string str = when i was young, i listen to radio.; string:size_type position; position = str.find(listen); if (position != str.npos) /npos是個(gè)很大的數(shù),如果沒(méi)找到就會(huì)返回npos的值給position cout第一次出現(xiàn)的下標(biāo)是:po
56、sitionendl; /從字符串下標(biāo)9開(kāi)始,查找字符串you,返回you 在str中的下標(biāo) position = str.find(you,9); coutstr.find(you,9)is:positionendl; /查找子串出現(xiàn)的所有位置 string substr = i; position = 0; int i = 1; while(position = str.find_first_of(substr,position) != string:npos) coutposition i+positionendl; position+; /反向查找子串在str中最后出現(xiàn)的位置 stri
57、ng flag = to; position = str.rfind(flag); coutstr.rfind(flag):positionendl; getchar();return 0;21)begin() end() /提供類似STL的迭代器支持# include # include # include using namespace std;int main() string str; str.push_back(Q); str.push_back(A); sort(str.begin(),str.end(); string:iterator itstr = str.begin();
58、for ( ; itstr != str.end(); itstr+) cout*itstr; /str.pop_back(); getchar(); return 0; /輸出AQ第十部分:隊(duì)列隊(duì)列是一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。隊(duì)列中沒(méi)有元素時(shí),稱為空隊(duì)列。成員函數(shù)q.empty()判斷隊(duì)列q是否為空,當(dāng)隊(duì)列q空時(shí),返回true;否則為false(值為0(false)/1(true))。q.size()訪問(wèn)隊(duì)列q中的元素個(gè)數(shù)。(不可寫(xiě)成sizeof(q)或size(q
59、))q.push(a)會(huì)將一個(gè)元素a置入隊(duì)列q中。q.front()會(huì)返回隊(duì)列q內(nèi)的第一個(gè)元素(也就是第一個(gè)被置入的元素)。(不可寫(xiě)成front(q)q.back()會(huì)返回隊(duì)列q中最后一個(gè)元素(也就是最后被插入的元素)。(不可寫(xiě)成back(q)q.pop()會(huì)從隊(duì)列q中移除第一個(gè)元素。(不可寫(xiě)成pop(q)注意:pop()雖然會(huì)移除下一個(gè)元素,但是并不返回它。front()和back()返回下一個(gè)元素但并不移除該元素。在stack庫(kù)中的函數(shù)與queue很類似,但是stack中要返回元素時(shí),只能返回最后一個(gè)元素,且函數(shù)名不一樣(stack中為s.top()),需要區(qū)分。Queue用法 #incl
60、ude #include #include /*調(diào)用的時(shí)候要有頭文件: #include 或 #include +#include #include詳細(xì)用法:定義一個(gè)queue的變量 queue M查看是否為空范例 M.empty() 是的話返回1,不是返回0;從已有元素后面增加元素 M.push()輸出現(xiàn)有元素的個(gè)數(shù) M.size()顯示第一個(gè)元素 M.front()顯示最后一個(gè)元素 M.back()清除第一個(gè)元素 M.pop() */using namespace std;int _tmain(int argc, _TCHAR* argv)queue myQ;cout 現(xiàn)在 queue 是
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- TAS2940-生命科學(xué)試劑-MCE-8412
- Ocifisertib-hydrochloride-CFI-400945-hydrochloride-生命科學(xué)試劑-MCE-6463
- Dehydrocannabifuran-6-Methyl-9-isopropenyl-3-pentyldibenzofuran-1-ol-生命科學(xué)試劑-MCE-8289
- 7-Methoxy-9-methylfuro-2-3-b-quinoline-4-5-8-9H-trione-生命科學(xué)試劑-MCE-1580
- 3-Methyl-L-tyrosine-生命科學(xué)試劑-MCE-8000
- 二零二五年度虛擬股員工持股計(jì)劃協(xié)議
- 二零二五年度煤礦開(kāi)采權(quán)轉(zhuǎn)讓合同
- 2025年度順豐速運(yùn)高端物流服務(wù)合同模板
- 施工單位施工合同管理要點(diǎn)
- 疫情下教育變革的啟示-學(xué)校與醫(yī)院合作的必要性與優(yōu)勢(shì)分析
- 產(chǎn)品報(bào)價(jià)單(5篇)
- 康復(fù)護(hù)理練習(xí)題庫(kù)(附答案)
- 不銹鋼欄桿施工工藝
- 陜西演藝集團(tuán)有限公司招聘筆試題庫(kù)2023
- 小型餐飲店退股協(xié)議書(shū)
- 第九講 全面依法治國(guó)PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 兩淮礦區(qū)地面定向多分支水平井鉆進(jìn)作業(yè)技術(shù)規(guī)程
- vc約起來(lái)史上最全180個(gè)知名投資人聯(lián)系方式
- 社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告風(fēng)險(xiǎn)評(píng)估參考
- GB/T 14343-2008化學(xué)纖維長(zhǎng)絲線密度試驗(yàn)方法
- 制冷操作證培訓(xùn)教材-制冷與空調(diào)設(shè)備運(yùn)行操作作業(yè)培課件
評(píng)論
0/150
提交評(píng)論