C++程序設(shè)計(jì)教程3_第1頁(yè)
C++程序設(shè)計(jì)教程3_第2頁(yè)
C++程序設(shè)計(jì)教程3_第3頁(yè)
C++程序設(shè)計(jì)教程3_第4頁(yè)
C++程序設(shè)計(jì)教程3_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

07:42:021C++程序設(shè)計(jì)教程(第二版)第三章數(shù)據(jù)類型Chapter3

DataTypes清華大學(xué)出版社錢能07:42:022數(shù)據(jù)類型:一定的數(shù)據(jù)在計(jì)算機(jī)的內(nèi)部表示;該數(shù)據(jù)所表示的值的集合;在該數(shù)據(jù)上的一系列操作。內(nèi)部數(shù)據(jù)類型:

1.整型長(zhǎng)整型,短整型,字符型,布爾型

2.浮點(diǎn)型單精度,雙精度07:42:023第三章內(nèi)容

整型(intTypes)

整型子類(sub-intTypes)

浮點(diǎn)型(Floating-PointType)

C-串與string(C-string&string)

數(shù)組(Arrays)

向量(vectors)

指針與引用(Pointer&References)

07:42:0241.整型(intTypes)整型數(shù)的內(nèi)部表示:二進(jìn)制補(bǔ)碼位數(shù)既定的二進(jìn)制補(bǔ)碼運(yùn)算沒有加減的區(qū)別;對(duì)于溢出,只是簡(jiǎn)單的舍棄而不是錯(cuò)誤整型數(shù)的表示范圍:取決于二進(jìn)制位數(shù)整型數(shù)的操作:+,-,*,/,%,<<,>>,<<=,>>=,!,^,<,<=,>,>=,==,^=,&,|,&=,|=,&&,||,&&=,||=,!=,=,+=,-=,*=,/=,%=,++,--,,,?:07:42:025編譯器的機(jī)器字長(zhǎng)總是與整型的位長(zhǎng)有關(guān).如:

32位編譯器的整型數(shù)一定為32位長(zhǎng)

整型字面值分八進(jìn)制,十進(jìn)制和十六進(jìn)制不同表示.如:

0123//8進(jìn)制

0x12af3//16進(jìn)制

12345//10進(jìn)制

超過表示范圍的整型數(shù)其值不可預(yù)料或者出錯(cuò).如:

錯(cuò)07:42:0262.整型子類(Sub-intTypes)字符型:表示范圍:

char

有符號(hào):-128~127unSignedchar無符號(hào):0~255

輸出形式與整型數(shù)不同:inta=65;charb=65;cout<<a<<“\n”;cout<<b<<“\n”;

結(jié)果為:

65A

07:42:027枚舉型:enum

自定義整數(shù)區(qū)間,甚至列舉單個(gè)整數(shù)值

enumWeek{Mon,Tue,Wed,Thu,Fri,Sat,Sun};

最大特點(diǎn)是可以給每個(gè)值指定一個(gè)在程序中直接使用的標(biāo)記(枚舉符).編程中將其當(dāng)作整數(shù)常量用.如:

inta=4;if(a==Fri)cout<<“Friday\n”;

07:42:028布爾型:bool表示范圍僅含整數(shù)0和1,也可以表示成true和false,相當(dāng)于:

enumbool{false,true};因?yàn)闂l件表達(dá)式、邏輯運(yùn)算的結(jié)果都是0或1,所以,相當(dāng)大數(shù)量的表達(dá)式的值與布爾型對(duì)應(yīng)07:42:0293.浮點(diǎn)型(Floating-PointTypes)浮點(diǎn)數(shù)的內(nèi)部表示:

國(guó)際標(biāo)準(zhǔn)IEEE754浮點(diǎn)表示法,它與編程所用的浮點(diǎn)數(shù)字面量以及輸出的十進(jìn)制浮點(diǎn)數(shù)之間有一個(gè)轉(zhuǎn)換關(guān)系浮點(diǎn)數(shù)的表示范圍:

32位浮點(diǎn)數(shù)±3.4×103864位浮點(diǎn)數(shù)±1.8×10308浮點(diǎn)數(shù)的操作:

