編程入門基礎(chǔ)知識總結(jié)_第1頁
編程入門基礎(chǔ)知識總結(jié)_第2頁
編程入門基礎(chǔ)知識總結(jié)_第3頁
編程入門基礎(chǔ)知識總結(jié)_第4頁
編程入門基礎(chǔ)知識總結(jié)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

編程入門基礎(chǔ)知識總結(jié)

基本知識

程序=算法+數(shù)據(jù)結(jié)構(gòu),算法是對操作的描述,數(shù)據(jù)結(jié)構(gòu)是對數(shù)據(jù)的描述。

偽代碼:pseudocode

程序一般包括:

(1)預(yù)處理命令:/include等

(2)全局聲明部分

(3)函數(shù):函數(shù)首部(聲明)、函數(shù)體(局部聲明+執(zhí)行部分)

程序執(zhí)行過程

源程序-->編譯成目標程序。時->連接目標程序成可執(zhí)行文件

類:數(shù)據(jù)成員+成員函數(shù)

命名空間

實際上就是一個由程序設(shè)計者命名的內(nèi)存區(qū)域。程序員可以根據(jù)需要指定一些有名字的空間

域,把一些全局實體分別放在各個命名空間中,從而與其它全局實體分隔開,解決名字沖突,

防止全局命名空間污染。

C++庫的所有標識符(標準頭文件中函數(shù)、類、對象、類模版)都是在std命名空間定義的

A的ASCII碼值65a的97

1.數(shù)據(jù)類型

?基本類型:整型、浮點型、字符型、布爾型

?構(gòu)造類型:枚舉、數(shù)組、結(jié)構(gòu)體類型(struct)、公用體(union)、類類型

?指針類型

?引用類型

?空類型:null

int4unsignedint4shortint2unsignedshortint2

longint4unsignedlongint4

char1uchar1

float4double8longdouble8

無符號:不用保存符號位,故比有符號多了一位

有符號:數(shù)值用補碼存放(無論正負),最高位為符號位

VC中,longdouble與double字節(jié)數(shù)相同,故longdouble是無用的

GCC中,longdouble則有12個字節(jié)

無負值的量可以定義為unsignedint,如年齡、學(xué)號等,以增大存儲范圍。

shortint,longint,unsignedint這些類型后面的int可以省略

整型表示:

十進制,后面加L或I

八進制,前面加0

十六進制,前面加Ox

浮點數(shù)表示:

默認為雙精度型double

后面加f或F則為單精度float

后面加I或L則為長精度型longdouble

指數(shù)形式

數(shù)符數(shù)字部分指數(shù)部分

a=3.14e2a=0.314e4a=31.4ela=3140e-l

浮點數(shù),不管是用小數(shù)形式還是指數(shù)形式表示,在內(nèi)存中都是以指數(shù)形式表示的,且數(shù)字部

分必須小于1

如3.14159在內(nèi)存中表示為+.3141593,數(shù)字部分為.314159,是小于1的

字符型

字符型在內(nèi)存中存儲的是ASCII碼,也是整型,故而可以把字符型賦給整型

字符串后面,編譯系統(tǒng)會加個咋為結(jié)束符

符號常量

用符號代表一個常量,如#€106使PI3.14159

在編譯時,系統(tǒng)會把符號常量替換成具體的值

2.變量

變量:程序運行期間,值可變的量

變量名:代表內(nèi)存中的一個存儲單元,在編譯連接時由系統(tǒng)給每一個變量分配一個地址

標識符:標識實體名字的有效字符序列,字母、數(shù)字、下劃線

常變量:定義變量時加上const,運行期間值不可變,也即只讀變量

區(qū)別#define定義的符號常量與const定義的常變量

符號常量只是用一個符號代表一個常量,在編譯時把所有符號常量替換為指定的值,它沒有

類型,在內(nèi)存中不存在以符號常量命名的存儲單元

常變量具有變量的特征,具有類型,在內(nèi)存中有以它命名的存儲單元,與一般變量不同的是,

常變量代表的存儲單元值不可變。

強定義的好處

1.保證變量名使用的正確,不正確會在編譯時報錯

2.每個變量指定為一確定類型,在編譯時就能為其分配存儲單元

3.編譯時即可檢查變量進行的運算是否合法。

3.運算符

二進制位運算

&二進制按位與

I二進制按位或

人按位異或

?左移位

?右移位

++-自加自減運算符

++i使用i之前,i先自加

i++使用i之后,i再自加

++-結(jié)合方向為自右向左

例:

!x++先取非,再++

(i++)+6先i+6,后i++,不管有無括號,都是先運算,再自加

(++i)+6先自加,再加6

-i++:i左面是符號運算符,右面是自加運算符,設(shè)i等于3,運算過程相當(dāng)于-(i++),即-i=-3

-3+l=-2

