《C++語言基礎(chǔ)》全套課件(完整版)_第1頁
《C++語言基礎(chǔ)》全套課件(完整版)_第2頁
《C++語言基礎(chǔ)》全套課件(完整版)_第3頁
《C++語言基礎(chǔ)》全套課件(完整版)_第4頁
《C++語言基礎(chǔ)》全套課件(完整版)_第5頁
已閱讀5頁,還剩492頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++語言基礎(chǔ)C++概述C++的特點發(fā)展歷史和未來 (C\C++(AT&T)\Java(SUN)\C#(MS))與其它語言比較(7點):面向?qū)ο蟮母拍?數(shù)據(jù)的封裝和隱藏、繼承、多態(tài)VC上機過程C++的字符集26個小寫字母

abcdefghijklmnopqrstuvwxyz26個大寫字母

ABCDEFGHIJKLMNOPQRSTUVWXYZ10個阿拉伯數(shù)字

0123456789

其他符號

+-*/=,._:;?\"'~|!#%&()[]{}^<>空格C++語言使用下列基本字符來構(gòu)成詞法單位:結(jié)束第二章:數(shù)據(jù)類型運算符表達式2.1VC++的數(shù)據(jù)類型計算機所處理的數(shù)據(jù)以一定形式存放在內(nèi)存中,數(shù)據(jù)的存儲方式以及能夠進行的合法運算都與數(shù)據(jù)類型直接相關(guān)。C++的特點之一就是提供了豐富的數(shù)據(jù)類型,以便處理各種不同的數(shù)據(jù)。數(shù)據(jù)類型總是與運算封裝在一起,本質(zhì)上是面向?qū)ο蟮?。本章將簡要介紹C++中的數(shù)據(jù)類型及相關(guān)運算,以及常量、變量、表達式、語句等,最后介紹簡單的輸入輸出方法。2.1.1關(guān)鍵字數(shù)據(jù)類型說明符與修飾符boolcharwchar_tclassconstdoubleenumfloatintlongshortsignedstructunionunsignedvoidvolatile存儲類型說明符autoexterninlineregisterstatic訪問說明符friendprivateprotectedpublic其它說明符asmexplicitnamespaceoperatortemplatethistypedeftypenameusingvirtual

語句與標號breakcasecatchcontinuedefaultdoelseforgotoifreturnswitchthrowtrywhile

運算符及邏輯值deletefalsenewsizeoftrue

還有一些關(guān)鍵字本書未介紹:

const_castdynamic_castreinterpret_caststatic_castexportmutabletypeid下面可用一些關(guān)鍵字代替邏輯運算符:andand_eqbitandbitorComplnotoror_eqXorxor_eqnot_eq2.1.2標識符標識符(Identifier,ID)是程序員定義的“單詞”,用來給變量、常量、數(shù)據(jù)類型、函數(shù)等命名。合法標識符由字母或下劃線開始,由字母、數(shù)字、下劃線組成,其有效長度為1-31個字符,長度超過31個字符者只識別前31個字符,VC++標識符長度為1-247個字符。建議使用有一定含義的英文單詞或拼音序列作標識符,以提高可讀性;另外盡量不用下劃線或雙下劃線打頭,以免與系統(tǒng)定義的關(guān)鍵字沖突。ok標識符例:判斷下面哪些是合法的標識符:

MyFileSalary94amountvoid94SalarySalary94$amountf3.5Num_of_Student2.1.2結(jié)束2.1.3標點符號標點符號包括:#、()、{}、,、:、;、"、'等。標點符號的作用:有一定的語法意義。如字符和字符串常量分別用‘’和“”引起來。對語法符號起分隔作用。如;等2.1.3結(jié)束2.1.5C++的基本數(shù)據(jù)類型圖2-1C++的數(shù)據(jù)結(jié)構(gòu)實型float雙精度型doubleC++的數(shù)據(jù)類型基本數(shù)據(jù)類型非基本數(shù)據(jù)類型數(shù)組type[]指針type*結(jié)構(gòu)struct聯(lián)合union枚舉enum類class整型int字符型char邏輯型bool無值型void實型ok

C++對基本數(shù)據(jù)類型也分別進行了封裝,稱為內(nèi)置數(shù)據(jù)類型,內(nèi)置數(shù)據(jù)類型不僅定義了數(shù)據(jù)類型,還定義了常用操作。本節(jié)僅介紹各種基本數(shù)據(jù)類型的定義,常用操作將在后面介紹。

C++為強類型語言,所有數(shù)據(jù)的使用嚴格遵從“先說明后使用”的原則,以便編譯器進行編譯。

整型用來存放整數(shù),整數(shù)(有符號的整數(shù))在內(nèi)存中存放的是它的補碼,無符號數(shù)沒有符號位,存放的就是原碼。整數(shù)占用的字節(jié)數(shù)與機型有關(guān),32位機上占用4個字節(jié)。

字符型用來保存字符,存儲的是該字符的ASCII碼,占用一個字節(jié)。如大寫字母A的ASCII碼為65,在對應的一個字節(jié)中存放的就是65。字符型數(shù)據(jù)從本質(zhì)上說也是整數(shù),可以是任何一個8位二進制整數(shù)。由于漢語系字符很多,用ASCII字符集處理遠遠不夠,因此又創(chuàng)立了雙字節(jié)字符集(DBCS:double-bytecharacterset),每個字符用兩個字節(jié)來編碼。為便于軟件的國際化,國際上一些知名公司聯(lián)合制定了新的寬字節(jié)字符標準——Unicode。該標準中所有字符都是雙字節(jié)的,不同的語言和字符集分別占用其中一段代碼。這種用統(tǒng)一編碼處理西文、中文及其它語言符號,就是unicode碼。C++同時也支持寬字符類型(wchar_t),或稱雙字節(jié)字符型。

實型和雙精度型都用來存放實數(shù),兩者表示的實數(shù)精度不同。實數(shù)在內(nèi)存中以規(guī)范化的浮點數(shù)存放,包括尾數(shù)、數(shù)符和階碼。數(shù)的精度取決于尾數(shù)的位數(shù),32位機上實型為23位(因規(guī)范化數(shù)的數(shù)碼最高位恒為1,不必存儲,實際為24位),雙精度為52位。邏輯型也稱布爾型,其取值為true(邏輯真)和false(邏輯假),存儲字節(jié)數(shù)在不同編譯系統(tǒng)中可能有所不同,VC++6.0中為1個字節(jié)。布爾型在運算中可以和整型相互轉(zhuǎn)化,false對應為0,true對應為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實型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.實型常量oka整型常量十進制表示法八進制表示法十六進制表示法其他表示法即整數(shù),可以有多種表示方法:ok

整數(shù)的十進制表示方法十進制表示與我們熟悉的書寫方式相同。如15-24ok

整數(shù)的八進制表示

八進制表示以0開始,由數(shù)字07組成,用來表示一個八進制數(shù)。如:012 //八進制數(shù)12,即十進制數(shù)10-0655 //八進制數(shù)-655,即十進制數(shù)-429ok

整數(shù)的十六進制表示

十六進制以0X(大小寫均可)開始,由數(shù)字09和字母AF(大小寫均可)組成,用來表示一個十六進制數(shù)。以下是一些常整數(shù)的例子:0x32A//十六進制數(shù)32A,即十進制數(shù)810-0x2fe0//十六進制數(shù)-2fe0,

//即十進制數(shù)-12256ok整數(shù)的其他表示方法

整型常量還可以表示長整數(shù)和無符號整數(shù)。長整型常數(shù)以L

或l

結(jié)尾,無符號常整數(shù)以U

或u

結(jié)尾,以UL

或LU(大小寫均可)結(jié)尾則可表示無符號長整型常數(shù)。例如:-84L //十進制長整數(shù)-84026U //八進制表示的無符號整數(shù)260X32LU//十六進制表示的無符號長整型數(shù)32。整數(shù)結(jié)束b實型常量(1)一般形式與平時書寫形式相同,由數(shù)字09和小數(shù)點組成。例如:0.23-125.760.0.46-35.(2)指數(shù)形式(也稱為科學表示法)表示為尾數(shù)乘以10的次方形式,由尾數(shù)、E或e和階數(shù)組成。指數(shù)形式要求在E或e前面的尾數(shù)部分必須有數(shù)字,后面的指數(shù)部分必須為整數(shù)。

例:判斷下列表示是否合法123E12-.34e-2E41.43E3.5包含小數(shù)點和10的冪的數(shù)為實型常量,有兩種表示方法:實數(shù)結(jié)束c字符型常量

字符常量是用單引號引起來的單個字符。在內(nèi)存中保存的是字符的ASCII碼值。在所有字符中,有些是可顯示字符,通常就用單引號引起來表示:′a′ //字符a ′@′ //字符@ ′4′ //字符4 ′′ //空格字符有些是特殊情況字符,如不可顯示的字符等,c++使用轉(zhuǎn)義序列表示方法,如(祥見表2-3,此處略):

′\n′ //換行

′\\′//字符\字符常結(jié)束

d.字符串常量字符串常量與字符型常量的區(qū)別字符串常量″a″占兩個字節(jié),存放′a′和′\0′,值為0x6100字符型常量′a′占一個字節(jié),存放′a′,值為0x61\0aa2.3.2結(jié)束用雙引號引起來的若干個字符稱為字符串常量。例如:″IamaChinese.″,″123″,″a″,″″2標識符常量及常量說明符const用常量說明符const給字面常量起個名字(標識符),這個標識符就稱為標識符常量;因為標識符常量的說明和引用形式很像變量,所以也稱常變量;例如:constfloatPI=3.14159;constintNumber_of_Student=100;常變量必須也只能在說明時進行初始化;常變量初始化之后,不允許再被賦值;常變量必須先說明后使用;常變量存儲在數(shù)據(jù)區(qū),并且可以按地址訪問,編譯時系統(tǒng)對常變量進行類型檢查。C++建議使用常變量,而盡量不使用字面常量。2.3.3結(jié)束2.1.7變量1變量說明

2變量賦初值

變量,在程序中是指可以改變值的量;變量必須用標識符進行標識,稱為變量名;變量有類型之分,如整形變量、字符變量等;任何變量都必須先說明后使用;一是便于編譯程序為變量分配空間,二是便于編譯時進行語法檢查;變量使用的第一步,是給變量賦初始值;ok變量說明

在C++中,變量說明的一般格式為:《存儲類型》數(shù)據(jù)類型變量名1《,變量名2,,變量名n》;

下面是變量說明的幾個例子:inti,j,k; //說明三個整型變量i,j,kfloatx,y,z; //說明三個實型變量x,y,zcharc1,c2;//說明兩個字符型變量c1,c2doubledx; //說明一個雙精度型變量dx變量說明結(jié)束變量賦初值(1)變量說明時直接賦初值。例如: inta=3,b=4,c=5; floatx=3.0; (2)用賦值語句賦初值。嚴格的說,只有前者可稱賦初值例如: floatx,e; x=3.5; e=2.71828;

結(jié)束給變量賦初值稱為初始化,有兩種方法:2.2基本運算符

對常量和變量進行運算是通過運算符來實現(xiàn)的.常量和變量通過運算符組成C++表達式,由表達式再組成C++語句.

運算符是完成對常量和變量進行運算的符號.把參與運算的對象稱為操作數(shù).按照要求的操作數(shù)的個數(shù),運算符分為單目(一元)運算符、雙目(二元)運算符和三目(三元)運算符。單目運算符只對一個操作數(shù)運算,如負號運算符“”等;雙目運算符要求有兩個操作數(shù),如乘號運算符“*”等;三目運算符要求有三個操作數(shù),三元運算符只有一個“?:”。1.算術(shù)運算符優(yōu)先級運算符名稱3+正,單目

-負,單目5*乘,雙目

/除,雙目

%求余,雙目6+加,雙目

-減,雙目ok運算符重載:當兩個操作數(shù)均為整數(shù)時,*和/重載為整乘和整除,結(jié)果為整數(shù),除法運算后舍去小數(shù)取整。如:5/4 //結(jié)果為1,整數(shù)當兩個操作數(shù)均為整數(shù),%定義為求余運算,也稱求模運算,結(jié)果為兩個整數(shù)相除后的余數(shù)。如果兩個整數(shù)中有負數(shù),則先用兩數(shù)絕對值求余,最后結(jié)果的符號與被除數(shù)相同。例如6%3 //結(jié)果為06%7 //結(jié)果為67%6 //結(jié)果為1C++中算術(shù)運算應注意數(shù)據(jù)溢出問題,即運算結(jié)果超出對應數(shù)據(jù)類型的表示范圍。編譯程序只會對除法運算時除數(shù)為0這種情況提示出錯,而特別容易溢出的整數(shù)的加、減和乘法運算產(chǎn)生溢出的情況,系統(tǒng)不作為錯誤處理,程序?qū)⒗^續(xù)執(zhí)行并產(chǎn)生錯誤的計算結(jié)果。因此,程序設(shè)計者必須在程序中解決檢查并處理整數(shù)溢出問題。

只要有一個操作數(shù)是實數(shù),兩個操作數(shù)均轉(zhuǎn)換為double型,*和/重載為普通的乘和除,結(jié)果是實數(shù):5/4.0 //結(jié)果為1.25,實數(shù)2.關(guān)系運算符和邏輯運算符ok

關(guān)系運算符都是二元運算符,包括:(大于)、(不小于)、(小于)、(不小于)、==(等于)和!=(不等于)。關(guān)系運算符完成兩個操作數(shù)大小的比較,結(jié)果為邏輯值true(真)或false(假)。每種可比較大小的數(shù)據(jù)類型,都重載了關(guān)系運算符。不同類型,自動轉(zhuǎn)換為同一類型后,采用對應關(guān)系運算符進行比較。在C++中這兩個邏輯值與整數(shù)之間有一個對應關(guān)系,真對應1,假對應0;反過來,0對應假,非0整數(shù)對應真。所以關(guān)系運算結(jié)果可以作為整數(shù)參與算術(shù)運算、關(guān)系運算、邏輯運算及其他運算。2.關(guān)系運算符和邏輯運算符

設(shè)有定義floata=3.2;intb=5;則:3>a>b //結(jié)果是?根據(jù)右結(jié)合原則其運算過程如下:a5b3.23>F,即0>F即0優(yōu)先級運算符名稱語義2!邏輯非,單目操作數(shù)的值為真,則結(jié)果為假;12&&邏輯與,雙目當兩個操作數(shù)全為真時,結(jié)果為真,否則為假;13||邏輯或,雙目兩個操作數(shù)中有一個為真,則結(jié)果為真;邏輯運算符

邏輯運算符用來進行邏輯運算。其操作數(shù)和運算結(jié)果均為邏輯量。運算結(jié)果同樣可以作為一個整數(shù)參與其他運算。

由于邏輯值和整數(shù)之間的對應關(guān)系,也允許整型和字符型操作數(shù)進行邏輯運算:21&&0 //邏輯與,21與0,結(jié)果為假:021||0 //邏輯或,21或0,結(jié)果為真:1!21 //邏輯非,21的非,結(jié)果為假:0邏輯運算符位運算符(1)按位取反運算符“~”(2)左移運算符“<<”(3)右移運算符“>>”(4)按位與運算符“&”(5)按位或運算符“|”(6)按位異或運算符“^”okc++語言提供字位運算,它對操作數(shù)的各個位進行操作。(1)按位取反運算符“~”將操作數(shù)的每個二進制位取反,即1變?yōu)?,0變?yōu)?。例如,整數(shù)a的值為10011011,則~a的值為01100100。(2)左移運算符“<<”運算一般格式為:a<<n其中a為整數(shù),n為一個正整數(shù)常數(shù)。語義為將a的二進制數(shù)依次向左移動n個二進制位,并在低位補0。左移n位相當于乘以2的n次方,但移位運算的速度比乘法快。

(3)右移運算符“>>”與左移運算符類同,將左操作數(shù)向右移動右操作數(shù)指定的二進制位數(shù),忽略移位后的小數(shù)部分,并在高位補0。一個整數(shù)右移n位相當于除以2的n次方,但比除法快。在VC++6.0中有符號數(shù)右移時高位補符號位,嚴格對應除法。以上三種單目運算不影響數(shù)據(jù)本身的值,而是只產(chǎn)生一個中間量,這個中間量被引用后即不再存在。

(4)按位與運算符“&”將兩個操作數(shù)的對應位逐一進行按位邏輯與運算。運算規(guī)則為:對應位均為1時,該位運算結(jié)果為1;否則為0。例如:a01001101b00001111a&b00001101該運算可用來將整數(shù)的某些位置0,而保留所需要的位,上例保留了低四位。(5)按位或運算符“|”將兩個操作數(shù)的對應位逐一進行按位邏輯或運算。運算規(guī)則為:只要有一個數(shù)對應位為1,該位運算結(jié)果即為1;兩個數(shù)對應位均為0,該位結(jié)果為0。例如:a01001101b00001111a|b01001111該運算符可用來將整數(shù)的某些位置1。上例高四位不變,低四位全1。(6)按位異或運算符“^”將兩個操作數(shù)的對應位逐一進行按位異或運算。運算規(guī)則為:當對應位的值不同時,該位運算結(jié)果為1,否則為0。例如:a01001101b00001111a^b01000010該運算符可用來將一個整數(shù)的某些位取反,或?qū)⒄妥兞康闹抵?(將整型變量與自身按位異或)。上例低四位取反,高四位不變。需要說明的一點是,以上例子中的整數(shù)都只取了低8位一個字節(jié)。4.賦值運算符ok

