版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
編程入門基礎知識總結
基本知識
程序=算法+數據結構,算法是對操作的描述,數據結構是對數據的描述。
偽代碼:pseudocode
程序一般包括:
(1)預處理命令:/include等
(2)全局聲明部分
(3)函數:函數首部(聲明)、函數體(局部聲明+執(zhí)行部分)
程序執(zhí)行過程
源程序-->編譯成目標程序。時->連接目標程序成可執(zhí)行文件
類:數據成員+成員函數
命名空間
實際上就是一個由程序設計者命名的內存區(qū)域。程序員可以根據需要指定一些有名字的空間
域,把一些全局實體分別放在各個命名空間中,從而與其它全局實體分隔開,解決名字沖突,
防止全局命名空間污染。
C++庫的所有標識符(標準頭文件中函數、類、對象、類模版)都是在std命名空間定義的
A的ASCII碼值65a的97
1.數據類型
?基本類型:整型、浮點型、字符型、布爾型
?構造類型:枚舉、數組、結構體類型(struct)、公用體(union)、類類型
?指針類型
?引用類型
?空類型:null
int4unsignedint4shortint2unsignedshortint2
longint4unsignedlongint4
char1uchar1
float4double8longdouble8
無符號:不用保存符號位,故比有符號多了一位
有符號:數值用補碼存放(無論正負),最高位為符號位
VC中,longdouble與double字節(jié)數相同,故longdouble是無用的
GCC中,longdouble則有12個字節(jié)
無負值的量可以定義為unsignedint,如年齡、學號等,以增大存儲范圍。
shortint,longint,unsignedint這些類型后面的int可以省略
整型表示:
十進制,后面加L或I
八進制,前面加0
十六進制,前面加Ox
浮點數表示:
默認為雙精度型double
后面加f或F則為單精度float
后面加I或L則為長精度型longdouble
指數形式
數符數字部分指數部分
a=3.14e2a=0.314e4a=31.4ela=3140e-l
浮點數,不管是用小數形式還是指數形式表示,在內存中都是以指數形式表示的,且數字部
分必須小于1
如3.14159在內存中表示為+.3141593,數字部分為.314159,是小于1的
字符型
字符型在內存中存儲的是ASCII碼,也是整型,故而可以把字符型賦給整型
字符串后面,編譯系統會加個咋為結束符
符號常量
用符號代表一個常量,如#€106使PI3.14159
在編譯時,系統會把符號常量替換成具體的值
2.變量
變量:程序運行期間,值可變的量
變量名:代表內存中的一個存儲單元,在編譯連接時由系統給每一個變量分配一個地址
標識符:標識實體名字的有效字符序列,字母、數字、下劃線
常變量:定義變量時加上const,運行期間值不可變,也即只讀變量
區(qū)別#define定義的符號常量與const定義的常變量
符號常量只是用一個符號代表一個常量,在編譯時把所有符號常量替換為指定的值,它沒有
類型,在內存中不存在以符號常量命名的存儲單元
常變量具有變量的特征,具有類型,在內存中有以它命名的存儲單元,與一般變量不同的是,
常變量代表的存儲單元值不可變。
強定義的好處
1.保證變量名使用的正確,不正確會在編譯時報錯
2.每個變量指定為一確定類型,在編譯時就能為其分配存儲單元
3.編譯時即可檢查變量進行的運算是否合法。
3.運算符
二進制位運算
&二進制按位與
I二進制按位或
人按位異或
?左移位
?右移位
++-自加自減運算符
++i使用i之前,i先自加
i++使用i之后,i再自加
++-結合方向為自右向左
例:
!x++先取非,再++
(i++)+6先i+6,后i++,不管有無括號,都是先運算,再自加
(++i)+6先自加,再加6
-i++:i左面是符號運算符,右面是自加運算符,設i等于3,運算過程相當于-(i++),即-i=-3
-3+l=-2
a=-i++:a結果為-3,先賦值,再自加:
5-i++=?答案2?待測試
i=l,j=2,則a=i+++j?答案:3因為相當于a=(i++)+j;
i=l,j=24ija=i+(++j)?答案:4
賦值運算符=的優(yōu)先級小于++--運算符
示例:
intarr[]-{6,7,8,9,10};
sint*ptr=arr;
*(ptr++)+=123;
pnntf("%d,%d",*ptG*(++ptr));
解:
*(ptr++)+=123;相當于*ptr+=123;*ptr++;故arr[0]=129;ptr指向arr[l]
printf函數從右向左壓棧,運算順序:++ptr;輸出結果:88
cout也是自右向左壓棧。
逗號運算符
又稱順序求值運算符
則答案注意逗號運算符優(yōu)先級最低。注:整個逗號表達式的
a=3*4za*5a=?12?
值為60(a=3*4=12,12*5=60)
x=(a=3,6*3)則x=18
x=a=3,6*a則x=3
3.內存存儲
浮點數在內存里和整數存儲方式不同
floata=1.0f;
cout?(int)a==(int&a);
(int&a)相當于把該浮點數地址開始的sizeof(int)個字節(jié)當成int型數據輸出,其值并不為1
(lnt)a顯示轉換等于1
4.類型轉換
轉換本質:按存儲單元中的存儲形式直接傳送
(1)浮點型賦給整型,舍棄小數部分
(2)double型賦給float,防止溢出錯誤
(3)int,short,long賦給char,原封不動取他八位
(4)signed賦給unsigned,符號位照搬。負數以補碼形式存放,-1賦給unsignedint,結果
為65536.整數不會變,除非兩個長度不同(int,long)發(fā)生截斷
5.C++輸入輸出
C++輸入輸出包含三個方面的內容
(1)對系統指定的標準設備的輸入輸出。即從鍵盤輸入、輸出到顯示器屏幕,稱標準輸入
輸出,簡稱標準I/O
(2)以外出磁盤文件為對象進行輸入輸出,稱文件I/O
(3)對內存中指定空間進行輸入輸出,通常指定一個字符數組作為存儲空間,稱字符串輸
入輸出,簡稱串I/O
在C++中,輸入輸出流被定義為類。C++的I/O庫中的類稱為流類,月流類定義的對象稱流
對象。
C++中輸入輸出是調用輸入輸出流庫中的流對象cin、cout實現的,即I/。不是C++本身定義
的,而是編譯系統的I/O庫中定義的。
I/O控制符#include<iomanip>
setprecision(n)設置精度為n,
十進制輸出時,n代表有效數字位數包括整數和小數;
fixed(固定小數位數)和scientific(指數)形式輸出時,n指小數位數(不包括整數部分)
doublea=123.4567890123456
cout?a;〃十進制輸出,輸出123.456默認精度為6
cout?setprecision(9)?a;〃十進制,輸出123.456789精度為9
cout?setprecision(6);〃恢復默認精度
cout?setioflags(iOS::fixed)?a;〃固定位數,123.456789,此時精度表示小數位數,精度
為默認的6
6.getchar()和putcharf)
cout?getchar();〃讀入的實際是ASCII碼,故輸出為字符ASCII碼,97,而非讀入的字
符
cout?(c=getchar());〃輸出為字符
while((c=getchar())!='\n'){}〃循環(huán)讀入字符的控制
7.函數與模版
函數原型:不同具體形參的函數聲明
如:floatadd(float,float)
主要作用:根據函數原型,在程序編譯階段對調用函數的合法性進行全面檢查。
函數重載:同一函數名定義的多個函數,這些函數的參數個數,參數類型,參數順序至少有
一項不同,一個函數不能既是重載函數,又是帶默認參數的函數。
函數模版:適用于函數個數相同,函數體相同,而只有類型不同的情況
[cpp]viewplaincopy
Ol.#include<iostream>
02.usingnamespacestd;
03.template<typenameT>//template<classT>
04.Tmax(Ta,Tb,Tc)
O5.(
06.if(b>a)a=b;
07.if(c>a)a=c;
08.returna;
09.}
lO.intmain()
ll.(
12.inta=l,b=2,c=3;
13.cout?T(a,bzc);
14.floatd=l.l,e=2.2/f=3.3;
15.cout?T(d,e,f);
16.}
變量作用域;變量有效范圍,有四利/
文件作用域filescope函數作用域functionscope
塊作用域blockscope函數原型作用域functionprototypescope
遞歸函數:函數體中,直接或間接調用函數本身的函數。
變量的存儲類別:外部、局部(相對于函數而言)
全局變量(也即外部變量)
靜態(tài)局部變量(static)
自動變量(不加static的局部變量)
寄存器變量(register)存放在CPU中,而非內存中,這樣在使用時就省去了從內存中載入
寄存器的過程。但只是建議性的,優(yōu)化編譯系統自動識別使用頻繁的變量,從而自動將變量
放入寄存器中。
extern聲明的外部變量
即提前引用申明,表示該變量是將在下面定義的全局變量或在其它文件中定義(本文件中不
用extern,引用該變量的外部文件用extern進行聲明)
static聲明的靜態(tài)外部變量
只能被本文件使用,而不能被外部文件使用的全局變量,這樣不同文件中的全局變量不會相
互干擾,為程序模塊化、通用化提供方便。
注:全局變量也是靜態(tài)存儲的。
內部函數與外部函數
內部函數:static聲明,文件內使用
外部函數:另一個文件里extern聲明,表示是其它文件的函數,extern可以省略
宏定義
#definePI3.14定義符號常量
#defineArea(a,b)a*b〃定義函數功能,下面當作函數來用。
#include<iostream>'iostream,區(qū)另ij
<>在系統目錄尋找,找不到報錯
"在當前目錄尋找,找不到報錯
字符數組
⑴charstr[]="iamhappy";
數組長度為11,而非10,因為后面有一個、0'
,,,',
(2)charstr[]={i/a7m';h/'y}
數組長度為5,系統不會自動為其在后面加
因此,⑴,⑵是不同的
輸出字符數組:cout?str;
string類
字符數組是C中的處理方式,C++中用string類,#include<string>
字符串變量中不會存放''0',只存放字符串本身,故stringstr="hell。";的長度為5,要注意。
字符串變量存儲的實際是字符串的指針,4個字節(jié),
sizeof(string)=4;
stringname[]={"i"/"am","happy"};sizeof(name)=3*4=12;
變量與指針:
int*p=&i;〃int型指針變量,定義時的*只是表示指針類型
p是指針變量,其值是變量i的地址,*p則是存儲單元,*&a與*p同,都表示變量a
指向數組的指針
inta[10]={};
int*p;
p=&a[OJ;〃與下面等價,都指向數組第一個元素,因為數組名本身就是表示數組的地址
P=a;
*************************
*p++相當于*(p++),先得到*p的值,P再++移到下一個元素
(*p)++則是使*P的值+1
二維數組的指針表示:*(*(p+i)+j]表示a[ij]
*************************
int(*p)[n]p為指向含n個元素的數組的指針
int*p[n]定義指針數組P
函數指針指向函數的指針,主要用作形參
intmax(intjnt);
int(*p)(int,int);
p=max;賦值(地址)
p(l,2)〃調用
引用
inta=10;
int&b=a;b是對a的引用
引用傳遞,引用型變量作為函數形參
[cpp]viewplaincopy
01.〃值會改變
O2.main{
03.inti=5,j=6;
04.sw叩(i,j)
05.)
O6.voidswap(int&a,int&b)〃這里的&不是“a的地址”,而是指“a是一個引用型變量”,
&是個聲明符
07.(
08.inttemp;
09.temp=a;
10.a=b;
11.b=temp;
12.}
傳遞變量地址:形參是指針變量,實參是變量地址,這種虛實結合的方法仍然是“值傳遞”
方式,只是實參的值是變量地址而已。
[cpp]viewplaincopy
01.〃值會改變
02.main()
03.(
04.inti=5,j=6;
05.swap(&i,&j)
06.}
O7.voidswap(int*pl,int*p2)〃這里的*號也只表示是指針類型
08.{
09.inttemp;
10.temp=*pl;
11.*pl=*p2;
12.*p2=temp;
13.}
結構體變顯struct
作函數參數時有三種形式
(1)用結構體變量名作形參
這時形參要開辟內存單元,實參中全部內容通過值傳遞方式一一傳遞給形參,時空開銷大,
效率低
(2)用指向結構體變量的指針作形參,只有四個字節(jié)
voidprinted(student*p)
{
cout?p->num;
)
(3)用結構體變量的引用變量作形參
Studentstu;
print(stu);
voidprint(Student&stu)
(
cout<stu.num;
)
newdelete動態(tài)內存分配
new類型(初值),返回地址,分配失敗返回NULL
float*f=newfloat(3.14);
int*i=newint(6);
int*k=newint⑸[4];〃數組
delete變量deletef;deletei;
數組delete[]k;
Enum枚舉類型
聲明枚舉類型enumweekday{sun,mon,tue,wed,thu,fri,sat};
定義枚舉變量weekdayworkday,week_end;
變量賦值:workday=mon;或workday=weekday(2);
枚舉常量對應值從0開始,0,1,2,3..
typedef聲明新類型
typedefintINTEGER,相當于為int起了個別名,下面程序中就可以直接用INTEGER作int
用了
主要為了方便系統移植,如longint在VC中4個字節(jié),在GCC中占8個字節(jié),直接用int
的話可能會溢山,用INTEGER就不用擔心了,只要把ypedefintINTEGER聲明語句改就
行
運算符重我
方法是定義一個重載運算符的函數,在需要執(zhí)行被重載的運算符時,系統就自動調用該函數,
以實現響應運算。即運算符重載是通過定義函數實現的,運算符重載實際上是函數重載。
格式:
函數類型operator運算符名稱(形參表列)
{對運算符的重載處理}
例如:將+用于Complex類(復數)的加法運算,函數原型如下:
Complexoperator+(Complex&cl,Complex&c2);
注:operator是關鍵字,operatori就是函數名,可以描述為:函數operatori重載了運
算符+
整數加可以想象為調用如下函數
intoperator+(inta,intb)
{returna+b;}
[cpp]viewplaincopy
01.include<iostream>
02.usingnamespacestd;
03.classComplex
O4.(
05.public:
06.Complex(){real=0;imag=0;}
07.Complex(doubler,doublerXreal=r;imag=i;}
08.Complexoperator+(Complex&c2);〃聲明重載運算符的函數
09.voiddisplay。;
10.private:
11.doublerea;
12.doubleimag;
13.);
14.Complex
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度木材采購與木材加工企業(yè)合作開發(fā)合同3篇
- 2025年度乙方向主導的房屋租賃合同修訂版8篇
- 2025年個人住房銀行貸款抵押合同樣本(三篇)
- 2025年度大型企業(yè)銷售主管勞務派遣與業(yè)績提成合同2篇
- 調味品生產項目可行性研究報告建議書
- 2025年度專業(yè)飛行員崗位聘請合同范本
- 機動車輛抵押貨款合同
- 拆遷合同協議書模板
- 2024水產品跨境電商平臺合作與推廣合同3篇
- 2024版購買口罩采購合同范本
- 團隊成員介紹
- 水泵行業(yè)銷售人員工作匯報
- 《流感科普宣教》課件
- 離職分析報告
- 春節(jié)家庭用電安全提示
- 醫(yī)療糾紛預防和處理條例通用課件
- 廚邦醬油推廣方案
- 乳腺癌診療指南(2024年版)
- 高三數學寒假作業(yè)1
- 保險產品創(chuàng)新與市場定位培訓課件
- (完整文本版)體檢報告單模版
評論
0/150
提交評論