常規(guī)的加、減、乘、除等操作07:42:02104.C-串與string(C-string&string

)C-串結(jié)構(gòu)每個(gè)字符占據(jù)1個(gè)字節(jié)一個(gè)C-串是一個(gè)字符序列,用來表示各種名字或者文字說明

C-串的字符序列的最后總是添加有一個(gè)結(jié)束標(biāo)志0.即在6個(gè)字符的字串(“Hello!”)其空間存儲(chǔ)有7個(gè)字節(jié)左邊三圖是不同細(xì)節(jié)的同一空間結(jié)構(gòu)描述’H’’e’’l’’l’’o’’!’’\0’7210110810811133001001000011001010110110001101100011011110010000100000000字符型為char,C-串的類型為char*,確切的說是constchar*.Char*稱為字符指針,與字符數(shù)組操作上一樣,都表示C-串的起始地址。07:42:021107:42:0212知道了C-串首地址,即可知道整個(gè)串,所以可以藉字符首址(字符指針)來操作C-串,但要注意,串的第一個(gè)字符與整個(gè)串的操作不同,如,C-串的輸出操作:

char*str=”Hello”;cout<<*str<<endl;//顯示Hcout<<str<<endl;//顯示Hello07:42:0213C-串不能直接比較,因?yàn)樽址羔樀谋容^只是地址值的比較而不是C-串的字典序比較:cout<<(“join”==”join”?””:”not“)<<”equal\n”;//字面值比較char*str1=”good”;char*str2=”good”;cout<<(str1==str2?””:”not“)<<”equal\n”;//字符指針比較charbuffer1[6]=”Hello”;charbuffer2[6]=”Hello”;cout<<(buffer1==buffer2?””:”not“)<<”equal\n”;//字符數(shù)組比較結(jié)果:notequalnotequalnotequal07:42:0214C-串可以復(fù)制:char*str1=”good”;

char*str2=str1;//STR1和STR2共享”good”空間數(shù)組復(fù)制被禁止:

charbuffer1[6]=”Hello”;

charbuffer2[6]=buffer1[6];//錯(cuò),數(shù)組不能復(fù)制

07:42:0215不得不配備專門操作C-串的庫(kù)函數(shù):strcpy(s1,s2);//從s2拷貝到s1strcmp(s1,s2);//比較s1與s2strcat(s1,s2);//連接s2到s1strrev(s);//將s倒排strset(s,‘c’);//將s全置為cstrstr(s,“ell”);//查找s中的子串strchr(s,‘c’);//查找s中的字符等等07:42:0216但字符指針操作C-串的平安性受到質(zhì)疑:char*str1;char*str2=newchar[5];strcpy(str2,”ugly”);strcpy(str1,str2);//錯(cuò):str1沒有空間可儲(chǔ)strcpy(str2,”Hello”);//錯(cuò):str2空間不夠大str2=”Hello”;//錯(cuò):原來的”ugly”空間脫鉤,導(dǎo)致內(nèi)存泄漏根源:復(fù)制操作須以足夠的目的地空間為前提,而所有C-串操作的空間調(diào)配都是人為安排的,C-串庫(kù)函數(shù)一概不管07:42:0217StringString是C++提供的一種自定義的類型,可以方便的執(zhí)行C-串所不能直接執(zhí)行的一切操作。它處理空間占用問題是系統(tǒng)自動(dòng)的,需要多少用多少。07:42:0218類串string—串類—自定義串對(duì)應(yīng)字符指針的C-串操作://------------------f0305.cppstringa,s1="Hello";strings2="123";a=s1;//copycout<<(a==s1?"":"not")<<"equal\n";//comparecout<<a+s2<<endl;//concatenatereverse(a.begin(),a.end());cout<<a<<endl;//reversecout<<a.replace(0,9,9,'c')<<endl;//setcout<<(s1.find("ell")!=-1?"":"not")<<"found\n";//findstringcout<<(s1.find('c')!=-1?"":"not")<<"found\n";//findchar07:42:0219輸入C-串的string承載方式:cin>>的讀入方式總是將前導(dǎo)的空格〔所謂空格,即包括空格、回車、水平或垂直制表符等〕濾掉,將單詞讀入,在遇到空格時(shí)結(jié)束本次輸入getline總是將行末的回車符濾掉,將其整行輸入對(duì)字串”Hello,Howareyou?”的兩種輸入方式for(strings;cin>>s;)cout<<s<<”“;cout<<endl;