將數(shù)據(jù)存放到相應存儲單元中稱為賦值,如果該單元中已有值,賦值操作以新值取代舊值;從某個存儲單元中取出數(shù)據(jù)使用,稱為引用,引用不影響單元中的值,即一個量可以多次引用。常量只能引用,不能賦值。賦值通過賦值運算符“=”來完成,其意義是將賦值號右邊的值送到左邊變量所對應的單元中。賦值號不是等號,它具有方向性。

C++將變量名代表的單元稱為“左值”,而將變量的值稱為“右值”。左值必須是內(nèi)存中一個可以訪問且可以合法修改的對象,因此只能是變量名,而不能是常量或表達式。4.賦值運算符例如下面的賦值運算是錯誤的:3.1415926=pi;

//左值不能是常數(shù)x+y=z;

//左值不能是表達式constintN=30;N=40;

//左值不能是常變量5.自增自減運算運算分前置和后置兩種,前置是先增減后引用,即先對變量自加或自減,用新的值參與其他運算;后置則是先引用后增減,即用變量原來的值參與其他運算,然后再對變量進行自加或自減,例如:inti=5,j=5,m,n;m=i++;//后置;相當于m=i;i=i+1; //結(jié)果:i的值為6,m的值為5;n=++j;//前置;相當于j=j+1;n=j;//結(jié)果:j的值為6,n的值為6;意義:使變量當前值加1或減1,再賦給該變量。要求:操作數(shù)只能是變量,不能是常量或表達式;oksizeof()運算符

