C++面向?qū)ο蟪绦蛟O(shè)計(第二版)全套電子教案整本書教學(xué)教程_第1頁
C++面向?qū)ο蟪绦蛟O(shè)計(第二版)全套電子教案整本書教學(xué)教程_第2頁
C++面向?qū)ο蟪绦蛟O(shè)計(第二版)全套電子教案整本書教學(xué)教程_第3頁
C++面向?qū)ο蟪绦蛟O(shè)計(第二版)全套電子教案整本書教學(xué)教程_第4頁
C++面向?qū)ο蟪绦蛟O(shè)計(第二版)全套電子教案整本書教學(xué)教程_第5頁
已閱讀5頁,還剩411頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C++面向?qū)ο蟪绦蛟O(shè)計(第二版)

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計C++面向?qū)ο蟪绦蛟O(shè)計第一章面向?qū)ο蟪绦蛟O(shè)計概述第二章C++語言基礎(chǔ)第三章C++程序的結(jié)構(gòu)第四章類與對象第五章類的繼承與派生第六章多態(tài)性與虛函數(shù)第七章模板第八章數(shù)據(jù)流與文件的輸入/輸出17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1數(shù)據(jù)類型和基本輸入輸出第九章異常處理第十章項目設(shè)計——校園信息管理系統(tǒng)C++面向?qū)ο蟪绦蛟O(shè)計(第二版)

C++面向?qū)ο蟪绦蛟O(shè)計(第二版)

第一章面向?qū)ο蟪绦蛟O(shè)計概述第一章面向?qū)ο蟪绦蛟O(shè)計概述1.1面向?qū)ο蟮幕靖拍?.2C++面向?qū)ο蟪绦蛟O(shè)計1.3C++程序的基本組成1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.1面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計的本質(zhì)是把數(shù)據(jù)及對數(shù)據(jù)的操作方法放在一起,作為一個相互依存、不可分離的整體——對象。對同類型對象抽象出其共性,形成類。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.1面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計方法具有4個基本特征:抽象、封裝、繼承和多態(tài)性。抽象(abstract)就是忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。面向?qū)ο蠓椒ㄖ械摹邦悺睂⒕哂邢嗤瑢傩院托袨榈囊唤M對象提供了抽象的描述,一個屬于某類的對象稱為該類的一個實例。

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.1面向?qū)ο蟮幕靖拍罘庋b(encapsulation)就是把每個對象的數(shù)據(jù)(屬性)和操作(行為)包裝在一個類中,并盡可能隱藏對象的內(nèi)部細(xì)節(jié)。一般限制直接訪問對象的屬性,而應(yīng)通過操作接口訪問,這樣使程序中模塊之間關(guān)系更簡單、數(shù)據(jù)更安全。對程序的修改也僅限于類的內(nèi)部,使得由于修改程序所帶來的影響局部化。

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.1面向?qū)ο蟮幕靖拍疃鄳B(tài)性(polymorphism)是指允許不同類的對象對同一消息作出的響應(yīng)不相同。一般類中定義的屬性或行為,被特殊類繼承后,可以具有不同的數(shù)據(jù)類型或者是表現(xiàn)出不同的行為。這使得同一個屬性或行為在一般類及其各個特殊類中具有不同的語義17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.1面向?qū)ο蟮幕靖拍钔ㄟ^使用面向?qū)ο蟪绦蛟O(shè)計的抽象、封裝、繼承和多態(tài)性等機(jī)制,程序更易于維護(hù)、更新和升級。利用代碼可重用性,程序員可以在程序中大量使用成熟的類庫,從而縮短程序的開發(fā)時間,提高程序員的工作效率和程序的可靠性。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.2C++面向?qū)ο蟪绦蛟O(shè)計本書介紹的主要就是使用最為廣泛的C++語言和使用C++語言進(jìn)行面向?qū)ο蟪绦蛟O(shè)計的方法。在學(xué)習(xí)編程之前,我們首先來簡單了解以下C++程序的開發(fā)過程。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.2C++面向?qū)ο蟪绦蛟O(shè)計程序的開發(fā)通常要經(jīng)過編輯、編譯、連接、運(yùn)行調(diào)試這幾個步驟。編輯是將源程序輸入到計算機(jī)中,生成后綴為.cpp的磁盤文件。編譯(compile)是將程序的源代碼轉(zhuǎn)換成機(jī)器語言代碼。程序員編制的源程序被編譯后,會生成一個目標(biāo)文件,這個文件通常以.obj作為文件擴(kuò)展名,該目標(biāo)文件為源程序的目標(biāo)代碼。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.2C++面向?qū)ο蟪绦蛟O(shè)計但是編譯后的程序還不能由計算機(jī)執(zhí)行,因為目標(biāo)代碼只是一個個的程序塊,需要相互銜接成為一個適應(yīng)一定操作系統(tǒng)環(huán)境的程序整體。為了把它轉(zhuǎn)換成可執(zhí)行程序,必須進(jìn)行連接(link)。C++程序通常是通過同時連接一個或多個目標(biāo)文件以及一個或幾個庫而創(chuàng)建的。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.2C++面向?qū)ο蟪绦蛟O(shè)計庫(.lib)是一組由機(jī)器指令構(gòu)成的程序代碼,是可連接文件。庫有標(biāo)準(zhǔn)庫和用戶生成的庫。標(biāo)準(zhǔn)庫是由C++提供的,用戶生成的庫是由軟件開發(fā)商或程序員提供的。文件與庫連接的結(jié)果,即生成一個后綴為.exe的計算機(jī)可執(zhí)行程序。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.3C++程序的基本組成我們就從最簡單的例子來分析C++程序的構(gòu)成:17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){cout<<"Hello,World!\n";cout<<"I'mastudent.\n";}1.3C++程序的基本組成程序運(yùn)行結(jié)果為:17九月2024C++面向?qū)ο蟪绦蛟O(shè)計Hello,World!I’mastudent.1.3C++程序的基本組成17九月2024C++面向?qū)ο蟪绦蛟O(shè)計一個C++程序是由三部分組成的,分別是:注釋部分、編譯預(yù)處理和程序主體。程序的注釋部分是程序員為讀者作的說明,是提高程序可讀性的一種方法。每個以符號“#”開頭的行,稱為編譯預(yù)處理行。如本例中“#include”稱為編譯指令。

1.3C++程序的基本組成17九月2024C++面向?qū)ο蟪绦蛟O(shè)計在程序的主體部分中,main是主函數(shù)名,函數(shù)是C++程序中最小的功能單位,每一個C++程序都必須有一個main()函數(shù),并且main()表明了程序執(zhí)行的開始點(diǎn)。1.3C++程序的基本組成每一種編程語言都使用一組字符來構(gòu)造成編程語句。用C++語言編寫程序時,除了字符型數(shù)據(jù)以外,其它所有成分都只能由字符集中的字符構(gòu)成。C++語言的字符集由下列字符構(gòu)成:17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.3C++程序的基本組成17九月2024C++面向?qū)ο蟪绦蛟O(shè)計26個大寫英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ26個小寫英文字母:abcdefghijklmnopqrstuvwxyz10個數(shù)字字符:0123456789特殊字符:

+-*/=,._:;?\"'~︱!#%&()[]{}^<>空格1.3C++程序的基本組成17九月2024C++面向?qū)ο蟪绦蛟O(shè)計詞法記號是最小的詞法單元,接下來介紹C++的關(guān)鍵字、標(biāo)識符、文字、運(yùn)算符、分隔符、空白符。關(guān)鍵字

C++中,關(guān)鍵字又稱保留字,它是預(yù)先定義好的標(biāo)識符,這些標(biāo)識符對C++編譯程序有著特殊的含義。

1.3C++程序的基本組成17九月2024C++面向?qū)ο蟪绦蛟O(shè)計標(biāo)識符

標(biāo)識符是程序員聲明的單詞,它命名程序正文中的一些實體,如函數(shù)名、變量名、類名、對象名等。

文字

文字是在程序中直接使用符號表示的數(shù)據(jù),包括數(shù)字、字符、字符串和布爾文字。操作符(運(yùn)算符)

操作符是用于實現(xiàn)各種運(yùn)算的符號。1.3C++程序的基本組成17九月2024C++面向?qū)ο蟪绦蛟O(shè)計分隔符

分隔符用于分隔各個詞法記號或程序正文,這些分隔符不表示任何實際的操作,僅用于構(gòu)造程序

。

空白

在程序編譯時的詞法分析階段將程序正文分解為詞法記號和空白??瞻资强崭?、制表符、換行符和注釋的總稱。1.4VisualC++6.0開發(fā)環(huán)境VisualC++6.0是微軟公司推出的一個功能強(qiáng)大的可視化軟件開發(fā)工具。VisualC++6.0不僅是一個C++編譯器,它還有一個非常好的集成開發(fā)環(huán)境——DeveloperStudio,包括編輯器編譯器、調(diào)試器以及程序向?qū)У冉M件,用它可以在編寫C++程序時對程序的結(jié)構(gòu)進(jìn)行可視化的管理。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.4VisualC++6.0開發(fā)環(huán)境本節(jié)簡單介紹VisualC++6.0集成開發(fā)環(huán)境的特點(diǎn)、界面風(fēng)格和簡單工具的使用。安裝完VisualC++6.0后,從Windows的“開始|程序”菜單中選擇MicrosoftVisualStudio6.0菜單中的MicrosoftVisualC++6.0菜單項,就啟動了VisualC++集成開發(fā)環(huán)境,出現(xiàn)集成開發(fā)環(huán)境的主窗口DeveloperStudio。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計1.4VisualC++6.0開發(fā)環(huán)境下面通過實例說明如何利用VisualC++6.0創(chuàng)建一個C++程序。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計啟動VisualC++6.0,打開File菜單,執(zhí)行New菜單命令,出現(xiàn)New對話框,如圖1-1所示。在Project頁面窗口中選擇Win32ConsoleApplication選項,創(chuàng)建一個Win32控制臺應(yīng)用程序。在Projectname編輯框中輸入項目名稱Hello,在Location編輯框中輸入保存項目的路徑。

1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計圖1-1創(chuàng)建一個Win32控制臺應(yīng)用程序1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計在Win32ConsoleApplication-Step1of1對話框中設(shè)置控制臺應(yīng)用程序的類型,如圖1-2所示。這里我們要創(chuàng)建一個空項目程序,因此選擇第一項Anemptyproject,單擊Finish按鈕,出現(xiàn)NewProjectInformation對話框,單擊OK按鈕,將生成一個空項目。

1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計圖1-2設(shè)置控制臺應(yīng)用程序的類型1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計向項目Hello中添加源程序文件。打開Project菜單,選擇AddtoProject|New,出現(xiàn)如圖1-3所示的添加項目文件對話框。在的Files頁面窗口中選擇C++SourceFile,在右邊的File編輯框中輸入C++源程序文件名稱Hello,在Location編輯框中輸入保存該文件的路徑。單擊OK按鈕,在主窗口DeveloperStudio左邊的項目工作區(qū)窗口的SouceFiles文件夾目錄下出現(xiàn)Hello.cpp文件,雙擊該文件,在右邊的編輯窗口中輸入例1-1的源程序代碼。1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計圖1-3添加項目文件1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計編譯運(yùn)行源程序Hello.cpp。打開Build菜單,選擇BuildHello.exe命令項或按快捷鍵F7,系統(tǒng)開始對項目Hello進(jìn)行編譯、連接,同時在輸出窗口中顯示出編譯的內(nèi)容,當(dāng)出現(xiàn)Hello.exe–0error(s),0warning(s)字樣時,表示Hello.exe可執(zhí)行文件已經(jīng)正確無誤地生成了,如圖1-4所示。在Build菜單中選取ExecuteHello.exe命令項或按快捷鍵Ctrl+F5,就可以運(yùn)行剛剛生成的Hello.exe

。

1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計圖1-4Hello項目DeveloperStudio窗口1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計MSDN幫助系統(tǒng)。除了有關(guān)VisualC++6.0IDE具體操作說明的聯(lián)機(jī)幫助文件,MicrosoftVisualStudio還提供了MSDNLibrary(Microsoftdevelopernetworklibrary)組件。MSDN幫助系統(tǒng)是一個HTML格式的幫助文件,它所包含的內(nèi)容非常豐富,包含了有關(guān)VisualStudio的編程原理、方法和應(yīng)用實例等內(nèi)容。并且使用MSDN時可以通過訪問微軟網(wǎng)站“”獲得有關(guān)MSDN的最新信息。

1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計用戶通過選擇Help菜單下的Contents命令或Search工具欄按鈕就可以進(jìn)入MSDN幫助系統(tǒng),也可單擊F1鍵快速獲取相關(guān)內(nèi)容的幫助。圖1-5是MSDNLibrary是一般界面

。

1.4VisualC++6.0開發(fā)環(huán)境17九月2024C++面向?qū)ο蟪绦蛟O(shè)計圖1-5MSDN幫助系統(tǒng)C++面向?qū)ο蟪绦蛟O(shè)計(第二版)

C++面向?qū)ο蟪绦蛟O(shè)計(第二版)

第二章

C++語言基礎(chǔ)第二章