strings;getline(cin,s);cout<<s<<endl;07:42:0220string流:將string實(shí)體看作是一個(gè)輸入設(shè)備.給一個(gè)像cin這樣的取名,作為流來操作,會(huì)很有用例如,如果一個(gè)文件aaa.txt,有假設(shè)干行,每行中含有不知道幾個(gè)的整數(shù),要輸出每行的整數(shù)和://p0306.cppifstreamin("aaa.txt");for(strings;getline(in,s);){inta,sum=0;for(istringstreamsin(s);sin>>a;sum+=a);cout<<sum<<“\n”;}07:42:02215.數(shù)組(Arrays)

數(shù)組是同類元素的集合,它的元素排列在連續(xù)的空間中,按下標(biāo)來標(biāo)記描述數(shù)組必須給出元素類型,元素個(gè)數(shù)元素個(gè)數(shù)必須在編程時(shí)確定,任何變量都不允許

inta[’a’];//表示inta[97];intn=100;inta[n];//錯(cuò):元素個(gè)數(shù)必須預(yù)知

constintn=100;inta[n];//ok

inta[];//錯(cuò):無元素個(gè)數(shù)

inta[]={1,2,3,4,5};//ok:通過初始化確定元素個(gè)數(shù)07:42:0222數(shù)組初始化可選,但須遵循語法.無初始化的數(shù)組按規(guī)定取默認(rèn)值

intarray1[5]={1,2,3,4,5,6};//錯(cuò):初始值個(gè)數(shù)超元素個(gè)數(shù)intarray2[5]={1,,2,3,4};//錯(cuò):不能以逗號(hào)方式省略intarray3[5]={1,2,3,};//錯(cuò):同上intarray4[5]={};//錯(cuò):初始值不能為空intarray5[5]={1,2,3};//ok:后面元素取0intarray6[5]={0};//ok:元素全為0intarray7[5];//ok:元素值不確定inta[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};07:42:0223數(shù)組有諸多缺陷,造成編程艱難和不平安

inta[5]={1,2,3,4,5},c[5];intb[5]=a;//錯(cuò):無法拷貝創(chuàng)立c=a;//錯(cuò):無法整體拷貝和局部拷貝a[8]=10;//錯(cuò):無法動(dòng)態(tài)擴(kuò)容和隨意增減元素for(inti=0;i<=5;++i)//錯(cuò):無法防范下標(biāo)溢出a[i]=i+1;if(a==c)a[0]=2;//錯(cuò):不可比較inta[5]={1};//初始化呆板,無法獲得全1初值字符數(shù)組書寫上的特殊性:(1)charchs1[6]={“hello”};(2)Charchs2[5]={‘h’,’e’.’l’,’l’,’o’};(3)Chcharchs3[6]=“hello”;注〔1〕和〔3〕的實(shí)際字符數(shù)應(yīng)為6個(gè)?!?〕有5個(gè)。07:42:022407:42:0225二維數(shù)組的初始化,下標(biāo)訪問及輸出

intarray1[2][3]={1,2,3,4,5};//最后一個(gè)默認(rèn)為0intarray2[2][3]={{1,2},{4}};//共兩維,一維三個(gè)數(shù)cout<<"array1:";for(inti=0;i<2;++i)for(intj=0;j<3;++j)cout<<array1[i][j]<<",";cout<<"\narray2:";for(inti=0;i<2;++i)for(intj=0;j<3;++j)cout<<array2[i][j]<<",";cout<<"\n";結(jié)果為:

array1:1,2,3,4,5,0,array2:1,2,0,4,0,0,07:42:02266.向量(vector)

向量與數(shù)組的共同特征是元素的排列在邏輯上是線性序列結(jié)構(gòu),可以用下標(biāo)進(jìn)行訪問向量可以按需創(chuàng)立,拷貝創(chuàng)立,局部拷貝創(chuàng)立,異類拷貝和創(chuàng)立靈活的初始化隨意擴(kuò)容和元素增減可通過異常來進(jìn)行下標(biāo)溢出追蹤和處理可比較等等07:42:02276.向量(vector)