用于計算一個操作數(shù)類型或一個變量的字節(jié)數(shù)。一般格式為:sizeof(數(shù)據(jù)類型)

或sizeof(變量名)

例如:sizeof(int)

值為4

sizeof(float)

值為4

doublex;

sizeof(x)

值為8結(jié)束2.2.2表達式1算術(shù)表達式

2關(guān)系表達式

3邏輯表達式和邏輯表達式求值的優(yōu)化4賦值表達式與復合賦值表達式5逗號表達式ok1.算術(shù)表達式使用時注意:1、表達式中每個變量都有確定的值時才能進行表達式求值;2、考慮到算術(shù)運算溢出和精度問題,應避免:(1)兩個很接近的數(shù)直接相減;(2)除數(shù)是一個很小的數(shù);(3)整數(shù)的連續(xù)乘運算。ok由算術(shù)運算符連接的表達式稱為算術(shù)表達式,例如:a+b*3;2.關(guān)系表達式例如: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 /*計算a>b的值0或1

賦給y,y的值為0或1*/由關(guān)系運算符連接的表達式。值為true或false。ok3.邏輯表達式和邏輯表達式求值的優(yōu)化由邏輯運算符連接的表達式稱為邏輯表達式。邏輯表達式的值為true或false。這個值可對應整數(shù)1或0參與其他運算。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||

