版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1第1章C++的初步知識第2類型與表達第2過程的程序設(shè)第3第4數(shù)與預(yù)處理第5章數(shù)組第6章指針第7章自定義數(shù)據(jù)類第3對象的程序設(shè)計第8章類和對象第9類和對象的進一步討論第10章運算符重載第4第11章繼承與派生第12第13第14章C++工具第1章C++的初步知識第2章數(shù)據(jù)類型與表達第第1章C++*1.1從C到*1.2最簡單的C++ *1.1從C到化而成的,它是為初學(xué)者設(shè)計的小型高級語言。 C++是由AT&TBell(貝爾) *1.2最簡單的C++例1.1“ThisisaCprogram.”。#include<iostream>intmain(){
//包含頭文件//使用命名空間cout<<″ThisisaC++return}ThisisaC++program.須有一個main函數(shù)。main前面的int的作用是函數(shù)體是由大括號{}括起來的。本例中主函數(shù)內(nèi)再看程序的第1行“#include<iostream>”,這不是#include<iostream>是一個“包含命令”,它的作用iostream是i-o-stream3個詞的組合,從它的形式就程序的第2行“usingnamespacestd;”的意思是“使 “usingnamespacestd;”作 使用“#include<iostream>”命令以提供必要的信息,同時要用“usingnamespacestd;,使程序能例1.2求a和b兩個數(shù)之和。//求兩數(shù)之#include<iostream>intmain()
(本行是注釋行//預(yù)處理//使用命名空間//主函數(shù)首{inta,b,sum;
//函數(shù)體開//定義//輸入語//賦值 //輸出return}
//如程序正常結(jié)束,向123例1.3給兩個數(shù)x和y,求兩數(shù)中的大者。#includeintmax(intx,inty){intif(x>y)else}
//預(yù)處理命//定義max函數(shù),函數(shù)值為整型,形式參數(shù) ,定義本函數(shù)中用到的變量z為整//if語句,如果x>y,則將x的值賦給//否則,將y的值賦給//將z的值返回,通過maxintmain( inta,b,m;
//輸入變量a和b//調(diào)用max函數(shù),將得到的值賦給 //輸出大數(shù)mreturn}
//如程序正常結(jié)束,向max程序運行情況如下1825
#include<iostream>intmain(){intmax(intx,intint
//對max函數(shù) //調(diào)用maxreturn}intmax(intx,int{intz;elsez=y;
//定義max}為對該函數(shù)的函數(shù)。函數(shù)的位置應(yīng)當(dāng)在函例1.4包含類的C++#include<iostream>classStudentintnum;intscore;voidsetdata(}
//預(yù)處理命 一個類,類名為//以下為類中的私有//私有變量//私有變量//以下為類中的公用//定義公用函數(shù)//輸入num//輸入scorevoid y( //定義公用函數(shù) //輸出num //輸出score 結(jié)Student對intmain({stud1.setdata(); y( y(return}
//定義stud1和stud2為Student類的變//主函數(shù)//調(diào)用對象stud1的setdata//調(diào)用對象stud2的setdata//調(diào)用對象stud1的 y函//調(diào)用對象stud2的 y函 分為兩大類:private(私有的)和public(公用的)。 100198.5100276.5
(1)一個C++程序可以由一個程序單位或多個程4個程序中都包括#include命②全局部分(在函數(shù)外的部分)。在這部分中包括對用戶自己定義的數(shù)據(jù)類型的和程序中缺省,如intmain()。②函數(shù)體,即函數(shù)首部下面的大括號內(nèi)的部分。如果在一個函數(shù)中有多個大括號,則最外層的一對{} 部分(在函數(shù)內(nèi)的 (4)語句包括兩類。一類是 執(zhí)行語句。C++對每一種語句賦予一種特定的功能。C++程序書寫格式自由,一行內(nèi)可以寫幾個語句C++程序沒有行號束處有一個“*/”C++用C++(cpp是cplusplus的縮寫)。序(objectprogram)”。一般以.obj或.o作為后綴(object的縮寫)。編譯的作(warning)。圖關(guān)于C++一書中簡單介紹了在VisualC++6.0和GCC兩種典請讀者選擇一種(如能做到兩種更好)C++編譯系第第2C++數(shù)據(jù)
基本類 整 短整型(short整型長整型(long字符型浮點精度型雙精度型長雙精度型(long布爾型構(gòu)造指針類空類型
枚舉類型數(shù)組的情況作出安排。書中表2.1列出了VisualC++數(shù)值整型數(shù)據(jù)分為長整型(longint)、一般整型整型數(shù)據(jù)的方式為按二進制數(shù)形式,例如十進制整數(shù)的二進制形式為,則在內(nèi)存中的形式如圖2.1所示。圖 字節(jié),見圖2.2。圖有符號時,能的最大值為215-1,即32767,最小值為-32768。無符號時,能的最大值為216-1,即65535,最小值為0,可以使用unsigned,它signed精度(double)和長雙精度(longdouble)3VisualC++6.0中,對float提供6位有效數(shù)字,對longdouble分配8個字節(jié)。表中類型標識符一欄中,方括號[]包含的部分可以省寫,如short和shortint等效,unsignedint和即常數(shù)1,,4.6,1.2′′′′“。在上一節(jié)中已知道:整型數(shù)據(jù)可分為int,shortint,longint以及unsignedint,unsignedshort,unsignedlong等類別。整型常量也分為以上一個整數(shù),如果其值在-32768~范圍內(nèi),認為它是shortint型,它可以賦值給shortint型、int型和longint型變量。 7范圍內(nèi),則認為它是int型,可以將它賦值給一個int或longint型變C++)確定int與longint此,一個int型的常量也同時是一個longint型常量,可以賦給int型或longint型變量。。如果函數(shù)的形參為longint,則要求實參也為八進制整數(shù)。在常數(shù)的開頭加一個數(shù)字0表示這是以八進制數(shù)形式表示的常數(shù)。如020這是八進制數(shù)20,即(20)8,它相當(dāng)于十進制數(shù)。十進制小數(shù)形式。如21.4567.98等。它一般由整數(shù)部分和小數(shù)部分組成,可以省略其中之一如78.或.06,.0),但不能二者皆省略。C++編譯系統(tǒng)把用這種形式表示的浮點數(shù)一律按雙精度常量處理,在內(nèi)存中占8個字節(jié)。如果在實數(shù)的數(shù)字之后加字母F或,表示此數(shù)為單精度浮點數(shù),如134F43f,占4個字節(jié)。如果加字母或l,表示此數(shù)為長雙精度數(shù)(longdouble,在GCC中占12個字節(jié),在isualC++6.0中占8個字節(jié)。314.159×10-2等形式。在程序0.314159e1,3.14159e0,31.4159e-1,314.159e-2,數(shù)符數(shù)字部分指數(shù)部分上面各數(shù)據(jù)中的0.314159,3.14159,314.159 31.4159e1,3.14159e2,0.314159e3圖 0.3149e在存表示.3151。 單元分為兩部分,一部分用來存放數(shù)字部分,一部用來存放指數(shù)部分。為便于理解,在圖.3中是用十進制表示的,實際上在 單元中是用二進制數(shù)來表示小數(shù)部分,用2的冪次來表示指數(shù)部分的。個字節(jié)。注意:①字符常量只能包括一個字符,如′AB是不合法的。②字符常量區(qū)分大小寫字母,出的是一個字母“a”,而不是3個字符“′a′”?!埃堋遍_頭的字符序列。例如,′\n′代表一個“換行”符?!癱out<<′\n′;”將輸出一個換行,其作用與“cout<<endl;”相同。這字符數(shù)據(jù)在內(nèi)存中 ASCII碼97,′b′的ASCII碼98,如圖2.4(a)所示,圖既然字符數(shù)據(jù)是以ASCII碼的,它的形式就與整數(shù)的形式類似。這樣,在C++中字符型例2.1#include<iostream>intmain(){inti,j;
//i和j是整型//將一個字符常量賦給整型變量//將一個字符常量賦給整型變量cout<<i<<′return}
//輸出整型變量i和j的值,′\n′是換65,它只能存放0~255例2.2字符數(shù)據(jù)與整數(shù)進行算術(shù)運算。下面程序的#include<iostream>intmain(){charc1,c2;return}A字母比它相應(yīng)的大寫字母的ASCII代碼大32。C++,′b′-中,由于c1,c2是字符變量,因此用cou輸出c1,c2時,得到字符A和B(A的ASCII碼為6,B的ASCII碼66。 圖注意:″a″和′a′代表不同的含義,″a″是字符串常量,′a是字符常量。前者占兩個字節(jié),后者占1個charc;
請思考:字符串常量″ \″包含幾個字符?不是5在內(nèi)存中占5個字節(jié)(包括一個“\0”字符)。編譯系寫為″\\″,此時字符包括5個字符,即a,b,c, \\\abc\,然后換行。同理執(zhí)行cout<<″Isay\″Thankyou?。堋澹躰″;Isay″Thankyou!″cout<<″WemuststudyC\ ++
WemuststudyC++例2.3#definePRICEintmain({inttotal=num*
//注意這不是語句,末尾不return}PRICE賦值是錯誤的。使用符號常量的好處是: #definePRICE其實面的例子中已經(jīng)多次用到了變量。在程序該有一個名字,并在內(nèi)存中占據(jù)一定的單元,在該單元中存放變量的值。請注意區(qū)分變量名圖種,變量的名字必須遵循標識符名規(guī)則。sum,average,total,day,month,Student_name,BASIC,M.D.John,$123,#33,3G64,Lingli,C++,Zhang-ling,U.S.A. 變量類型變量名表列;floatfloata=83.5,b,c=64.5,d=81.2,e; intfloatchar
//執(zhí)行語句,對a//執(zhí)行語句,對b凡未被事先定義的,變量名,這就能保證程序中變量名使用得正確。例如,如果在部分寫int在編譯時檢查出statent定義,作為錯誤處理。 單元。如指定a和b為int 指定每一變量屬于一個特定的類型,這就便于在編%是“求余”(見2.4節(jié)),得到a/b的余數(shù)。如果float為5.78*3,對c初始化為2*sin(2.0),在編譯連接后, cout<<a<<<<b<<<<c<<endl;1.48544e-3815 intinta;
//指定a//賦值語句,將3賦給floatfloat或floata,b,c=4.5;(constantvariable)。例如,constint constint constint 指定為#include<cmath>或#include<特征是存在一個以變量名命名的單元,在一般情況下,單元中的內(nèi)容是可以變化的。對常變請區(qū)別用#deine命令定義的符號常量用cost定義的常變量。符號常量只是用一個符號代替一個字符串,在預(yù)編譯時把所符號量換為指定字符串,它沒有類型,在內(nèi)存中并不存在以符號常量命名的 單元。而常變量具有變量的特征,有類型,在內(nèi)存中存在著以它命名的 單元,可以用sieo運算符測出其長。與一般變量惟一的不同是指定變量的值能改變。用#deine命令定義符號常量是C語言所采用的方法,C++把它保留下來是為了和C兼容。C++的程序員一般喜歡用const定義常變量。雖然二者實現(xiàn)的方法不同,但從使用的角度看,都可以認為用了一個標識符代表了一個常量。有些書上把用const定義的常變量也稱為定義常量,但讀者應(yīng)該了解它和符號常量的區(qū)別。C+++(加)-(減)*(乘)/(除)%(整除求余)++(自加自>(大于)<(小于)==(等于)>=(大于或等于(3)&&(邏輯與)||(邏輯或(4)(5)(=及其擴展賦值運算符)(6)(?:)(7)(8)強制類型轉(zhuǎn)換運算符((類型)或類型([*(乘法運算符。如需要說明,兩個整數(shù)相除的結(jié)果為整數(shù),如5/的結(jié)果值為1,舍去小數(shù)部分。但是,如果除數(shù)或被除如,-5/3在有的C++系統(tǒng)上得到結(jié)果1,有的C++系統(tǒng)則給出結(jié)果2。多數(shù)編譯系統(tǒng)采取“向零取整”的方法,即5/3的值等于1,-/3的值等于1,取整后向零靠攏。如果參加+,-,*,/運算的兩個數(shù)中有一個數(shù)為float接起來的、符合C++語則的式子,稱C++算術(shù)表達式。運算對象包括常量、變量、函數(shù)等。例,下面是一個合法的C++a*b/c- 圖運算次序為:①進行10+′a′的運算,先將′a′轉(zhuǎn)換--i在使用i之前,先使i的值減1,如果i的原值為i在使用i之后,使i的值加1,如果i的原值為3,(2)++和--的結(jié)合方向是“自右至左”,見附錄B
(將a轉(zhuǎn)換成double類型(將x+y的值轉(zhuǎn)換成整型(將5%3的值轉(zhuǎn)換成float型如int(x)int(x+y)例2.4#include<iostream>intmain(){floatx;inti;return0;} (發(fā)生截斷)shortintchar 圖 例2.5#include<iostream>usingnamespacestd;intmain(){unsignedshorta;shortintb=-1;return0;}圖個位全是十進制的
等價于等價于等價于 ①a+=②a+=
③aa+ ①x%=②x%=x=x%(y+3)(不要錯認為<變量><賦值運算符><表達式值”(leftvalue,簡寫為lvalue)int
//b//b
(賦值表達式值為5,a,b,c值均為(表達式值為11,a值為11,c值為(表達式值為10,a值為10,b等于4,c等于(表達式值為5,a等于5,b等于10,c等于a+=a-“a-=a*a”的運算,它相當(dāng)于a=a-a*a=12-a=3*5(也就是把“a=3*5”作60①②面向過程的程序設(shè)第3章程序設(shè)計初步第4章函數(shù)與預(yù)處理第5章數(shù)組第6章指針第7章自定義數(shù)據(jù)類第3第3章選擇結(jié)構(gòu)和if多分支選擇結(jié)構(gòu)和switchbreak語句和continue數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(datastructure)。 偽代碼(pseudoifxispositivethenprintx C++ #include<iostream>usingnamespacestd;inta=3;intmain({floatreturn
部 部 部} 圖 如inta,b;在C語言中,只有產(chǎn)生實際操作的才稱為語句,對變量的定義 語句而且要求對變量的定義必須出現(xiàn)在本中所程語句前。因此C程序員已經(jīng)養(yǎng)成了個習(xí)慣:位置定義全部變量。在C++中,對變量以及其他對象的定義被認為是一條語句,并且可以出現(xiàn)在函數(shù)中的任何行,即可以放在其他程序語句可以出現(xiàn)的地方,也可以放在函數(shù)之外。這樣更加靈活,可以很方便地實現(xiàn)變的局部化變量的作用范圍從語句開始到本函數(shù)或本塊結(jié)束)①if(②for(③while(④do~while(⑤⑥⑦⑧⑨
(循環(huán)語句(結(jié)束本次循環(huán)語句(中止執(zhí)行switch或循環(huán)語句(多分支選擇語句(從函數(shù)返回語句
表達式能構(gòu)成語句是C和C++語言的一個重要特色。C++(包括函數(shù)調(diào)用語句)。;把一些語句括起來成為復(fù)合語句。如下{if(z>100)z=z-100;}功能。但不同的是:C++中的賦值號“=”是一個運if((a=b)>0) 定if后面的()內(nèi)是一個條件?,F(xiàn)在在x的位if((a=b;)>0)C++圖圖#include盡管cin和cou不是C++本身提供的語句,但是在不致 的情況下,為了敘述方便常常由cin和流提取運算符“>>”實現(xiàn)輸入的語句稱為輸入語句或cin語句,把cou和流插入運算符“<”實現(xiàn)輸出的語句稱為輸出語句或cou語句。根據(jù)C++的語法,凡是能實現(xiàn)某種操作且最以號結(jié)的都語句。*3.4.1cout<<″ThisisasimpleC++program.″<<endl;cout<<″Thisis<<″aC++
cout<<″Thisis″;cout<<″aC++″;cout<<″program.″;
ThisisasimpleC++
cout<<a<<′′<<b<<′4345.789
以上312342charinta;floatb;123434后面應(yīng)該有空格以便和56.78分隔開。也1234 不能用cin語句把空格字符和回車換行符作為字符輸入給字符變量,它們將被跳過。如果想將空格字符或回車換行符或任何其他鍵盤上的字符輸入給字符變量,可以用3.4.3節(jié)介紹的echar函數(shù)。*3.4.2制符(有的書中稱為符),見書中表3.1。doublea=123.456789012345;對acout<<a;輸出cout<<setprecision(9)<<a;輸出cout<<setprecision(6);恢復(fù)默認格式(精度為cout<<setiosflags(ios∷fixed);輸出cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;輸出:cout<<setiosflags(ios∷scientific)<<a;輸出:cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;輸出下面是整數(shù)輸出的例intb=123456;對b賦初cout<<b;輸出cout<<hex<<b;輸出1e240例3.1#include<iostream>#include<iomanip>intmain(){doublea=123.456,b=3.14159,c=-return-
3.4.3用getchar和putchar例3.2#include<iostream>intmain(){chara,b,c;
//或者包含頭文件stdio.h#includereturn}putcharASCII碼轉(zhuǎn)換為字符輸出,66是字母′B′的ASCII碼碼移到本行開頭
(輸出字符′A′,八進制的101是′A′的(輸出單引號字符(輸出回車,不換形式為getchar()函數(shù)的值就是從輸入設(shè)備得到例3.3#include<iostream>intmain(){charc=getchar();putchar(c+32);putchar(′\n′);return0;}請注意,getchar()只能接收一個字符。getchar函因為getchar()讀入的值為′A′,′A′+32是小寫字母′a′cout<<getchar(這時輸出的是整數(shù)97,因為用getchar(讀入的實際cout<<(c=getchar cout<<(c=getchar(3.4.4用scanf和printf例3.4用scanf和printf#include<iostream>intmain(){inta;floatb;charscanf(″%d%c符 \″,a,b,c);return0;}
//注意在變量名前要加12A67.98↙(本行為輸入,輸入的3個數(shù)據(jù)間以空格相間a=12,b=67.980003,c=A(本行為輸出例3.5求一元二次方程式ax2+bx+c=0的根。a,b,c的#include#include文件usingnamespaceintmain({float
//由于程序要用到數(shù)學(xué)函數(shù)sqrt,故應(yīng)包含return0;}4.58.82.4 //amount代表購物總額,tax代表else
//若amount<1000,條件滿足,tax=0.95,否則//pay為實付圖①②③④⑤
(小于(小于或等于(大于(大于或等于(等于
(高⑥ (不等于 4種關(guān)系運算符(<,<=,>,>=)的優(yōu)先級
a>b,a+b>b+c,(a==3)>(b==5),′a′<′b′,關(guān)系表達式的值是一個邏輯值,即“”或“假。例如,關(guān)系表達式“5==”的值為“假”,“>=0”的值為“真”。在C和C++中都用數(shù)值1代表真”,用0代表“假”。
f得到的值為bool為
//定義邏輯變量found和flag,并使flag //將邏輯常量true賦給邏輯變量
//賦值后flag的值為&&||
a&& 若a,b為真,則a&&b 若a,b之一為真,則a||b 若a為真,則!a!(非)→&&(與)→ (a>b)&&(a==b)||(!a)||
a>b&&a==b||!a||,對它進行“非”運算,得“假”,“假”以0若a=4,b=5,則a&&b的值為1。因為a和b均為非a,b值同前,!a||b的值為14&&0||2的值為1 算或關(guān)系運算的對象,哪些作為邏輯運算的對象和非0來判定它們屬于“真”或“假”。例如′c′&&′4整除,但不能被 年是閏年 年不是閏年(year%4==0&&year%100!=0)||year%400==!((year%4==0&&year%100!=0)||year%400==(year%4!=0)||(year%100==0&&year%400if(x>y)if(表達式)語句1else語句2if(x>y)elsecout<<y;圖if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句…elseif(表達式m)語句else語句n流程圖見圖3.6。 (number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;圖從圖3.5和圖3.6可以看到:3種形式的if語句都是由 例3.6#include<cmath>#include<iomanip>intmain(){
//使用I/O流控制符要包含頭文件cout<<″pleaseenterif(a+b>c&&b+c>a&&{
elsecout<<″itisnota return}pleaseentera,b,c:2.453.67變量和area只在復(fù)合語句內(nèi)用到,因此在復(fù)合語句內(nèi)定義,它的作用范圍為從定義變量開始到復(fù)合語句結(jié)束。如果在復(fù)合語句外使用s和area,則會在編譯時出錯,系統(tǒng)認為這兩個變量 定義將某些變量局限在某范圍內(nèi),與外界 ,避免在其他地方被誤用。if(if()語句else語句2if()語句
else語句 if(if語句1if()語句else語句 編程序者把第一個ese寫在與第一個f外層if同一列上,希望else與第一個對應(yīng),但實際上el是與第二個i配對,因為它們相距最近,而且第二個i并未與任何els配對。為了避免誤用,最好使每一層內(nèi)嵌的i語句都包含else子句如本節(jié)開頭列出的形式這樣i的數(shù)目和else的數(shù)目相同,從內(nèi)層到外層一一對應(yīng),不致出錯。if(if語句1}else語句2
這時{}限定了內(nèi)嵌if語句的范圍,{}外的else{}內(nèi)的ifif(a>b)else可以用條件運算符(?:)表達式1?表達式2∶表達式件表達式的值?!癿ax=(a>b)?a:b”的執(zhí)行結(jié)果是x? x≤y,則條件表達式的值為1.5,若x>y,值應(yīng)為1例3.7輸入一個字符,判別它是否為大寫字母,如#include<iostream>intmain(){charreturn0;
//判別ch是否大寫字}多分支選擇結(jié)構(gòu)和switch{case常量表達式1:語句1case常量表達式2:語句2case常量表達式n:語句n}{case′A′:cout<<″85~100\n″;case′B′:cout<<″70~84\n″;case′C′:cout<<″60~69\n″;case′D′:cout<<″<60\n″; :cout<<″error\n″;}(1)switch后面括號內(nèi)的“表達式”,允許為任何類型。 ′D′:…”,然后是“case′A′:…”執(zhí)行完一個case個case子句繼續(xù)執(zhí)行?!癱ase常量表達式”因此,應(yīng)該在執(zhí)行一個cae子句后,使流程跳出swith結(jié)構(gòu),即終止swith語句的執(zhí)行。可以用一個brea語句來達到此目的。將上面的switc結(jié)構(gòu)改寫如下:{case′A′:cout<<″85~100\n″;break;case′B′:cout<<″70~84\n″;break;case′C′:cout<<″60~69\n″;break;case′D′:cout<<″<60\n″;break; :cout<<″error\n″;break;}圖casecasecase′C′:例3.8#include<iostream>intmain(){intboolcout<<″pleaseenter //輸出if{ifelse
//輸入年//年份能被4//年份能被4整除又能被100//年份能被4整除又能被400//閏年,令leap=true(真//非閏年,令leap=false(假
//年份能被4整除但不能被100整除//是閏年,令 //年份不能被4整除肯定不是if
//若為非閏年,令//若leap為真,就輸出年份和“是 //若leap為真,就輸出年份和“不是cout<<″aleapreturn}
//輸出“閏年①2005isnotaleap②1900isnptaleapelseelseif((year%4==0&&year%100!=0)||(year%400==0))else 2581015 f=p*w*s*(1-圖#include<iostream>intmain(){intfloatif(s>=3000)elseswitch{case0:d=0;break;case1:d=2;break;case2:casecasecasecasecasecase8:case9:casecasecase}return0;}pleaseenterp,w,s:10020while(表達式)語句例3.10求1+2+3+…+100#includeusingnamespaceintmain({intwhile{}}while(表達式 圖 圖例3.11用do-while語句求1+2+3+…+100。#include<iostream>intmain(){int{}while(i<=100);return0;} 圖 for(表達式1;表達式2;表達式3語句先求解表達式1求解表達式2,若其值為真(值為非0)for語for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值語句for(i=1;i<=100;i++)}如a<b&&x<y),但也可以是數(shù)值表達式或字符表亂,可讀性降低,建議與循環(huán)控制無關(guān)的內(nèi)件的,在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語句(3種循環(huán)(while循環(huán)、dowhile循環(huán)和for循環(huán))可以while(while(}{…}while(}while(}while({…}while(┆for(;;while()┆}for}while( 束循環(huán),接著執(zhí)行循環(huán)體下面的語句。break語句 while(表達式if(表達式┆}while(表達式1if(表達式2)┆} 圖 圖例3.12用下面 #include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;intmain(){ints=-}return0;}注意 例3.13求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下
#include<iostream>#include<iomanip>intmain(){longf1,f2;inti;if(i%2==0cout<<endl;//每輸出完4個數(shù)后換行,使每行輸出4個//左邊的f1代表第3個數(shù),是第1、2個數(shù)//左邊的f2代表第4個數(shù),是第2、3個數(shù)}return}例3.14找出100~200間的全部素數(shù)。#include#include<cmath>#include<iomanip>intmain(){intbool //定義布爾變量 //判別m是否為素數(shù),m由101200,增量為
//循環(huán)開始時設(shè)prime為真,即先認為m//用k代表根號m的整數(shù)部 //如果能整除,表示m{}
//使prime變?yōu)?/終止執(zhí)行本if //如果m為素 //輸出素數(shù)m,字段寬度為 //n用來累計輸出素數(shù)的}if(n%10==0)cout<<endl;//輸出10個數(shù)后換}return0;}
//最后執(zhí)行一次例3.15譯 圖#includeintmain(){charwhile((c=getchar({if((c>=′a′&&c<=′z′)||(c>=′A′&&}}return}IamgoingtoMeqksmrkxswhile語句中括號內(nèi)的表達式有3讀入一個字符,這是用getchar函數(shù)實現(xiàn)的;②將讀入的字符賦給字符變量c;③判別這個字符是否if(c>′Z′||c>′z′)c=c-為“c>′Z′&&c<=′Z′+4”,即原字母為′W′到′Z′,在寫成c>′z′&&c<=′z′+4而只須寫成“c>′z′”即可。第4第4*4.5*4.6*4.7*4.8變量 類 要利用庫函數(shù),以減少重復(fù)編寫程序段的工作圖例4.1#includeusingnamespacevoid //定義printstar{cout<<″******************************}
//輸出30個void //定義print_message函{ toC++!″<<endl;輸出一行文}int{printstar();printstar();return0;}
//調(diào)用printstar//調(diào)用print_message//調(diào)用printstar to從用戶使用的種系統(tǒng)函數(shù)譯系統(tǒng)提的,用戶不必自己定義這些數(shù),可以直接用戶自己定義用戶的專門需從函數(shù)的形式看,函數(shù)函數(shù)之間有數(shù)出參數(shù)。函數(shù)之間有數(shù) } } //函數(shù)首部,函數(shù)值{intz;return(z);}
//函數(shù)體中 部//將x和y中的大者的值賦給整型變量//將z的值作為函數(shù)值稱為形式參數(shù)(formalparameter,簡稱形參),例4.2#includeusingnamespaceintmax(intx,int{intz;}
//定義有參函數(shù)intmain({int return}pleaseentertwointegernumbers:2圖時,它們并不占內(nèi)存中的實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞,傳回來給實參。在調(diào)用函數(shù)時,編譯系統(tǒng)臨時給形參分配 單元。請注意:不同的單元。圖4.3表示將實參a和b的值2和3傳遞給對應(yīng)的形參x和y。 圖 圖1.把函數(shù)調(diào)用單獨作為一個語句,并不要求函數(shù)帶回一個值,只是要求函數(shù)完成一定的操作。如例.1中的printstar(; //max(b,c) 如果使用用戶自己定的函,而該函數(shù)與調(diào)用它的函數(shù)(即主調(diào)函數(shù))在同一個程序單位中,且位置在主調(diào)函數(shù)之后,則必須在調(diào)用此函數(shù)之前對被調(diào)用的函數(shù)作 。所謂函數(shù)(declare),就是在函數(shù)尚在未定義的例4.3對被調(diào)用的函數(shù) #include<iostream>intmain(){floatadd(floatx,floatfloatreturn0;}
//對add函數(shù)floatadd(floatx,float{floatz;}
//定義addpleaseentera,b:123.68 float 稱為函數(shù)原型(functionprototype)。 ;(參數(shù)類型1參數(shù)名1,參數(shù)類型2 floatadd(floata,float 數(shù)原型來函數(shù),還能減少編寫程序時可能出現(xiàn)的錯誤。由于函數(shù)的位置與函數(shù)調(diào)用語句的位到的函數(shù)作的習(xí)慣。這是保證程序正確性和可 char //本行和以下兩行函 在所有函數(shù)之前且函數(shù)inti(float,float);intmain()
//因而作用域是整個 //在main函數(shù)中不必對它所調(diào)用的函數(shù)charletter(charc1,char //定義letterfloatf(floatx,floatinti(floatj,float
//定義f//定義i *4.5調(diào)用函數(shù)時需要一定的時間和空間的開銷。圖4.5表圖函數(shù)(inlinefunction),又稱內(nèi)嵌函數(shù)。在有些書中例4.4#include<iostream>inlineintmax(int,int,intmain({inti=10,j=20,k=30,m;return0;}
函數(shù),注意左端有inlineintmax(inta,intb,int //定義max為內(nèi)置if(c>a)a=c;returna;}
//求a,b,c中的最樣,程序第6行“m=max(i,j,k);”就被置換成if(j>i)i=j;if(k>i)i=k;注意:可以在 句以下)而使用頻繁的函數(shù)(如定時數(shù)據(jù)的函數(shù))應(yīng)當(dāng)說明:對函數(shù)作inline *4.6intmax1(inta,intbint //求3個整數(shù)中的最doublemax2(doublea,doubleb,doublec);//求3個雙精度數(shù)中最longmax3(longa,longb,long //求3個長整數(shù)中的最(functionoverloading)。即對一個函數(shù)名重新賦予例4.5求3個數(shù)中最大的數(shù)(分別考慮整數(shù)、雙精度#include<iostream>intmain() doublemax(doublea,doubleb,doublec);//函longmax(longa,longb,longint
//函 //輸入3個整doubled1,d2,d3,d;longg1,g2,g3,g;
//求3個整數(shù)中的最//輸入3個雙精度//求3個雙精度數(shù)中的最大 //輸入3個長整}intmax(inta,intb,intif(c>a)a=c;returna;}
//求3個長整數(shù)中的最//定義求3個整數(shù)中的最大者的函doublemax(doublea,doubleb,double者的函{if(b>a)returna;}
//定義求3個雙精度數(shù)中的longmax(longa,longb,long數(shù){if(b>a)if(c>a)return}
//定義求3個長整數(shù)中的最 - 56.8790.23-
(輸入3個整數(shù)(輸入3個實數(shù)67854912456 (輸入3個長整數(shù)
(輸出3個整數(shù)的最大值(輸出3個雙精度數(shù)的最大值(輸出3個長整數(shù)的最大值例4.6編寫一個程序,用來求兩個整數(shù)或3個整數(shù)中#include<iostream>intmain(){intmax(inta,intb,intintmax(inta,int
//輸出兩個整數(shù)中的最大}intmax(inta,intb,int者{if(b>a)
//此max函數(shù)的作用是求3if(c>a)return}intmax(inta,intelsereturnb;}
//此max函數(shù)的作用intf(int);longf(int);void
*4.7C++提供了函數(shù)模板(functiontem 例4.7將例4.6程序改為通過函數(shù)模板來實現(xiàn)。#include<iostream>usingnamespacestd; Tmax(Ta,Tb,Tc)if(c>a)a=c;returna;}
,其中T為類型參//定義一個通用函數(shù),用Tintmain(doubled1=56.87,d2=90.23,d3=-longg1=67854,g2=-
//調(diào)用模板函數(shù),此時T被int//調(diào)用模板函數(shù),此時T被double//調(diào)用模板函數(shù),此時T被long取return0;} te<typenameT>或 te<class 在建立函數(shù)模板時,只要將例4.5程序中定義的第一個函數(shù)首部的in改為T即可。即用虛擬的類型名T代替具體的數(shù)據(jù)類型。在對程序進行編譯時,遇到第13行調(diào)用函數(shù)ma(i1,i2,i3),編譯系統(tǒng)會將函數(shù)名max與模板ma相匹配,將實參的類型取代了函數(shù)模板中的虛擬類型T。此時相當(dāng)于已定義了一個函數(shù):intmax(inta,intb,int{if(b>a)a=b;if(c>a)a=c;returna;} te<classT1,typename*4.8 floatarea(floatarea //只對形參r指定默認值
//相當(dāng)于//h的值為34.2,r的值為voidf1(floata,intb=0,intc,charvoidf2(floata,intc,intb=0,char
//不正//f2(3.5,5,3,f2(3.5,5,f2(3.5,
//形參的值全部從實參//最后一個形參的值取默認值//最后兩個形參的值取默認數(shù)可以與形參的個數(shù)不同,實參未給定的,從形參的默認值得到值。利用這一特性,可以使函數(shù)的使用更加靈活。例如例.7求個數(shù)或3個數(shù)中的最大數(shù)。也可以不用重載函數(shù),而改用帶有默認參數(shù)的函數(shù)。例4.8求2個或3個正整數(shù)中的最大數(shù),用帶有默認#include<iostream>intmain(){intmax(inta,intb,intc=0);//函 ,形參c有默認intreturn0;}
//輸出3個數(shù)中的最//輸出2個數(shù)中的最intmax(inta,intb,intif(c>a)a=c;returna;}
//函數(shù)定14-56 圖在程序中實現(xiàn)函數(shù)嵌套調(diào)用時,需要注意的是:在(除非定 ,調(diào)用在后)例4.9用弦截法求方程f(x)=x3-5x2+16x-80=0f(x2)同符號,則應(yīng)改變x1,x2,直到f(x1)f(x2)異號為連接(x1,f(x1))和(x2,f(x2))兩點,此線(即弦圖若f(x)與f(x1)同符號,則根必在(x,x2)區(qū)間內(nèi),此時在(x1,x)區(qū)間內(nèi),將x作為新的x2。(2(3)|f(x)|<ξ為止,ξ為一個很小的正數(shù),例如10-6f(x)≈0。用函數(shù)xpointx1,x2)來求(x1,f(x1))和(x2,f(x2))的連#include<iostream>#include<iomanip>#include<cmath> doublexpoint(double,doubleroot(double,
//函//函intmain({double}//指定輸出7cout<<″Arootofequationisreturn}doublef(double{doubley=x*x*x-5*x*x+16*x-return}
//定義f函數(shù),以實現(xiàn)doublexpoint(doublex1,double軸交{doubley=(x1*f(x2)-x2*f(x1))/(f(x2)-return}
//定義xpoint函數(shù),求出弦與//在xpoint函數(shù)中調(diào)用fdoubleroot(doublex1,double
//定義root函數(shù),求近似if}
//在root函數(shù)中調(diào)用xpoint//在root函數(shù)中調(diào)用freturnx;}inputx1,x2:2.56.7↙Arootofequationis數(shù)是互相獨立的,并不互相從屬。這3個函數(shù)均定main函數(shù)的前面對這3個函數(shù)作。。圖,故在文件開頭用#include<cmath>把有關(guān)的頭文 intf(int{intreturn}
//在調(diào)用函數(shù)f的 ,又要調(diào)用f函 圖 圖例4.10有5個人坐在一起,問第5個人多少歲?他說
同的。因此可以用一個函數(shù)表示上述關(guān)系。圖4.11 圖#include<iostream>intmain(){return
}intage(int{intif(n==1)c=10;returnc;}
的遞歸函//用c作為存 的變//當(dāng)n=1時 為//當(dāng)n>1時,此 是他前一個人 加 值帶回主函圖例4.11用遞歸方法求n
#includeusingnamespaceintmain(){intlong
//n為需要求階乘的整//y為存放n!的變cout<<″pleaseinputaninteger //輸入的
調(diào)用函數(shù)return0;}
//輸出n!longfac(int{long
返回f=-
//如果輸入負數(shù),報錯并以-1elsef=fac(n-1)*n;returnf;}
//0!和1!的值為//n>1時,進行遞歸調(diào)//將f的值作為函數(shù)值pleaseinputan內(nèi)有效。這稱為局部變量(localvariable)。如floatf1(int{int┆}
b、c有 a有
//函數(shù)charf2(intx,int
//函數(shù){int┆}intmain({int┆
i、j
x、y//{int┆}}
p、q在復(fù)合語句中有效m、n主函數(shù)main中定義的變量(m,n)中有效, intmax(inta,int┆intmax(intx,int{}
,a、b 前面已介紹,程序的編譯單位是源程序文件,一個源文件可以包含一個或若干個函數(shù)。在函數(shù)內(nèi)定義的變量是局部變量,而在函數(shù)之外定義的變量是外部變量,稱為全局變量(globalvariable,也稱全程變量。全局變量的有效范圍為從定義變量的位置開始到本源文件結(jié)束。如intp=1,q=5;//全局變量floatf1(a)//定義函數(shù)f1inta;{int┆}
全局變量c1、c2的作用charcharf2(intx,int{int┆}{int┆}
//全局變//定義函數(shù)
全局變量p、q的作用①全局變量在程序的全部執(zhí)行過 ②它使函數(shù)的通用性降低了,因為在執(zhí)行函數(shù)時要 以通過“實參——形參”的與外界發(fā)生聯(lián)系外,沒有其他。這樣的程序移植性好,可讀性強。個函數(shù)執(zhí)行時都可能改變?nèi)肿兞康闹?,程序容易scope)、函數(shù)作用域(functionscope)、塊作用域(blockscope)和函數(shù)原型作用域(functionprototype變量 類 變量還有另一種屬性——期(storageduration,也稱生命期)。。這是從變量值存在的時間角度來分析的。期可以分為靜態(tài)期(staticstorage 期(dynamicstorageduration)。這是由變量的靜 所謂靜態(tài)方式是指在程序運行期間,系統(tǒng)對變量分配固定的空間。而動態(tài)方式則是在程序運行期間,系統(tǒng)對變量動態(tài)地分配空間。先看一下內(nèi)存中的供用戶使用的空間的情況。這個空間可以分為三部分,即: 數(shù)據(jù)分別存放在靜態(tài)區(qū)和動態(tài)區(qū)中。全局變量全部存放在靜態(tài)區(qū)中,在程序開始執(zhí)行時給全局變量分配單元,程序執(zhí)行完畢就釋放這些空間。在程序執(zhí)行過它們占據(jù)固定的單在動態(tài)區(qū)中存放以下數(shù)據(jù):①函數(shù)形式參數(shù)。在調(diào)用函數(shù)時給形參分配空間。②函數(shù)中的自動變量(未加static的局部變量,詳見后面的介兩次分配給此函數(shù)中局部變量的空間地址可能局部變量的期并不等于整個程序的執(zhí)行周期,的情況,系統(tǒng)對局部變量動態(tài)地分配和釋放空儲類別(storageclass)的屬性。 函數(shù)中的局部變量,如果不用關(guān)鍵字stati加以聲明,編譯系統(tǒng)對它們是動態(tài)地分配 空間的。數(shù)的形參和在函數(shù)定義變量包括在復(fù)合語句中定義的變量都屬此。在調(diào)用該函數(shù)時,系統(tǒng)給形參和函數(shù)中定義變量配 空間,數(shù)據(jù)儲在動態(tài) 區(qū)中。在函數(shù)調(diào)用結(jié)束時就自動釋放這些空間。如果是在復(fù)合語句中定義的變量,則變量定義時分配 間,在復(fù)合語句結(jié)束時自釋放空間。因此這類局部變量稱為自動變量(autovariable)。自動變量用關(guān)鍵字auto作 類別的聲明。例如:intf(int {autoint┆}
①autoint②int 不而保留原值,即其占用的單元不釋放,局部變量(staticlocalvariable)。例4.12#includeusingnamespaceintf(int{autointb=0;staticintc=3;return}intmain({inta=2,i;cout<<f(a)<<″″;return0;}
//定義f函數(shù),a為形//定義b為自動//定義c為靜態(tài)局部78圖靜態(tài)局部變量在靜 雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在, 例4.13輸出1~5的階乘值(即1!,2!,3!,4!,5!)#include<iostream>intintmain({int
return}intfac(intreturn}
//f為靜態(tài)局部變量,函數(shù)結(jié)束時f的值不釋//在f原值基礎(chǔ)上乘以 但是應(yīng)該看到,用靜態(tài)要多占內(nèi)存,而且降低 intfac(int{registerinti,f=1; for(i=1;i<=n;i++)f=f*i;return} 外部變 在一個文件內(nèi)的函數(shù)想該全局變量,則應(yīng)該在之前用關(guān)鍵字extern對該變量作外部變量,表示該變量是一個將在下面定義的全局變量。有了此,就可以從處起,合法地該全局變量,這種聲明稱為提前。例4.14用extern對外部變量作提前 #include<iostream>voidmain()
//對全局變量a,b作提}intmax(intx,int{intz;returnz;}
//定義全局變量 externint件,在本文件中可以合法地該外部變量numintmain()return0;}
int┆ 件,而不能被其他文件。這時可以在定義外部變量時加一個static。例如:staticinta=3;intmain(){┆}
externinta;intfun(intn){┆} (全局變量)稱為靜態(tài)外部變量。這就為程序的模塊化、通用性提供了方便。如果已知道其他文件不需要 本文件的全變量,可以對本文件中的全局變量都加上stati成為靜態(tài)外部變量,以免被其他文件誤用。 方式,只是作用范圍不同而已,都是在編譯時分配內(nèi)存的類別C++允許使用auto,static,register和extern4種 類別的用法。auto,static和register3種autocharc;staticinta;registerintd;externintb;
說明:extern只能用來 已定義的外部變量,而 從變 期(存在的時間)來區(qū)分,有動 內(nèi)存中動 區(qū):自動變量和形式參CPU中的寄存器:寄存器變量 如果一個變量值在某時刻存的,則認為這時刻屬于該變量的 期,或稱該變量在此時刻存在”。書中表4.表示各種類型變量的作用域和存在性的情況。static 使變量采用靜態(tài) 式,但它對局部變量和全局變量所的作不同。對局部變量說,static使變量由動態(tài) 式改為態(tài) 方式。而對全局變量來,它使變量局部局部于本文件,但仍為靜態(tài) 方式。從作用域角度看,凡有static 的,其作用域都是局限的或者局限于本函數(shù)內(nèi)靜態(tài)局部變量,或者局限于本文件內(nèi)靜態(tài)外部變量。關(guān)于變量 部分;(2)執(zhí)行語句。 的原型,而函數(shù)的定義是函數(shù)功能的確立。對函數(shù) 部分中的,而函數(shù)的定義顯 部分范圍內(nèi),它是一個文件中的對變量而言 空間的(如inta;);另一種是不需要建立 間的(如externinta;)。前者稱為定義性(definingdeclaration),或簡稱為定義 有 都是定義。對“inta;”而言,它是定義,既可說 inta;
要建 空間 intmain({externint…}
不是定義 a是一個已定義的外部變int //是定義,定義a為整型外 。extern只用作聲 一個變量的作用有二:(1)對局部變 ,使該變量在本函數(shù)調(diào)用結(jié)束后不釋 ,則該變量 使用。如“statica;”是不合法的,應(yīng)寫成“staticint函數(shù)本質(zhì)上是全局的,因為一個函數(shù)要被另外的函數(shù)調(diào)用,但是,也可以指定函數(shù)只能被本文件調(diào)用,而不能被其他文件調(diào)用。根據(jù)函數(shù)能否被其他源文件調(diào)用,將函數(shù)區(qū)分為內(nèi)部函數(shù)和外部函數(shù)。staticintfun(inta,int都冠以static使之局部化,其他文件不能。externintfun(inta,int 例4.15輸入兩個整數(shù),要求輸出其中的大者。用外#include<iostream>intmain(){externintmax(int,int 在本函數(shù)中將要調(diào)的maxinta,b;return}intmax(intx,int{intz;returnz;}7-7一個項目文件(projectfile),在該項目文件中包含 intdoublesin(double #include令”(preprocessordirectives)(1)宏定義(2)(3)#define#definePI#define宏名(參數(shù)表字符串#defineS(a,b) //定義宏S(矩形面積),a、b為宏的#include圖 對類型 函 外部變 。如enternint#include<文件名或#include″文件名如#include或#include都是合法的。二者的區(qū)別是:用尖括號時,系統(tǒng)到 在用戶當(dāng)前中尋找要包含的文件,若找不到,義,而對函數(shù)的則分別存放在不同的頭文件中。如果要調(diào)用某一個函數(shù),就必須用#include命令將有關(guān)的頭文件包含進來。C++的庫除了保留C的大部分系統(tǒng)函數(shù)和宏定義外,還增加了預(yù)定義的模板和類。但是不同C++庫的內(nèi)容不完全相同,由各C++編譯系統(tǒng)自行決定。不久前推出的C++標準將庫的建設(shè)也納入標準,規(guī)范化了C++標準庫,以便使C++程序能夠在不同的C++平臺上工作,便于互。新的C++標準庫中的頭文件一般不再包括后綴#include#include#include
#ifdef標識符#if例4.16在調(diào)試程序時,常常希望輸出一些所需的信#include<iostream>intmain(){int
//在調(diào)試程序時使之成為注#ifndefRUN cout<<″x=″<<x<<″,y=″<<y<<″,z=″<<z;//在調(diào)試程序時需要輸出 //本行為條件編譯cout<<″x*y*z=″}第3#defieUNUR//注釋行此7xy第第5 二維數(shù)組的定義 *5.6C++處理字符串的方法——字符串類與字 [常量表達式];intintintint 例如,在“inta[10];”中,10表示a數(shù)組有10個元素,下標從0開始,這10個元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[10] intint
constint a[0]=a[5]+a[7]-例5.1數(shù)組元素 #include<iostream>intmain(){inti,a[10];for(i=0;i<=9;i++)for(i=9;i>=0;i--)return}987654321intintint intint int例5.2用數(shù)組來處理求Fibonacci#include<iostream>#include<iomanip>intmain(){intintf[20]={1,1}; f[i]=f[i-2]+f[i- //在i的值為2[1],依此類{if(i%5==0)
//此循環(huán)的作用是輸出20個//控制換行,每行輸出5個數(shù)//每個數(shù)據(jù)輸出時占8列寬}return0;}
//最后執(zhí)行一次換(空一行112358例5.3編寫程序,用起泡法對10個數(shù)排序(按由小到圖 圖#include<iostream>intmain(){intintcout<<″input10numbersfor //輸入for(j=1;j<=9;j++)if
//共進行9趟比//在每趟中要進行(10-j)次兩兩//如果前面的數(shù)大于后面 cout<<″thesortednumbers:″<<endl;return}
//輸出10input1035911336-9-76100thesorted-76-935691133100 。在C++中以s[3][4]表示,它代表數(shù)據(jù)73[常量表達式][常量表達式]float10列)的單精度數(shù)組。注意不能寫成“float圖float圖C++允許使用數(shù)組。有了二維數(shù)組的基礎(chǔ),再掌握數(shù)組是不的。例如,定義三維數(shù)組的float數(shù)組名[下標][下標]int ┆ a[3][4]intintint100050009000int1000600011int100056000000intintint int3行。數(shù)0030000100例5.4將一個二維數(shù)組行和列元素互換,存到另一1123144562536#include<iostream>intmain(){intintfor(i=0;i<=1;i++){for}}cout<<″arrayfor{for(j=0;j<=1;j++)}return}12345array123例5.5有一個3×4的矩陣,要求編程序求出其中值#include<iostream>intmain(){intinta[3][4]={{5,12,23,56},{19,28,37,46},{-12,- //使max開始時取a[0][0]的forforif
//從第0行~第2//從第0列~第3//如果某元素大于//max將取該元素的}
//記下該元素的行號//記下該元素的列號return0;}例5.6用函數(shù)處理例5.5#include<iostream>intmain() intinta[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};//數(shù)組化for(i=0;i<=2;i++)for(j=0;j<=3;j++){ //調(diào)用max_value函
//如果函數(shù)返回的是a[i][j]的//記下該元素行號 //記下該元素列號}}}intmax_value(intx,int{if(x>max)return
//定義max_value函//如果x>max,函數(shù)返回值為elsereturn}
//如果x≤max,函數(shù)返回值為例5.7用選擇法對數(shù)組中10個整數(shù)按由小到大排序。 #includeusingnamespaceintmain({voidselect_sort(intarray[],intintcout<<″entertheoriginl
//輸入10 cout<<″thesortedarray:″<<endl;cout<<a[i]<<″″;return}
//輸出10個已排好序voidselect_sort(intarray[],int{intfor(i=0;i<n-for(j=i+1;j<n;j++)
//形參array是數(shù)}}entertheoriginl69-2568711-5430thesorted-54-20369115677
//輸入10指針變量,關(guān)于指針見第5章),形參不能為普通變量(如intarray;)。實參數(shù)組與形參數(shù)組類型應(yīng)函數(shù)實參時,不是把實參數(shù)組的值傳遞給形參,而圖在用變量作函數(shù)參數(shù)時,只能將實參變量的值傳給形參變量,在調(diào)用函數(shù)過 如果改變了形參的值,對實參沒有影響,即實參的值不因形參的值改變而改變。而用數(shù)組名作函數(shù)實參時,改變形參數(shù)組元素的值將同時改實參組素的值。在程序設(shè)計中往往有意識地用這特改變參數(shù)元素的值。實際上,形參數(shù)組并不意味著真正建立一個包的中可以寫元素個數(shù),也可以不寫。voidselect_sort(intarray[10],intvoidselect_sort(intarray[],intn)
//指定元素個數(shù)與實//不指定元素//指定元素個數(shù)與實 intint
//形參數(shù)組的兩個維//第一維大小intint
//不能確定數(shù)組的每一行有//不指定列數(shù)就無法確int int //列數(shù)與實參數(shù)組相同,行數(shù)不int 例5.8有一個3×4的矩陣,求矩陣中所有元素中#includeusingnamespaceintmain({intmax_value(intintcout<<″maxvalueisreturn}intmax_value(int{intfor(if(array[i][j]>max)return}maxvalueisintmax_value(intarray[][])intmax_value(intarray[3][])intmax_value(intarray[3][4])intmax_value(intintmax_value(intcharc[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′圖charc[10]={′I′,′′,′a′,′m′,′charc[]={′I′,′′,′a′,′m′,′chardiamond[5][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′,′′,′*′},{′′,′char c[0]=′C′c[1]=′h′;c[2]=′i′;c[3]=′n′;c[4]=′a′;//對數(shù)組元素賦值,正
例5.9#include<iostream>voidmain(){chardiamond[][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′inti,j;for{for}}
數(shù)組元素,每次輸出一個字* *charstr[12]={′I′,′′,′a′,′m′,′用一維字符數(shù)組str來存放一個字符串″Iamhappy″加一個′\0′作為結(jié)束符。例如字符串″Iamhappy″′\0′只是一個供辨別的標志。Howdoyou 法:用字符串charstr[]={″Iamcharstr[]=″Iamstr的長度不是10,而是charstr[]={′I′,′′,′a′,′m′,′charstr[]={′I′,′′,′a′,′m′,′char 圖charcharstr char
//用字符數(shù)組名輸入字//用字符數(shù)組名輸出字↙圖strcat(char[],const charstr1[30]=″People′sRepublicofchar People′sRepublic圖 strcpy(char[],conststrcpy是stringcopy(字符串 charstr1[10],str2[]=″ 在調(diào)用strcpy名(如str1)strcmp(constchar[],conststrcmp是stringcompare(字符串比較)的縮寫。 小比較),直到出現(xiàn)不同的字符或遇到′\0′if(str1>str2)if(strcmp(str1,str2)>0)cout<<″yes″;strlen(constchar[]);strlen是stringlength(字符串長度)的縮寫。它是charstr[10]=″ 例5.10有3個字符串,要求找出其中最大者。要求用#include<iostream>#include<string>intmain(){voidmax_string(charstr[][30],intint
return0;
//輸入3個國家//調(diào)用max_string}voidmax_string(charstr[][30],int{intcharstring[30];
//使string的值為str[0]的 cout<<endl<<″thelargeststringis:″<<string<<endl;}thelargeststringis:*5.6C++處理字符串的方法——字符串類C++提供了一種新的數(shù)據(jù)類型——字符串類型(sring類型),在使用方法上,它和char、i類型一樣,可以用來定義變量,這就是字符串變量——用一個名字代表一個字符序列。 stringstring
//定義string1為字符//定義string2同時對其初string類的功能時,必須在本文#include< //注意頭文件名不是 //假設(shè)string2和string1均已定義為字符串變 string //定義并初始化字符串變量word[2]=′a′;//修改序號為2的字符,修改后word的值為cin>>cout<<
//從鍵盤輸入一個字符串給字符串變量//將字符串string2 字符 stringstring
//定義string1并賦//定義string2并賦//連接string1和連接后string1為″C++Language″可以直接用==(等于)、>(大于)、<(小于)、!=(不等string //定義一個字符串?dāng)?shù)組,它包含5string//定義一個字符串?dāng)?shù)組并初始圖 ″Li″的地址存放在name[1],把字符串″Fun″的地字符串變量中存放的是字符串的指針(字符串的地例5.11輸入3個字符串,要求將字母按由小到大的#include<iostream>#include<string>intmain(){stringcout<<″pleaseinputthreestrings:″; //使串2≤串if(string1<=string2)cout<<string1<<″″<<string2<<″//如果串1≤串2,則串1≤串2≤串//如果串1>串2,且串1≤串3,則串2<串1≤串//如果串1>串2,且串1>串3,則串2<串3<串}pleaseinputthree U.S.A.Germany↙Germany例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城鎮(zhèn)市容環(huán)境衛(wèi)生管理規(guī)定
- 工業(yè)廠區(qū)道路改造路面施工合同
- 醫(yī)療項目負責(zé)人聘用合同書
- 航空航天設(shè)備租賃合同協(xié)議
- 畜牧獸醫(yī)院校校長聘用合同
- 電動滑板車租賃合同內(nèi)容
- 物流倉儲聘用合同證明
- 義務(wù)教育學(xué)校標準化建設(shè)培訓(xùn)課件(A)
- 遼寧省遼陽市(2024年-2025年小學(xué)五年級語文)人教版專題練習(xí)(上學(xué)期)試卷及答案
- 青海省玉樹藏族自治州(2024年-2025年小學(xué)五年級語文)人教版階段練習(xí)(上學(xué)期)試卷及答案
- 小學(xué)體育水平一《走與游戲》教學(xué)設(shè)計
- 秋日私語(完整精確版)克萊德曼(原版)鋼琴雙手簡譜 鋼琴譜
- 辦公室室內(nèi)裝修工程技術(shù)規(guī)范
- 鹽酸安全知識培訓(xùn)
- 萬盛關(guān)于成立醫(yī)療設(shè)備公司組建方案(參考模板)
- 消防安全巡查記錄臺帳(共2頁)
- 科技特派員工作調(diào)研報告
- 中波廣播發(fā)送系統(tǒng)概述
- 縣疾控中心中層干部競聘上崗實施方案
- 急性心肌梗死精美PPt完整版
- 物業(yè)日常巡查記錄表.doc
評論
0/150
提交評論