《C++面向?qū)ο蟪绦蛟O(shè)計》課件第2章_第1頁
《C++面向?qū)ο蟪绦蛟O(shè)計》課件第2章_第2頁
《C++面向?qū)ο蟪绦蛟O(shè)計》課件第2章_第3頁
《C++面向?qū)ο蟪绦蛟O(shè)計》課件第2章_第4頁
《C++面向?qū)ο蟪绦蛟O(shè)計》課件第2章_第5頁
已閱讀5頁,還剩200頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2.1C++字符集和關(guān)鍵字

(C++CharacterSetandKeywords)

2.2基本數(shù)據(jù)類型和表達(dá)式

(BasicDataTypesandExpressions) 2.3運算符與表達(dá)式(OperatorsandExpressions)2.4C++程序的基本控制結(jié)構(gòu)

(BasicControlStructureofC++Program)

2.5動態(tài)內(nèi)存分配(DynamicStorageAllocation) 2.6常見編程錯誤(CommonProgrammingErrors)本章小結(jié)(ChapterSummary)習(xí)題2(Exercises2)

2.1.1字符集(CharacterSet)

C++?語言的字符集由下列字符組成:

(1)?52個大小寫英文字母:a~z和A~Z。

(2)?10個數(shù)字字符:0~9。

(3)其他字符:空格、?!、#、%、^、&、*、?_(下劃線)等。2.1C++字符集和關(guān)鍵字(C++CharacterSetandKeywords)2.1.2標(biāo)識符(Identifier)

標(biāo)識符是程序設(shè)計人員用來對程序中的一些實體進行標(biāo)識的一種單詞。它是由若干個字符組成的具有一定意義的最小詞法單元。通常使用標(biāo)識符來定義函數(shù)名、類名、對象名、變量名、常量名、類型名和語句標(biāo)號名等。C++?規(guī)定:標(biāo)識符是由大小寫字母、數(shù)字字符和下劃線符號組成的以字母或下劃線開頭的字符集合。2.1.3關(guān)鍵字(Keywords)

關(guān)鍵字用來說明C++?語言中某一固定含義的字。例如,float是關(guān)鍵字,它用來說明浮點類型的對象(變量)。下面是部分常用關(guān)鍵字:2.1.4其他標(biāo)識(OtherIdentifiers)

除了上面提到的標(biāo)識符和關(guān)鍵字以外,在程序中還會有以下幾種標(biāo)識。

1.常量

C++?語言中,常量分為數(shù)字常量、字符常量和字符串常量。

2.運算符

運算符是一些用來進行某種操作的單詞,它實際上是系統(tǒng)預(yù)定義的函數(shù)名,這些函數(shù)作用于被操作的對象上將獲得一個結(jié)果值。

3.特定字

特定字是指具有特定含義的標(biāo)識符,主要有如下幾個:

define、include、undef、ifdef、ifndef、endif、line、progma和error。

4.分隔符

分隔符被稱為程序中的標(biāo)點符號,用來分隔單詞與程序正文,表示某個程序?qū)嶓w的結(jié)束和另一個程序?qū)嶓w的開始。

5.注釋符

注釋在程序中起對程序注解和說明的作用,其目的是便于對程序進行閱讀和分析。C++語言中的注釋方法如下兩種:

(1)使用“/*”和“*/”括起來進行注釋,在“/*”和“*/”之間的所有字符都為注釋符。這種注釋方法適用于多行注釋信息的情況,是C語言中原有的注釋方法。

(2)使用“//”,從“//”后的字符開始,直到它所在行的行尾所有字符都被作為注釋信息。2.2.1C++?的基本數(shù)據(jù)類型(C++BasicDataTypes)

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

C++?的基本數(shù)據(jù)類型有4種:整型(int)、浮點型(float)、字符型(char)、邏輯型(bool)。2.2基本數(shù)據(jù)類型和表達(dá)式(BasicDataTypesandExpressions)一個數(shù)據(jù)類型定義了數(shù)據(jù)(以變量或常量的形式來描述)可接受值的集合以及對它能執(zhí)行的操作。數(shù)據(jù)類型有3種主要用途:

①指明對該類型的數(shù)據(jù)應(yīng)分配多大的內(nèi)存空間;

②定義能用于該類型數(shù)據(jù)的操作;

③防止數(shù)據(jù)類型不匹配。C++?的數(shù)據(jù)類型如圖2-1所示。圖2-1C++?的數(shù)據(jù)類型

2.修飾符

在基本的數(shù)據(jù)類型前可以添加修飾符,以改變基本類型的意義。修飾符主要包括signed(有符號)、unsigned(無符號)、short(短型)和long(長型)。

基本的數(shù)據(jù)類型及其表示范圍如表2-1所示。表2-1基本的數(shù)據(jù)類型及其表示范圍2.2.2常量(Constants)

常量就是指在程序運行的整個過程中值始終保持不變的量。

1.整型常量

整型常量就是以文字形式出現(xiàn)的整數(shù),包括正整數(shù)、零、負(fù)整數(shù),其表示形式有十進制、八進制、十六進制。

2.實型常量

C++?提供了兩種實型常量的表示形式:定點數(shù)形式、指數(shù)形式。

3.字符常量

字符常量由一對單引號括起的一個字符表示,其值為所括起字符在ASCII表中的編碼。

字符常量包括以下兩種類型:

(1)常規(guī)字符:單引號括起的一個字符,如?'a'、'x'、'?'等。

(2)轉(zhuǎn)義字符:以?\?開頭的字符序列,如?\n、\b?等。常用的轉(zhuǎn)義字符如表2-2所示。表2-2常用的轉(zhuǎn)義字符

4.字符串常量

字符串常量是由一對雙引號括起的字符序列,字符序列中可以包含空格、轉(zhuǎn)義序列或任何其他字符。例如:

“C++isabetterC\n”

需要注意的是?'a'?和?"a"?的區(qū)別,'a'?是一個字符常量,在內(nèi)存中占一個字節(jié)的存儲單元,而?"a"?是一個字符串常量,在內(nèi)存中占兩個字節(jié),除了存儲?'a'?以外,還要存儲字符串結(jié)尾符?'\0'。表2-3所示為字符常量與字符串常量的區(qū)別。表2-3字符常量與字符串常量的區(qū)別

5.布爾常量

布爾(bool)常量僅有兩個:true(真)和false(假)。通常以1表示真,0表示假。

6.枚舉常量

枚舉指一一列舉變量的值,變量的值只能從所列舉的值中取其一。

枚舉聲明:

enum<枚舉名>{<枚舉表>};2.2.3變量(Variables)

