版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度文化娛樂產(chǎn)品版權(quán)授權(quán)使用合同4篇
- 2025年碳酸鈣泡騰顆粒項(xiàng)目投資可行性研究分析報(bào)告
- 2025年嵌入式熔絲箱項(xiàng)目投資可行性研究分析報(bào)告
- 2025年織造牛津包項(xiàng)目可行性研究報(bào)告
- 2022-2027年中國(guó)無紡布禮品袋行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 2020-2025年中國(guó)托兒所服務(wù)行業(yè)市場(chǎng)調(diào)查研究及投資戰(zhàn)略咨詢報(bào)告
- 2021-2026年中國(guó)吉林省智慧交通市場(chǎng)深度分析及行業(yè)前景展望報(bào)告
- 二零二五年度臨時(shí)水電工勞務(wù)派遣服務(wù)合同
- 2025年美容儀器銷售與售后服務(wù)合同樣本2篇
- 2025年體驗(yàn)式婚禮策劃加盟合同
- 二零二五年度無人駕駛車輛測(cè)試合同免責(zé)協(xié)議書
- 2025年湖北華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員52名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高三日語一輪復(fù)習(xí)助詞「と」的用法課件
- 毛渣采購(gòu)合同范例
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- 燃?xì)夤艿滥甓葯z驗(yàn)報(bào)告
- GB/T 44052-2024液壓傳動(dòng)過濾器性能特性的標(biāo)識(shí)
- FZ/T 81013-2016寵物狗服裝
- JB∕T 14089-2020 袋式除塵器 濾袋運(yùn)行維護(hù)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論