a=-i++:a結(jié)果為-3,先賦值,再自加:

5-i++=?答案2?待測試

i=l,j=2,則a=i+++j?答案:3因為相當(dāng)于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;相當(dāng)于*ptr+=123;*ptr++;故arr[0]=129;ptr指向arr[l]

printf函數(shù)從右向左壓棧,運算順序:++ptr;輸出結(jié)果: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.內(nèi)存存儲

浮點數(shù)在內(nèi)存里和整數(shù)存儲方式不同

floata=1.0f;

cout?(int)a==(int&a);

(int&a)相當(dāng)于把該浮點數(shù)地址開始的sizeof(int)個字節(jié)當(dāng)成int型數(shù)據(jù)輸出,其值并不為1

(lnt)a顯示轉(zhuǎn)換等于1

4.類型轉(zhuǎn)換

轉(zhuǎn)換本質(zhì):按存儲單元中的存儲形式直接傳送

(1)浮點型賦給整型,舍棄小數(shù)部分

(2)double型賦給float,防止溢出錯誤

(3)int,short,long賦給char,原封不動取他八位

(4)signed賦給unsigned,符號位照搬。負數(shù)以補碼形式存放,-1賦給unsignedint,結(jié)果

為65536.整數(shù)不會變,除非兩個長度不同(int,long)發(fā)生截斷

5.C++輸入輸出

C++輸入輸出包含三個方面的內(nèi)容

(1)對系統(tǒng)指定的標準設(shè)備的輸入輸出。即從鍵盤輸入、輸出到顯示器屏幕,稱標準輸入

輸出,簡稱標準I/O

(2)以外出磁盤文件為對象進行輸入輸出,稱文件I/O

(3)對內(nèi)存中指定空間進行輸入輸出,通常指定一個字符數(shù)組作為存儲空間,稱字符串輸

入輸出,簡稱串I/O

在C++中,輸入輸出流被定義為類。C++的I/O庫中的類稱為流類,月流類定義的對象稱流

對象。

C++中輸入輸出是調(diào)用輸入輸出流庫中的流對象cin、cout實現(xiàn)的,即I/。不是C++本身定義

的,而是編譯系統(tǒng)的I/O庫中定義的。

I/O控制符#include<iomanip>

setprecision(n)設(shè)置精度為n,

十進制輸出時,n代表有效數(shù)字位數(shù)包括整數(shù)和小數(shù);

fixed(固定小數(shù)位數(shù))和scientific(指數(shù))形式輸出時,n指小數(shù)位數(shù)(不包括整數(shù)部分)

doublea=123.4567890123456

cout?a;〃十進制輸出,輸出123.456默認精度為6

cout?setprecision(9)?a;〃十進制,輸出123.456789精度為9

cout?setprecision(6);〃恢復(fù)默認精度

cout?setioflags(iOS::fixed)?a;〃固定位數(shù),123.456789,此時精度表示小數(shù)位數(shù),精度

為默認的6

6.getchar()和putcharf)

cout?getchar();〃讀入的實際是ASCII碼,故輸出為字符ASCII碼,97,而非讀入的字

cout?(c=getchar());〃輸出為字符

while((c=getchar())!='\n'){}〃循環(huán)讀入字符的控制

7.函數(shù)與模版

函數(shù)原型:不同具體形參的函數(shù)聲明

如:floatadd(float,float)

主要作用:根據(jù)函數(shù)原型,在程序編譯階段對調(diào)用函數(shù)的合法性進行全面檢查。

函數(shù)重載:同一函數(shù)名定義的多個函數(shù),這些函數(shù)的參數(shù)個數(shù),參數(shù)類型,參數(shù)順序至少有

一項不同,一個函數(shù)不能既是重載函數(shù),又是帶默認參數(shù)的函數(shù)。

函數(shù)模版:適用于函數(shù)個數(shù)相同,函數(shù)體相同,而只有類型不同的情況