在程序運行過程中,其值可以被改變的量稱為變量。

1.變量的聲明

變量的命名規(guī)則:變量名是只能由英文字母、十進制數(shù)字符號和下劃線組成的字符序列,該序列只能以字母或下劃線開頭。變量有以下三個特征:

(1)每一個變量有一個變量名。

(2)每一個變量有一個類型。

(3)每一個變量保存一個值。

變量在使用之前需要先聲明其類型和名稱。

變量聲明語句的形式如下:

數(shù)據(jù)類型變量名1,變量名2,…,變量名n;

2.變量賦值與初始化

在聲明變量的同時,可以給它賦以初值,稱為變量初始化。賦值形式如下:

數(shù)據(jù)類型標(biāo)識符1(初始值1),…,標(biāo)識符n(初始值n);

數(shù)據(jù)類型標(biāo)識符1=初始值1,…,標(biāo)識符n=初始值n;

3.整型變量

整型變量可分為有符號短整型、無符號短整型、有符號整型、無符號整型、有符號長整型、無符號長整型。

注意:對變量的定義一般放在一個函數(shù)的開頭部分。

4.實型變量

C++?語言的實型變量可分為以下兩種:

(1)單精度型:類型關(guān)鍵字為float,一般占4個字節(jié)。

(2)雙精度型:類型關(guān)鍵字為double,一般占8個字節(jié)。

例如:

floatx,y; //指定x、y為單精度實型變量

doublew; //指定w為雙精度實型變量

5.字符變量

字符變量用來存儲字符常量。注意:每個字符變量只能存放一個字符,一般一個字節(jié)存放一個字符,即一個字符變量在內(nèi)存中占一個字節(jié)。將一個字符常量放到一個字符變量中,并不是把該字符本身放到內(nèi)存單元中,而是將該字符的ASCII碼值(無符號整數(shù))以二進制的形式存儲到內(nèi)存單元中。字符變量的類型關(guān)鍵字為char。

【例2-1】

字符類型與數(shù)值類型間的轉(zhuǎn)換。

程序如下:

#include<iostream>

usingnamespacestd;

intmain()

{

charch1,ch2; //定義兩個字符變量:ch1,ch2

ch1='a'; //給字符變量ch1賦值字母a

ch2='b'; //給字符變量ch2賦值字母b

cout<<"ch1="<<ch1<<'\t'<<"ch2="<<ch2<<"\n";

cout<<"ch1="<<(int)ch1<<"ch2="<<(int)ch2<<"\n";

//(int)類型強制轉(zhuǎn)換為整型

return0;

}運行結(jié)果:

ch1=ach2=b

ch1=97ch2=98

C++?語言還允許對字符型數(shù)據(jù)進行算術(shù)運算,此時就是對它們的ASCII碼值進行算術(shù)運算。字符型數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。

【例2-2】

字符型數(shù)據(jù)與整型數(shù)據(jù)互相賦值。

程序如下:

#include<iostream>

usingnamespacestd;

intmain()

{

charch1,ch2;

ch1='a';ch2='b';

ch1=ch1-32; //字符型數(shù)據(jù)ch1減掉32再重新賦給ch1

ch2=ch2-32; //字符型數(shù)據(jù)ch2減掉32再重新賦給ch2

printf("ch1=%c,ch2=%c\n",ch1,ch2);

printf("ch1=%d,ch2=%d\n",ch1,ch2);

return0;

}

運行結(jié)果:

ch1=Ach2=B

ch1=97ch2=982.2.4表達(dá)式(Expressions)

表達(dá)式是計算求值的基本單位,它是由運算符和運算數(shù)組成的式子。運算符是表示進行某種運算的符號,運算數(shù)包含常量、變量和函數(shù)等。

(1)一個表達(dá)式的值可以用來參與其他操作。

(2)一個常量或標(biāo)識對象的標(biāo)識符是一個最簡單的表達(dá)式,其值是常量或?qū)ο蟮闹?。運算符就是對數(shù)據(jù)(也稱操作數(shù),可以是常量或變量)進行指定操作、運算并產(chǎn)生新值的特殊符號。

C++?語言的運算符按其在表達(dá)式中與運算對象的關(guān)系(連接運算對象的個數(shù))可分為以下三類:

(1)單目運算(一元運算符,只需一個操作數(shù));

(2)雙目運算(二元運算符,需兩個操作數(shù));

(3)三目運算(三元運算符,需三個操作數(shù))。2.3運算符與表達(dá)式(OperatorsandExpressions)左值(leftvalue,簡寫為lvalue)是指只能出現(xiàn)在賦值表達(dá)式左邊的表達(dá)式。左值表達(dá)式具有存放數(shù)據(jù)的空間,而且存放是允許的。例如:

inta=3; //a是變量,所以a是左值

constintb=4; //b是常量,所以b不是左值

右值(rightvalue,簡寫為rvalue)是指只能出現(xiàn)在賦值表達(dá)式右邊的表達(dá)式。左值表達(dá)式也可以作為右值表達(dá)式。例如:

inta,b=6;

a=b; //b是變量,所以是左值,此處作為右值

a=8; //8是常量,只能作右值,不能作為左值表達(dá)式可產(chǎn)生左值、右值或不產(chǎn)生值。例如:

inta;

(a=4)=28;

//a=4是左值表達(dá)式,可以被賦以值28

/*28是右值表達(dá)式,而a=4是左值表達(dá)式(C++?的語法規(guī)定),所以可以放在賦值語句的左邊。該語句表示將剛剛賦給a的值4用28代替*/2.3.1算術(shù)運算符與算術(shù)表達(dá)式

(ArithmeticOperatorsandArithmeticExpressions)

算術(shù)運算符在編寫程序中是最常用的一種運算符。

1.算術(shù)運算符

算術(shù)運算符有雙目運算和單目運算兩種,包括:

(1)?+:加法運算符,也稱正值運算符,如12+2、+8。(2)-:減法運算符,也稱負(fù)值運算符,如56-2、-8。

(3)*:乘法運算符,如3*7。

(4)?/:除法運算符,如2/5。

(5)?%:模運算符,也稱求余運算符,如7%3=1。

2.算術(shù)表達(dá)式

算術(shù)表達(dá)式是由數(shù)值運算符和位操作運算符組成的表達(dá)式。算術(shù)表達(dá)式的值是一個數(shù)值。算術(shù)表達(dá)式的類型由運算符和運算數(shù)確定。例如,a+3*(b/2)就是一個算術(shù)表達(dá)式。

3.算術(shù)類型轉(zhuǎn)換