得整個表達式的值為:①②③⑥④⑤⑦13.邏輯表達式和邏輯表達式求值的優(yōu)化在求邏輯表達式值的過程中,一旦表達式的值能夠確定,就不再逐步進行下面的運算。稱為“求值優(yōu)化”。已知:

inta=10,b=20,c=30;求:a<b||c++ //結(jié)果以及a,b,c的值t1=1①整個表達式的值為1可見:表達式c++已不需要計算所以: c不變?nèi)詾?0編程人員在使用邏輯運算時應當加以小心,優(yōu)化計算固然提高了運算效率,但可能產(chǎn)生副作用。所謂副作用,就是出乎設(shè)計人員的意料,得到預想不到的結(jié)果。4.賦值表達式與復合賦值表達式

賦值表達式的格式為:

變量=表達式例如:x=5+6;a=b=c=d+1;

在C++中,所有的雙目算術(shù)運算符和位運算符均可與賦值運算符組合成一個單一運算符,稱為復合運賦值算符。包括以下10個:+=–=*=/=%=<<=>>=&=|=^=復合賦值運算符的要求與格式與賦值運算符完全相同,表示為:

變量復合賦值運算符表達式它等同于

變量=變量運算符表達式

例如:x+=5

等同于:x=x+5ok逗號表達式

