版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京中醫(yī)藥大學(xué)《經(jīng)濟學(xué)專業(yè)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 股權(quán)無償劃撥合同協(xié)議書
- 2025版智能停車管理系統(tǒng)建設(shè)與維護服務(wù)合同2篇
- 全套合同管理制度范本
- 教師年度總結(jié)范文大全10篇
- 裝飾公司內(nèi)部分包合同
- 2024年藝術(shù)窗簾軌道項目可行性研究報告
- 安全知識培訓(xùn)個人心得體會
- 2025版PDA采購合同附帶軟件開發(fā)與技術(shù)升級服務(wù)3篇
- 安防監(jiān)控安裝合同
- 基于CAN通訊的儲能變流器并機方案及應(yīng)用分析報告-培訓(xùn)課件
- 園藝療法共課件
- 布氏、韋氏、洛氏硬度換算表
- 鋼筋混凝土地下通道課程設(shè)計
- 韓流對中國文化的影響課件
- 檢驗檢測服務(wù)公司市場營銷計劃
- 醫(yī)務(wù)人員外出進修流程圖
- DB32∕T 2349-2013 楊樹一元立木材積表
- 昌樂二中271高效課堂培訓(xùn)與評價ppt課件
- 豬場名詞及指標(biāo)講義
- T∕CHTS 10040-2021 公路無機結(jié)合料穩(wěn)定粒料基層振動法施工技術(shù)指南
評論
0/150
提交評論