1、根本操作向量相當(dāng)于容器,有四種定義方式:(1)vector<int>a(10);(2)vector<int>b(10,1);//10個(gè)元素初值都為1(3)vector<int>c(b);//用現(xiàn)成的向量來創(chuàng)立一個(gè)向量(4)vector<int>d(b.begin(),b.begin()+3);//定義了其值依次為b向量中第0到第2個(gè)元素的向量07:42:0228intn=10;intt[5]={1,2,3,4,5};vector<int>a(n);//按需創(chuàng)立vector<int>b(10,1);//元素賦全1,靈活的初始化vector<int>c(b);//整體拷貝創(chuàng)立vector<int>f(t,t+5);//從數(shù)組獲得初值vector<int>d(b.begin(),b.begin()+3);//局部拷貝創(chuàng)立d為b的前3個(gè)元素a.assign(100);//動(dòng)態(tài)擴(kuò)容至100個(gè)元素07:42:0229向量常用操作a.assign(b.begin(),b.begin()+3);//b的前3個(gè)元素賦給aa.assign(4,2);//a向量含4個(gè)元素,全初始化為2intx=a.back();//a的最后一個(gè)元素賦給變量xa.clear();//a向量清空〔不再有元素〕if(a.empty())cout<<”empty”;//a判空操作inty=a.front();//a的第一個(gè)元素賦給變量ya.pop_back();//刪除a的最后一個(gè)元素a.push_back(5);//a最后插入一個(gè)元素,其值為5a.resize(10);//a元素個(gè)數(shù)調(diào)至10。多刪少補(bǔ),其值隨機(jī)a.resize(10,2);//a元素個(gè)數(shù)調(diào)至10。多刪少補(bǔ),新添元素初值為2if(a==b)cout<<”equal”;//a與b的向量比較操作添加元素例:讀入一個(gè)文件aaa.text的數(shù)據(jù)向量中,文件中為一些整數(shù)〔不知個(gè)數(shù)〕。要判斷向量中的元素有多少個(gè)兩兩相等的數(shù)對(duì)。F0310.cpp07:42:023007:42:0231向量操作尤其適合于函數(shù)參數(shù)傳遞〔2-D以上的數(shù)組參數(shù)的傳遞十分丑陋〕:傳遞一個(gè)矩陣,無論其每行中的元素個(gè)數(shù)不同.輸出之:typedefvector<vector<int>>Mat;voidprint(constMat&a){for(inti=0;i<a.size();++i){for(intj=0;j<a[i].size();++j)cout<<a[i][j]<<"";cout<<endl;}}07:42:02327.指針與引用(Pointers&Reference)

指針指向存放數(shù)據(jù)的地址指針必須初始化或者賦值(指向了數(shù)據(jù))后,才能進(jìn)行間接訪問(間訪)操作int*ip;intiCount=18;int*iPtr=&iCount;//初始化ip=&iCount;//賦值*ip=8;//間訪操作07:42:0233指針操作與指向數(shù)據(jù)的類型密切相關(guān)

floatf=34.5;

int*ip=reinterpret_cast<int*>(&f);

cout<<“fAddr:”<<&f<<“=>”<<f<<“\n”;

cout<<“iAddr:”<<ip<<“=>”<<*ip<<“\n”;

*ip=100;

cout<<“int:”<<*ip<<“\n”;

cout<<“float:”<<f<<“\n”;

結(jié)果為:

fAddr:1245064=>34.5

iAddr:1245064=>1107951616

int:100

float:1.4013e-4307:42:0234指針加減整數(shù)的操作表示空間位置上的挪動(dòng)

但是挪動(dòng)的字節(jié)數(shù)與其數(shù)據(jù)類型相關(guān):

對(duì)float指針加6實(shí)際增加了24個(gè)字節(jié)

對(duì)longint指針加5實(shí)際增加了20個(gè)字節(jié)

對(duì)char指針減7實(shí)際減少了7個(gè)字節(jié)

對(duì)double指針減2實(shí)際減少了16個(gè)字節(jié)07:42:0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論