C++語言基礎(chǔ)2.1數(shù)據(jù)類型和基本輸入輸出2.2運(yùn)算符和表達(dá)式2.3基本控制結(jié)構(gòu)2.4函數(shù)2.5構(gòu)造類型2.6指針項目設(shè)計1控制臺程序的人機(jī)界面設(shè)計17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1數(shù)據(jù)類型和基本輸入輸出2.1.1基本數(shù)據(jù)類型2.1.2常量2.1.3變量2.1.4基本輸入、輸出17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.1基本數(shù)據(jù)類型基本數(shù)據(jù)類型是C++系統(tǒng)的內(nèi)部數(shù)據(jù)類型,包括bool(布爾型)、int(整型)、char(字符型)、float(單精度浮點(diǎn)型)、double(雙精度浮點(diǎn)型)以及基本數(shù)據(jù)類型中short(短型)和long(長型)、signed(有符號)和unsigned(無符號)之分。C++的數(shù)據(jù)類型如下圖所示:17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.1基本數(shù)據(jù)類型

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.1基本數(shù)據(jù)類型使用基本數(shù)據(jù)類型要注意兩點(diǎn):無符號(unsigned)和有符號(signed)的區(qū)別在于數(shù)值最高位的含義。int型在16位系統(tǒng)中和在32位系統(tǒng)中,所占用字節(jié)數(shù)是不一樣的。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量所謂常量是指在程序運(yùn)行的整個過程中其值始終不可改變的量,也就是直接使用符號(文字)表示的值。例如10,-6,2.3,-5.7,‘A’,‘b’都是常量。整型常量整型常量就是整型常數(shù)。整型常量可以用以下三種形式表示:十進(jìn)制整數(shù):十進(jìn)制整數(shù)沒有前綴。例如:237、-568、65535、162717九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量八進(jìn)制整數(shù):八進(jìn)制整數(shù)要以數(shù)字0開頭,即以0作為八進(jìn)制數(shù)的前綴。例如:015(十進(jìn)制為13)、0101(十進(jìn)制為65)、0177777(十進(jìn)制為65535)十六進(jìn)制整常數(shù):十六進(jìn)制整數(shù)要以數(shù)字0x或0X開頭,即以0x作為十六進(jìn)制數(shù)的前綴。例如:0X2A(十進(jìn)制為42)、0XA0(十進(jìn)制為160)、0XFFFF(十進(jìn)制為65535)實型常量實型常量也稱為實數(shù)或者浮點(diǎn)數(shù)。實數(shù)只采用十進(jìn)制,它有二種形式:小數(shù)形式和指數(shù)形式。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量十進(jìn)制數(shù)的形式:由數(shù)碼0~9和小數(shù)點(diǎn)組成。例如:0.0、25.0、5.789、0.13、300.、-267.8230等均為合法的實數(shù)。注意,實型常量中必須含有小數(shù)點(diǎn)。指數(shù)形式:由十進(jìn)制數(shù),加階碼標(biāo)志“e”或“E”以及階碼(只能為整數(shù),可以帶符號)組成。例如:2.1E5(等于2.1×105)、3.7E-2(等于3.7×10-2)、-2.8E-2(等于-2.8×10-2)實型常量默認(rèn)都按雙精度double型處理。但可以添加后綴“f”或“F”即表示該數(shù)為單精度浮點(diǎn)數(shù)。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量字符常量字符常量是用單引號括起來的一個字符。例如:‘a(chǎn)’、‘b’、‘=’、‘+’、‘?’。有以下特點(diǎn):字符常量只能用單引號括起來,不能用雙引號或其它括號。字符常量只能是單個字符,不能是字符串。字符可以是字符集中任意字符。但數(shù)字被定義為字符型其含義就發(fā)生了變化。如‘5’和5是不同的。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\”開頭,后跟一個或幾個字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,“\n”就是一個轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來表示那些用一般字符不便于表示的控制代碼。廣義地講,字符集中的任何一個字符均可用轉(zhuǎn)義字符來表示。字符串常量17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量字符串常量是由一對雙引號括起的字符序列。例如:“CHINA”,“Cprogram”,“$12.5”等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別字符常量由單引號括起來,字符串常量由雙引號括起來字符常量只能是單個字符,字符串常量則可以含一個或多個字符字符常量占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個字節(jié)中存放字符“\0”(ASCII碼為0)。這是字符串結(jié)束的標(biāo)志。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量布爾常量布爾型常量只有兩個:true(真)和false(假)。符號常量除了前面講過的直接用文字表示常量外,也可以為常量命名,這種代替常量本身的標(biāo)識符稱為符號常量。C++中用const定義符號常量。符號常量在使用之前一定要首先聲明,常量聲明語句的形式為:const數(shù)據(jù)類型說明符常量名=常量值;17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.2常量符號常量在聲明時一定要賦初值,而在程序中間不能改變其值。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.3變量在程序的執(zhí)行過程中其值可以變化的量稱為變量,變量是需要用名字來標(biāo)識的。變量的定義就像常量具有各種類型一樣,變量也具有相應(yīng)的類型。變量在使用之前需要首先聲明其類型和名稱。變量名應(yīng)是合法的標(biāo)識符。變量聲明語句的形式如下:<數(shù)據(jù)類型><變量名表>;17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.3變量變量的初始化在聲明一個變量的同時,也可以給它賦以初值,而這實質(zhì)上就是給對應(yīng)的內(nèi)存單元賦值,這一過程稱為初始化。例如:inta=3,b=5;//指定a,b為整型變量,a的初值為3,b的初//值為5C++中變量的初始化還有另一種形式,例如:inta(3),b(5);需要注意的是,一個未初始化的變量不是沒有數(shù)值,而是取決于變量所在系統(tǒng)中的存儲形式,它可能是系統(tǒng)的默認(rèn)值或無效值。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.1.4基本輸入、輸出C++中使用標(biāo)準(zhǔn)輸入流cin和標(biāo)準(zhǔn)輸出流cout來實現(xiàn)數(shù)據(jù)的輸入與輸出。輸出流(cout)通過cout可以輸出一個整數(shù)、實數(shù)、字符及字符串,cout中的插入符“<<”可以連續(xù)寫多個,每個后面可以跟一個要輸出的常量、變量、轉(zhuǎn)義字符以及表達(dá)式等。輸入流(cin)cin可以獲得多個鍵盤的輸入值,cin中的插入符“>>”可以連續(xù)寫多個,每個后面可以跟一個表達(dá)式,該表達(dá)式通常是獲得輸入值的變量或?qū)ο蟆?7九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2運(yùn)算符和表達(dá)式2.2.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式2.2.2賦值運(yùn)算符和賦值表達(dá)式2.2.3逗號運(yùn)算符和逗號表達(dá)式2.2.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式2.2.5邏輯運(yùn)算符和邏輯表達(dá)式2.2.6++、--與sizeof運(yùn)算符2.2.7位運(yùn)算符2.2.8三目運(yùn)算符17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2運(yùn)算符和表達(dá)式2.2.9運(yùn)算符的優(yōu)先順序2.2.10運(yùn)算式中的類型轉(zhuǎn)換17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式C++中由算術(shù)運(yùn)算符、操作數(shù)和括號構(gòu)成的表達(dá)式稱為算術(shù)表達(dá)式。C++中基本算術(shù)運(yùn)算符有:+(加法),–(減法或負(fù)號),*(乘法),/(除法),%(求余)。這些算術(shù)運(yùn)算符和數(shù)學(xué)運(yùn)算的概念及運(yùn)算方法是一致的,但有幾點(diǎn)需要說明:“–”減法運(yùn)算,即是雙目運(yùn)算符又是單目運(yùn)算符,作單目運(yùn)算符時,是求負(fù)運(yùn)算,例如:-5,-x等。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式“/”除法運(yùn)算,當(dāng)參與相除運(yùn)算的兩個操作數(shù)均為整型時,其結(jié)果也為整型,取商的整數(shù)部分,舍去小數(shù),因此表達(dá)式1/2的結(jié)果為0。如果兩個操作數(shù)中有一個是實型,則結(jié)果為雙精度實型。“%”求余運(yùn)算,要求參與運(yùn)算的操作數(shù)均為整型。例如:表達(dá)式a%b,其值等于兩數(shù)相除后的余數(shù),即a被b除的余數(shù),符號與a相同。優(yōu)先級和結(jié)合性。在一個包含多種算術(shù)運(yùn)算的混合運(yùn)算中,先乘除、后加減的運(yùn)算規(guī)則是由運(yùn)算符的優(yōu)先級來保證的;在算術(shù)運(yùn)算符中,除單目運(yùn)算符外,其余運(yùn)算符的結(jié)合性都是自左向右。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.2賦值運(yùn)算符和賦值表達(dá)式C++中賦值運(yùn)算符“=”是一個雙目運(yùn)算符,運(yùn)算的結(jié)合性為自右向左。帶有賦值運(yùn)算符的表達(dá)式被稱為賦值表達(dá)式,其作用就是將賦值符右邊表達(dá)式的值賦給左邊的操作數(shù)。例如,x=a+b就是一個賦值表達(dá)式。在賦值符“=”之前加上其它雙目運(yùn)算符可構(gòu)成復(fù)合賦值符。C++提供了10種復(fù)合賦值運(yùn)算符:+=,–=,*=,/=,%=,<<=,>=,&=,^=,|=。例如:a+=5等價于a=a+517九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.3逗號運(yùn)算符和逗號表達(dá)式在C語言中逗號“,”也是一種運(yùn)算符,稱為逗號運(yùn)算符。逗號運(yùn)算符是優(yōu)先級最低的運(yùn)算符。其形式為:表達(dá)式1,表達(dá)式2,…表達(dá)式n在計算時,C++將自左向右逐個計算每個表達(dá)式,最終整個表達(dá)式的結(jié)果是最后計算的那個表達(dá)式的類型和值。例如:j=(i=12,i+8)//表達(dá)式值為2017九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式比較兩個量的運(yùn)算符稱為關(guān)系運(yùn)算符。關(guān)系運(yùn)算符將兩個數(shù)據(jù)進(jìn)行比較,判定兩個數(shù)據(jù)是否符合給定的關(guān)系。例如,“x>y”中的“>”表示一個大于關(guān)系運(yùn)算。C++提供了6種關(guān)系運(yùn)算符:<(小于),<=(小于等于),>(大于),>=(大于等于),==(等于),!=(不等于)。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式有幾點(diǎn)需要注意“等于”關(guān)系運(yùn)算符是兩個等號“==”,而不是一個等號“=”(賦值運(yùn)算符)。在6個關(guān)系運(yùn)算符中,前4個優(yōu)先級相同,后2個也相同,且前4個高于后2個。關(guān)系運(yùn)算符的優(yōu)先級,低于算術(shù)運(yùn)算符,但高于賦值運(yùn)算符。用關(guān)系運(yùn)算符將兩個表達(dá)式連接起來,進(jìn)行關(guān)系運(yùn)算的式子就是關(guān)系表達(dá)式。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系表達(dá)式的值為邏輯值即“真”或“假”。在C++編譯系統(tǒng)中,往往將“真”表示為“true”或1,將“假”表示為“false”或0。而任何不為0的數(shù)被認(rèn)為是“真”,0被認(rèn)為是“假”。例如設(shè)x1=1,x2=2,x3=3,則:

(x1>x2)!=x3//表達(dá)式為1。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.5邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符用于將多個關(guān)系表達(dá)式或邏輯量(“真”或“假”)組成一個邏輯表達(dá)式。C++提供了下列三種邏輯運(yùn)算符:

&& 邏輯與

|| 邏輯或

! 邏輯非例如,下面的表達(dá)式都是邏輯表達(dá)式:(x>=1&&(x<2),(x<1)||(x>5),!(x==0)17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.5邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符的運(yùn)算規(guī)則如下:&&:雙目運(yùn)算符,當(dāng)且僅當(dāng)兩個操作數(shù)的值都為“真”時,運(yùn)算結(jié)果為“真”,否則為“假”。等價于“同時”的含義。

||:雙目運(yùn)算符,當(dāng)且僅當(dāng)兩個操作數(shù)的值都為“假”時,運(yùn)算結(jié)果為“假”,否則為“真”。等價于“或者”的含義。

!:單目運(yùn)算符,當(dāng)操作數(shù)的值為“真”時,運(yùn)算結(jié)果為“假”;當(dāng)操作數(shù)的值為“假”時,運(yùn)算結(jié)果為“真”。等價于“否定”的含義。例如,設(shè)x=5,則(x>=0)&&(x<25)的值為“真”,(x<-5)||(x>5)的值為“假”。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.5邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符的優(yōu)先級如下:邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低,即:?。ǚ牵?&(與)→||(或)與其它種類運(yùn)算符的優(yōu)先關(guān)系:!→算術(shù)運(yùn)算→關(guān)系運(yùn)算→&&→||→賦值運(yùn)算17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.6++、--與sizeof運(yùn)算符自增、自減運(yùn)算符單目運(yùn)算符自增(++)和自減(––)的作用是使整型變量的值增1或減1。這兩個運(yùn)算符都有前置和后置兩種使用形式。例如:++i與i++的作用相當(dāng)于i=i+1;––i與i––的作用相當(dāng)于i=i–1。這里需要注意的是:自增(++)和自減(––)運(yùn)算符只能用于變量,而不能用于常量或表達(dá)式,如3++或(a+b)++都是不合法的。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.6++、--與sizeof運(yùn)算符++和––的結(jié)合性是“自右至左”。若自增(++)和自減(––)僅用于某個變量的增1和減1,則前置和后置兩種使用形式是等價的,但如果將自增(++)和自減(––)和其他運(yùn)算符組合在一起,則前置和后置兩種使用形式在求值次序上就會產(chǎn)生不同:

++i,––i(在使用i參與其他運(yùn)算之前,先使i的值加(減)1)i++,i––(在使用i參與其他運(yùn)算之后,再使i的值加(減)1)17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.6++、--與sizeof運(yùn)算符sizeof運(yùn)算符sizeof運(yùn)算符用于計算操作數(shù)在內(nèi)存中所占的字節(jié)數(shù)。它使用的語法形式為:sizeof(<數(shù)據(jù)類型>)sizeof(<表達(dá)式>)運(yùn)算結(jié)果返回值為“數(shù)據(jù)類型”所指定的類型或“表達(dá)式”的結(jié)果類型所占的字節(jié)數(shù)。例如:sizeof(int)//計算整型int所占內(nèi)參的字節(jié)數(shù)sizeof("hello")//計算字符串常量的實際長度17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.7位運(yùn)算符位運(yùn)算符是對操作數(shù)按其在計算機(jī)內(nèi)表示的二進(jìn)制數(shù)逐位地進(jìn)行邏輯運(yùn)算或移位運(yùn)算。C++語言提供了6種位運(yùn)算:位邏輯運(yùn)算符“按位與”運(yùn)算符&運(yùn)算規(guī)則:參加運(yùn)算的兩個操作數(shù),如果兩個數(shù)相應(yīng)位的值都是1,則該位的結(jié)果值為1,否則為0。例如:如果要保留整數(shù)a的低字節(jié),屏蔽掉其高字節(jié),只需要將a和b進(jìn)行按位與運(yùn)算即可,其中b的高字節(jié)每位置為0,低字節(jié)每位置為1,即0010101001010010&0000000011111111=000000000101001017九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.7位運(yùn)算符“按位或”運(yùn)算符|運(yùn)算規(guī)則:參加運(yùn)算的兩個操作數(shù),如果兩個數(shù)相應(yīng)位的值都是0,則該位的結(jié)果值為0,否則為1.例如:如果把a(bǔ)的第10位置為1,而且不要破壞其它位,可以對a和b進(jìn)行“按位或”運(yùn)算,其中b的第10位置為1,其它位置為0,即0010000001010010|0000001000000000=0010001001010010“按位異或”運(yùn)算符^運(yùn)算規(guī)則:參加運(yùn)算的兩個操作數(shù),如果兩個數(shù)的相應(yīng)位的值不同,則該位的結(jié)果值為1,否則為0。例如:如要把a(bǔ)的奇數(shù)位翻轉(zhuǎn),可以對a和b進(jìn)行“按位異或”運(yùn)算,其中b的奇數(shù)位置為1,偶數(shù)位置為0,即0000000001010010^0101010101010101=010101010000011117九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.7位運(yùn)算符“按位取反”運(yùn)算符~運(yùn)算規(guī)則:對一個操作數(shù)的每一位都取反,即將1變?yōu)?,0變?yōu)?。移位運(yùn)算符左移運(yùn)算符<<運(yùn)算規(guī)則:對運(yùn)算符<<左邊的操作數(shù)的每一位全部左移右邊運(yùn)算量表示的位數(shù),右邊空出的位補(bǔ)0。左移1位相當(dāng)于該數(shù)乘以2,左移n位相當(dāng)于該數(shù)乘以2n。例如:chara=0x21;則a<<2的過程00100001<<2=10000100即a<<2的值為0x84。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.7位運(yùn)算符右移運(yùn)算符>>運(yùn)算規(guī)則:對運(yùn)算符>>左邊的運(yùn)算量的每一位全部右移右邊運(yùn)算量表示的位數(shù),右邊低位被移出去舍棄掉,空出的高位補(bǔ)0還是補(bǔ)1,分兩種情況對無符號數(shù)進(jìn)行右移時,空出的高位補(bǔ)0。這種右移稱為邏輯右移。例如:unsignedchara=0x8a;a:10001010等于十進(jìn)制數(shù)138a>>1:010001010等于十進(jìn)制數(shù)69

補(bǔ)0舍棄對帶符號數(shù)進(jìn)行右移時,空出的高位全部以符號位填補(bǔ)。即正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1。這種右移稱為算術(shù)右移。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.7位運(yùn)算符例如chara=0x8a;a:10001010等于十進(jìn)制數(shù)-118a>>1:110001010等于十進(jìn)制數(shù)-59

補(bǔ)1舍棄位賦值運(yùn)算符位運(yùn)算符與賦值運(yùn)算符結(jié)合可以組成位賦值運(yùn)算符。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.8三目運(yùn)算符C++中唯一的三目運(yùn)算符是條件運(yùn)算符語法格式為:

<條件表達(dá)式>?<表達(dá)式1>:<表達(dá)式2>“條件表達(dá)式”是C++中可以產(chǎn)生“真”和“假”結(jié)果的任何表達(dá)式,如果條件表達(dá)式的結(jié)果為“真”,則執(zhí)行表達(dá)式1,否則執(zhí)行表達(dá)式2。例如:n=(a>b)?1:0;//如果a>b成立,則n的 //值為1,否則為017九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.9運(yùn)算符的優(yōu)先順序運(yùn)算符優(yōu)先順序如下表:17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.9運(yùn)算符的優(yōu)先順序17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.10運(yùn)算式中的類型轉(zhuǎn)換當(dāng)表達(dá)式中出現(xiàn)了多種類型數(shù)據(jù)的混合運(yùn)算時,往往需要進(jìn)行類型轉(zhuǎn)換。表達(dá)式中的類型轉(zhuǎn)換分為兩種:自動轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換。自動轉(zhuǎn)換自動轉(zhuǎn)換的基本原則是將數(shù)據(jù)類型按照從低到高的順序進(jìn)行轉(zhuǎn)換。類型越高,數(shù)據(jù)的表示范圍越大,精度也越高,各種類型的高低順序如下:char、short、int、unsigned、long、unsignedlong、float、double17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.10運(yùn)算式中的類型轉(zhuǎn)換自動轉(zhuǎn)換遵循以下規(guī)則若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時,先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。char型和short型參與運(yùn)算時,必須先轉(zhuǎn)換成int型。在賦值運(yùn)算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊量的數(shù)據(jù)類型長度長時,將丟失一部分?jǐn)?shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.2.10運(yùn)算式中的類型轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過類型說明符和括號來實現(xiàn)的,其一般形式為:(<類型說明符>)<表達(dá)式>或<類型說明符>(<表達(dá)式>)例如:(float)a//把a(bǔ)轉(zhuǎn)換為實型

(int)(x+y)//把x+y的結(jié)果轉(zhuǎn)換為整型17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3基本控制結(jié)構(gòu)2.3.1表達(dá)式語句、空語句和復(fù)合語句2.3.2選擇控制語句2.3.3循環(huán)控制語句2.3.4break和continue語句實訓(xùn)2程序控制結(jié)構(gòu)的應(yīng)用17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.1表達(dá)式語句、空語句和復(fù)合語句順序結(jié)構(gòu)程序就是由順序執(zhí)行語句組成的,程序運(yùn)行是按照書寫的順序進(jìn)行,不發(fā)生控制轉(zhuǎn)移,所以它是最簡單的。表達(dá)式語句表達(dá)式語句由表達(dá)式后加一個分號構(gòu)成。例如:a+b;num=3;空語句空語句僅由一個分號構(gòu)成。例如:;就是一個空語句復(fù)合語句復(fù)合語句是由一對大括號{}括起來的兩條或兩條以上的語句構(gòu)成的。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.1表達(dá)式語句、空語句和復(fù)合語句例如:需要注意的是,在復(fù)合語句中定義的變量只作用于該復(fù)合語句的范圍,而在復(fù)合語句外,這些變量卻不能被調(diào)用。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計voidmain(){……{t=x;

x=y;

y=t;}//復(fù)合語句……}2.3.2選擇控制語句選擇結(jié)構(gòu)是用來判斷所給定的條件是否滿足,并根據(jù)判定的結(jié)果(真或假)決定哪些語句被執(zhí)行。用if語句實現(xiàn)選擇結(jié)構(gòu)if語句是專門用來實現(xiàn)選擇結(jié)構(gòu)的語句。它根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個分支程序段。其語法形式為:if(<表達(dá)式>)<語句1>[else<語句2>]17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.2選擇控制語句例如:if(x>y)max=x;elsemax=y;if語句中的語句2可以為空。當(dāng)語句2為空時,else可以省略。if語句的嵌套處理多分支的情況時,C++語言允許在if或if–else中的〈語句1〉或〈語句2〉部分中再使用if或if–else語句,這種設(shè)計方法稱為嵌套。if語句的嵌套中,else部分總是與前面最靠近的、還沒有配對的if配對。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.2選擇控制語句例如:比較兩個數(shù)的大小17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ intx,y; cout<<"Enterxandy:"; cin>>x>>y; if(x!=y) if(x>y) cout<<"x>y"<<endl; else cout<<"x<y"<<endl; else cout<<"x=y"<<endl;}2.3.2選擇控制語句如果if語句的嵌套都是發(fā)生在else分支中,就可以應(yīng)用if…elseif語句。語法形式為:if(<表達(dá)式1>)<語句1>;elseif(<表達(dá)式2>)<語句2>;

