版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++語言基礎(chǔ)C++概述C++的特點(diǎn)發(fā)展歷史和未來 (C\C++(AT&T)\Java(SUN)\C#(MS))與其它語言比較(7點(diǎn)):面向?qū)ο蟮母拍?數(shù)據(jù)的封裝和隱藏、繼承、多態(tài)VC上機(jī)過程C++的字符集26個(gè)小寫字母
abcdefghijklmnopqrstuvwxyz26個(gè)大寫字母
ABCDEFGHIJKLMNOPQRSTUVWXYZ10個(gè)阿拉伯?dāng)?shù)字
0123456789
其他符號
+-*/=,._:;?\"'~|!#%&()[]{}^<>空格C++語言使用下列基本字符來構(gòu)成詞法單位:結(jié)束第二章:數(shù)據(jù)類型運(yùn)算符表達(dá)式2.1VC++的數(shù)據(jù)類型計(jì)算機(jī)所處理的數(shù)據(jù)以一定形式存放在內(nèi)存中,數(shù)據(jù)的存儲方式以及能夠進(jìn)行的合法運(yùn)算都與數(shù)據(jù)類型直接相關(guān)。C++的特點(diǎn)之一就是提供了豐富的數(shù)據(jù)類型,以便處理各種不同的數(shù)據(jù)。數(shù)據(jù)類型總是與運(yùn)算封裝在一起,本質(zhì)上是面向?qū)ο蟮?。本章將簡要介紹C++中的數(shù)據(jù)類型及相關(guān)運(yùn)算,以及常量、變量、表達(dá)式、語句等,最后介紹簡單的輸入輸出方法。2.1.1關(guān)鍵字?jǐn)?shù)據(jù)類型說明符與修飾符boolcharwchar_tclassconstdoubleenumfloatintlongshortsignedstructunionunsignedvoidvolatile存儲類型說明符autoexterninlineregisterstatic訪問說明符friendprivateprotectedpublic其它說明符asmexplicitnamespaceoperatortemplatethistypedeftypenameusingvirtual
語句與標(biāo)號breakcasecatchcontinuedefaultdoelseforgotoifreturnswitchthrowtrywhile
運(yùn)算符及邏輯值deletefalsenewsizeoftrue
還有一些關(guān)鍵字本書未介紹:
const_castdynamic_castreinterpret_caststatic_castexportmutabletypeid下面可用一些關(guān)鍵字代替邏輯運(yùn)算符:andand_eqbitandbitorComplnotoror_eqXorxor_eqnot_eq2.1.2標(biāo)識符標(biāo)識符(Identifier,ID)是程序員定義的“單詞”,用來給變量、常量、數(shù)據(jù)類型、函數(shù)等命名。合法標(biāo)識符由字母或下劃線開始,由字母、數(shù)字、下劃線組成,其有效長度為1-31個(gè)字符,長度超過31個(gè)字符者只識別前31個(gè)字符,VC++標(biāo)識符長度為1-247個(gè)字符。建議使用有一定含義的英文單詞或拼音序列作標(biāo)識符,以提高可讀性;另外盡量不用下劃線或雙下劃線打頭,以免與系統(tǒng)定義的關(guān)鍵字沖突。ok標(biāo)識符例:判斷下面哪些是合法的標(biāo)識符:
MyFileSalary94amountvoid94SalarySalary94$amountf3.5Num_of_Student2.1.2結(jié)束2.1.3標(biāo)點(diǎn)符號標(biāo)點(diǎn)符號包括:#、()、{}、,、:、;、"、'等。標(biāo)點(diǎn)符號的作用:有一定的語法意義。如字符和字符串常量分別用‘’和“”引起來。對語法符號起分隔作用。如;等2.1.3結(jié)束2.1.5C++的基本數(shù)據(jù)類型圖2-1C++的數(shù)據(jù)結(jié)構(gòu)實(shí)型float雙精度型doubleC++的數(shù)據(jù)類型基本數(shù)據(jù)類型非基本數(shù)據(jù)類型數(shù)組type[]指針type*結(jié)構(gòu)struct聯(lián)合union枚舉enum類class整型int字符型char邏輯型bool無值型void實(shí)型ok
C++對基本數(shù)據(jù)類型也分別進(jìn)行了封裝,稱為內(nèi)置數(shù)據(jù)類型,內(nèi)置數(shù)據(jù)類型不僅定義了數(shù)據(jù)類型,還定義了常用操作。本節(jié)僅介紹各種基本數(shù)據(jù)類型的定義,常用操作將在后面介紹。
C++為強(qiáng)類型語言,所有數(shù)據(jù)的使用嚴(yán)格遵從“先說明后使用”的原則,以便編譯器進(jìn)行編譯。
整型用來存放整數(shù),整數(shù)(有符號的整數(shù))在內(nèi)存中存放的是它的補(bǔ)碼,無符號數(shù)沒有符號位,存放的就是原碼。整數(shù)占用的字節(jié)數(shù)與機(jī)型有關(guān),32位機(jī)上占用4個(gè)字節(jié)。
字符型用來保存字符,存儲的是該字符的ASCII碼,占用一個(gè)字節(jié)。如大寫字母A的ASCII碼為65,在對應(yīng)的一個(gè)字節(jié)中存放的就是65。字符型數(shù)據(jù)從本質(zhì)上說也是整數(shù),可以是任何一個(gè)8位二進(jìn)制整數(shù)。由于漢語系字符很多,用ASCII字符集處理遠(yuǎn)遠(yuǎn)不夠,因此又創(chuàng)立了雙字節(jié)字符集(DBCS:double-bytecharacterset),每個(gè)字符用兩個(gè)字節(jié)來編碼。為便于軟件的國際化,國際上一些知名公司聯(lián)合制定了新的寬字節(jié)字符標(biāo)準(zhǔn)——Unicode。該標(biāo)準(zhǔn)中所有字符都是雙字節(jié)的,不同的語言和字符集分別占用其中一段代碼。這種用統(tǒng)一編碼處理西文、中文及其它語言符號,就是unicode碼。C++同時(shí)也支持寬字符類型(wchar_t),或稱雙字節(jié)字符型。
實(shí)型和雙精度型都用來存放實(shí)數(shù),兩者表示的實(shí)數(shù)精度不同。實(shí)數(shù)在內(nèi)存中以規(guī)范化的浮點(diǎn)數(shù)存放,包括尾數(shù)、數(shù)符和階碼。數(shù)的精度取決于尾數(shù)的位數(shù),32位機(jī)上實(shí)型為23位(因規(guī)范化數(shù)的數(shù)碼最高位恒為1,不必存儲,實(shí)際為24位),雙精度為52位。邏輯型也稱布爾型,其取值為true(邏輯真)和false(邏輯假),存儲字節(jié)數(shù)在不同編譯系統(tǒng)中可能有所不同,VC++6.0中為1個(gè)字節(jié)。布爾型在運(yùn)算中可以和整型相互轉(zhuǎn)化,false對應(yīng)為0,true對應(yīng)為1或非0無值型主要用來說明函數(shù)的返回值類型,將在函數(shù)一章中具體介紹。
基本數(shù)據(jù)類型還可以加上一些修飾詞,包括:signed(有符號)、unsigned(無符號)、long(長)、short(短)。參見下表:2.2結(jié)束類型名稱占用字節(jié)數(shù)取值范圍bool布爾型
true,false(signed)char有符號字符型1-128127unsigedchar無符號字符型10255(signed)short(int)有符號短整型2-3276832767unsignedshort(int)無符號短整型2065535(signed)int(signed)有符號整型4-231
(231-1)unsigned(int)無符號整型40(232-1)(signed)long(int)有符號長整型4-231
(231-1)unsignedlong(int)無符號長整型40(232-1)float實(shí)型4-1038
1038double雙精度型8-10308
10308longdouble長雙精度型8-10308
10308void無值型0無值VC++中所有基本數(shù)據(jù)類型2.1.6常量在程序的執(zhí)行過程中,值保持不變的量稱為常量字面常量,指程序中直接給出的量;常量的值在程序執(zhí)行過程中保持不變;并且存儲在程序區(qū),而非數(shù)據(jù)區(qū);根據(jù)取值和表示方法的不同,可分為以下幾種:a.整形常量d.字符串常量c.字符型常量b.實(shí)型常量oka整型常量十進(jìn)制表示法八進(jìn)制表示法十六進(jìn)制表示法其他表示法即整數(shù),可以有多種表示方法:ok
整數(shù)的十進(jìn)制表示方法十進(jìn)制表示與我們熟悉的書寫方式相同。如15-24ok
整數(shù)的八進(jìn)制表示
八進(jìn)制表示以0開始,由數(shù)字07組成,用來表示一個(gè)八進(jìn)制數(shù)。如:012 //八進(jìn)制數(shù)12,即十進(jìn)制數(shù)10-0655 //八進(jìn)制數(shù)-655,即十進(jìn)制數(shù)-429ok
整數(shù)的十六進(jìn)制表示
十六進(jìn)制以0X(大小寫均可)開始,由數(shù)字09和字母AF(大小寫均可)組成,用來表示一個(gè)十六進(jìn)制數(shù)。以下是一些常整數(shù)的例子:0x32A//十六進(jìn)制數(shù)32A,即十進(jìn)制數(shù)810-0x2fe0//十六進(jìn)制數(shù)-2fe0,
//即十進(jìn)制數(shù)-12256ok整數(shù)的其他表示方法
整型常量還可以表示長整數(shù)和無符號整數(shù)。長整型常數(shù)以L
或l
結(jié)尾,無符號常整數(shù)以U
或u
結(jié)尾,以UL
或LU(大小寫均可)結(jié)尾則可表示無符號長整型常數(shù)。例如:-84L //十進(jìn)制長整數(shù)-84026U //八進(jìn)制表示的無符號整數(shù)260X32LU//十六進(jìn)制表示的無符號長整型數(shù)32。整數(shù)結(jié)束b實(shí)型常量(1)一般形式與平時(shí)書寫形式相同,由數(shù)字09和小數(shù)點(diǎn)組成。例如:0.23-125.760.0.46-35.(2)指數(shù)形式(也稱為科學(xué)表示法)表示為尾數(shù)乘以10的次方形式,由尾數(shù)、E或e和階數(shù)組成。指數(shù)形式要求在E或e前面的尾數(shù)部分必須有數(shù)字,后面的指數(shù)部分必須為整數(shù)。
例:判斷下列表示是否合法123E12-.34e-2E41.43E3.5包含小數(shù)點(diǎn)和10的冪的數(shù)為實(shí)型常量,有兩種表示方法:實(shí)數(shù)結(jié)束c字符型常量
字符常量是用單引號引起來的單個(gè)字符。在內(nèi)存中保存的是字符的ASCII碼值。在所有字符中,有些是可顯示字符,通常就用單引號引起來表示:′a′ //字符a ′@′ //字符@ ′4′ //字符4 ′′ //空格字符有些是特殊情況字符,如不可顯示的字符等,c++使用轉(zhuǎn)義序列表示方法,如(祥見表2-3,此處略):
′\n′ //換行
′\\′//字符\字符常結(jié)束
d.字符串常量字符串常量與字符型常量的區(qū)別字符串常量″a″占兩個(gè)字節(jié),存放′a′和′\0′,值為0x6100字符型常量′a′占一個(gè)字節(jié),存放′a′,值為0x61\0aa2.3.2結(jié)束用雙引號引起來的若干個(gè)字符稱為字符串常量。例如:″IamaChinese.″,″123″,″a″,″″2標(biāo)識符常量及常量說明符const用常量說明符const給字面常量起個(gè)名字(標(biāo)識符),這個(gè)標(biāo)識符就稱為標(biāo)識符常量;因?yàn)闃?biāo)識符常量的說明和引用形式很像變量,所以也稱常變量;例如:constfloatPI=3.14159;constintNumber_of_Student=100;常變量必須也只能在說明時(shí)進(jìn)行初始化;常變量初始化之后,不允許再被賦值;常變量必須先說明后使用;常變量存儲在數(shù)據(jù)區(qū),并且可以按地址訪問,編譯時(shí)系統(tǒng)對常變量進(jìn)行類型檢查。C++建議使用常變量,而盡量不使用字面常量。2.3.3結(jié)束2.1.7變量1變量說明
2變量賦初值
變量,在程序中是指可以改變值的量;變量必須用標(biāo)識符進(jìn)行標(biāo)識,稱為變量名;變量有類型之分,如整形變量、字符變量等;任何變量都必須先說明后使用;一是便于編譯程序?yàn)樽兞糠峙淇臻g,二是便于編譯時(shí)進(jìn)行語法檢查;變量使用的第一步,是給變量賦初始值;ok變量說明
在C++中,變量說明的一般格式為:《存儲類型》數(shù)據(jù)類型變量名1《,變量名2,,變量名n》;
下面是變量說明的幾個(gè)例子:inti,j,k; //說明三個(gè)整型變量i,j,kfloatx,y,z; //說明三個(gè)實(shí)型變量x,y,zcharc1,c2;//說明兩個(gè)字符型變量c1,c2doubledx; //說明一個(gè)雙精度型變量dx變量說明結(jié)束變量賦初值(1)變量說明時(shí)直接賦初值。例如: inta=3,b=4,c=5; floatx=3.0; (2)用賦值語句賦初值。嚴(yán)格的說,只有前者可稱賦初值例如: floatx,e; x=3.5; e=2.71828;
結(jié)束給變量賦初值稱為初始化,有兩種方法:2.2基本運(yùn)算符
對常量和變量進(jìn)行運(yùn)算是通過運(yùn)算符來實(shí)現(xiàn)的.常量和變量通過運(yùn)算符組成C++表達(dá)式,由表達(dá)式再組成C++語句.
運(yùn)算符是完成對常量和變量進(jìn)行運(yùn)算的符號.把參與運(yùn)算的對象稱為操作數(shù).按照要求的操作數(shù)的個(gè)數(shù),運(yùn)算符分為單目(一元)運(yùn)算符、雙目(二元)運(yùn)算符和三目(三元)運(yùn)算符。單目運(yùn)算符只對一個(gè)操作數(shù)運(yùn)算,如負(fù)號運(yùn)算符“”等;雙目運(yùn)算符要求有兩個(gè)操作數(shù),如乘號運(yùn)算符“*”等;三目運(yùn)算符要求有三個(gè)操作數(shù),三元運(yùn)算符只有一個(gè)“?:”。1.算術(shù)運(yùn)算符優(yōu)先級運(yùn)算符名稱3+正,單目
-負(fù),單目5*乘,雙目
/除,雙目
%求余,雙目6+加,雙目
-減,雙目ok運(yùn)算符重載:當(dāng)兩個(gè)操作數(shù)均為整數(shù)時(shí),*和/重載為整乘和整除,結(jié)果為整數(shù),除法運(yùn)算后舍去小數(shù)取整。如:5/4 //結(jié)果為1,整數(shù)當(dāng)兩個(gè)操作數(shù)均為整數(shù),%定義為求余運(yùn)算,也稱求模運(yùn)算,結(jié)果為兩個(gè)整數(shù)相除后的余數(shù)。如果兩個(gè)整數(shù)中有負(fù)數(shù),則先用兩數(shù)絕對值求余,最后結(jié)果的符號與被除數(shù)相同。例如6%3 //結(jié)果為06%7 //結(jié)果為67%6 //結(jié)果為1C++中算術(shù)運(yùn)算應(yīng)注意數(shù)據(jù)溢出問題,即運(yùn)算結(jié)果超出對應(yīng)數(shù)據(jù)類型的表示范圍。編譯程序只會(huì)對除法運(yùn)算時(shí)除數(shù)為0這種情況提示出錯(cuò),而特別容易溢出的整數(shù)的加、減和乘法運(yùn)算產(chǎn)生溢出的情況,系統(tǒng)不作為錯(cuò)誤處理,程序?qū)⒗^續(xù)執(zhí)行并產(chǎn)生錯(cuò)誤的計(jì)算結(jié)果。因此,程序設(shè)計(jì)者必須在程序中解決檢查并處理整數(shù)溢出問題。
只要有一個(gè)操作數(shù)是實(shí)數(shù),兩個(gè)操作數(shù)均轉(zhuǎn)換為double型,*和/重載為普通的乘和除,結(jié)果是實(shí)數(shù):5/4.0 //結(jié)果為1.25,實(shí)數(shù)2.關(guān)系運(yùn)算符和邏輯運(yùn)算符ok
關(guān)系運(yùn)算符都是二元運(yùn)算符,包括:(大于)、(不小于)、(小于)、(不小于)、==(等于)和!=(不等于)。關(guān)系運(yùn)算符完成兩個(gè)操作數(shù)大小的比較,結(jié)果為邏輯值true(真)或false(假)。每種可比較大小的數(shù)據(jù)類型,都重載了關(guān)系運(yùn)算符。不同類型,自動(dòng)轉(zhuǎn)換為同一類型后,采用對應(yīng)關(guān)系運(yùn)算符進(jìn)行比較。在C++中這兩個(gè)邏輯值與整數(shù)之間有一個(gè)對應(yīng)關(guān)系,真對應(yīng)1,假對應(yīng)0;反過來,0對應(yīng)假,非0整數(shù)對應(yīng)真。所以關(guān)系運(yùn)算結(jié)果可以作為整數(shù)參與算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算及其他運(yùn)算。2.關(guān)系運(yùn)算符和邏輯運(yùn)算符
設(shè)有定義floata=3.2;intb=5;則:3>a>b //結(jié)果是?根據(jù)右結(jié)合原則其運(yùn)算過程如下:a5b3.23>F,即0>F即0優(yōu)先級運(yùn)算符名稱語義2!邏輯非,單目操作數(shù)的值為真,則結(jié)果為假;12&&邏輯與,雙目當(dāng)兩個(gè)操作數(shù)全為真時(shí),結(jié)果為真,否則為假;13||邏輯或,雙目兩個(gè)操作數(shù)中有一個(gè)為真,則結(jié)果為真;邏輯運(yùn)算符
邏輯運(yùn)算符用來進(jìn)行邏輯運(yùn)算。其操作數(shù)和運(yùn)算結(jié)果均為邏輯量。運(yùn)算結(jié)果同樣可以作為一個(gè)整數(shù)參與其他運(yùn)算。
由于邏輯值和整數(shù)之間的對應(yīng)關(guān)系,也允許整型和字符型操作數(shù)進(jìn)行邏輯運(yùn)算:21&&0 //邏輯與,21與0,結(jié)果為假:021||0 //邏輯或,21或0,結(jié)果為真:1!21 //邏輯非,21的非,結(jié)果為假:0邏輯運(yùn)算符位運(yùn)算符(1)按位取反運(yùn)算符“~”(2)左移運(yùn)算符“<<”(3)右移運(yùn)算符“>>”(4)按位與運(yùn)算符“&”(5)按位或運(yùn)算符“|”(6)按位異或運(yùn)算符“^”okc++語言提供字位運(yùn)算,它對操作數(shù)的各個(gè)位進(jìn)行操作。(1)按位取反運(yùn)算符“~”將操作數(shù)的每個(gè)二進(jìn)制位取反,即1變?yōu)?,0變?yōu)?。例如,整數(shù)a的值為10011011,則~a的值為01100100。(2)左移運(yùn)算符“<<”運(yùn)算一般格式為:a<<n其中a為整數(shù),n為一個(gè)正整數(shù)常數(shù)。語義為將a的二進(jìn)制數(shù)依次向左移動(dòng)n個(gè)二進(jìn)制位,并在低位補(bǔ)0。左移n位相當(dāng)于乘以2的n次方,但移位運(yùn)算的速度比乘法快。
(3)右移運(yùn)算符“>>”與左移運(yùn)算符類同,將左操作數(shù)向右移動(dòng)右操作數(shù)指定的二進(jìn)制位數(shù),忽略移位后的小數(shù)部分,并在高位補(bǔ)0。一個(gè)整數(shù)右移n位相當(dāng)于除以2的n次方,但比除法快。在VC++6.0中有符號數(shù)右移時(shí)高位補(bǔ)符號位,嚴(yán)格對應(yīng)除法。以上三種單目運(yùn)算不影響數(shù)據(jù)本身的值,而是只產(chǎn)生一個(gè)中間量,這個(gè)中間量被引用后即不再存在。
(4)按位與運(yùn)算符“&”將兩個(gè)操作數(shù)的對應(yīng)位逐一進(jìn)行按位邏輯與運(yùn)算。運(yùn)算規(guī)則為:對應(yīng)位均為1時(shí),該位運(yùn)算結(jié)果為1;否則為0。例如:a01001101b00001111a&b00001101該運(yùn)算可用來將整數(shù)的某些位置0,而保留所需要的位,上例保留了低四位。(5)按位或運(yùn)算符“|”將兩個(gè)操作數(shù)的對應(yīng)位逐一進(jìn)行按位邏輯或運(yùn)算。運(yùn)算規(guī)則為:只要有一個(gè)數(shù)對應(yīng)位為1,該位運(yùn)算結(jié)果即為1;兩個(gè)數(shù)對應(yīng)位均為0,該位結(jié)果為0。例如:a01001101b00001111a|b01001111該運(yùn)算符可用來將整數(shù)的某些位置1。上例高四位不變,低四位全1。(6)按位異或運(yùn)算符“^”將兩個(gè)操作數(shù)的對應(yīng)位逐一進(jìn)行按位異或運(yùn)算。運(yùn)算規(guī)則為:當(dāng)對應(yīng)位的值不同時(shí),該位運(yùn)算結(jié)果為1,否則為0。例如:a01001101b00001111a^b01000010該運(yùn)算符可用來將一個(gè)整數(shù)的某些位取反,或?qū)⒄妥兞康闹抵?(將整型變量與自身按位異或)。上例低四位取反,高四位不變。需要說明的一點(diǎn)是,以上例子中的整數(shù)都只取了低8位一個(gè)字節(jié)。4.賦值運(yùn)算符ok
將數(shù)據(jù)存放到相應(yīng)存儲單元中稱為賦值,如果該單元中已有值,賦值操作以新值取代舊值;從某個(gè)存儲單元中取出數(shù)據(jù)使用,稱為引用,引用不影響單元中的值,即一個(gè)量可以多次引用。常量只能引用,不能賦值。賦值通過賦值運(yùn)算符“=”來完成,其意義是將賦值號右邊的值送到左邊變量所對應(yīng)的單元中。賦值號不是等號,它具有方向性。
C++將變量名代表的單元稱為“左值”,而將變量的值稱為“右值”。左值必須是內(nèi)存中一個(gè)可以訪問且可以合法修改的對象,因此只能是變量名,而不能是常量或表達(dá)式。4.賦值運(yùn)算符例如下面的賦值運(yùn)算是錯(cuò)誤的:3.1415926=pi;
//左值不能是常數(shù)x+y=z;
//左值不能是表達(dá)式constintN=30;N=40;
//左值不能是常變量5.自增自減運(yùn)算運(yùn)算分前置和后置兩種,前置是先增減后引用,即先對變量自加或自減,用新的值參與其他運(yùn)算;后置則是先引用后增減,即用變量原來的值參與其他運(yùn)算,然后再對變量進(jìn)行自加或自減,例如:inti=5,j=5,m,n;m=i++;//后置;相當(dāng)于m=i;i=i+1; //結(jié)果:i的值為6,m的值為5;n=++j;//前置;相當(dāng)于j=j+1;n=j;//結(jié)果:j的值為6,n的值為6;意義:使變量當(dāng)前值加1或減1,再賦給該變量。要求:操作數(shù)只能是變量,不能是常量或表達(dá)式;oksizeof()運(yùn)算符
用于計(jì)算一個(gè)操作數(shù)類型或一個(gè)變量的字節(jié)數(shù)。一般格式為:sizeof(數(shù)據(jù)類型)
或sizeof(變量名)
例如:sizeof(int)
值為4
sizeof(float)
值為4
doublex;
sizeof(x)
值為8結(jié)束2.2.2表達(dá)式1算術(shù)表達(dá)式
2關(guān)系表達(dá)式
3邏輯表達(dá)式和邏輯表達(dá)式求值的優(yōu)化4賦值表達(dá)式與復(fù)合賦值表達(dá)式5逗號表達(dá)式ok1.算術(shù)表達(dá)式使用時(shí)注意:1、表達(dá)式中每個(gè)變量都有確定的值時(shí)才能進(jìn)行表達(dá)式求值;2、考慮到算術(shù)運(yùn)算溢出和精度問題,應(yīng)避免:(1)兩個(gè)很接近的數(shù)直接相減;(2)除數(shù)是一個(gè)很小的數(shù);(3)整數(shù)的連續(xù)乘運(yùn)算。ok由算術(shù)運(yùn)算符連接的表達(dá)式稱為算術(shù)表達(dá)式,例如:a+b*3;2.關(guān)系表達(dá)式例如:a>b>c /*等同于(a>b)>c,先求a>b的值,再將結(jié)果0或1與c比較大小*/a+b>c+d/*等同于(a+b)>(c+d),結(jié)果為0或1*/y=a>b /*計(jì)算a>b的值0或1
賦給y,y的值為0或1*/由關(guān)系運(yùn)算符連接的表達(dá)式。值為true或false。ok3.邏輯表達(dá)式和邏輯表達(dá)式求值的優(yōu)化由邏輯運(yùn)算符連接的表達(dá)式稱為邏輯表達(dá)式。邏輯表達(dá)式的值為true或false。這個(gè)值可對應(yīng)整數(shù)1或0參與其他運(yùn)算。ok已知:
inta=10,b=20,c=30;floatx=1.8,y=2.4;a<b&&x>y||a<b-!c按優(yōu)先級與結(jié)合性,其求值順序等同于:(a<b)&&(x>y)||(a<(b-(!c)))t1=1t2=0t4=0-&&t3=0t5=b<t6=1||
得整個(gè)表達(dá)式的值為:①②③⑥④⑤⑦13.邏輯表達(dá)式和邏輯表達(dá)式求值的優(yōu)化在求邏輯表達(dá)式值的過程中,一旦表達(dá)式的值能夠確定,就不再逐步進(jìn)行下面的運(yùn)算。稱為“求值優(yōu)化”。已知:
inta=10,b=20,c=30;求:a<b||c++ //結(jié)果以及a,b,c的值t1=1①整個(gè)表達(dá)式的值為1可見:表達(dá)式c++已不需要計(jì)算所以: c不變?nèi)詾?0編程人員在使用邏輯運(yùn)算時(shí)應(yīng)當(dāng)加以小心,優(yōu)化計(jì)算固然提高了運(yùn)算效率,但可能產(chǎn)生副作用。所謂副作用,就是出乎設(shè)計(jì)人員的意料,得到預(yù)想不到的結(jié)果。4.賦值表達(dá)式與復(fù)合賦值表達(dá)式
賦值表達(dá)式的格式為:
變量=表達(dá)式例如:x=5+6;a=b=c=d+1;
在C++中,所有的雙目算術(shù)運(yùn)算符和位運(yùn)算符均可與賦值運(yùn)算符組合成一個(gè)單一運(yùn)算符,稱為復(fù)合運(yùn)賦值算符。包括以下10個(gè):+=–=*=/=%=<<=>>=&=|=^=復(fù)合賦值運(yùn)算符的要求與格式與賦值運(yùn)算符完全相同,表示為:
變量復(fù)合賦值運(yùn)算符表達(dá)式它等同于
變量=變量運(yùn)算符表達(dá)式
例如:x+=5
等同于:x=x+5ok逗號表達(dá)式
C++中,逗號既是分隔符,又是運(yùn)算符,用逗號連接起來的表達(dá)式稱為逗號表達(dá)式。一般格式為:表達(dá)式1,表達(dá)式2,…,表達(dá)式n
逗號表達(dá)式中的每一個(gè)表達(dá)式都會(huì)被運(yùn)算,整個(gè)逗號表達(dá)式的值為最后一個(gè)表達(dá)式的值。例如:a=(x=3,x+=6,5+6);//a=11x=92.5.2結(jié)束2.2.3不同類型數(shù)據(jù)的混合運(yùn)算和賦值時(shí)的類型轉(zhuǎn)換1不同類型數(shù)據(jù)的混合運(yùn)算
2賦值類型轉(zhuǎn)換
ok運(yùn)算過程中,當(dāng)某個(gè)二元運(yùn)算符兩邊的操作數(shù)類型不同但屬于類型相容時(shí),系統(tǒng)先將精度低的操作數(shù)變換到與另一操作數(shù)精度相同,而后再進(jìn)行運(yùn)算。
所謂類型相容,指的就是類型不同但系統(tǒng)可以自動(dòng)進(jìn)行轉(zhuǎn)換。當(dāng)賦值號的左值和右值類型不一致但屬于類型相容時(shí),由系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換。具體規(guī)則如下:(1)字符可以作為整數(shù)參與數(shù)值運(yùn)算,整數(shù)值為其ASCII碼。(2)操作數(shù)為字符或短整型時(shí),系統(tǒng)自動(dòng)變換成整型。(3)操作數(shù)為實(shí)型時(shí),系統(tǒng)自動(dòng)變換成雙精度型。(4)其余情況,當(dāng)兩操作數(shù)類型不同時(shí),將精度低(或表示范圍?。┑牟僮鲾?shù)的數(shù)據(jù)類型變換到與另一操作數(shù)類型相同再進(jìn)行運(yùn)算例如有變量:charc1,c2;inti1,i2;floatx1,x2;則表達(dá)式x2=c1*i1+c1*x1+c1*c2的求值過程為:將c1轉(zhuǎn)換成整型,完成c1*i1,結(jié)果表示為t1;將c1和x1均轉(zhuǎn)換成雙精度型,完成c1*x1,結(jié)果表示為t2;將c1和c2均轉(zhuǎn)換成整型,完成c1*c2,結(jié)果表示為t3;然后t1轉(zhuǎn)換成雙精度型,完成t1+t2,結(jié)果表示為t4;將t3轉(zhuǎn)換成雙精度型,完成t4+t3,最后結(jié)果轉(zhuǎn)為單精度型賦給x2。
2.賦值類型轉(zhuǎn)換2.5.3結(jié)束系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換規(guī)則:1、實(shí)型數(shù)賦給整形變量:取整;注意溢出;2、整型數(shù)賦給實(shí)型變量:先轉(zhuǎn)換為實(shí)型數(shù);3、字符型數(shù)賦給整形變量:ASCII碼為依據(jù);分為兩種情況:符號位是0或1時(shí)不同;若符號位為1,則低位字節(jié)不變,高位字節(jié)全部置1再賦值。4、絕對值較大的數(shù)賦給表達(dá)范圍較小的數(shù)據(jù)類型時(shí),注意溢出;2.5.4強(qiáng)制類型轉(zhuǎn)換運(yùn)算符ok其格式為:
(<type>)<表達(dá)式> //形式一或<type> (<表達(dá)式>)
//形式二作用:將表達(dá)式強(qiáng)制轉(zhuǎn)換為<type>類型, 但表達(dá)式的值及其類型不變。任意數(shù)據(jù)類型
賦值運(yùn)算中,當(dāng)左值與右值類型不一致時(shí),系統(tǒng)將按照左值的類型,自動(dòng)進(jìn)行強(qiáng)制轉(zhuǎn)換。例如: 設(shè)有以下定義
doublex=2.3,y;inti=2,j;(1)j2.3x2.3……22(1)j=x; (2)y=i;由系統(tǒng)按左值j、y類型自動(dòng)完成強(qiáng)制轉(zhuǎn)換功能(2)y2i2……2.02.02.5.4強(qiáng)制類型轉(zhuǎn)換運(yùn)算符第三章:簡單輸入/輸出3.1cincin用來在程序執(zhí)行期間給變量輸入數(shù)據(jù),一般格式為:cin>>變量名1《>>變量名2>>…>>變量名n》;
cout實(shí)現(xiàn)將數(shù)據(jù)輸出到顯示器的操作,一般格式為:cout<<表達(dá)式1《<<表達(dá)式2<<…<<表達(dá)式n》;
同時(shí)必須在程序開頭增加一行:#include<iostream.h>3.1.1十進(jìn)制數(shù)據(jù)的輸入輸出請看下例:inti,j;floatx,y;cout<<”Inputi,j,x,y:”<<endl;cin>>i>>j; //Dcin>>x>>y; cout<<”i=”<<i<<′\t′<<”j=”<<j<<endl;cout<<”x+y=”<<x+y<<endl;若輸入:10204.58.6<CR>則程序輸出:i=10 j=20x+y=13.1輸出時(shí)各數(shù)據(jù)間是無間隔的,因此應(yīng)當(dāng)有意輸出一些間隔符ok3.1.2輸入字符數(shù)據(jù)cin與cin.get()的區(qū)別(1)cin例如: charc1,c2,c3; cin>>c1;
//A
cin>>c2>>c3;
程序執(zhí)行到A行時(shí),等待用戶輸入數(shù)據(jù)。若輸入:Abc<CR>則cin分別將字符A、b、c賦給變量c1、c2、c3。cin自動(dòng)跳過輸入的空白字符(包括空格,制表,backspace和回車等)。
(2)cin.get()例如: charc1,c2,c3,c4; cin.get(c1); //B cin.get(c2); cin.get(c3);程序執(zhí)行到B行時(shí),若輸入:Ab<CR>則執(zhí)行結(jié)果是:字符′A′、空格、字符′b′分別賦給變量c1、c2、c3;輸入行中仍保留回車符。cin.get()把從鍵盤上輸入的所有字符,包括空白字符,都作為輸入字符賦給字符變量
關(guān)于字符的輸出,請看下例,假定字符c1、c2、c3的值分別為字符′a′、′b′和′c′,執(zhí)行以下語句序列:cout<<c1<<′\t′<<c2<<′\n′;cout<<c3<<endl;cout<<′O′<<′k′<<endl;屏幕上將輸出:a bcOk輸出時(shí)字符之間是無間隔的,如果想讓字符間有間隔,必須輸出間隔符
補(bǔ)充.字符串輸入輸出向一個(gè)字符數(shù)組中輸入字符串時(shí),用函數(shù)getline()。getline()以用戶按下回車鍵作為結(jié)束,在此之前的所有輸入都放入字符數(shù)組中:cin.getline(char[],int)其中第一個(gè)參數(shù)是已經(jīng)定義的字符數(shù)組名,第二個(gè)參數(shù)是讀入字符的最多個(gè)數(shù)n(包括字符串結(jié)束符‘/0’)。ok常用cout輸出字符串。雙引號中的字符串常量照原樣輸出,程序中通常通過輸出字符串常量來輸出一些提示信息。字符數(shù)組將輸出串結(jié)束符前所有字符。補(bǔ)充:字符串輸入輸出函數(shù)保證在執(zhí)行時(shí)總會(huì)為字符串的結(jié)束符保留一個(gè)字節(jié)。當(dāng)鍵盤的輸入字符(字節(jié))數(shù)多于(n-1)時(shí),后面的字符不會(huì)進(jìn)入字符數(shù)組,字符串結(jié)束符自動(dòng)加在字符數(shù)組的最后一個(gè)字節(jié)中。當(dāng)輸入字符數(shù)少于該值時(shí),字符串結(jié)束符自動(dòng)加在輸入到字符數(shù)組中的最后一個(gè)字符的后面。請看下例:charcity[11];cin.getline(city,10);
//輸入城市名最多5個(gè)中文字cout<<“城市名:“<<city<<endl;ok如果要求按八進(jìn)制或十六進(jìn)制輸入輸出,在cin或cout中必須指明相應(yīng)的數(shù)據(jù)形式,oct為八進(jìn)制,hex為十六進(jìn)制,dec為十進(jìn)制。例如:inti,j,k,l;cout<<”Inputi(oct),j(hex),k(hex),l(dec):”<<endl;cin>>oct>>i; //輸入為八進(jìn)制數(shù)cin>>hex>>j; //輸入為十六進(jìn)制數(shù)cin>>k; //輸入仍為十六進(jìn)制數(shù)cin>>dec>>l; //輸入為十進(jìn)制數(shù)cout<<”hex:”<<”i=”<<hex<<i<<endl;cout<<”dec:”<<”j=”<<dec<<j<<′\t′;cout<<”k=”<<k<<endl;cout<<”oct:”<<”l=”<<oct<<l;cout<<dec<<endl; //恢復(fù)十進(jìn)制輸出狀態(tài)ok輸入輸出的格式控制(1)各種進(jìn)制數(shù)據(jù)的輸入輸出執(zhí)行時(shí)輸出:Inputi(oct),j(hex),k(hex),l(dec):此時(shí)從鍵盤輸入:0320x3f0xa017<CR>則輸出結(jié)果為:hex:i=1adec:j=63 k=160oct:l=21由于已經(jīng)在cin中指明數(shù)制,因此從鍵盤輸入時(shí),八進(jìn)制和十六進(jìn)制數(shù)可以省略其開頭的0和0x標(biāo)志。
在cin或cout中指明數(shù)制后,該數(shù)制將一直有效,直到重新指明用其他數(shù)制。特別注意:輸入數(shù)據(jù)的格式、個(gè)數(shù)和類型必須與cin中的變量一一對應(yīng),否則不僅使輸入數(shù)據(jù)錯(cuò)誤,而且影響后面其他數(shù)據(jù)的正確輸入。輸入輸出的格式控制為了使數(shù)據(jù)間隔開,還可以用C++提供的函數(shù)setw()指定輸出數(shù)據(jù)項(xiàng)的寬度。例如:inti=2,j=3;floatx=2.6,y=1.8;cout<<setw(6)<<i<<setw(10)<<j<<endl;cout<<setw(10)<<i*j<<endl;cout<<setw(8)<<x<<setw(8)<<y<<endl;輸出結(jié)果為:
2362.61.8使用setw()必須在程序的開始處增加:#include<iomanip.h>ok(2)設(shè)置數(shù)據(jù)間隔第4章流程控制語句4.1選擇結(jié)構(gòu)程序設(shè)計(jì)
對程序的運(yùn)行流程進(jìn)行控制,主要通過執(zhí)行專門用來控制流程的語句來實(shí)現(xiàn)。流程控制語句也稱為過程化語句。分支語句是三種基本流程控制語句之一。C++提供以下三種分支語句:if語句
條件運(yùn)算符“?:”
swith語句
4.2.1if
語句if語句有兩種基本格式為:1、if(<表達(dá)式>)<語句1>;2、if(<表達(dá)式>)<語句1>else <語句2>;if語句【例4.1】輸入一個(gè)年份,判斷是否閏年。算法分析:假定年份為year,閏年的條件是:year%4==0&&year%100!=0||year%400==0。#include<iostream.h>voidmain(){ intyear; cout<<"輸入年份:"<<endl; cin>>year; if(year%4==0&&year%100!=0 ||year%400==0) cout<<year<<"是閏年"<<endl; elsecout<<year<<"不是閏年"<<endl;}ok分析:讀入三個(gè)數(shù),先求出兩個(gè)數(shù)中較大者,再將該大數(shù)與第三個(gè)數(shù)比較,求出最大數(shù)。#include<iostream.h>voidmain(){inta,b,c,max;cout<<"輸入三個(gè)正數(shù):";cin>>a>>b>>c;cout<<"a="<<a<<'\t'<<"b="<<b<<'\t‘ <<"c="<<c<<endl;if(a>b)max=a;elsemax=b;if(c>max)cout<<“最大數(shù)為:”<<c<<endl;elsecout<<“最大數(shù)為:”<<max<<endl;}if
語句【例4.2】從鍵盤上輸入三個(gè)整數(shù),輸出其中的最大數(shù)。ok
if語句中,如果內(nèi)嵌語句又是if語句,就構(gòu)成了嵌套if語句。if語句可實(shí)現(xiàn)二選一分支,而嵌套if語句則可以實(shí)現(xiàn)多選一的多路分支情況。嵌套有兩種形式,第一種是嵌套在else分支中:if(<表達(dá)式1>)<語句1>;elseif(<表達(dá)式2>)語句2;elseif…else<語句n>;
第二種是嵌套在if分支中為:if(<表達(dá)式1>)if(<表達(dá)式2>)<語句1>;
else<語句2>;
if語句//方法1:采用if中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個(gè)正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl; if(a>b)if(a>c)max=a;//a>b且a>c elsemax=c;//a>b且a<c else if(b>c)max=b;//a<=b且b>c elsemax=c;//a<=b且b<c cout<<"最大數(shù)max="<<max;}if
語句【例3.3】用嵌套if語句完成【例3.2】的任務(wù)。ok//方法2:采用else中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個(gè)正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl; if(a>b&&a>c)max=a; elseif(b>a&&b>c)max=b; elsemax=c; cout<<"最大數(shù)為:max="<<max;}if
語句ok
要特別注意else和if的配對關(guān)系。C++規(guī)定了if和else的“就近配對”原則,即相距最近且還沒有配對的一對if和else首先配對。按上述規(guī)定,第二種嵌套形式中的else應(yīng)與第二個(gè)if配對。如果根據(jù)程序的邏輯需要改變配對關(guān)系,則要將屬于同一層的語句放在一對“{}”中。如第二種嵌套形式中,要讓else和第一個(gè)if配對,語句必須寫成:if(表達(dá)式1){if(表達(dá)式2)語句1;}else語句2;
第二種嵌套形式較容易產(chǎn)生邏輯錯(cuò)誤,而第一種形式配對關(guān)系則非常明確,因此從程序可讀性角度出發(fā),建議盡量使用第一種嵌套形式。請看以下兩個(gè)語句://語句1:if(n%3==0)if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;elsecout<<n<<″是3的倍數(shù)但不是5的倍數(shù)″<<endl;//語句2:if(n%3==0){if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;}elsecout<<n<<″不是3的倍數(shù)″兩個(gè)語句的差別只在于一個(gè)“{}”,但表達(dá)的邏輯關(guān)系卻完全不同?!纠?.4】某商場優(yōu)惠活動(dòng)規(guī)定,某種商品單價(jià)為80元,一次購買5件以上(包含
5件)10件以下(不包含10件)打9
折,一次購買10件以上(包含10件)打8折。設(shè)計(jì)程序根據(jù)客戶的購買量計(jì)算總價(jià)。if
語句算法1、輸入購買件數(shù)count,設(shè)置單價(jià)price=80(元)2、根據(jù)count值確定折扣discount;3、實(shí)際售價(jià)amount=price*count*discount;4、輸出amount的值。算法細(xì)化:2.1、if(count<5)discount=1;2.2、if(count>=5&&count<10)discount=0.9;2.3、if(count>=10)discount=0.8;ok#include<iostream.h>voidmain(){floatprice=80,discount,amount;//單價(jià),折扣,總價(jià)
intcount; //購買件數(shù)
cout<<"輸入購買件數(shù):"<<endl;cin>>count;if(count<5)discount=1;elseif(count<10)discount=0.9;elsediscount=0.8;amount=price*count*discount;cout<<"購買件數(shù):"<<count<<endl;cout<<"單價(jià):"<<price<<'\t'<<"折扣:“
<<discount<<endl;cout<<"總價(jià):"<<amount<<endl;}請?jiān)赩C++平臺上運(yùn)行,輸入不同的件數(shù),使程序所有分支都可以被執(zhí)行一次。ok【例4.5】求一元二次方程
ax2+bx+c=0的根。其中系數(shù)a(a≠0)、b、c的值由鍵盤輸入。分析:輸入系數(shù)a(a≠0)、b、c后,令delta=b2–4ac,結(jié)果有三種情況:若delta=0,方程有兩個(gè)相同實(shí)根;若delta>0,方程有兩個(gè)不同實(shí)根;若delta<0,方程無實(shí)根。if
語句算法1、輸入系數(shù)a(a≠0)、b、c;2、令delta=b2–4ac;3、根據(jù)delta的值求方程的根;4、輸出方程的根;算法細(xì)化:3.1、if(delta==0)方程有兩個(gè)相同實(shí)根;計(jì)算…3.2、if(delta>0)方程有兩個(gè)不同實(shí)根;計(jì)算…3.3、if(delta<0)方程無實(shí)根;計(jì)算…ok#include<iostream.h>#include<math.h>voidmain(){ floata,b,c; floatdelta,x1,x2; constfloatzero=0.0001;//定義一個(gè)很小的常數(shù)
cout<<"輸入三個(gè)系數(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){//絕對值很小的數(shù)即被認(rèn)為是0 cout<<"方程有兩個(gè)相同實(shí)根:"; cout<<"x1=x2="<<-b/(2*a)<<endl;}elseif(delta>0){ delta=sqrt(delta); x1=(-b+delta)/(2*a); x2=(-b-delta)/(2*a); cout<<"方程有兩個(gè)不同實(shí)根:"; cout<<"x1="<<x1<<'\t'<<"x2=“ <<x2<<endl;} else //delta<0 cout<<"方程無實(shí)根!"<<endl;}請?jiān)赩C++平臺上運(yùn)行,輸入不同的系數(shù),使程序所有分支都可以被執(zhí)行一次。3.1.2條件運(yùn)算符“?:”
if語句在某些情況下可以用條件運(yùn)算符“?:”來簡化表達(dá)。“?:”是一個(gè)三元運(yùn)算符,其構(gòu)成的表達(dá)式格式為:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>執(zhí)行邏輯:先計(jì)算表達(dá)式1,若其值為真(或非0),則計(jì)算表達(dá)式2(不計(jì)算表達(dá)式3),并將該值作為整個(gè)表達(dá)式的值;反之,即表達(dá)式1的值為假或?yàn)?,則計(jì)算表達(dá)式3(不計(jì)算表達(dá)式2),并將該值作為整個(gè)表達(dá)式的值。例如:inta=6,b=7,min=a<b?a:b;//min=6 min=a<b?++a:++b;//min=7a=7b=7min=a<b?a++:b++;//min=6a=7b=7ok3.1.3switch語句用嵌套if語句可以實(shí)現(xiàn)多選一的情況。另外C++中還提供了一個(gè)switch語句,稱為開關(guān)語句,也可以用來實(shí)現(xiàn)多選一:switch(表達(dá)式){case常量表達(dá)式1:《語句序列1》《break;》……case常量表達(dá)式n:《語句序列n》《break;》《default:語句序列》}
switch語句格式(1)各個(gè)case(包括default)分支出現(xiàn)的次序可以任意,通常將default放在最后。(2)break語句可選,如果沒有break語句,每一個(gè)case分支都只作為開關(guān)語句的執(zhí)行入口,執(zhí)行完該分支后,還將接著執(zhí)行其后的所有分支。因此,為保證邏輯的正確實(shí)現(xiàn),通常每個(gè)case分支都與break語句聯(lián)用。(3)每個(gè)常量表達(dá)式的取值必須各不相同,否則將引起歧義。(4)允許多個(gè)常量表達(dá)式對應(yīng)同一個(gè)語句序列。例如:charscore;cin>>score;switch(score){case′A′:case′a′:cout<<″e(cuò)xcellent″; break;case′B′:case′b′:cout<<″good″;break;default:cout<<″fair″;}(5)從形式上看,switch語句的可讀性比嵌套if語句好,但不是所有多選一的問題都可由開關(guān)語句完成,這是因?yàn)殚_關(guān)語句中限定了條件表達(dá)式的取值類型。
okswitch語句例子【例3.6】
運(yùn)輸公司對所運(yùn)貨物實(shí)行分段計(jì)費(fèi)。設(shè)運(yùn)輸里程為s,則運(yùn)費(fèi)打折情況如下:
s<250 不打折扣
250<=s<500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000<=s<3000 10%折扣
3000<=s 15%折扣設(shè)每公里每噸的基本運(yùn)費(fèi)為p,貨物重量為w,折扣為d,則總運(yùn)費(fèi)f為:f=p*w*s*(1-d)設(shè)計(jì)程序,當(dāng)輸入p、w和s后,計(jì)算運(yùn)費(fèi)f。算法1、輸入每噸運(yùn)費(fèi)p、貨物重量w、運(yùn)輸里程s;2、根據(jù)運(yùn)輸里程s計(jì)算折扣d;3、計(jì)算總運(yùn)費(fèi)f=p*w*s*(1-d);4、輸出計(jì)算結(jié)果;算法細(xì)化:2、根據(jù)運(yùn)輸里程s計(jì)算折扣d分析:如果用switch語句,必須使表達(dá)式符合語法要求,分析發(fā)現(xiàn),里程s的分段點(diǎn)均是250的倍數(shù),因此,將里程s除以250,取整數(shù)商,便得到若干整數(shù)值。okswitch(c=s/250){case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;default:d=0.15;}s<250 不打折扣250<=s<500 2%折扣500<=s<1000 5%折扣1000<=s<2000 8%折扣2000<=s<3000 10%折扣3000<=s15%折扣#include<iostream.h>#include<iomanip.h>voidmain(){intc,s;floatp,w,d,f; cout<<"輸入運(yùn)輸單價(jià)p,重量w和里程s:"<<endl; cin>>p>>w>>s;c=s/250; switch(c){ case0:d=0;break; case1:d=0.02;break; case2:case3:d=0.05;break; case4:case5:case6:case7:d=0.08;break; case8:case9:case10:case11:d=0.1;break; default:d=0.15;} f=p*w*s*(1-d); cout<<"運(yùn)輸單價(jià)為"<<p<<'\t'<<"重量為"<<w<<'\t‘ <<"里程為"<<s<<endl; cout<<"折扣為"<<d<<endl; cout<<"運(yùn)費(fèi)為"<<f<<endl;}請?jiān)赩C++平臺上運(yùn)行,輸入不同的里程,使程序所有分支都可以被執(zhí)行一次。ok【例3.7】
設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)加、減、乘、除運(yùn)算。分析:讀入兩個(gè)操作數(shù)和運(yùn)算符,根據(jù)運(yùn)算符完成相應(yīng)運(yùn)算。#include<iostream.h>voidmain(){floatnum1,num2;charop;cout<<"輸入操作數(shù)1,運(yùn)算符,操作數(shù)2:"<<endl;cin>>num1>>op>>num2;switch(op){case'+':cout<<num1<<op<<num2<<"="<<num1+num2<<endl;break;case'-':cout<<num1<<op<<num2<<"="<<num1-num2<<endl;break;case'*':cout<<num1<<op<<num2<<"="<<num1*num2<<endl;break;case'/':cout<<num1<<op<<num2<<"="<<num1/num2<<endl;break;default:cout<<op<<"是無效運(yùn)算符!";}}常量表達(dá)式采用字符型,上機(jī)運(yùn)行一下。循環(huán)控制語句是三種基本流程控制語句之一。C++提供以下三種循環(huán)語句:while語句
do-while語句
for語句4.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)4.3.1while語句while語句也稱為當(dāng)循環(huán)。語句格式為:while(表達(dá)式)
循環(huán)體語句;
圖3.1while語句的執(zhí)行流程圖求表達(dá)式的值表達(dá)式值為真?是否執(zhí)行循環(huán)體語句while語句【例4.8】求1+2+3+4的值。okN個(gè)連續(xù)整數(shù)相加算法1、設(shè)置變量i用來放被加數(shù),變量sum用來放和值,并初始化;2、從第一個(gè)數(shù)開始,依次將被加數(shù)賦給i,并進(jìn)行操作sumsum+i;3、輸出sum;細(xì)化算法2:
while(還有被加數(shù)) { i=當(dāng)前被加數(shù);
sum+=i;i準(zhǔn)備接受下一個(gè)被加數(shù);
}源程序如下:#include<iostream.h>voidmain(){inti=1,sum=0;//循環(huán)初始條件
while(i<=4){ sum+=i; i++; //修改循環(huán)條件
}cout<<"sum="<<sum<<endl;
}在VC++平臺上運(yùn)行,試一試是否正確okwhile語句注意:在有循環(huán)語句的程序中,通常循環(huán)開始前對循環(huán)條件進(jìn)行初始化;而在循環(huán)體語句中要包含修改循環(huán)條件的語句,否則循環(huán)將不能終止而陷入死循環(huán)。C++表達(dá)方式靈活,上例中的循環(huán)語句還可以寫成:while(i<=n)sum+=i++;或者while(sum+=i++,i<=n);//循環(huán)體為空語句修改程序后在VC++平臺上運(yùn)行,看是否正確4.3.2do-while語句
do-while語句稱為直到循環(huán),格式為:
do循環(huán)體語句
while(表達(dá)式)
否是表達(dá)式的值為真?執(zhí)行循環(huán)體語句求表達(dá)式的值圖3.2do-while語句的執(zhí)行流程圖do-while語句do/while語句和while語句的區(qū)別:多數(shù)情況下可以互相替代。區(qū)別是do/while語句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足;while語句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體?!纠?.9】
輸入一段文本,統(tǒng)計(jì)文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之間以空格或跳格或換行符間隔,且文本開始沒有空行。算法分析:1、逐個(gè)讀入文本中的字符,直到讀到一個(gè)輸入結(jié)束符EOF為止。2、如何算行數(shù)?行結(jié)束標(biāo)志為讀到字符′\n′;3、如何算單詞數(shù)?設(shè)一個(gè)變量isword,讀到字符時(shí)isword=1,讀到間隔符時(shí)isword=0;如果讀到一個(gè)間隔符而此時(shí)isword值為1,則說明剛讀完一個(gè)單詞;(如果讀到一個(gè)字符而此時(shí)isword值為0,則說明剛開始讀一個(gè)單詞;)4、如何算字符數(shù)?do-while語句ok算法1、設(shè)置變量line、word、ch分別代表行數(shù)、單詞數(shù)、非分隔字符數(shù),并初始化;設(shè)置變量isword來輔助統(tǒng)計(jì)單詞數(shù);2、do{ 從鍵盤讀入一個(gè)字符c;
if(c==’\n’)line++; if(是單詞開頭)word++; if(c不是分隔符)ch++; }while(c!=EOF);3、輸出統(tǒng)計(jì)結(jié)果。將下面的程序在VC++平臺上運(yùn)行,試一試是否正確#include<iostream.h>voidmain(){charc;intline=0,word=0,ch=0;//ch為非分隔字符數(shù)intisword=0;do{c=cin.get();if(c==′\n′)line++;//遇換行符行數(shù)+1if(c!=′′&&c!=′\t′&&c!=′\n′){//讀到非間隔符
if(isword==0)word++;//在單詞的起始處給單詞數(shù)+1ch++; //字符數(shù)加+1isword=1;}elseisword=0; //讀到間隔符}while(c!=EOF);cout<<”行數(shù):”<<line<<endl;cout<<”單詞數(shù):”<<word<<endl;cout<<”字符數(shù):”<<char<<endl;}4.3.3for語句for循環(huán)語句的格式為:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)<循環(huán)體語句>圖3.3for語句的執(zhí)行流程圖否是求表達(dá)式1的值求表達(dá)式2的值表達(dá)式2值為真?執(zhí)行循環(huán)體語句求表達(dá)式3的值okfor語句、while語句、do/while語句實(shí)現(xiàn)相同的功能:1+2+3+4inti=1,sum=0;
//循環(huán)初始條件while(i<=4)
{sum+=i;i++;
//修改循環(huán)條件
}inti=1,sum=0;//循環(huán)初始條件do{ sum+=i; i++;//修改循環(huán)條件
}while(i<=4);for(inti=1,sum=0;i<=4;i++){ sum+=i;}/*習(xí)慣上:表達(dá)式1:循環(huán)初始條件;表達(dá)式2:循環(huán)終止條件;表達(dá)式3:修改循環(huán)條件*/okfor語句的應(yīng)用for語句的幾點(diǎn)說明:1、是先判斷型的,同while語句;2、使用更為靈活:三個(gè)表達(dá)式可以是任意表達(dá)式,因此他們就可以實(shí)現(xiàn)循環(huán)初始化、計(jì)算、修改循環(huán)條件等任務(wù),而不一定非在循環(huán)體中進(jìn)行;
for語句的應(yīng)用【例4.11】設(shè)計(jì)程序輸出Fibonacii數(shù)列的前20項(xiàng),要求每行輸出5個(gè)數(shù)據(jù)。Fibonacii數(shù)列定義如下:算法分析:除了第0項(xiàng)和第1項(xiàng)外,每一項(xiàng)都是由類似方法產(chǎn)生,即前兩項(xiàng)之和;所以求當(dāng)前項(xiàng)時(shí),只需要記住前兩項(xiàng);程序不需要為每一項(xiàng)設(shè)置專用變量;屬遞推算法。算法:1、設(shè)置變量n表示第幾項(xiàng),變量f1和f2用來記住當(dāng)前項(xiàng)f3之前的兩項(xiàng);變量初始化n=0;2、while(當(dāng)前項(xiàng)不到第20項(xiàng))
{ if(當(dāng)前項(xiàng)是第0項(xiàng))f1=0; if(當(dāng)前項(xiàng)是第1項(xiàng))f2=1;if(當(dāng)前項(xiàng)是第2項(xiàng)或更高項(xiàng))f3=f1+f2;
按要求輸出f3;f1=f2;f2=f3;//記住最近兩項(xiàng) 當(dāng)前項(xiàng)后移一位;
}【例3.11】設(shè)計(jì)程序輸出Fibonacii數(shù)列的前20項(xiàng),要求每行輸出2個(gè)數(shù)據(jù)。Fibonacii數(shù)列定義如下:程序如下://文件名:Ex3_11.cpp#include<iostream.h>#include<iomanip.h>voidmain(){intfib0=0,fib1=1,fib2; cout<<setw(5)<<fib0<<setw(5)<<fib1<<endl; for(intn=3;n<=20;n++){ fib2=fib0+fib1; cout<<setw(5)<<fib2; if(n%5==0)cout<<endl;
//控制每行2個(gè)數(shù)據(jù)
fib0=fib1;fib1=fib2;}}for語句的應(yīng)用在VC++平臺上運(yùn)行運(yùn)行結(jié)果:0 1 1 2 3 5 8 13 21 3455 89 144 233377610 987 159725844181【例4.12】輸入一個(gè)不超過5位的整數(shù),將其反向后輸出。例如輸入247,變成742輸出。算法分析:1、將整數(shù)的各個(gè)數(shù)位逐個(gè)位分開,用一個(gè)數(shù)組保存各個(gè)位的值,然后反向組成新的整數(shù)。2、將整數(shù)各位數(shù)字分開的方法是,通過求余得到個(gè)位數(shù),然后將整數(shù)縮小十倍,再求余,并重復(fù)上述過程,分別得到十位、百位……,直到整數(shù)的值變成0為止。
for語句的應(yīng)用ok數(shù)據(jù):1、設(shè)置變量num表示輸入的整數(shù),整型數(shù)組digit[5]用來存放num的各個(gè)位;變量i用來表示數(shù)組的當(dāng)前下標(biāo);算法:1、輸入num;變量初始化:i=0;2、while(num!=0){ num對10取余,得num的當(dāng)前個(gè)位數(shù)digit[i];
num整除10,即去掉個(gè)位數(shù),十位變個(gè)位,百位變十位,……;
i++;數(shù)組digit準(zhǔn)備記錄下一位;}3、將數(shù)組元素按下標(biāo)從高到低的順序輸出;程序如下:#include<iostream.h>vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師開學(xué)前軍訓(xùn)心得體會(huì)5篇
- 物流設(shè)施與設(shè)備第二章航空管道
- 債務(wù)償付質(zhì)押合同(2篇)
- 公共事業(yè)投資合作協(xié)議書(2篇)
- 河南省安陽市第六十二中學(xué)2022年高三語文下學(xué)期期末試卷含解析
- 2025年Γ-球蛋白三類項(xiàng)目合作計(jì)劃書
- 上海寫字樓租賃合同范本
- 幼兒園房屋租賃合同書范本
- 小吃街?jǐn)偽蛔赓U合同
- 長期租賃合同范本
- 2024-2034年全球及中國年糕行業(yè)市場發(fā)展分析及前景趨勢與投資發(fā)展研究報(bào)告
- 烈士陵園的數(shù)字化轉(zhuǎn)型與智能服務(wù)
- 生理學(xué)重點(diǎn)復(fù)習(xí)資料全
- 初中生理想信念教育班會(huì)(3篇模板)
- (高清版)JGT 225-2020 預(yù)應(yīng)力混凝土用金屬波紋管
- 2024年上海市奉賢區(qū)中考一模英語試題(含答案解析)
- 農(nóng)產(chǎn)品加工與貯藏原理復(fù)習(xí)資料
- (正式版)JBT 5300-2024 工業(yè)用閥門材料 選用指南
- Unit1WhatsthematterSectionB2a-2e教學(xué)設(shè)計(jì)人教版八年級英語下冊
- 工藝工程師的成長計(jì)劃書
- 幼兒園大班音樂教案《爆米花》教學(xué)反思
評論
0/150
提交評論