C++中算術(shù)類型轉(zhuǎn)換有兩類,即隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換。

隱式類型轉(zhuǎn)換按從低到高的順序進行,如圖2-2所示。圖2-2隱式類型轉(zhuǎn)換

2)顯式類型轉(zhuǎn)換

顯式類型轉(zhuǎn)換是由程序員顯式指出的類型轉(zhuǎn)換,其轉(zhuǎn)換形式有以下兩種:

類型名(表達(dá)式)

(類型名)表達(dá)式

這里的“類型名”是指任何合法的C++?數(shù)據(jù)類型,如float、int等。通過類型的顯式轉(zhuǎn)換可以將“表達(dá)式”轉(zhuǎn)換成適當(dāng)?shù)念愋?。例如,“doublef=3.6;”將f轉(zhuǎn)換成int類型可以寫成“intn=(int)f;”,這樣n為3。2.3.2關(guān)系運算與邏輯運算

(RelationOperateandLogicOperate)

1.關(guān)系運算符

C++提供了一組關(guān)系運算符,以實現(xiàn)對數(shù)據(jù)的關(guān)系比較。C++中的關(guān)系運算符如下:

<(小于),<=(小于等于),>(大于),

>=(大于等于), ==(等于),!=(不等于)

2.邏輯運算符

邏輯運算符用于進行復(fù)雜的邏輯判斷。邏輯運算符的操作數(shù)類型為bool型,其返回類型亦為bool型。C++?中的邏輯運算符如下:

&&(邏輯與),||(邏輯或),!(邏輯非)

注意:

(1)邏輯表達(dá)式的結(jié)果為真則為1,結(jié)果為假則為0。

(2)邏輯非(!)是單目運算符,邏輯與(&&)與邏輯或(||)為雙目運算符。

(3)邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低。

C++?中邏輯運算的真值表如表2-4所示。表2-4C++中邏輯運算的真值表

(4)?C++對于二元運算符&&和||可進行短路求值(short-circuitevaluation)。由于&&與||表達(dá)式按從左到右的順序進行計算,因此如果根據(jù)左邊的計算結(jié)果能得到整個邏輯表達(dá)式的結(jié)果,那么右邊的計算就不需要進行了,該規(guī)則叫短路求值。①當(dāng)多個表達(dá)式用&&連接時,若一個為假,則整個連接為假。

例如:

intn=3,m=6;

if(n>4&&m++<10)

cout<<“mshouldnotchanged.\n”;

cout<<“m=”<<m<<endl;

輸出結(jié)果為m=6。②當(dāng)多個表達(dá)式用?||?連接時,若一個為真,則整個連接為真。

例如:

inti=l,j;

則表達(dá)式i++||i++||i++的值為1(真),運算結(jié)束后,變量i的值為2,而不是4。因為進行第一個i++運算時,其值為1(真),這時整個邏輯表達(dá)式的值為真已能確定,所以就不再進行后面的計算了。因此,變量只進行了一次自加運算,其值為2。2.3.3賦值運算符與賦值表達(dá)式

(Assignment

OperatorandAssignmentExpression)

賦值運算用于實現(xiàn)對變量的賦值,即為已聲明的變量賦一個特定值。C++中的賦值運算符除了對變量進行賦值以外,作為一種運算符,還具有運算的結(jié)果。賦值運算符是雙目運算符。

1.賦值運算

(1)賦值運算符“=”的一般格式如下:

變量=表達(dá)式;

表示將其右側(cè)的表達(dá)式求出結(jié)果,賦給其左側(cè)的變量。例如:

inti;

i=3*(4+5); //i的值變?yōu)?7

(2)賦值表達(dá)式本身的運算結(jié)果是右側(cè)表達(dá)式的值,而結(jié)果類型是左側(cè)變量的數(shù)據(jù)類型。例如:

inti=1.2*3; //結(jié)果為3,而不是3.6

(3)賦值運算符的結(jié)合性是從右至左的,因此,C++程序中可以出現(xiàn)連續(xù)賦值的情況。例如,下面的賦值是合法的:

inti,j,k;

i=j=k=10; //i、j、k都賦值為10

(4)復(fù)合運算符如下:

+=?(加賦值):a+=b等價于a=a+b。

-=?(減賦值):a-=b等價于a=a-b。*=?(乘賦值):a*=b等價于a=a*b。

/=?(除賦值):a/=b等價于a=a/b。

%=?(取模賦值):a%=b等價于a=a%b。

<<=?(左移賦值):a<<=b等價于a=a<<b。

>>=?(右移賦值):a>>=b等價于a=a>>b。

&=?(與賦值):a&=b等價于a=a&b。

^=?(異或賦值):a^=b等價于a=a^b。

|=?(或賦值):a|=b等價于a=a?|?b。例如:

inta=12;

a+=a;

表示a=a+a=12+12=24。

又如:

inta=12;

a+=a-=a*=a;

表示:

a=a*a //a=12*12=144

a=a-a //a=144-144=0

a=a+a //a=0+0=0

2.自增與自減運算符

自增(++)、自減(--)運算符是C++

中使用效率很高的兩個運算符,且都是單目運算符,為變量的增1和減1提供了緊湊格式。自增、自減運算符有以下四種應(yīng)用格式:

inta=3;b=a++; 等價于

b=a;a=a+1;

inta=3;b=a--; 等價于 b=a;a=a-1;

inta=3;b=++a; 等價于 a=a+1;b=a;

inta=3;b=--a; 等價于 a=a-1;b=a;在調(diào)用函數(shù)時,實參的求值順序一般為自右向左。

例如:

inta=1;

printf(“%d,%d,%d”,a++,a++,a++);

輸出的結(jié)果為3,2,1,而不是1,2,3。

由于?++、--?運算符內(nèi)含了賦值運算,所以運算對象只能作用于左值,不能作用于常量和表達(dá)式。例如,5++、(x+y)++?都是不合法的。

【例2-3】自增、自減運算符的用法與運算規(guī)則示例。

程序如下:

#include<iostream>

usingnamespacestd;

intmain()

{

intx=6,y;cout<<"x="<<x<<endl; //輸出x的初值

y=++x; //前置運算,x的值先增1,再賦值給y

cout<<"x="<<x<<"y="<<y<<endl;

y=x--; //后置運算,x先賦值給y,再增1

cout<<"x="<<x<<"y="<<y<<endl;

return0;

}運行結(jié)果:

x=6

x=7y=7

x=6y=72.3.4條件運算符與逗號表達(dá)式

(ConditionOperatorandCommaExpression)

1.條件運算符