......elseif(<表達(dá)式n>)<語句n>;例如:求分段函數(shù)y=f(x)的值,f(x)的表達(dá)式如下:

x2―1(x<–1)y=x2(–1≤x≤1)x2+1(x>1)17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.2選擇控制語句17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ floatx,y; cout<<"Enterx:"; cin>>x; if(x<-1) y=x*x-1; elseif(x>=-1&&x<=1) y=x*x; elsey=x*x+1; cout<<"f(x)="<<y<<endl;}2.3.2選擇控制語句switch語句C++語言提供了直接實現(xiàn)多分支選擇結(jié)構(gòu)的語句:switch語句,稱為多分支語句,也叫開關(guān)語句。switch語句的語法形式如下:switch(<表達(dá)式>){case<常量表達(dá)式1>:語句1;[break;]case<常量表達(dá)式2>:語句2;[break;]......case<常量表達(dá)式n>:語句n;[break;][default:語句n+1;[break;]] }17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.2選擇控制語句使用switch語句需要注意的是:switch后面的表達(dá)式可以是整型、字符型、枚舉型,而case后面的常量表達(dá)式的類型必須與其匹配。每個case后面常量表達(dá)式的值必須各不相同,各case及default子句的先后次序不影響程序執(zhí)行結(jié)果。每個case分支可以有多條語句,但不必用{}。case后面的常量表達(dá)式僅起語句標(biāo)號作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號,就從此標(biāo)號開始執(zhí)行,不再進(jìn)行標(biāo)號判斷,所以必須加上break語句,以便結(jié)束switch語句,否則會從入口點(diǎn)開始一直執(zhí)行到switch結(jié)構(gòu)的結(jié)束點(diǎn)。當(dāng)若干分支需要執(zhí)行相同操作時,可以使多個case分支共用一組語句。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.2選擇控制語句例如:用switch語句實現(xiàn)計算器的簡單功能。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ floatx,y;//運(yùn)算數(shù)