C++中,逗號既是分隔符,又是運算符,用逗號連接起來的表達式稱為逗號表達式。一般格式為:表達式1,表達式2,…,表達式n

逗號表達式中的每一個表達式都會被運算,整個逗號表達式的值為最后一個表達式的值。例如:a=(x=3,x+=6,5+6);//a=11x=92.5.2結(jié)束2.2.3不同類型數(shù)據(jù)的混合運算和賦值時的類型轉(zhuǎn)換1不同類型數(shù)據(jù)的混合運算

2賦值類型轉(zhuǎn)換

ok運算過程中,當某個二元運算符兩邊的操作數(shù)類型不同但屬于類型相容時,系統(tǒng)先將精度低的操作數(shù)變換到與另一操作數(shù)精度相同,而后再進行運算。

所謂類型相容,指的就是類型不同但系統(tǒng)可以自動進行轉(zhuǎn)換。當賦值號的左值和右值類型不一致但屬于類型相容時,由系統(tǒng)自動進行類型轉(zhuǎn)換。具體規(guī)則如下:(1)字符可以作為整數(shù)參與數(shù)值運算,整數(shù)值為其ASCII碼。(2)操作數(shù)為字符或短整型時,系統(tǒng)自動變換成整型。(3)操作數(shù)為實型時,系統(tǒng)自動變換成雙精度型。(4)其余情況,當兩操作數(shù)類型不同時,將精度低(或表示范圍小)的操作數(shù)的數(shù)據(jù)類型變換到與另一操作數(shù)類型相同再進行運算例如有變量:charc1,c2;inti1,i2;floatx1,x2;則表達式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)自動進行類型轉(zhuǎn)換規(guī)則:1、實型數(shù)賦給整形變量:取整;注意溢出;2、整型數(shù)賦給實型變量:先轉(zhuǎn)換為實型數(shù);3、字符型數(shù)賦給整形變量:ASCII碼為依據(jù);分為兩種情況:符號位是0或1時不同;若符號位為1,則低位字節(jié)不變,高位字節(jié)全部置1再賦值。4、絕對值較大的數(shù)賦給表達范圍較小的數(shù)據(jù)類型時,注意溢出;2.5.4強制類型轉(zhuǎn)換運算符ok其格式為:

(<type>)<表達式> //形式一或<type> (<表達式>)

//形式二作用:將表達式強制轉(zhuǎn)換為<type>類型, 但表達式的值及其類型不變。任意數(shù)據(jù)類型