在C++中只提供了一個三目運算符,即條件運算符“?:”,其一般形式如下:

表達(dá)式1?表達(dá)式2:表達(dá)式3

條件運算的運算規(guī)則是:首先判斷表達(dá)式1的值,若其值為真(非0),則取表達(dá)式2的值為整個表達(dá)式的值;若其值為假(0),則取表達(dá)式3的值為整個表達(dá)式的值。

【例2-4】

用條件運算符判斷成績是否及格。

程序如下:

#include<iostream>

usingnamespacestd;

intmain()

{

intscore; cout<<“請輸入一個成績:”;

cin>>score;

cout<<"該成績"<<(score>=60?"及格":"不及格")<<endl;

return0;

}

運行結(jié)果:

請輸入一個成績:90

該成績及格

2.逗號表達(dá)式

逗號運算符用于將多個表達(dá)式連在一起,并按各表達(dá)式從左到右的順序依次求值,但只有其最右端的表達(dá)式的結(jié)果作為整個逗號表達(dá)式的結(jié)果。逗號表達(dá)式的一般格式如下:

表達(dá)式1,表達(dá)式2,…,表達(dá)式n

例如:

inta=3,b=4,c=5;

a+b,b+c,c+a;

表示先求解a+b,再求解b+c,最后求解c+a,整個表達(dá)式的結(jié)果為c+a的結(jié)果。2.3.5表達(dá)式的副作用和表達(dá)式語句

(Expression

Side-EffectandExpressionStatement)

1.運算符的優(yōu)先級

運算符的優(yōu)先級決定了表達(dá)式中各個運算符執(zhí)行的先后順序。若同一優(yōu)先級的優(yōu)先級別相同,則運算次序由結(jié)合方向決定。對于表達(dá)式:

exp1+exp2;

先計算exp1還是exp2,不同的編譯器有不同的做法。在C++?中,對簡單的表達(dá)式,交換律是成立的,但對復(fù)合表達(dá)式,交換律未必成立。例如:

c=a*b+++b;與

c=++b+a*b;

在VC++中,前者的運行結(jié)果為21,后者為24。

在表達(dá)式中,括號的優(yōu)先級是最高的。C++?中,對于簡單的表達(dá)式,括號優(yōu)先可以做到,但復(fù)合表達(dá)式未必如此,值順序使括號失去作用。例如:

inta=3,b=5,c;

c=++b*(a+b);

2.求值次序與副作用

在數(shù)學(xué)上,對于雙目運算符,不論先計算哪一個操作數(shù),都要求最終的計算結(jié)果一樣。

C++中規(guī)定,應(yīng)先計算邏輯與(&&)和邏輯或(||)的第一個操作數(shù),再計算第二個操作數(shù),以便進行短路求值。條件(?:)、逗號(,)運算符也規(guī)定了操作數(shù)的計算次序。

3.副作用的消除

在前面例子中產(chǎn)生歧義的原因主要是?++x。++x具有變量x的修改(副作用)和提供表達(dá)式值兩個操作。同樣,賦值表達(dá)式也會引起副作用。例如:

inta,b=20;

a=(b=25)+b;2.4.1程序的結(jié)構(gòu)與控制

(ProgramStructureandControl)

1.程序結(jié)構(gòu)

結(jié)構(gòu)化程序設(shè)計強調(diào)程序設(shè)計風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,規(guī)定了幾種具有良好特性的“基本結(jié)構(gòu)”,將它們作為構(gòu)成程序的基本單元,每一種基本結(jié)構(gòu)可以包含一個或多個語句。2.4C++程序的基本控制結(jié)構(gòu)(BasicControlStructureofC++Program)

1)順序結(jié)構(gòu)

順序結(jié)構(gòu)中,A和B兩個框是順序執(zhí)行的,即在執(zhí)行完A框所指定的操作后,必然接著執(zhí)行B框所指定的操作,如圖2-3所示。圖2-3順序結(jié)構(gòu)

2)選擇結(jié)構(gòu)

選擇結(jié)構(gòu)中必包含一個判斷框,根據(jù)給定的條件P是否成立而選擇執(zhí)行A框或B框,即無論條件P是否成立,只能執(zhí)行A框或B框,如圖2-4所示。當(dāng)然,A或B可以有一個是空的,如圖2-5所示。

圖2-4選擇結(jié)構(gòu)(一)圖2-5選擇結(jié)構(gòu)(二)

3)循環(huán)結(jié)構(gòu)

(1)當(dāng)型(while型)循環(huán)結(jié)構(gòu)。

當(dāng)型循環(huán)結(jié)構(gòu)中,在執(zhí)行while語句時,首先計算表達(dá)式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句,然后重復(fù)上述過程,直到循環(huán)條件表達(dá)式的值為假(0)時,循環(huán)結(jié)束,程序控制轉(zhuǎn)至while循環(huán)語句的下一語句,如圖2-6所示。

(2)直到型(until型)循環(huán)結(jié)構(gòu)。

直到型循環(huán)結(jié)構(gòu)中,do…while語句首先執(zhí)行循環(huán)體一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán),如圖2-7所示。圖2-6當(dāng)型循環(huán)結(jié)構(gòu)

圖2-7直到型循環(huán)結(jié)構(gòu)

2.控制語句

控制語句用以完成一定的控制功能,C++有9種控制語句,分別如下:

(1)?if()…else…:條件語句。

(2)?for()…:循環(huán)語句。

(3)?while()…:循環(huán)語句。

(4)?do…while():循環(huán)語句。

(5)?switch:多分支選擇語句。

(6)?continue:結(jié)束本次循環(huán)。

(7)?break:終止switch或循環(huán)語句。

(8)?return:返回語句。

(9)?goto:轉(zhuǎn)向語句。2.4.2順序結(jié)構(gòu)程序設(shè)計

(SequenceStructureProgramming)

所謂順序結(jié)構(gòu),就是指按照語句在程序中的先后次序一條一條地順次執(zhí)行。順序控制語句是一類簡單的語句,它包括表達(dá)式語句、輸入/輸出等。

1.?dāng)?shù)據(jù)的輸入和輸出

C++語言不提供輸入、輸出語句,而是提供一個面向?qū)ο蟮腎/O軟件包,用I/O流類庫來實現(xiàn)數(shù)據(jù)的輸入和輸出。

2.I/O的基本格式

1)輸入語句

當(dāng)程序需要執(zhí)行鍵盤輸入時,可以使用抽取操作符“>>”從輸入流cin中抽取鍵盤輸入的字符和數(shù)字,并把它們賦給指定的變量。cin用于輸入流操作,與抽取操作符“>>”配合可以實現(xiàn)從鍵盤輸入數(shù)據(jù)。