charoper;//運(yùn)算符

cout<<"Enterx,oper,y:"; cin>>x>>oper>>y;

2.3.2選擇控制語句17九月2024C++面向?qū)ο蟪绦蛟O(shè)計

switch(oper) { case'+':cout<<"x+y="<<x+y<<endl;break; case'-':cout<<"x-y="<<x-y<<endl;break; case'*':cout<<"x*y="<<x*y<<endl;break; case'/':if(y==0) { cout<<"divisoriszero!\n"; break; } cout<<"x/y="<<x/y<<endl;break; default:cout<<"operatorhasnoeffect!\n"; }}2.3.3循環(huán)控制語句C++中提供了三種循環(huán)控制語句:while語句、do-while語句和for語句。

while語句while語句的語法形式如下:while(<表達(dá)式>)<語句>其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。執(zhí)行順序是:先判斷表達(dá)式的值,當(dāng)表達(dá)式為真時便開始執(zhí)行while循環(huán)體中的語句,然后反復(fù)執(zhí)行,每次執(zhí)行都會判斷表達(dá)式是否為真,直到有一次執(zhí)行循環(huán)體后條件表達(dá)式的值為假時終止。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.3循環(huán)控制語句例如:用while語句求100以內(nèi)的奇數(shù)之和。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ inti=1,sum=0; while(i<=100) { sum+=i; i+=2; } cout<<"sum="<<sum<<endl;}2.3.3循環(huán)控制語句使用while語句需要注意的有:如果循環(huán)體有多個語句時,要用大括號{}把它們括起來,以復(fù)合語句形式出現(xiàn)。循環(huán)體中必須有修改條件表達(dá)式的語句,可以使條件由成立轉(zhuǎn)為不成立,從而結(jié)束循環(huán)。否則如果開始時條件為真,就會永遠(yuǎn)為真,使循環(huán)體永遠(yuǎn)重復(fù)執(zhí)行下去,稱為“死循環(huán)”。do-while語句do-while語句的語法形式如下:do<語句>while(<表達(dá)式>);執(zhí)行順序是:先執(zhí)行循環(huán)中的語句,然后再判斷表達(dá)式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.3循環(huán)控制語句例如:用do-while語句求100以內(nèi)的奇數(shù)之和。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ inti=1,sum=0; do { sum+=i; i+=2; }while(i<=100); cout<<"sum="<<sum<<endl;}2.3.3循環(huán)控制語句for語句for語句的語法形式如下:for([表達(dá)式1];[表達(dá)式2];[表達(dá)式3])<語句>其中,表達(dá)式1:給循環(huán)控制變量賦初值;表達(dá)式2:循環(huán)條件,是一個邏輯表達(dá)式,它決定什么時候退出循環(huán);表達(dá)式3:循環(huán)變量增值,規(guī)定循環(huán)控制變量每循環(huán)一次后按什么方式變化。for語句的執(zhí)行流程是:首先計算一次表達(dá)式1的值,再計算表達(dá)式2(循環(huán)控制條件)的值,并根據(jù)表達(dá)式2的值判斷是否執(zhí)行循環(huán)體。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.3循環(huán)控制語句例如:用for語句求100以內(nèi)的奇數(shù)之和。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ inti,sum; sum=0; for(i=1;i<=100;i+=2) sum+=i; cout<<"sum="<<sum<<endl;}2.3.3循環(huán)控制語句使用for語句需要注意的是:表達(dá)式1、表達(dá)式2、表達(dá)式3都可以省略,但分號“;”不能省略。若表達(dá)式1省略或者是與循環(huán)條件無關(guān)的其他表達(dá)式,則應(yīng)該在for語句之前給循環(huán)控制條件賦初值。若表達(dá)式2省略,則循環(huán)將無終止地進(jìn)行下去。若表達(dá)式3省略或者是與循環(huán)條件無關(guān)的其他表達(dá)式,則應(yīng)該在循環(huán)體中另有語句改變循環(huán)條件,以保證循環(huán)能正常結(jié)束。表達(dá)式1和表達(dá)式3可以是一個簡單的表達(dá)式,也可以是逗號表達(dá)式,既可以是給循環(huán)變量賦初值,也可以是與循環(huán)變量無關(guān)的其它表達(dá)式。例如:for(i=1,sum=0;i<=100;sum+=i,i+=2);17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.3循環(huán)控制語句循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)可以互相嵌套,以實現(xiàn)復(fù)雜算法。例如:輸入一個整數(shù),求出它的所有因子。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ intn,k; cout<<"Enterapositiveinteger:"; cin>>n; cout<<"Number"<<n<<"Factors"; for(k=1;k<=n;k++) if(n%k==0) cout<<k<<""; cout<<endl;}2.3.3循環(huán)控制語句例如:編寫程序打印以下圖案:*************************17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.3循環(huán)控制語句17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ inti,j,n=4; for(i=1;i<=n;i++)//輸出前4行圖案

{//在圖案左側(cè)空30列 for(j=1;j<=30;j++) cout<<‘’;

for(j=1;j<=8-2*i;j++) cout<<''; for(j=1;j<=2*i-1;j++) cout<<'*'; cout<<endl; }2.3.3循環(huán)控制語句17九月2024C++面向?qū)ο蟪绦蛟O(shè)計

