版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
07:42:021C++程序設計教程(第二版)第三章數(shù)據(jù)類型Chapter3
DataTypes清華大學出版社錢能07:42:022數(shù)據(jù)類型:一定的數(shù)據(jù)在計算機的內部表示;該數(shù)據(jù)所表示的值的集合;在該數(shù)據(jù)上的一系列操作。內部數(shù)據(jù)類型:
1.整型長整型,短整型,字符型,布爾型
2.浮點型單精度,雙精度07:42:023第三章內容
整型(intTypes)
整型子類(sub-intTypes)
浮點型(Floating-PointType)
C-串與string(C-string&string)
數(shù)組(Arrays)
向量(vectors)
指針與引用(Pointer&References)
07:42:0241.整型(intTypes)整型數(shù)的內部表示:二進制補碼位數(shù)既定的二進制補碼運算沒有加減的區(qū)別;對于溢出,只是簡單的舍棄而不是錯誤整型數(shù)的表示范圍:取決于二進制位數(shù)整型數(shù)的操作:+,-,*,/,%,<<,>>,<<=,>>=,!,^,<,<=,>,>=,==,^=,&,|,&=,|=,&&,||,&&=,||=,!=,=,+=,-=,*=,/=,%=,++,--,,,?:07:42:025編譯器的機器字長總是與整型的位長有關.如:
32位編譯器的整型數(shù)一定為32位長
整型字面值分八進制,十進制和十六進制不同表示.如:
0123//8進制
0x12af3//16進制
12345//10進制
超過表示范圍的整型數(shù)其值不可預料或者出錯.如:
錯07:42:0262.整型子類(Sub-intTypes)字符型:表示范圍:
char
有符號:-128~127unSignedchar無符號:0~255
輸出形式與整型數(shù)不同:inta=65;charb=65;cout<<a<<“\n”;cout<<b<<“\n”;
結果為:
65A
07:42:027枚舉型:enum
自定義整數(shù)區(qū)間,甚至列舉單個整數(shù)值
enumWeek{Mon,Tue,Wed,Thu,Fri,Sat,Sun};
最大特點是可以給每個值指定一個在程序中直接使用的標記(枚舉符).編程中將其當作整數(shù)常量用.如:
inta=4;if(a==Fri)cout<<“Friday\n”;
07:42:028布爾型:bool表示范圍僅含整數(shù)0和1,也可以表示成true和false,相當于:
enumbool{false,true};因為條件表達式、邏輯運算的結果都是0或1,所以,相當大數(shù)量的表達式的值與布爾型對應07:42:0293.浮點型(Floating-PointTypes)浮點數(shù)的內部表示:
國際標準IEEE754浮點表示法,它與編程所用的浮點數(shù)字面量以及輸出的十進制浮點數(shù)之間有一個轉換關系浮點數(shù)的表示范圍:
32位浮點數(shù)±3.4×103864位浮點數(shù)±1.8×10308浮點數(shù)的操作:
常規(guī)的加、減、乘、除等操作07:42:02104.C-串與string(C-string&string
)C-串結構每個字符占據(jù)1個字節(jié)一個C-串是一個字符序列,用來表示各種名字或者文字說明
C-串的字符序列的最后總是添加有一個結束標志0.即在6個字符的字串(“Hello!”)其空間存儲有7個字節(jié)左邊三圖是不同細節(jié)的同一空間結構描述’H’’e’’l’’l’’o’’!’’\0’7210110810811133001001000011001010110110001101100011011110010000100000000字符型為char,C-串的類型為char*,確切的說是constchar*.Char*稱為字符指針,與字符數(shù)組操作上一樣,都表示C-串的起始地址。07:42:021107:42:0212知道了C-串首地址,即可知道整個串,所以可以藉字符首址(字符指針)來操作C-串,但要注意,串的第一個字符與整個串的操作不同,如,C-串的輸出操作:
char*str=”Hello”;cout<<*str<<endl;//顯示Hcout<<str<<endl;//顯示Hello07:42:0213C-串不能直接比較,因為字符指針的比較只是地址值的比較而不是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ù)組比較結果:notequalnotequalnotequal07:42:0214C-串可以復制:char*str1=”good”;
char*str2=str1;//STR1和STR2共享”good”空間數(shù)組復制被禁止:
charbuffer1[6]=”Hello”;
charbuffer2[6]=buffer1[6];//錯,數(shù)組不能復制
07:42:0215不得不配備專門操作C-串的庫函數(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-串的平安性受到質疑:char*str1;char*str2=newchar[5];strcpy(str2,”ugly”);strcpy(str1,str2);//錯:str1沒有空間可儲strcpy(str2,”Hello”);//錯:str2空間不夠大str2=”Hello”;//錯:原來的”ugly”空間脫鉤,導致內存泄漏根源:復制操作須以足夠的目的地空間為前提,而所有C-串操作的空間調配都是人為安排的,C-串庫函數(shù)一概不管07:42:0217StringString是C++提供的一種自定義的類型,可以方便的執(zhí)行C-串所不能直接執(zhí)行的一切操作。它處理空間占用問題是系統(tǒng)自動的,需要多少用多少。07:42:0218類串string—串類—自定義串對應字符指針的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>>的讀入方式總是將前導的空格〔所謂空格,即包括空格、回車、水平或垂直制表符等〕濾掉,將單詞讀入,在遇到空格時結束本次輸入getline總是將行末的回車符濾掉,將其整行輸入對字串”Hello,Howareyou?”的兩種輸入方式for(strings;cin>>s;)cout<<s<<”“;cout<<endl;
strings;getline(cin,s);cout<<s<<endl;07:42:0220string流:將string實體看作是一個輸入設備.給一個像cin這樣的取名,作為流來操作,會很有用例如,如果一個文件aaa.txt,有假設干行,每行中含有不知道幾個的整數(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ù)的空間中,按下標來標記描述數(shù)組必須給出元素類型,元素個數(shù)元素個數(shù)必須在編程時確定,任何變量都不允許
inta[’a’];//表示inta[97];intn=100;inta[n];//錯:元素個數(shù)必須預知
constintn=100;inta[n];//ok
inta[];//錯:無元素個數(shù)
inta[]={1,2,3,4,5};//ok:通過初始化確定元素個數(shù)07:42:0222數(shù)組初始化可選,但須遵循語法.無初始化的數(shù)組按規(guī)定取默認值
intarray1[5]={1,2,3,4,5,6};//錯:初始值個數(shù)超元素個數(shù)intarray2[5]={1,,2,3,4};//錯:不能以逗號方式省略intarray3[5]={1,2,3,};//錯:同上intarray4[5]={};//錯:初始值不能為空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;//錯:無法拷貝創(chuàng)立c=a;//錯:無法整體拷貝和局部拷貝a[8]=10;//錯:無法動態(tài)擴容和隨意增減元素for(inti=0;i<=5;++i)//錯:無法防范下標溢出a[i]=i+1;if(a==c)a[0]=2;//錯:不可比較inta[5]={1};//初始化呆板,無法獲得全1初值字符數(shù)組書寫上的特殊性:(1)charchs1[6]={“hello”};(2)Charchs2[5]={‘h’,’e’.’l’,’l’,’o’};(3)Chcharchs3[6]=“hello”;注〔1〕和〔3〕的實際字符數(shù)應為6個?!?〕有5個。07:42:022407:42:0225二維數(shù)組的初始化,下標訪問及輸出
intarray1[2][3]={1,2,3,4,5};//最后一個默認為0intarray2[2][3]={{1,2},{4}};//共兩維,一維三個數(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";結果為:
array1:1,2,3,4,5,0,array2:1,2,0,4,0,0,07:42:02266.向量(vector)
向量與數(shù)組的共同特征是元素的排列在邏輯上是線性序列結構,可以用下標進行訪問向量可以按需創(chuàng)立,拷貝創(chuàng)立,局部拷貝創(chuàng)立,異類拷貝和創(chuàng)立靈活的初始化隨意擴容和元素增減可通過異常來進行下標溢出追蹤和處理可比較等等07:42:02276.向量(vector)
1、根本操作向量相當于容器,有四種定義方式:(1)vector<int>a(10);(2)vector<int>b(10,1);//10個元素初值都為1(3)vector<int>c(b);//用現(xiàn)成的向量來創(chuàng)立一個向量(4)vector<int>d(b.begin(),b.begin()+3);//定義了其值依次為b向量中第0到第2個元素的向量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個元素a.assign(100);//動態(tài)擴容至100個元素07:42:0229向量常用操作a.assign(b.begin(),b.begin()+3);//b的前3個元素賦給aa.assign(4,2);//a向量含4個元素,全初始化為2intx=a.back();//a的最后一個元素賦給變量xa.clear();//a向量清空〔不再有元素〕if(a.empty())cout<<”empty”;//a判空操作inty=a.front();//a的第一個元素賦給變量ya.pop_back();//刪除a的最后一個元素a.push_back(5);//a最后插入一個元素,其值為5a.resize(10);//a元素個數(shù)調至10。多刪少補,其值隨機a.resize(10,2);//a元素個數(shù)調至10。多刪少補,新添元素初值為2if(a==b)cout<<”equal”;//a與b的向量比較操作添加元素例:讀入一個文件aaa.text的數(shù)據(jù)向量中,文件中為一些整數(shù)〔不知個數(shù)〕。要判斷向量中的元素有多少個兩兩相等的數(shù)對。F0310.cpp07:42:023007:42:0231向量操作尤其適合于函數(shù)參數(shù)傳遞〔2-D以上的數(shù)組參數(shù)的傳遞十分丑陋〕:傳遞一個矩陣,無論其每行中的元素個數(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ù))后,才能進行間接訪問(間訪)操作int*ip;intiCount=18;int*iPtr=&iCount;//初始化ip=&iCount;//賦值*ip=8;//間訪操作07:42:0233指針操作與指向數(shù)據(jù)的類型密切相關
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”;
結果為:
fAddr:1245064=>34.5
iAddr:1245064=>1107951616
int:100
float:1.4013e-4307:42:0234指針加減整數(shù)的操作表示空間位置上的挪動
但是挪動的字節(jié)數(shù)與其數(shù)據(jù)類型相關:
對float指針加6實際增加了24個字節(jié)
對longint指針加5實際增加了20個字節(jié)
對char指針減7實際減少了7個字節(jié)
對double指針減2實際減少了16個字節(jié)07:42:0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型城鎮(zhèn)化項目宿舍建設承包合同4篇
- 2024銅門制安合同糾紛解決協(xié)議
- 2025年度醫(yī)院感染控制中心建設與承包合同4篇
- 2025年度智慧社區(qū)建設項目承包合作協(xié)議范文4篇
- 2025年度出租車行業(yè)駕駛員職業(yè)保險合作協(xié)議3篇
- 2025年度智能車庫使用權轉讓合同與范本4篇
- 2025年度智能化車庫租賃服務合同范本4篇
- 2024版熟石灰購銷協(xié)議范本
- 2025年度危險廢物承包裝卸處理協(xié)議4篇
- 2025年度智能穿戴設備租賃與健康管理服務合同4篇
- 二零二五年度無人駕駛車輛測試合同免責協(xié)議書
- 北京市海淀區(qū)2024-2025學年高一上學期期末考試歷史試題(含答案)
- 常用口服藥品的正確使用方法
- 2025年湖北華中科技大學招聘實驗技術人員52名歷年高頻重點提升(共500題)附帶答案詳解
- 2024年鉆探工程勞務協(xié)作協(xié)議樣式版B版
- 《心肺復蘇機救治院內心搏驟停患者護理專家共識》解讀
- 計算機二級WPS考試試題
- 智聯(lián)招聘行測題庫及答案
- 前程無憂測評題庫及答案
- 2023中華護理學會團體標準-注射相關感染預防與控制
- 超潔凈管道(CL-PVC)施工技術
評論
0/150
提交評論