輸入語句的一般格式如下:

cin>><變量名1>[>><變量名2>>>…>><變量名n>];例如:

#include<iostream>

usingnamespacestd;

intmain()

{

inta;

cin>>a;

return0;

}

2)輸出語句

當(dāng)程序需要在屏幕上顯示輸出時,可以使用插入操作符“<<”向輸出流cout中插入字符和數(shù)字,并把它們顯示在屏幕上。cout用于輸出流操作,與插入操作符“<<”配合可以實現(xiàn)向屏幕輸出數(shù)據(jù)。

輸出語句的一般格式如下:

cout<<<表達(dá)式1>[<<<表達(dá)式2><<…<<<表達(dá)式n>];例如:

#include<iostream>

usingnamespacestd;

intmain()

{

cout<<"Hello.\n";

return0;

}

cout<<“hello”;

cout<<3;

cout<<endl;

等價于

cout<<“hello”<<3<<endl;

也等價于

cout<<“hello" //注意:行末無分號

<<3 //行末無分號

<<endl;

3)?I/O流的常用控制符

用控制符(manipulators)可以對I/O流的格式進行控制。C++?在頭文件iomanip.h中定義了控制符對象,可以直接將這些控制符嵌入到I/O語句中進行格式控制。在使用這些控制符時,要在程序的開頭包含頭文件iomanip.h。表2-5列出了I/O流的常用控制符。表2-5I/O流的常用控制符

【例2-5】

使用格式控制字符控制不同進制的輸出示例。

程序如下:

#include<iostream>

usingnamespacestd;

#include<iomanip.h>

voidmain()

{

inta=27;

floatx=3.14;cout<<"a="<<oct<<a<<"a="<<hex<<a<<endl;

//分別以八進制和十六進制的形式輸出a

cout<<"x="<<x<<setw(10)<<"x="<<x<<endl;

cout<<setiosflags(ios::fixed)<<"x="<<x<<endl;

}

運行結(jié)果:

a=33

a=1b

x=3.14x=3.14

x=3.140000

【例2-6】

使用格式控制字符控制輸出寬度和空位填充示例。

程序如下:

#include<iostream>

usingnamespacestd;

#include<iomanip.h>//setfill在頭文件iomanip.h中定義

voidmain()

{

cout<<setfill('%')<<setw(3)<<11<<endl<<setw(5)<<11<<endl;

cout<<setfill('');

}

運行結(jié)果:

%11

%%%11

【例2-7】使用格式控制字符控制輸出精度和正、負(fù)號的顯示示例。

程序如下:

#include<iostream>

usingnamespacestd;

#include<iomanip.h>

voidmain()

{

doublea=1.234567;

cout<<setprecision(3)<<a<<endl;

cout<<20.0/4<<endl;

cout<<setiosflags(ios::showpoint)<<20.0/4<<endl; //強制顯示小數(shù)點

cout<<20<<""<<-30<<endl;

cout<<setiosflags(ios::showpos)<<20<<""<<-30<<endl; //強制顯示符號

}運行結(jié)果:

1.23

5

5.00

20-30

+20-30

【例2-8】

使用格式控制字符控制左右對齊示例。

程序如下:

#include<iostream>

usingnamespacestd;

#include<iomanip.h>

voidmain()

{cout<<setiosflags(ios::right)<<setw(4)<<4<<setw(4)<<5<<endl;

//右對齊

cout<<setiosflags(ios::left)<<setw(4)<<6<<setw(4)<<7<<endl;

//左對齊

}

運行結(jié)果:

45

67

3.字符輸入、輸出函數(shù)

1)字符輸入函數(shù)getch()、getche()和getchar()

getch():直接從鍵盤接收一個字符,如charc1;c1=getch();表示將一個從鍵盤輸入的字符賦給字符型變量c1,在屏幕上不回顯該字符。

getche():直接從鍵盤接收一個字符,并在屏幕上回顯該字符。

getchar():從鍵盤接收一個字符,并在屏幕上回顯該字符,在按回車鍵后該字符才進入內(nèi)存。

【例2-9】

輸入、輸出函數(shù)示例。

程序如下:

#include<iostream>

usingnamespacestd;

#include<conio.h>

voidmain()

{charc1;

c1=getch();

cout<<"c1="<<c1<<endl;

c1=getche();

cout<<"c1="<<c1<<endl;

c1=getchar();

cout<<"c1="<<c1<<endl;

}運行結(jié)果:

c1=A

Bc1=B

C

c1=C

注意:

(1)當(dāng)使用getchar()時,必須將有關(guān)的頭文件stdio.h包含進源文件。

(2)當(dāng)使用getch()、getche()時,必須將有關(guān)的頭文件conio.h包含進源文件。

2)字符輸出函數(shù)putch()和putchar()

putch()和putchar()的功能是在屏幕上以字符形式顯示字符變量ch。例如:

charc1='M';

putch(c1);/*在屏幕上顯示字符M,這里將putch()換成putchar()其結(jié)果是一樣的*/

4.順序結(jié)構(gòu)程序舉例

【例2-10】

編寫程序計算圓的面積s和周長l。

#include<iostream>

usingnamespacestd;

constfloatPI=3.14159;

voidmain()

{floats,l,r;

cout<<"PleaseInputr∶";

cin>>r;

s=PI*r*r;

l=2*PI*r;

cout<<"r="<<r<<"s="<<s<<"l="<<l<<endl;

}

運行結(jié)果:

PleaseInputr:10

r=10s=314.159l=62.8381

【例2-11】

從鍵盤上輸入一個三位數(shù),然后逆序輸出。例如,輸入123,輸出321。

程序如下:

#include<iostream>

usingnamespacestd;

voidmain()

{

intn,i,j,k;

cin>>n;i=n/100; //求百位上的數(shù)字

n=n-i*100;

j=n/10; //求十位上的數(shù)字

n=n-j*10; //求個位上的數(shù)字

k=n;

cout<<"逆序數(shù)為:"<<k<<j<<i<<endl;

}

運行結(jié)果:

123

逆序數(shù):

321

【例2-12】

已知三角形的兩邊A、B及其夾角alfa,求第三邊C及面積S。

分析:根據(jù)三角形公式可知:程序如下:

#include<iostream>

#include<math.h>

#definePI3.1415926

usingnamespacestd:

voidmain()