[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函數(shù)作用域functionscope

塊作用域blockscope函數(shù)原型作用域functionprototypescope

遞歸函數(shù):函數(shù)體中,直接或間接調(diào)用函數(shù)本身的函數(shù)。

變量的存儲類別:外部、局部(相對于函數(shù)而言)

全局變量(也即外部變量)

靜態(tài)局部變量(static)

自動變量(不加static的局部變量)

寄存器變量(register)存放在CPU中,而非內(nèi)存中,這樣在使用時就省去了從內(nèi)存中載入

寄存器的過程。但只是建議性的,優(yōu)化編譯系統(tǒng)自動識別使用頻繁的變量,從而自動將變量

放入寄存器中。

extern聲明的外部變量

即提前引用申明,表示該變量是將在下面定義的全局變量或在其它文件中定義(本文件中不

用extern,引用該變量的外部文件用extern進行聲明)

static聲明的靜態(tài)外部變量

只能被本文件使用,而不能被外部文件使用的全局變量,這樣不同文件中的全局變量不會相

互干擾,為程序模塊化、通用化提供方便。

注:全局變量也是靜態(tài)存儲的。

內(nèi)部函數(shù)與外部函數(shù)

內(nèi)部函數(shù):static聲明,文件內(nèi)使用

外部函數(shù):另一個文件里extern聲明,表示是其它文件的函數(shù),extern可以省略

宏定義

#definePI3.14定義符號常量

#defineArea(a,b)a*b〃定義函數(shù)功能,下面當(dāng)作函數(shù)來用。

#include<iostream>'iostream,區(qū)另ij

<>在系統(tǒng)目錄尋找,找不到報錯

"在當(dāng)前目錄尋找,找不到報錯

字符數(shù)組

⑴charstr[]="iamhappy";

數(shù)組長度為11,而非10,因為后面有一個、0'

,,,',

(2)charstr[]={i/a7m';h/'y}

數(shù)組長度為5,系統(tǒng)不會自動為其在后面加

因此,⑴,⑵是不同的

輸出字符數(shù)組:cout?str;

string類

字符數(shù)組是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

指向數(shù)組的指針

inta[10]={};

int*p;

p=&a[OJ;〃與下面等價,都指向數(shù)組第一個元素,因為數(shù)組名本身就是表示數(shù)組的地址

P=a;

*************************

*p++相當(dāng)于*(p++),先得到*p的值,P再++移到下一個元素

(*p)++則是使*P的值+1

二維數(shù)組的指針表示:*(*(p+i)+j]表示a[ij]

*************************

int(*p)[n]p為指向含n個元素的數(shù)組的指針

int*p[n]定義指針數(shù)組P

函數(shù)指針指向函數(shù)的指針,主要用作形參

intmax(intjnt);

int(*p)(int,int);

p=max;賦值(地址)

p(l,2)〃調(diào)用

引用

inta=10;

int&b=a;b是對a的引用

引用傳遞,引用型變量作為函數(shù)形參

[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.}

傳遞變量地址:形參是指針變量,實參是變量地址,這種虛實結(jié)合的方法仍然是“值傳遞”

方式,只是實參的值是變量地址而已。

[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.}

結(jié)構(gòu)體變顯struct

作函數(shù)參數(shù)時有三種形式

(1)用結(jié)構(gòu)體變量名作形參

這時形參要開辟內(nèi)存單元,實參中全部內(nèi)容通過值傳遞方式一一傳遞給形參,時空開銷大,

效率低

(2)用指向結(jié)構(gòu)體變量的指針作形參,只有四個字節(jié)

voidprinted(student*p)

{

cout?p->num;

)

(3)用結(jié)構(gòu)體變量的引用變量作形參

Studentstu;

print(stu);

voidprint(Student&stu)

(

cout<stu.num;

)

newdelete動態(tài)內(nèi)存分配

new類型(初值),返回地址,分配失敗返回NULL

float*f=newfloat(3.14);

int*i=newint(6);

int*k=newint⑸[4];〃數(shù)組

delete變量deletef;deletei;

數(shù)組delete[]k;

Enum枚舉類型

聲明枚舉類型enumweekday{sun,mon,tue,wed,thu,fri,sat};

定義枚舉變量weekdayworkday,week_end;

變量賦值:workday=mon;或workday=weekday(2);

枚舉常量對應(yīng)值從0開始,0,1,2,3..

typedef聲明新類型

typedefintINTEGER,相當(dāng)于為int起了個別名,下面程序中就可以直接用INTEGER作int

用了

主要為了方便系統(tǒng)移植,如longint在VC中4個字節(jié),在GCC中占8個字節(jié),直接用int

的話可能會溢山,用INTEGER就不用擔(dān)心了,只要把ypedefintINTEGER聲明語句改就

運算符重我

方法是定義一個重載運算符的函數(shù),在需要執(zhí)行被重載的運算符時,系統(tǒng)就自動調(diào)用該函數(shù),

以實現(xiàn)響應(yīng)運算。即運算符重載是通過定義函數(shù)實現(xiàn)的,運算符重載實際上是函數(shù)重載。

格式:

函數(shù)類型operator運算符名稱(形參表列)

{對運算符的重載處理}

例如:將+用于Complex類(復(fù)數(shù))的加法運算,函數(shù)原型如下:

Complexoperator+(Complex&cl,Complex&c2);

注:operator是關(guān)鍵字,operatori就是函數(shù)名,可以描述為:函數(shù)operatori重載了運

算符+

整數(shù)加可以想象為調(diào)用如下函數(shù)

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);〃聲明重載運算符的函數(shù)

09.voiddisplay。;

10.private:

11.doublerea;

12.doubleimag;

13.);

14.Complex

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論