for(i=1;i<=n-1;i++)//輸出后3行圖案

{ //在圖案左側(cè)空30列 for(j=1;j<=30;j++) cout<<‘’;

for(j=1;j<=7-2*i;j++) cout<<'*'; cout<<endl; }}2.3.4break和continue語句C++轉(zhuǎn)移語句包括break、continue、goto和return語句。轉(zhuǎn)移語句的作用是改變程序的順序執(zhí)行流程,將程序執(zhí)行流程轉(zhuǎn)移到程序其他地方。break語句break語句可用在switch多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中。在switch結(jié)構(gòu)中,break語句用于跳出switch結(jié)構(gòu)。在循環(huán)結(jié)構(gòu)中,break語句用于跳出循環(huán),即程序遇到break語句時提前結(jié)束循環(huán),執(zhí)行循環(huán)外的下一條語句。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.3.4break和continue語句例如:用窮舉法找出1~10之間的質(zhì)數(shù)并顯示出來。代碼見教材P29~P30continue語句continue語句只用于循環(huán)結(jié)構(gòu)。當(dāng)遇到continue語句時,程序只跳過continue語句后的其余語句,即僅結(jié)束本次循環(huán),并直接進(jìn)入下一次循環(huán)。例如:輸出100以內(nèi)能被3整除且個位數(shù)為6的所有整數(shù)。代碼見教材[例2-18]17九月2024C++面向?qū)ο蟪绦蛟O(shè)計實訓(xùn)2程序控制結(jié)構(gòu)的應(yīng)用實訓(xùn)說明在實訓(xùn)中,我們要實現(xiàn)的功能是驗證哥德巴赫猜想,即任一充分大的偶數(shù)可以用兩個素數(shù)之和表示。程序分析先不考慮怎樣判斷一個數(shù)是否為素數(shù),而從整體上對這個問題進(jìn)行考慮。我們可以這樣做:讀入一個偶數(shù)num,將它分成p和q兩部分,使得num=p+q。那么怎樣分呢?可以令p從2開始,每次增加1,而令q=num-p,如果p、q均為素數(shù),則正為所求,否則令p=p+1再試。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計實訓(xùn)2程序控制結(jié)構(gòu)的應(yīng)用算法如下:讀入大于3的偶數(shù)num。p=1do{

p=p+1;q=num-p;判斷p是否素數(shù)?判斷q是否素數(shù)?}while(p、q有一個不是素數(shù))輸出num=p+q。接下來分析第5、6步,怎樣判斷一個數(shù)是否為素數(shù)要判斷一個數(shù)i是否為素數(shù),方法是用小于等于i的平方根的數(shù)依次去除i,看能否除盡,若都除不盡則i必為素數(shù),反之則不是。程序員代碼見教材實訓(xùn)217九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4函數(shù)2.4.1函數(shù)的定義和調(diào)用2.4.2函數(shù)的參數(shù)傳遞2.4.3函數(shù)參數(shù)的引用傳遞2.4.4帶默認(rèn)形參值的函數(shù)2.4.5函數(shù)的嵌套與遞歸調(diào)用2.4.6內(nèi)聯(lián)函數(shù)2.4.7函數(shù)的重載實訓(xùn)3函數(shù)的應(yīng)用17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.1函數(shù)的定義和調(diào)用函數(shù)的定義函數(shù)定義的一般形式如下:<函數(shù)類型>

<函數(shù)名>(<形式參數(shù)表>){

<函數(shù)體>}

函數(shù)類型規(guī)定了所定義函數(shù)返回值的類型。函數(shù)名是一個有效的C++標(biāo)識符,同一個文件中的函數(shù)不能同名。函數(shù)體是一個語句序列,用于實現(xiàn)函數(shù)的具體功能。

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.1函數(shù)的定義和調(diào)用例如:定義一個函數(shù),求二個數(shù)中最大者17九月2024C++面向?qū)ο蟪绦蛟O(shè)計intmax(intx,inty)//定義函數(shù)max{intz;if(x>y)z=x;elsez=y;returnz;}2.4.2函數(shù)的參數(shù)傳遞C++中函數(shù)的參數(shù)傳遞有兩種方式,一種是按值傳遞,另一種是地址傳遞或引用傳遞。這里先來說明按值傳遞的參數(shù)傳遞方法。按值傳遞方法是把實參的值拷貝給形參,即調(diào)用函數(shù)向被調(diào)用函數(shù)傳遞的參數(shù)是變量本身值。在內(nèi)存中,由于形參與實參占用不同的存儲單元,這時形參值的變化將不影響實參的值。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.2函數(shù)的參數(shù)傳遞例如:交換函數(shù)的兩個參數(shù)的值17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;//交換函數(shù)swap(),用于交換x和y的值voidswap(intx,inty){ inttemp; temp=x; x=y; y=temp; cout<<"x="<<x<<",y="<<y<<endl;}2.4.2函數(shù)的參數(shù)傳遞值傳遞的最大好處是保持函數(shù)的獨(dú)立性。在值傳遞的情況下,函數(shù)只有通過return來返回某個類型的值。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計voidmain(){ inta=10,b=20; cout<<"a="<<a<<",b="<<b<<endl; swap(a,b); cout<<"a="<<a<<",b="<<b<<endl;}

2.4.3函數(shù)參數(shù)的引用傳遞引用引用是C++提供的一種特殊類型的變量,定義引用類型變量實質(zhì)上是給一個已定義的變量起一個別名,系統(tǒng)不會為引用類型變量分配內(nèi)存空間,只是使引用類型變量與其相關(guān)聯(lián)的變量使用同一個內(nèi)存空間。定義引用類型變量的一般格式為:<數(shù)據(jù)類型>&<引用名>=<變量名>;例如:inta=3;int&ra=a;//ra就是一個引用,它是變量a的別名17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.3函數(shù)參數(shù)的引用傳遞例如:為變量i聲明一個引用r,在程序中分別對r和i進(jìn)行計算。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;voidmain(){ inti=10; int&r=i;//r是變量i的引用