{floatA,B,C,S,alfa;

cin>>A>>B>>alfa;

alfa=alfa*PI/180;

C=sqrt(A*A+B*B-2*A*B*cos(alfa));

S=0.5*A*B*sin(alfa);

cout<<"A="<<A<<"B="<<B<<"alfa="<<alfa<<endl;

cout<<"第三邊長C="<<C<<"面積S="<<S<<endl;

}運行時輸入為:124330<CR>

運行結(jié)果:

A=12B=43alfa=0.532599

第三邊長C=33.1551,面積S=1292.4.3選擇結(jié)構(gòu)程序設(shè)計

(BranchingStructureProgramming)

通常計算機程序是按語句在程序中書寫的順序來執(zhí)行的,然而在許多情況下,語句執(zhí)行的順序需要依賴于輸入的數(shù)據(jù)或表達(dá)式的值。

1.條件語句

1)?if語句

if語句的語法格式為:

if(條件表達(dá)式)

語句;

if(條件表達(dá)式)

{

語句序列;

}

【例2-13】

讀入三個數(shù),按從小到大的順序把它們打印出來。

程序如下:

#include<iostream>

usingnamespacestd;

voidmain()

{

doublea,b,c,t;

cout<<"請輸入三個數(shù):\n";cin>>a>>b>>c;

if(a>b)

{

t=a;a=b;b=t;

}

if(a>c)

{

t=a;a=c;c=t;

} if(b>c)

{

t=b;b=c;c=t;

}

cout<<a<<"\t"<<b<<"\t"<<c<<endl;

}

2)空語句

編譯器必須在if條件表達(dá)式的后面找到一個作為語句結(jié)束符的分號“;”,以標(biāo)志if語句的結(jié)束。例如,下面的代碼:

if(條件表達(dá)式);//空語句作if中的語句

語句;

表示不管條件表達(dá)式為真或假,總是接著執(zhí)行分號后的語句,即相當(dāng)于if語句不做任何事。

3)if…else語句

if…else語句的語法格式如下:

if(條件表達(dá)式)

{

語句序列1;

}

else

{

語句序列2;

}

【例2-14】判斷鍵盤輸入的整數(shù)是否為偶數(shù),若是則輸出is,若不是則輸出not。

程序如下:

#include<iostream>

usingnamespacestd;

voidmain()

{

intx;

cout<<“請輸入一個整數(shù):\n”;

cin>>x;

if(x%2==0)cout<<“is”<<endl;

elsecout<<"not"<<endl;

}

4)語句嵌套

當(dāng)多個if…else語句嵌套時,為了防止出現(xiàn)二義性,C++?語言規(guī)定,由后向前使每一個else都與其前面最靠近它的if配對。如果一個else的上面又有一個未經(jīng)配對的else,則先處理上面的(內(nèi)層的)else的配對。當(dāng)多個if…else語句嵌套時,在容易誤解的地方可以按照語法關(guān)系加上花括號來標(biāo)識邏輯關(guān)系的正確性。上例可以改寫如下:

if(a>b)

{

if(a>c)

max=a;

else

max=c;

}else

{

if(b>c)

max=b;

else

max=c;

}

【例2-15】

求一元二次方程ax2+bx+c=0的根。其中,系數(shù)a(a?≠?0)、b、c的值由鍵盤輸入。

程序如下:

#include<iostream>

usingnamespacestd;

#include<math.h>

voidmain()

{floata,b,c,delta,x1,x2;

constfloatzero=0.0001;

cout<<"輸入三個系數(shù)a(a!=0),b,c:"<<endl;

cin>>a>>b>>c;

cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;

delta=b*b-4*a*c;

if(fabs(delta)<zero)

{cout<<"方程有兩個相同實根:";

cout<<"x1=x2="<<-b/(2*a)<<endl;

}

elseif(delta>0)

{

delta=sqrt(delta);

x1=(-b+delta)/(2*a);

x2=(-b-delta)/(2*a);cout<<"方程有兩個不同實根:";

cout<<"x1="<<x1<<'\t'<<"x2="<<x2<<endl;

}

elsecout<<"方程無實根!";//delta<0

}

運行結(jié)果:

輸入三個系數(shù)a(a!=0),b,c:

1-812

a=1b=-8c=12

方程有兩個不同實根:x1=6x2=2

2.switch語句

switch語句是多分支的選擇語句。嵌套的if語句可以處理多分支選擇,但是用switch語句更加直觀。

switch語句的語法格式如下:

switch(整數(shù)表達(dá)式)

{

case常量表達(dá)式1:<語句序列1>;

case常量表達(dá)式2:<語句序列2>;

…case常量表達(dá)式n:<語句序列n>;

default:<語句序列n+1>;

}

switch語句的執(zhí)行流程如圖2-8所示。圖2-8switch語句的執(zhí)行流程

【例2-16】

根據(jù)考試成績的等級輸出百分制分?jǐn)?shù)段。

程序如下:

#include<iostream>

usingnamespacestd;

voidmain()

{

chargrade;

cout<<“請輸入成績等級:\n”;

cin>>grade;

switch(grade)

{

case'A':cout<<"85~100\n";break;

case'B':cout<<"70~84\n";break;

case'C':cout<<"60~69\n";break;

case'D':cout<<"<60\n";break;

default:cout<<"error\n";break;

}

}

運行結(jié)果:

A

85~100

【例2-17】

編寫一個四則運算計算器程序輸入兩個數(shù)和一個四則運算符,輸出運算結(jié)果。

程序如下:

#include<iostream>

usingnamespacestd;

voidmain()

{

floatoperandl,operand2,result;

charoperato;

cin>>operandl>>operato>>operandswitch(operato)//由operato的值決定執(zhí)行哪一條case語句

{

case'+': result=operandl+operand2;

cout<<"result="<<result<<endl; break;

case'-': result=operandl-operand2;

cout<<"result="<<result<<endl; break;

case'*': result=operandl*operand2;

cout<<"result="<<result<<endl; break;

case'/': result=operandl/operand2;

cout<<"result="<<result<<endl; break;

default: cout<<"Illegaloperato,error!\n";

}

}

運行結(jié)果:

18*3

result=542.4.4循環(huán)結(jié)構(gòu)程序設(shè)計

(LoopingStructureProgramming)

若干個在一定的條件下反復(fù)執(zhí)行的語句就構(gòu)成了循環(huán)體,循環(huán)體連同對循環(huán)的控制就組成了循環(huán)結(jié)構(gòu)。

C++提供了三種循環(huán)控制語句:while語句、do…while語句和for語句。

1.while語句

while語句的語法格式如下:

while(條件表達(dá)式)

循環(huán)體;