賦值運算中,當左值與右值類型不一致時,系統(tǒ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類型自動完成強制轉(zhuǎn)換功能(2)y2i2……2.02.02.5.4強制類型轉(zhuǎn)換運算符第三章:簡單輸入/輸出3.1cincin用來在程序執(zhí)行期間給變量輸入數(shù)據(jù),一般格式為:cin>>變量名1《>>變量名2>>…>>變量名n》;

cout實現(xiàn)將數(shù)據(jù)輸出到顯示器的操作,一般格式為:cout<<表達式1《<<表達式2<<…<<表達式n》;

同時必須在程序開頭增加一行:#include<iostream.h>3.1.1十進制數(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ù)據(jù)間是無間隔的,因此應當有意輸出一些間隔符ok3.1.2輸入字符數(shù)據(jù)cin與cin.get()的區(qū)別(1)cin例如: charc1,c2,c3; cin>>c1;

//A

cin>>c2>>c3;

程序執(zhí)行到A行時,等待用戶輸入數(shù)據(jù)。若輸入:Abc<CR>則cin分別將字符A、b、c賦給變量c1、c2、c3。cin自動跳過輸入的空白字符(包括空格,制表,backspace和回車等)。

(2)cin.get()例如: charc1,c2,c3,c4; cin.get(c1); //B cin.get(c2); cin.get(c3);程序執(zhí)行到B行時,若輸入: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ù)組中輸入字符串時,用函數(shù)getline()。getline()以用戶按下回車鍵作為結(jié)束,在此之前的所有輸入都放入字符數(shù)組中:cin.getline(char[],int)其中第一個參數(shù)是已經(jīng)定義的字符數(shù)組名,第二個參數(shù)是讀入字符的最多個數(shù)n(包括字符串結(jié)束符‘/0’)。ok常用cout輸出字符串。雙引號中的字符串常量照原樣輸出,程序中通常通過輸出字符串常量來輸出一些提示信息。字符數(shù)組將輸出串結(jié)束符前所有字符。補充:字符串輸入輸出函數(shù)保證在執(zhí)行時總會為字符串的結(jié)束符保留一個字節(jié)。當鍵盤的輸入字符(字節(jié))數(shù)多于(n-1)時,后面的字符不會進入字符數(shù)組,字符串結(jié)束符自動加在字符數(shù)組的最后一個字節(jié)中。當輸入字符數(shù)少于該值時,字符串結(jié)束符自動加在輸入到字符數(shù)組中的最后一個字符的后面。請看下例:charcity[11];cin.getline(city,10);

//輸入城市名最多5個中文字cout<<“城市名:“<<city<<endl;ok如果要求按八進制或十六進制輸入輸出,在cin或cout中必須指明相應的數(shù)據(jù)形式,oct為八進制,hex為十六進制,dec為十進制。例如:inti,j,k,l;cout<<”Inputi(oct),j(hex),k(hex),l(dec):”<<endl;cin>>oct>>i; //輸入為八進制數(shù)cin>>hex>>j; //輸入為十六進制數(shù)cin>>k; //輸入仍為十六進制數(shù)cin>>dec>>l; //輸入為十進制數(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; //恢復十進制輸出狀態(tài)ok輸入輸出的格式控制(1)各種進制數(shù)據(jù)的輸入輸出執(zhí)行時輸出:Inputi(oct),j(hex),k(hex),l(dec):此時從鍵盤輸入:0320x3f0xa017<CR>則輸出結(jié)果為:hex:i=1adec:j=63 k=160oct:l=21由于已經(jīng)在cin中指明數(shù)制,因此從鍵盤輸入時,八進制和十六進制數(shù)可以省略其開頭的0和0x標志。

在cin或cout中指明數(shù)制后,該數(shù)制將一直有效,直到重新指明用其他數(shù)制。特別注意:輸入數(shù)據(jù)的格式、個數(shù)和類型必須與cin中的變量一一對應,否則不僅使輸入數(shù)據(jù)錯誤,而且影響后面其他數(shù)據(jù)的正確輸入。輸入輸出的格式控制為了使數(shù)據(jù)間隔開,還可以用C++提供的函數(shù)setw()指定輸出數(shù)據(jù)項的寬度。例如: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è)計

對程序的運行流程進行控制,主要通過執(zhí)行專門用來控制流程的語句來實現(xiàn)。流程控制語句也稱為過程化語句。分支語句是三種基本流程控制語句之一。C++提供以下三種分支語句:if語句

條件運算符“?:”

swith語句

4.2.1if

語句if語句有兩種基本格式為:1、if(<表達式>)<語句1>;2、if(<表達式>)<語句1>else <語句2>;if語句【例4.1】輸入一個年份,判斷是否閏年。算法分析:假定年份為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分析:讀入三個數(shù),先求出兩個數(shù)中較大者,再將該大數(shù)與第三個數(shù)比較,求出最大數(shù)。#include<iostream.h>voidmain(){inta,b,c,max;cout<<"輸入三個正數(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】從鍵盤上輸入三個整數(shù),輸出其中的最大數(shù)。ok

if語句中,如果內(nèi)嵌語句又是if語句,就構(gòu)成了嵌套if語句。if語句可實現(xiàn)二選一分支,而嵌套if語句則可以實現(xiàn)多選一的多路分支情況。嵌套有兩種形式,第一種是嵌套在else分支中:if(<表達式1>)<語句1>;elseif(<表達式2>)語句2;elseif…else<語句n>;

第二種是嵌套在if分支中為:if(<表達式1>)if(<表達式2>)<語句1>;

else<語句2>;

if語句//方法1:采用if中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個正數(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】的任務。ok//方法2:采用else中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個正數(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應與第二個if配對。如果根據(jù)程序的邏輯需要改變配對關(guān)系,則要將屬于同一層的語句放在一對“{}”中。如第二種嵌套形式中,要讓else和第一個if配對,語句必須寫成:if(表達式1){if(表達式2)語句1;}else語句2;

第二種嵌套形式較容易產(chǎn)生邏輯錯誤,而第一種形式配對關(guān)系則非常明確,因此從程序可讀性角度出發(fā),建議盡量使用第一種嵌套形式。請看以下兩個語句://語句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ù)″兩個語句的差別只在于一個“{}”,但表達的邏輯關(guān)系卻完全不同?!纠?.4】某商場優(yōu)惠活動規(guī)定,某種商品單價為80元,一次購買5件以上(包含

5件)10件以下(不包含10件)打9

折,一次購買10件以上(包含10件)打8折。設(shè)計程序根據(jù)客戶的購買量計算總價。if

語句算法1、輸入購買件數(shù)count,設(shè)置單價price=80(元)2、根據(jù)count值確定折扣discount;3、實際售價amount=price*count*discount;4、輸出amount的值。算法細化: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;//單價,折扣,總價

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<<"單價:"<<price<<'\t'<<"折扣:“