r++;//同時執(zhí)行i++ cout<<"i="<<i<<",r="<<r<<endl; i=22;//同時執(zhí)行r=22 cout<<"i="<<i<<",r="<<r<<endl;}2.4.3函數(shù)參數(shù)的引用傳遞在使用引用時,需要注意的是:定義引用類型變量時,必須將其初始化。而且引用變量類型必須與為它初始化的變量類型相同。一旦一個引用被初始化后,就不能改為指向其他變量。當(dāng)引用類型變量的初始化值是常量時,則必須將該引用類型定義成const類型。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.3函數(shù)參數(shù)的引用傳遞函數(shù)的引用傳遞引用也可作為形參,如果將引用作為形參,則在函數(shù)中對形參所做的更改對主函數(shù)中的實參有效。例如:引用作為函數(shù)參數(shù)的調(diào)用方式,使兩數(shù)成功地進(jìn)行交換。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;2.4.3函數(shù)參數(shù)的引用傳遞17九月2024C++面向?qū)ο蟪绦蛟O(shè)計voidswap(int&x,int&y)//引用作為函數(shù)形參{ inttemp; temp=x; x=y; y=temp;}voidmain(){ inta=10,b=20; cout<<"a="<<a<<",b="<<b<<endl; swap(a,b); cout<<"a="<<a<<",b="<<b<<endl;}2.4.4帶默認(rèn)形參值的函數(shù)C++允許在函數(shù)聲明或定義中給一個或多個參數(shù)指定默認(rèn)值。例如,下面聲明一個帶默認(rèn)值參數(shù)的函數(shù)fun():voidfun(intval=10);則如下的函數(shù)調(diào)用把實參值20傳遞給形參:fun(20);而如果函數(shù)調(diào)用用省略實參,則把默認(rèn)值10傳遞給形參,如下所示:fun();//等同于fun(10)17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.4帶默認(rèn)形參值的函數(shù)在設(shè)置函數(shù)的默認(rèn)參數(shù)值時要注意:當(dāng)函數(shù)既有聲明又有定義后,不能在函數(shù)定義中指定默認(rèn)參數(shù)。如果函數(shù)有多個形參,在聲明和定義函數(shù)時,必須將帶默認(rèn)值的形參放在參數(shù)表的右部,即默認(rèn)參數(shù)應(yīng)按從右到左的順序定義,在帶默認(rèn)值的形參右邊不能有未指定默認(rèn)值的形參。在函數(shù)調(diào)用時,系統(tǒng)按從左到右的順序?qū)崊⑴c形參結(jié)合。當(dāng)實參的數(shù)目不足時,系統(tǒng)將按照同樣的順序用聲明或定義中的默認(rèn)值來補(bǔ)齊所缺少的參數(shù)。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.5函數(shù)的嵌套與遞歸調(diào)用嵌套調(diào)用函數(shù)允許嵌套調(diào)用。所謂嵌套調(diào)用就是在調(diào)用一個函數(shù)并執(zhí)行該函數(shù)中,又調(diào)用另一個函數(shù)的情況。例如:編寫一個計算組合數(shù)的程序。計算組合數(shù)的公式如下:

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.5函數(shù)的嵌套與遞歸調(diào)用在本例中,組合數(shù)的計算用函數(shù)functionA()進(jìn)行,而它需要的階乘計算由函數(shù)functionB()進(jìn)行。主函數(shù)main()調(diào)用函數(shù)functionA(),而函數(shù)functionA()三次調(diào)用函數(shù)functionB(),計算m!,n!,(m-n)!。計算結(jié)果返回給主函數(shù)進(jìn)行輸出。m和n由鍵盤輸入。源程序代碼見教材:[例2-23]17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.5函數(shù)的嵌套與遞歸調(diào)用例子中函數(shù)的調(diào)用如下圖所示:17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.5函數(shù)的嵌套與遞歸調(diào)用遞歸調(diào)用函數(shù)可以直接或間接地調(diào)用自身,稱為遞歸調(diào)用。遞歸調(diào)用分兩個階段:第一階段:遞推。將原問題不斷分解為新的子問題,逐漸從未知向已知推進(jìn),最終達(dá)到已知條件,即遞歸結(jié)束的條件,這時遞推階段結(jié)束。例如求4!可以這樣分解:4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=117九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.5函數(shù)的嵌套與遞歸調(diào)用第二階段:回歸。從已知條件出發(fā),按照遞推的逆過程,逐一求值回歸,最后達(dá)到遞歸的開始處,結(jié)束回歸階段,完成遞歸調(diào)用。例如求4!的回歸階段如下:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1遞歸部分實例及代碼見教材:[例2-24]和

[例2-25]17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.6內(nèi)聯(lián)函數(shù)當(dāng)函數(shù)被調(diào)用時。若把函數(shù)體直接嵌入函數(shù)調(diào)用處,則可消除附加的現(xiàn)場處理的時間開銷,提高程序的運(yùn)行效率。當(dāng)然,這樣將會加大代碼占用內(nèi)存的空間開銷。C++提供了實現(xiàn)上述嵌入功能的函數(shù),這種函數(shù)稱為內(nèi)聯(lián)(inline)函數(shù)。內(nèi)聯(lián)函數(shù)一般適用于代碼較短的函數(shù)。定義一個內(nèi)聯(lián)函數(shù)只需在函數(shù)頭前加入關(guān)鍵字inline。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.6內(nèi)聯(lián)函數(shù)例如:用內(nèi)聯(lián)函數(shù)計算圓的面積。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計#include<iostream>usingnamespacestd;inlinedoubleCalArea(doubleradius)//內(nèi)聯(lián)函數(shù),計算圓的面積{ return3.14*radius*radius;}voidmain(){ doublearea,r(2.0);//r是圓的半徑

area=CalArea(r); //調(diào)用內(nèi)聯(lián)函數(shù)求圓的面積,編譯時此處被替換為 //CalArea函數(shù)體語句

cout<<area<<endl;}2.4.7函數(shù)的重載C++中允許功能相近的函數(shù)在相同的作用范圍內(nèi)以相同函數(shù)名定義,從而形成重載。函數(shù)的重載指的是兩個以上的函數(shù),取相同的函數(shù)名,但是形參的個數(shù)或者類型不同,編譯器根據(jù)實參和形參的類型及個數(shù)的最佳匹配,自動確定調(diào)用哪一個函數(shù)。函數(shù)重載例子及代碼見教材:[例2-27]17九月2024C++面向?qū)ο蟪绦蛟O(shè)計2.4.7函數(shù)的重載函數(shù)重載要注意的是:重載函數(shù)必須具有不同的參數(shù)個數(shù)或不同的參數(shù)類型,若只有返回值的類型不同是不行的。例如:①intadd(intx,inty);intadd(inta,intb);//錯誤!編譯器不以形 //參名來區(qū)分函數(shù)②intadd(intx,inty);voidadd(intx,inty);//錯誤!編譯器不以 //返回值來區(qū)分函數(shù)不要將不同功能的函數(shù)定義為重載函數(shù),以免出現(xiàn)對調(diào)用結(jié)果的誤解、混淆。例如避免出現(xiàn)下述重載函數(shù)定義:intadd(intx,inty){returnx+y;}floatadd(floatx,floaty){returnx-y;}

17九月2024C++面向?qū)ο蟪绦蛟O(shè)計實訓(xùn)3函數(shù)的應(yīng)用實訓(xùn)說明在實訓(xùn)中,我們要實現(xiàn)的是古典的數(shù)學(xué)問題----Hanoi(漢諾)塔問題。問題的描述是:古代有一個梵塔,塔內(nèi)有3個座A、B、C,開始時A座上有64個盤子,盤子大小不等,大的在下,小的在上(如圖2-4)。有一個老和尚想把這64個盤子從A座移到C座,但每次只允許移動一個盤,且在移動過程中在3個座上都始終保持大盤在下,小盤在上,移動過程中可以利用B座?,F(xiàn)在有N個按大小順序擺放的盤子放在A座上,請利用B座,按照漢諾塔問題限定的要求(每次移動小盤始終都在最上面),將A座上的N個盤子移到C座上。程序要求用函數(shù)實現(xiàn)盤子的移動操作,并能打印出每次盤子的移動步驟。17九月2024C++面向?qū)ο蟪绦蛟O(shè)計實訓(xùn)3函數(shù)的應(yīng)用程序分析為了解決N個圓盤的漢諾塔,可以按下面方式進(jìn)行操作:將A桿上面的N-1個盤子,借助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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論