上述語句的含義為:首先對條件表達(dá)式進行判斷,若判斷結(jié)果為假(false,0),則跳過循環(huán)體,執(zhí)行while結(jié)構(gòu)后面的語句,若判斷結(jié)果為真(true,非0),則進入循環(huán)體,執(zhí)行其中的語句序列。例如,計算sum=1+2+3+…+10的while循環(huán)結(jié)構(gòu)如下:

sum=0;

i=1; //循環(huán)變量初始化

while(i<=10) //判斷條件

{ //循環(huán)體

sum=sum+i;

i++; //改變循環(huán)變量的值

}

2.do…while語句

do…while語句的語法格式如下:

do

循環(huán)體;

while(條件表達(dá)式);

上述語句的含義為:當(dāng)流程到達(dá)do后,立即執(zhí)行循環(huán)體語句,然后對條件表達(dá)式進行判斷,若條件表達(dá)式的值為真(非0),則重復(fù)執(zhí)行循環(huán)體語句,否則退出。

do…while語句為“先執(zhí)行后判斷”方式。do…while語句與while語句的功能相似。

例如,計算sum=1+2+3+…+10的do…while循環(huán)結(jié)構(gòu)如下:

sum=0;

i=1; //循環(huán)變量初始化

do

{ //循環(huán)體

sum=sum+i;

i++; //改變循環(huán)變量的值

}while(i<=10) //判斷條件

do…while結(jié)構(gòu)與while結(jié)構(gòu)中都有一個while語句,很容易混淆。為了明顯區(qū)分它們,do…while循環(huán)體即使是一個單語句,習(xí)慣上也使用花括號括起來,并且while(表達(dá)式)直接寫在花括號“}”的后面。

例如:

do

{

sum+=i++;

}while(i<=100);

3.for語句

for語句的語法格式如下:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體;

其中,表達(dá)式1稱為初始化表達(dá)式,一般用于對循環(huán)變量進行初始化或賦初值;表達(dá)式2稱為條件表達(dá)式,當(dāng)它的判斷條件為真時,執(zhí)行循環(huán)體語句,否則終止循環(huán),退出for結(jié)構(gòu);表達(dá)式3稱為修正表達(dá)式,一般用于在每次循環(huán)體執(zhí)行之后,對循環(huán)變量進行修改操作;循環(huán)體是當(dāng)表達(dá)式2為真時執(zhí)行的一組語句序列。例如,計算sum=1+2+3+…+10的for循環(huán)結(jié)構(gòu)如下:

sum=0;

for(i=1;i<=10;i++)

//初始化、判斷條件、修改方式、步長都在頂部描述

{

sum+=i; //循環(huán)體相對簡潔

}最簡單的表示無限循環(huán)的方式如下:

for(;;)//分號不能省略

三個表達(dá)式都可省略,即不設(shè)初值,不判斷條件(認(rèn)為表達(dá)式2為真),循環(huán)變量不變化,無終止執(zhí)行循環(huán)體的語句。

4.跳轉(zhuǎn)語句

在C++中,除了提供順序執(zhí)行語句、選擇控制語句和循環(huán)控制語句外,還提供了一類跳轉(zhuǎn)語句。這類語句的總體功能是中斷當(dāng)前某段程序的執(zhí)行,并跳轉(zhuǎn)到程序的其他位置繼續(xù)執(zhí)行。

1)?break語句

break語句的作用是:結(jié)束當(dāng)前正在執(zhí)行的循環(huán)(for、while、do…while)或多路分支(switch)程序結(jié)構(gòu),轉(zhuǎn)而執(zhí)行這些結(jié)構(gòu)后面的語句。

例如,下面的代碼在執(zhí)行了break之后,繼續(xù)執(zhí)行a+=1;?處的語句,而不是跳出所有的循環(huán)。

for(;;)

{…

for(;;)

{

if(i==1)

break;

}

a+=1;//break跳至此處

//…

}

2)continue語句

continue語句的作用是:結(jié)束當(dāng)前正在執(zhí)行的這一次循環(huán)(for、while、do…while),接著執(zhí)行下一次循環(huán),即跳過循環(huán)體中尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。?

例如,輸出1~100之間不能被7整除的數(shù)。

for(inti=1;i<=100;i++)

{

if(i%7==0)

continue;

cout<<i<<endl;

}

5.多重循環(huán)

循環(huán)嵌套是指循環(huán)語句的循環(huán)體內(nèi)又包含另一個循環(huán)語句,即循環(huán)套循環(huán)。

【例2-18】

九九乘法表。

程序如下:

#include<iostream>

usingnamespacestd;

voidmain()

{intbcs,cs;

for(bcs=1;bcs<=9;bcs++) //bcs表示行號

{

for(cs=1;cs<=bcs;cs++) //cs表示列號

cout<<bcs<<'*'<<cs<<'='<<bcs*cs<<'';

cout<<endl;

}

}2.5.1動態(tài)內(nèi)存(AboutDynamicStorageAllocation)

C++程序的內(nèi)存格局通常分為四個區(qū):全局變量、靜態(tài)數(shù)據(jù)、常量存放在全局?jǐn)?shù)據(jù)區(qū)(又稱為靜態(tài)存儲區(qū)),這部分內(nèi)存在程序編譯的時候就已經(jīng)分配好,并在程序的整個運行期間都存在;所有類成員函數(shù)和非成員函數(shù)代碼存放在代碼區(qū);為運行函數(shù)而分配的局部變量、函數(shù)參數(shù)、返回數(shù)據(jù)、返回地址等存放在棧區(qū),函數(shù)執(zhí)行開始時在棧上創(chuàng)建空間,執(zhí)行結(jié)束時這些存儲單元自動被釋放,棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但內(nèi)存容量較為有限;剩余的空間都作為堆區(qū),在堆上進行內(nèi)存分配又稱為動態(tài)內(nèi)存分配。2.5動態(tài)內(nèi)存分配(DynamicStorageAllocation)2.5.2new和delete運算符(newanddeleteOperators)

1.new運算符

new運算符的功能是動態(tài)分配內(nèi)存,其使用格式如下:

(類型名*)指針變量名=new類型名(初值列表);

例如:

int*pa;

pa=newint(2);使用new運算符也可以申請一段連續(xù)的某種類型數(shù)據(jù)的存儲空間,創(chuàng)建該類型的數(shù)組,只是數(shù)組沒用名字,其首地址被存放在相同基類型的指針變量中,可以通過指針來訪問該段連續(xù)的內(nèi)存。其使用格式如下:

(類型名*)指針變量名=new類型名[長度];

例如:

float*pf;

pf=newfloat[10];

2.delete運算符