<<discount<<endl;cout<<"總價:"<<amount<<endl;}請在VC++平臺上運行,輸入不同的件數(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,方程有兩個相同實根;若delta>0,方程有兩個不同實根;若delta<0,方程無實根。if

語句算法1、輸入系數(shù)a(a≠0)、b、c;2、令delta=b2–4ac;3、根據(jù)delta的值求方程的根;4、輸出方程的根;算法細化:3.1、if(delta==0)方程有兩個相同實根;計算…3.2、if(delta>0)方程有兩個不同實根;計算…3.3、if(delta<0)方程無實根;計算…ok#include<iostream.h>#include<math.h>voidmain(){ floata,b,c; floatdelta,x1,x2; constfloatzero=0.0001;//定義一個很小的常數(shù)

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){//絕對值很小的數(shù)即被認為是0 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;} else //delta<0 cout<<"方程無實根!"<<endl;}請在VC++平臺上運行,輸入不同的系數(shù),使程序所有分支都可以被執(zhí)行一次。3.1.2條件運算符“?:”

if語句在某些情況下可以用條件運算符“?:”來簡化表達?!?:”是一個三元運算符,其構(gòu)成的表達式格式為:<表達式1>?<表達式2>:<表達式3>執(zhí)行邏輯:先計算表達式1,若其值為真(或非0),則計算表達式2(不計算表達式3),并將該值作為整個表達式的值;反之,即表達式1的值為假或為0,則計算表達式3(不計算表達式2),并將該值作為整個表達式的值。例如: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語句可以實現(xiàn)多選一的情況。另外C++中還提供了一個switch語句,稱為開關(guān)語句,也可以用來實現(xiàn)多選一:switch(表達式){case常量表達式1:《語句序列1》《break;》……case常量表達式n:《語句序列n》《break;》《default:語句序列》}

switch語句格式(1)各個case(包括default)分支出現(xiàn)的次序可以任意,通常將default放在最后。(2)break語句可選,如果沒有break語句,每一個case分支都只作為開關(guān)語句的執(zhí)行入口,執(zhí)行完該分支后,還將接著執(zhí)行其后的所有分支。因此,為保證邏輯的正確實現(xiàn),通常每個case分支都與break語句聯(lián)用。(3)每個常量表達式的取值必須各不相同,否則將引起歧義。(4)允許多個常量表達式對應同一個語句序列。例如:charscore;cin>>score;switch(score){case′A′:case′a′:cout<<″excellent″; break;case′B′:case′b′:cout<<″good″;break;default:cout<<″fair″;}(5)從形式上看,switch語句的可讀性比嵌套if語句好,但不是所有多選一的問題都可由開關(guān)語句完成,這是因為開關(guān)語句中限定了條件表達式的取值類型。

okswitch語句例子【例3.6】

運輸公司對所運貨物實行分段計費。設(shè)運輸里程為s,則運費打折情況如下:

s<250 不打折扣

250<=s<500 2%折扣

500<=s<1000 5%折扣

1000<=s<2000 8%折扣

2000<=s<3000 10%折扣

3000<=s 15%折扣設(shè)每公里每噸的基本運費為p,貨物重量為w,折扣為d,則總運費f為:f=p*w*s*(1-d)設(shè)計程序,當輸入p、w和s后,計算運費f。算法1、輸入每噸運費p、貨物重量w、運輸里程s;2、根據(jù)運輸里程s計算折扣d;3、計算總運費f=p*w*s*(1-d);4、輸出計算結(jié)果;算法細化:2、根據(jù)運輸里程s計算折扣d分析:如果用switch語句,必須使表達式符合語法要求,分析發(fā)現(xiàn),里程s的分段點均是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<<"輸入運輸單價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<<"運輸單價為"<<p<<'\t'<<"重量為"<<w<<'\t‘ <<"里程為"<<s<<endl; cout<<"折扣為"<<d<<endl; cout<<"運費為"<<f<<endl;}請在VC++平臺上運行,輸入不同的里程,使程序所有分支都可以被執(zhí)行一次。ok【例3.7】

設(shè)計一個計算器程序,實現(xiàn)加、減、乘、除運算。分析:讀入兩個操作數(shù)和運算符,根據(jù)運算符完成相應運算。#include<iostream.h>voidmain(){floatnum1,num2;charop;cout<<"輸入操作數(shù)1,運算符,操作數(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<<"是無效運算符!";}}常量表達式采用字符型,上機運行一下。循環(huán)控制語句是三種基本流程控制語句之一。C++提供以下三種循環(huán)語句:while語句

do-while語句

for語句4.3循環(huán)結(jié)構(gòu)程序設(shè)計4.3.1while語句while語句也稱為當循環(huán)。語句格式為:while(表達式)

循環(huán)體語句;

圖3.1while語句的執(zhí)行流程圖求表達式的值表達式值為真?是否執(zhí)行循環(huán)體語句while語句【例4.8】求1+2+3+4的值。okN個連續(xù)整數(shù)相加算法1、設(shè)置變量i用來放被加數(shù),變量sum用來放和值,并初始化;2、從第一個數(shù)開始,依次將被加數(shù)賦給i,并進行操作sumsum+i;3、輸出sum;細化算法2:

while(還有被加數(shù)) { i=當前被加數(shù);

sum+=i;i準備接受下一個被加數(shù);

}源程序如下:#include<iostream.h>voidmain(){inti=1,sum=0;//循環(huán)初始條件

while(i<=4){ sum+=i; i++; //修改循環(huán)條件

}cout<<"sum="<<sum<<endl;

}在VC++平臺上運行,試一試是否正確okwhile語句注意:在有循環(huán)語句的程序中,通常循環(huán)開始前對循環(huán)條件進行初始化;而在循環(huán)體語句中要包含修改循環(huán)條件的語句,否則循環(huán)將不能終止而陷入死循環(huán)。C++表達方式靈活,上例中的循環(huán)語句還可以寫成:while(i<=n)sum+=i++;或者while(sum+=i++,i<=n);//循環(huán)體為空語句修改程序后在VC++平臺上運行,看是否正確4.3.2do-while語句

do-while語句稱為直到循環(huán),格式為:

do循環(huán)體語句

while(表達式)

否是表達式的值為真?執(zhí)行循環(huán)體語句求表達式的值圖3.2do-while語句的執(zhí)行流程圖do-while語句do/while語句和while語句的區(qū)別:多數(shù)情況下可以互相替代。區(qū)別是do/while語句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足;while語句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體。【例4.9】

輸入一段文本,統(tǒng)計文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之間以空格或跳格或換行符間隔,且文本開始沒有空行。算法分析:1、逐個讀入文本中的字符,直到讀到一個輸入結(jié)束符EOF為止。2、如何算行數(shù)?行結(jié)束標志為讀到字符′\n′;3、如何算單詞數(shù)?設(shè)一個變量isword,讀到字符時isword=1,讀到間隔符時isword=0;如果讀到一個間隔符而此時isword值為1,則說明剛讀完一個單詞;(如果讀到一個字符而此時isword值為0,則說明剛開始讀一個單詞;)4、如何算字符數(shù)?do-while語句ok算法1、設(shè)置變量line、word、ch分別代表行數(shù)、單詞數(shù)、非分隔字符數(shù),并初始化;設(shè)置變量isword來輔助統(tǒng)計單詞數(shù);2、do{ 從鍵盤讀入一個字符c;

if(c==’\n’)line++; if(是單詞開頭)word++; if(c不是分隔符)ch++; }while(c!=EOF);3、輸出統(tǒng)計結(jié)果。將下面的程序在VC++平臺上運行,試一試是否正確#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(<表達式1>;<表達式2>;<表達式3>)<循環(huán)體語句>圖3.3for語句的執(zhí)行流程圖否是求表達式1的值求表達式2的值表達式2值為真?執(zhí)行循環(huán)體語句求表達式3的值okfor語句、while語句、do/while語句實現(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;}/*習慣上:表達式1:循環(huán)初始條件;表達式2:循環(huán)終止條件;表達式3:修改循環(huán)條件*/okfor語句的應用for語句的幾點說明:1、是先判斷型的,同while語句;2、使用更為靈活:三個表達式可以是任意表達式,因此他們就可以實現(xiàn)循環(huán)初始化、計算、修改循環(huán)條件等任務,而不一定非在循環(huán)體中進行;

for語句的應用【例4.11】設(shè)計程序輸出Fibonacii數(shù)列的前20項,要求每行輸出5個數(shù)據(jù)。Fibonacii數(shù)列定義如下:算法分析:除了第0項和第1項外,每一項都是由類似方法產(chǎn)生,即前兩項之和;所以求當前項時,只需要記住前兩項;程序不需要為每一項設(shè)置專用變量;屬遞推算法。算法:1、設(shè)置變量n表示第幾項,變量f1和f2用來記住當前項f3之前的兩項;變量初始化n=0;2、while(當前項不到第20項)

{ if(當前項是第0項)f1=0; if(當前項是第1項)f2=1;if(當前項是第2項或更高項)f3=f1+f2;

按要求輸出f3;f1=f2;f2=f3;//記住最近兩項 當前項后移一位;

}【例3.11】設(shè)計程序輸出Fibonacii數(shù)列的前20項,要求每行輸出2個數(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個數(shù)據(jù)

fib0=fib1;fib1=fib2;}}for語句的應用在VC++平臺上運行運行結(jié)果:0 1 1 2 3 5 8 13 21 3455 89 144 233377610 987 159725844181【例4.12】輸入一個不超過5位的整數(shù),將其反向后輸出。例如輸入247,變成742輸出。算法分析:1、將整數(shù)的各個數(shù)位逐個位分開,用一個數(shù)組保存各個位的值,然后反向組成新的整數(shù)。2、將整數(shù)各位數(shù)字分開的方法是,通過求余得到個位數(shù),然后將整數(shù)縮小十倍,再求余,并重復上述過程,分別得到十位、百位……,直到整數(shù)的值變成0為止。

for語句的應用ok數(shù)據(jù):1、設(shè)置變量num表示輸入的整數(shù),整型數(shù)組digit[5]用來存放num的各個位;變量i用來表示數(shù)組的當前下標;算法:1、輸入num;變量初始化:i=0;2、while(num!=0){ num對10取余,得num的當前個位數(shù)digit[i];

num整除10,即去掉個位數(shù),十位變個位,百位變十位,……;

i++;數(shù)組digit準備記錄下一位;}3、將數(shù)組元素按下標從高到低的順序輸出;程序如下:#include<iostream.h>vo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論