delete運算符的功能是釋放由new動態(tài)分配的內(nèi)存空間,其使用格式如下:

delete指針變量名;

例如,上述用new得到的pa指向的內(nèi)存空間可以這樣來釋放:

deletepa;

如果delete釋放的是一段連續(xù)的存儲空間,則其使用格式如下:

delete[]指針變量名;

上述用new得到的pf指向的內(nèi)存空間釋放的語句如下:

delete[]pf;

【例2-19】new和delete運算符的使用。

程序如下:

#include<iostream>

usingnamespacestd;

intmain()

{

int*pi;float*pf;int*ps;

pi=newint(6);

pf=newfloat(5.893);

ps=newint[5];

for(inti=0;i<5;i++) ps[i]=i;

cout<<"*pi="<<*pi<<endl;

cout<<"*pf="<<*pf<<endl;

cout<<"*ps指向的數(shù)組元素依次為::"<<endl;

for(intj=0;j<5;j++)

cout<<ps[j]<<"";

cout<<endl;

deletepi;

deletepf;

delete[]ps;

return0;

}運行結(jié)果:

*pi=6

*pf=5.893

*ps指向的數(shù)組元素依次為:

01234

注意:在使用new分配多個連續(xù)的存儲空間時,分配成功得到的地址存放在基類型相同的指針變量中,該指針變量可以當(dāng)作數(shù)組名來使用下標(biāo)引用法對相應(yīng)存儲空間進行存取。

1.變量未定義就直接使用。

調(diào)試器錯誤信息:errorC2065:‘i’:undeclaredidentifier

C++語言中變量未經(jīng)聲明(或者說定義),程序是無法通過編譯的。

2.在程序中使用中文標(biāo)示符,如將英文“;”錯誤輸入成了“;”。

調(diào)試器錯誤信息:errorC2018:unknowncharacter'0xa3'

在C++中,除程序注釋可以采用中文外,其余字符要求使用英文。2.6常見編程錯誤(CommonProgrammingErrors)

3.定義的變量類型與使用不對應(yīng),如聲明為float,但實際給與了一個double的值,例如:

floatpi=3.412345245656245;

調(diào)試器錯誤信息:warningC4305:'initializing':truncationfrom'constdouble'to'float'

4.變量在賦值之前就使用。例如:

inta,b,c;c=a+b;cin>>a>>b;

5.常量指針錯誤。例如:

const

long

*p1

=

&40000;

//錯誤

const

int

*ip3

=

&i;

i

=

10;

//沒問題,約束的不是i的一般操作,而是通過ip3對i的操作

*ip3

=

10;

//錯誤

6.常量賦值錯誤。例如:

int

i

=

12;

const

int

ci

=

12;

int

*ip1

=

&12;

//錯誤

12=

13;

//錯誤

const

int

*ip2

=

&ci;

//沒問題

ci

=

13;

//錯誤7.編譯程序在進行語法解析時,取大優(yōu)先導(dǎo)致的錯誤。

a+++++b; //錯誤!取大優(yōu)先導(dǎo)致該語句解析成為"a+++++b"

a+++++b; //沒問題

D:\ProgramFiles\MicrosoftVisualStudio\MyProjects\test\test.cpp(8):errorC2105:'++'needsl-value

ptr->*m;

//沒問題

ptr->

*m;

//錯誤list<vector<string>>

lovos;

//錯誤!

在實例化語法里兩個相毗鄰的右半個尖括號被解釋

//成了一個右移位運算符

list<vector<string>

>

lovos;

//正確

void

process(const

char*=0);

//錯誤!這個聲明企圖在形式參數(shù)列表里使用運算符*=

void

process(const

char

*processId

=

0);

//正確8.操作符結(jié)合率引起的錯誤。例如:

int

a

=

3,

b

=2,

c

=

1;

//

...

if

(a

>

b

>

c)

//合法,但很有可能是錯的,表達(dá)式“3>2>1”的結(jié)果是false

9.指向常量類型的指針不當(dāng)聲明引起的錯誤。例如:

int

*

const

ptr2

=

&size;

//錯誤字符集是構(gòu)成C++程序語句的最小元素,程序中除了字符串常量外,所有構(gòu)成程序的字母均取自字符集。C++的基本數(shù)據(jù)類型包括布爾型、字符型、整數(shù)型、實數(shù)型、空值型,分別用bool、char、int、float、void表示。其中,float類型對有些帶小數(shù)的實數(shù)只能近似表示。本章小結(jié)(ChapterSummary)各種運算符種類繁多,且具有不同的優(yōu)先級與結(jié)合性,大致優(yōu)先順序為:一元運算優(yōu)先于二元運算;二元運算優(yōu)先于三元運算;算術(shù)、移位、關(guān)系、按位、邏輯運算的優(yōu)先級依次降低。復(fù)雜的運算式要多使用括號以方便閱讀與理解。在表達(dá)式中,參加運算的數(shù)據(jù)如果類型不同,則可以自動轉(zhuǎn)換。

本章還講解了C++各種流程控制語句的用法,包括分支控制語句(if…else語句)、多分支控制語句(switch語句)和三種循環(huán)語句(for語句、while語句和do…while語句)。一、單項選擇題

1.C++程序的執(zhí)行總是從()開始的。

A.main函數(shù) B.第一行C.頭文件 D.函數(shù)注釋

2.下面常數(shù)中()不能作為常量。

A.?0xA5 B.?2.5e-2C.?3e2D.?0583習(xí)題2(Exercises2)

3.不屬于字符型常量的是()。

A.?'S' B.'\32' C.?'\n' D.?"L"

4.'\65'在內(nèi)存中占()個字節(jié),"\65"在內(nèi)存中占()個字節(jié)。

A.1,4 B.1,2 C.1,1 D.1,8

5.字符串“\\\”ABC\“\\”的長度是()。

A.?3 B.?5 C.?7 D.?9

6.sizeof(double)的結(jié)果是()。

A.?8

B.?4 C.?2 D.出錯

7.設(shè)x、y、z均為實型變量,代數(shù)式x/(yz)的正確寫法是()。

A.?x/y*z B.?x%y%z

C.

x%y*z D.

x/y/z

8.下列表達(dá)式中,()是非法的。已知:inta=5;floatb=5.5;

A.?a%3+b;

B.?b*b&&++a;

C.(a>b)+(int(b)%2); D.?---a+b

9.下列關(guān)于類型轉(zhuǎn)換的描述中,()是錯誤的。

A.在不同類型操作數(shù)組成的表達(dá)式中,其表達(dá)式類型一定是最高類型double型

B.逗號

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論