版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C++面向對象程序設計(第二版)
C++面向對象程序設計(第二版)
第一章面向對象程序設計概述08二月2023C++面向對象程序設計第一章面向對象程序設計概述1.1面向對象的基本概念1.2C++面向對象程序設計1.3C++程序的基本組成1.4VisualC++6.0開發(fā)環(huán)境08二月2023C++面向對象程序設計1.1面向對象的基本概念面向對象程序設計的本質是把數據及對數據的操作方法放在一起,作為一個相互依存、不可分離的整體——對象。對同類型對象抽象出其共性,形成類。08二月2023C++面向對象程序設計1.1面向對象的基本概念面向對象程序設計方法具有4個基本特征:抽象、封裝、繼承和多態(tài)性。抽象(abstract)就是忽略事物的非本質特征,只注意那些與當前目標有關的本質特征,從而找出事物的共性,把具有共同性質的事物劃分為一類,得出一個抽象的概念。面向對象方法中的“類”將具有相同屬性和行為的一組對象提供了抽象的描述,一個屬于某類的對象稱為該類的一個實例。
08二月2023C++面向對象程序設計1.1面向對象的基本概念封裝(encapsulation)就是把每個對象的數據(屬性)和操作(行為)包裝在一個類中,并盡可能隱藏對象的內部細節(jié)。一般限制直接訪問對象的屬性,而應通過操作接口訪問,這樣使程序中模塊之間關系更簡單、數據更安全。對程序的修改也僅限于類的內部,使得由于修改程序所帶來的影響局部化。
08二月2023C++面向對象程序設計1.1面向對象的基本概念多態(tài)性(polymorphism)是指允許不同類的對象對同一消息作出的響應不相同。一般類中定義的屬性或行為,被特殊類繼承后,可以具有不同的數據類型或者是表現出不同的行為。這使得同一個屬性或行為在一般類及其各個特殊類中具有不同的語義08二月2023C++面向對象程序設計1.1面向對象的基本概念通過使用面向對象程序設計的抽象、封裝、繼承和多態(tài)性等機制,程序更易于維護、更新和升級。利用代碼可重用性,程序員可以在程序中大量使用成熟的類庫,從而縮短程序的開發(fā)時間,提高程序員的工作效率和程序的可靠性。08二月2023C++面向對象程序設計1.2C++面向對象程序設計本書介紹的主要就是使用最為廣泛的C++語言和使用C++語言進行面向對象程序設計的方法。在學習編程之前,我們首先來簡單了解以下C++程序的開發(fā)過程。08二月2023C++面向對象程序設計1.2C++面向對象程序設計程序的開發(fā)通常要經過編輯、編譯、連接、運行調試這幾個步驟。編輯是將源程序輸入到計算機中,生成后綴為.cpp的磁盤文件。編譯(compile)是將程序的源代碼轉換成機器語言代碼。程序員編制的源程序被編譯后,會生成一個目標文件,這個文件通常以.obj作為文件擴展名,該目標文件為源程序的目標代碼。08二月2023C++面向對象程序設計1.2C++面向對象程序設計但是編譯后的程序還不能由計算機執(zhí)行,因為目標代碼只是一個個的程序塊,需要相互銜接成為一個適應一定操作系統(tǒng)環(huán)境的程序整體。為了把它轉換成可執(zhí)行程序,必須進行連接(link)。C++程序通常是通過同時連接一個或多個目標文件以及一個或幾個庫而創(chuàng)建的。08二月2023C++面向對象程序設計1.2C++面向對象程序設計庫(.lib)是一組由機器指令構成的程序代碼,是可連接文件。庫有標準庫和用戶生成的庫。標準庫是由C++提供的,用戶生成的庫是由軟件開發(fā)商或程序員提供的。文件與庫連接的結果,即生成一個后綴為.exe的計算機可執(zhí)行程序。08二月2023C++面向對象程序設計1.3C++程序的基本組成我們就從最簡單的例子來分析C++程序的構成:#include<iostream>usingnamespacestd;voidmain(){cout<<"Hello,World!\n";cout<<"I'mastudent.\n";}08二月2023C++面向對象程序設計1.3C++程序的基本組成程序運行結果為:Hello,World!I’mastudent.08二月2023C++面向對象程序設計1.3C++程序的基本組成一個C++程序是由三部分組成的,分別是:注釋部分、編譯預處理和程序主體。程序的注釋部分是程序員為讀者作的說明,是提高程序可讀性的一種方法。每個以符號“#”開頭的行,稱為編譯預處理行。如本例中“#include”稱為編譯指令。
08二月2023C++面向對象程序設計1.3C++程序的基本組成在程序的主體部分中,main是主函數名,函數是C++程序中最小的功能單位,每一個C++程序都必須有一個main()函數,并且main()表明了程序執(zhí)行的開始點。08二月2023C++面向對象程序設計1.3C++程序的基本組成每一種編程語言都使用一組字符來構造成編程語句。用C++語言編寫程序時,除了字符型數據以外,其它所有成分都只能由字符集中的字符構成。C++語言的字符集由下列字符構成:08二月2023C++面向對象程序設計1.3C++程序的基本組成26個大寫英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ26個小寫英文字母:abcdefghijklmnopqrstuvwxyz10個數字字符:0123456789特殊字符:
+-*/=,._:;?\"'~︱!#%&()[]{}^<>空格08二月2023C++面向對象程序設計1.3C++程序的基本組成詞法記號是最小的詞法單元,接下來介紹C++的關鍵字、標識符、文字、運算符、分隔符、空白符。關鍵字
C++中,關鍵字又稱保留字,它是預先定義好的標識符,這些標識符對C++編譯程序有著特殊的含義。
08二月2023C++面向對象程序設計1.3C++程序的基本組成標識符
標識符是程序員聲明的單詞,它命名程序正文中的一些實體,如函數名、變量名、類名、對象名等。
文字
文字是在程序中直接使用符號表示的數據,包括數字、字符、字符串和布爾文字。操作符(運算符)
操作符是用于實現各種運算的符號。08二月2023C++面向對象程序設計1.3C++程序的基本組成分隔符
分隔符用于分隔各個詞法記號或程序正文,這些分隔符不表示任何實際的操作,僅用于構造程序
。
空白
在程序編譯時的詞法分析階段將程序正文分解為詞法記號和空白??瞻资强崭瘛⒅票矸?、換行符和注釋的總稱。08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境VisualC++6.0是微軟公司推出的一個功能強大的可視化軟件開發(fā)工具。VisualC++6.0不僅是一個C++編譯器,它還有一個非常好的集成開發(fā)環(huán)境——DeveloperStudio,包括編輯器編譯器、調試器以及程序向導等組件,用它可以在編寫C++程序時對程序的結構進行可視化的管理。08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境本節(jié)簡單介紹VisualC++6.0集成開發(fā)環(huán)境的特點、界面風格和簡單工具的使用。安裝完VisualC++6.0后,從Windows的“開始|程序”菜單中選擇MicrosoftVisualStudio6.0菜單中的MicrosoftVisualC++6.0菜單項,就啟動了VisualC++集成開發(fā)環(huán)境,出現集成開發(fā)環(huán)境的主窗口DeveloperStudio。08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境下面通過實例說明如何利用VisualC++6.0創(chuàng)建一個C++程序。啟動VisualC++6.0,打開File菜單,執(zhí)行New菜單命令,出現New對話框,如圖1-1所示。在Project頁面窗口中選擇Win32ConsoleApplication選項,創(chuàng)建一個Win32控制臺應用程序。在Projectname編輯框中輸入項目名稱Hello,在Location編輯框中輸入保存項目的路徑。
08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境圖1-1創(chuàng)建一個Win32控制臺應用程序08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境在Win32ConsoleApplication-Step1of1對話框中設置控制臺應用程序的類型,如圖1-2所示。這里我們要創(chuàng)建一個空項目程序,因此選擇第一項Anemptyproject,單擊Finish按鈕,出現NewProjectInformation對話框,單擊OK按鈕,將生成一個空項目。
08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境圖1-2設置控制臺應用程序的類型08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境向項目Hello中添加源程序文件。打開Project菜單,選擇AddtoProject|New,出現如圖1-3所示的添加項目文件對話框。在的Files頁面窗口中選擇C++SourceFile,在右邊的File編輯框中輸入C++源程序文件名稱Hello,在Location編輯框中輸入保存該文件的路徑。單擊OK按鈕,在主窗口DeveloperStudio左邊的項目工作區(qū)窗口的SouceFiles文件夾目錄下出現Hello.cpp文件,雙擊該文件,在右邊的編輯窗口中輸入例1-1的源程序代碼。08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境圖1-3添加項目文件C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境編譯運行源程序Hello.cpp。打開Build菜單,選擇BuildHello.exe命令項或按快捷鍵F7,系統(tǒng)開始對項目Hello進行編譯、連接,同時在輸出窗口中顯示出編譯的內容,當出現Hello.exe–0error(s),0warning(s)字樣時,表示Hello.exe可執(zhí)行文件已經正確無誤地生成了,如圖1-4所示。在Build菜單中選取ExecuteHello.exe命令項或按快捷鍵Ctrl+F5,就可以運行剛剛生成的Hello.exe
。
08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境圖1-4Hello項目DeveloperStudio窗口C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境用戶通過選擇Help菜單下的Contents命令或Search工具欄按鈕就可以進入MSDN幫助系統(tǒng),也可單擊F1鍵快速獲取相關內容的幫助。圖1-5是MSDNLibrary是一般界面
。
08二月2023C++面向對象程序設計1.4VisualC++6.0開發(fā)環(huán)境圖1-5MSDN幫助系統(tǒng)C++面向對象程序設計(第二版)
C++面向對象程序設計(第二版)
第二章
C++語言基礎08二月2023C++面向對象程序設計第二章
C++語言基礎2.1數據類型和基本輸入輸出2.2運算符和表達式2.3基本控制結構2.4函數2.5構造類型2.6指針項目設計1控制臺程序的人機界面設計08二月2023C++面向對象程序設計2.1數據類型和基本輸入輸出2.1.1基本數據類型2.1.2常量2.1.3變量2.1.4基本輸入、輸出08二月2023C++面向對象程序設計2.1.1基本數據類型基本數據類型是C++系統(tǒng)的內部數據類型,包括bool(布爾型)、int(整型)、char(字符型)、float(單精度浮點型)、double(雙精度浮點型)以及基本數據類型中short(短型)和long(長型)、signed(有符號)和unsigned(無符號)之分。C++的數據類型如下圖所示:08二月2023C++面向對象程序設計2.1.1基本數據類型
C++面向對象程序設計2.1.1基本數據類型使用基本數據類型要注意兩點:無符號(unsigned)和有符號(signed)的區(qū)別在于數值最高位的含義。int型在16位系統(tǒng)中和在32位系統(tǒng)中,所占用字節(jié)數是不一樣的。08二月2023C++面向對象程序設計2.1.2常量所謂常量是指在程序運行的整個過程中其值始終不可改變的量,也就是直接使用符號(文字)表示的值。例如10,-6,2.3,-5.7,‘A’,‘b’都是常量。整型常量整型常量就是整型常數。整型常量可以用以下三種形式表示:十進制整數:十進制整數沒有前綴。例如:237、-568、65535、162708二月2023C++面向對象程序設計2.1.2常量八進制整數:八進制整數要以數字0開頭,即以0作為八進制數的前綴。例如:015(十進制為13)、0101(十進制為65)、0177777(十進制為65535)十六進制整常數:十六進制整數要以數字0x或0X開頭,即以0x作為十六進制數的前綴。例如:0X2A(十進制為42)、0XA0(十進制為160)、0XFFFF(十進制為65535)實型常量實型常量也稱為實數或者浮點數。實數只采用十進制,它有二種形式:小數形式和指數形式。08二月2023C++面向對象程序設計2.1.2常量十進制數的形式:由數碼0~9和小數點組成。例如:0.0、25.0、5.789、0.13、300.、-267.8230等均為合法的實數。注意,實型常量中必須含有小數點。指數形式:由十進制數,加階碼標志“e”或“E”以及階碼(只能為整數,可以帶符號)組成。例如:2.1E5(等于2.1×105)、3.7E-2(等于3.7×10-2)、-2.8E-2(等于-2.8×10-2)實型常量默認都按雙精度double型處理。但可以添加后綴“f”或“F”即表示該數為單精度浮點數。08二月2023C++面向對象程序設計2.1.2常量字符常量字符常量是用單引號括起來的一個字符。例如:‘a’、‘b’、‘=’、‘+’、‘?’。有以下特點:字符常量只能用單引號括起來,不能用雙引號或其它括號。字符常量只能是單個字符,不能是字符串。字符可以是字符集中任意字符。但數字被定義為字符型其含義就發(fā)生了變化。如‘5’和5是不同的。08二月2023C++面向對象程序設計2.1.2常量轉義字符是一種特殊的字符常量。轉義字符以反斜線“\”開頭,后跟一個或幾個字符。轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。例如,“\n”就是一個轉義字符,其意義是“回車換行”。轉義字符主要用來表示那些用一般字符不便于表示的控制代碼。廣義地講,字符集中的任何一個字符均可用轉義字符來表示。字符串常量08二月2023C++面向對象程序設計2.1.2常量字符串常量是由一對雙引號括起的字符序列。例如:“CHINA”,“Cprogram”,“$12.5”等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別字符常量由單引號括起來,字符串常量由雙引號括起來字符常量只能是單個字符,字符串常量則可以含一個或多個字符字符常量占一個字節(jié)的內存空間。字符串常量占的內存字節(jié)數等于字符串中字節(jié)數加1。增加的一個字節(jié)中存放字符“\0”(ASCII碼為0)。這是字符串結束的標志。08二月2023C++面向對象程序設計2.1.2常量布爾常量布爾型常量只有兩個:true(真)和false(假)。符號常量除了前面講過的直接用文字表示常量外,也可以為常量命名,這種代替常量本身的標識符稱為符號常量。C++中用const定義符號常量。符號常量在使用之前一定要首先聲明,常量聲明語句的形式為:const數據類型說明符常量名=常量值;08二月2023C++面向對象程序設計2.1.2常量符號常量在聲明時一定要賦初值,而在程序中間不能改變其值。08二月2023C++面向對象程序設計2.1.3變量在程序的執(zhí)行過程中其值可以變化的量稱為變量,變量是需要用名字來標識的。變量的定義就像常量具有各種類型一樣,變量也具有相應的類型。變量在使用之前需要首先聲明其類型和名稱。變量名應是合法的標識符。變量聲明語句的形式如下:<數據類型><變量名表>;08二月2023C++面向對象程序設計2.1.3變量變量的初始化在聲明一個變量的同時,也可以給它賦以初值,而這實質上就是給對應的內存單元賦值,這一過程稱為初始化。例如:inta=3,b=5;//指定a,b為整型變量,a的初值為3,b的初//值為5C++中變量的初始化還有另一種形式,例如:inta(3),b(5);需要注意的是,一個未初始化的變量不是沒有數值,而是取決于變量所在系統(tǒng)中的存儲形式,它可能是系統(tǒng)的默認值或無效值。08二月2023C++面向對象程序設計2.1.4基本輸入、輸出C++中使用標準輸入流cin和標準輸出流cout來實現數據的輸入與輸出。輸出流(cout)通過cout可以輸出一個整數、實數、字符及字符串,cout中的插入符“<<”可以連續(xù)寫多個,每個后面可以跟一個要輸出的常量、變量、轉義字符以及表達式等。輸入流(cin)cin可以獲得多個鍵盤的輸入值,cin中的插入符“>>”可以連續(xù)寫多個,每個后面可以跟一個表達式,該表達式通常是獲得輸入值的變量或對象。08二月2023C++面向對象程序設計2.2運算符和表達式2.2.1算術運算符和算術表達式2.2.2賦值運算符和賦值表達式2.2.3逗號運算符和逗號表達式2.2.4關系運算符和關系表達式2.2.5邏輯運算符和邏輯表達式2.2.6++、--與sizeof運算符2.2.7位運算符2.2.8三目運算符08二月2023C++面向對象程序設計2.2運算符和表達式2.2.9運算符的優(yōu)先順序2.2.10運算式中的類型轉換08二月2023C++面向對象程序設計2.2.1算術運算符和算術表達式C++中由算術運算符、操作數和括號構成的表達式稱為算術表達式。C++中基本算術運算符有:+(加法),–(減法或負號),*(乘法),/(除法),%(求余)。這些算術運算符和數學運算的概念及運算方法是一致的,但有幾點需要說明:“–”減法運算,即是雙目運算符又是單目運算符,作單目運算符時,是求負運算,例如:-5,-x等。08二月2023C++面向對象程序設計2.2.1算術運算符和算術表達式“/”除法運算,當參與相除運算的兩個操作數均為整型時,其結果也為整型,取商的整數部分,舍去小數,因此表達式1/2的結果為0。如果兩個操作數中有一個是實型,則結果為雙精度實型。“%”求余運算,要求參與運算的操作數均為整型。例如:表達式a%b,其值等于兩數相除后的余數,即a被b除的余數,符號與a相同。優(yōu)先級和結合性。在一個包含多種算術運算的混合運算中,先乘除、后加減的運算規(guī)則是由運算符的優(yōu)先級來保證的;在算術運算符中,除單目運算符外,其余運算符的結合性都是自左向右。08二月2023C++面向對象程序設計2.2.2賦值運算符和賦值表達式C++中賦值運算符“=”是一個雙目運算符,運算的結合性為自右向左。帶有賦值運算符的表達式被稱為賦值表達式,其作用就是將賦值符右邊表達式的值賦給左邊的操作數。例如,x=a+b就是一個賦值表達式。在賦值符“=”之前加上其它雙目運算符可構成復合賦值符。C++提供了10種復合賦值運算符:+=,–=,*=,/=,%=,<<=,>=,&=,^=,|=。例如:a+=5等價于a=a+508二月2023C++面向對象程序設計2.2.3逗號運算符和逗號表達式在C語言中逗號“,”也是一種運算符,稱為逗號運算符。逗號運算符是優(yōu)先級最低的運算符。其形式為:表達式1,表達式2,…表達式n在計算時,C++將自左向右逐個計算每個表達式,最終整個表達式的結果是最后計算的那個表達式的類型和值。例如:j=(i=12,i+8)//表達式值為2008二月2023C++面向對象程序設計2.2.4關系運算符和關系表達式比較兩個量的運算符稱為關系運算符。關系運算符將兩個數據進行比較,判定兩個數據是否符合給定的關系。例如,“x>y”中的“>”表示一個大于關系運算。C++提供了6種關系運算符:<(小于),<=(小于等于),>(大于),>=(大于等于),==(等于),!=(不等于)。08二月2023C++面向對象程序設計2.2.4關系運算符和關系表達式有幾點需要注意“等于”關系運算符是兩個等號“==”,而不是一個等號“=”(賦值運算符)。在6個關系運算符中,前4個優(yōu)先級相同,后2個也相同,且前4個高于后2個。關系運算符的優(yōu)先級,低于算術運算符,但高于賦值運算符。用關系運算符將兩個表達式連接起來,進行關系運算的式子就是關系表達式。08二月2023C++面向對象程序設計2.2.4關系運算符和關系表達式關系表達式的值為邏輯值即“真”或“假”。在C++編譯系統(tǒng)中,往往將“真”表示為“true”或1,將“假”表示為“false”或0。而任何不為0的數被認為是“真”,0被認為是“假”。例如設x1=1,x2=2,x3=3,則:
(x1>x2)!=x3//表達式為1。08二月2023C++面向對象程序設計2.2.5邏輯運算符和邏輯表達式邏輯運算符用于將多個關系表達式或邏輯量(“真”或“假”)組成一個邏輯表達式。C++提供了下列三種邏輯運算符:
&& 邏輯與
|| 邏輯或
! 邏輯非例如,下面的表達式都是邏輯表達式:(x>=1&&(x<2),(x<1)||(x>5),!(x==0)08二月2023C++面向對象程序設計2.2.5邏輯運算符和邏輯表達式邏輯運算符的運算規(guī)則如下:&&:雙目運算符,當且僅當兩個操作數的值都為“真”時,運算結果為“真”,否則為“假”。等價于“同時”的含義。
||:雙目運算符,當且僅當兩個操作數的值都為“假”時,運算結果為“假”,否則為“真”。等價于“或者”的含義。
!:單目運算符,當操作數的值為“真”時,運算結果為“假”;當操作數的值為“假”時,運算結果為“真”。等價于“否定”的含義。例如,設x=5,則(x>=0)&&(x<25)的值為“真”,(x<-5)||(x>5)的值為“假”。08二月2023C++面向對象程序設計2.2.5邏輯運算符和邏輯表達式邏輯運算符的優(yōu)先級如下:邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低,即:?。ǚ牵?&(與)→||(或)與其它種類運算符的優(yōu)先關系:!→算術運算→關系運算→&&→||→賦值運算08二月2023C++面向對象程序設計2.2.6++、--與sizeof運算符自增、自減運算符單目運算符自增(++)和自減(––)的作用是使整型變量的值增1或減1。這兩個運算符都有前置和后置兩種使用形式。例如:++i與i++的作用相當于i=i+1;––i與i––的作用相當于i=i–1。這里需要注意的是:自增(++)和自減(––)運算符只能用于變量,而不能用于常量或表達式,如3++或(a+b)++都是不合法的。08二月2023C++面向對象程序設計2.2.6++、--與sizeof運算符++和––的結合性是“自右至左”。若自增(++)和自減(––)僅用于某個變量的增1和減1,則前置和后置兩種使用形式是等價的,但如果將自增(++)和自減(––)和其他運算符組合在一起,則前置和后置兩種使用形式在求值次序上就會產生不同:
++i,––i(在使用i參與其他運算之前,先使i的值加(減)1)i++,i––(在使用i參與其他運算之后,再使i的值加(減)1)08二月2023C++面向對象程序設計2.2.6++、--與sizeof運算符sizeof運算符sizeof運算符用于計算操作數在內存中所占的字節(jié)數。它使用的語法形式為:sizeof(<數據類型>)sizeof(<表達式>)運算結果返回值為“數據類型”所指定的類型或“表達式”的結果類型所占的字節(jié)數。例如:sizeof(int)//計算整型int所占內參的字節(jié)數sizeof("hello")//計算字符串常量的實際長度08二月2023C++面向對象程序設計2.2.7位運算符位運算符是對操作數按其在計算機內表示的二進制數逐位地進行邏輯運算或移位運算。C++語言提供了6種位運算:位邏輯運算符“按位與”運算符&運算規(guī)則:參加運算的兩個操作數,如果兩個數相應位的值都是1,則該位的結果值為1,否則為0。例如:如果要保留整數a的低字節(jié),屏蔽掉其高字節(jié),只需要將a和b進行按位與運算即可,其中b的高字節(jié)每位置為0,低字節(jié)每位置為1,即0010101001010010&0000000011111111=000000000101001008二月2023C++面向對象程序設計2.2.7位運算符“按位或”運算符|運算規(guī)則:參加運算的兩個操作數,如果兩個數相應位的值都是0,則該位的結果值為0,否則為1.例如:如果把a的第10位置為1,而且不要破壞其它位,可以對a和b進行“按位或”運算,其中b的第10位置為1,其它位置為0,即0010000001010010|0000001000000000=0010001001010010“按位異或”運算符^運算規(guī)則:參加運算的兩個操作數,如果兩個數的相應位的值不同,則該位的結果值為1,否則為0。例如:如要把a的奇數位翻轉,可以對a和b進行“按位異或”運算,其中b的奇數位置為1,偶數位置為0,即0000000001010010^0101010101010101=010101010000011108二月2023C++面向對象程序設計2.2.7位運算符“按位取反”運算符~運算規(guī)則:對一個操作數的每一位都取反,即將1變?yōu)?,0變?yōu)?。移位運算符左移運算符<<運算規(guī)則:對運算符<<左邊的操作數的每一位全部左移右邊運算量表示的位數,右邊空出的位補0。左移1位相當于該數乘以2,左移n位相當于該數乘以2n。例如:chara=0x21;則a<<2的過程00100001<<2=10000100即a<<2的值為0x84。08二月2023C++面向對象程序設計2.2.7位運算符右移運算符>>運算規(guī)則:對運算符>>左邊的運算量的每一位全部右移右邊運算量表示的位數,右邊低位被移出去舍棄掉,空出的高位補0還是補1,分兩種情況對無符號數進行右移時,空出的高位補0。這種右移稱為邏輯右移。例如:unsignedchara=0x8a;a:10001010等于十進制數138a>>1:010001010等于十進制數69
補0舍棄對帶符號數進行右移時,空出的高位全部以符號位填補。即正數補0,負數補1。這種右移稱為算術右移。08二月2023C++面向對象程序設計2.2.7位運算符例如chara=0x8a;a:10001010等于十進制數-118a>>1:110001010等于十進制數-59
補1舍棄位賦值運算符位運算符與賦值運算符結合可以組成位賦值運算符。08二月2023C++面向對象程序設計2.2.8三目運算符C++中唯一的三目運算符是條件運算符語法格式為:
<條件表達式>?<表達式1>:<表達式2>“條件表達式”是C++中可以產生“真”和“假”結果的任何表達式,如果條件表達式的結果為“真”,則執(zhí)行表達式1,否則執(zhí)行表達式2。例如:n=(a>b)?1:0;//如果a>b成立,則n的 //值為1,否則為008二月2023C++面向對象程序設計2.2.9運算符的優(yōu)先順序運算符優(yōu)先順序如下表:08二月2023C++面向對象程序設計2.2.9運算符的優(yōu)先順序08二月2023C++面向對象程序設計2.2.10運算式中的類型轉換當表達式中出現了多種類型數據的混合運算時,往往需要進行類型轉換。表達式中的類型轉換分為兩種:自動轉換和強制轉換。自動轉換自動轉換的基本原則是將數據類型按照從低到高的順序進行轉換。類型越高,數據的表示范圍越大,精度也越高,各種類型的高低順序如下:char、short、int、unsigned、long、unsignedlong、float、double08二月2023C++面向對象程序設計2.2.10運算式中的類型轉換自動轉換遵循以下規(guī)則若參與運算量的類型不同,則先轉換成同一類型,然后進行運算。轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型后再進行運算。所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型,再作運算。char型和short型參與運算時,必須先轉換成int型。在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的類型將轉換為左邊量的類型。如果右邊量的數據類型長度比左邊量的數據類型長度長時,將丟失一部分數據,這樣會降低精度,丟失的部分按四舍五入向前舍入。08二月2023C++面向對象程序設計2.2.10運算式中的類型轉換強制轉換強制類型轉換是通過類型說明符和括號來實現的,其一般形式為:(<類型說明符>)<表達式>或<類型說明符>(<表達式>)例如:(float)a//把a轉換為實型
(int)(x+y)//把x+y的結果轉換為整型08二月2023C++面向對象程序設計2.3基本控制結構2.3.1表達式語句、空語句和復合語句2.3.2選擇控制語句2.3.3循環(huán)控制語句2.3.4break和continue語句實訓2程序控制結構的應用08二月2023C++面向對象程序設計2.3.1表達式語句、空語句和復合語句順序結構程序就是由順序執(zhí)行語句組成的,程序運行是按照書寫的順序進行,不發(fā)生控制轉移,所以它是最簡單的。表達式語句表達式語句由表達式后加一個分號構成。例如:a+b;num=3;空語句空語句僅由一個分號構成。例如:;就是一個空語句復合語句復合語句是由一對大括號{}括起來的兩條或兩條以上的語句構成的。08二月2023C++面向對象程序設計2.3.1表達式語句、空語句和復合語句例如:需要注意的是,在復合語句中定義的變量只作用于該復合語句的范圍,而在復合語句外,這些變量卻不能被調用。voidmain(){……{t=x;
x=y;
y=t;}//復合語句……}08二月2023C++面向對象程序設計2.3.2選擇控制語句選擇結構是用來判斷所給定的條件是否滿足,并根據判定的結果(真或假)決定哪些語句被執(zhí)行。用if語句實現選擇結構if語句是專門用來實現選擇結構的語句。它根據給定的條件進行判斷,以決定執(zhí)行某個分支程序段。其語法形式為:if(<表達式>)<語句1>[else<語句2>]08二月2023C++面向對象程序設計2.3.2選擇控制語句例如:if(x>y)max=x;elsemax=y;if語句中的語句2可以為空。當語句2為空時,else可以省略。if語句的嵌套處理多分支的情況時,C++語言允許在if或if–else中的〈語句1〉或〈語句2〉部分中再使用if或if–else語句,這種設計方法稱為嵌套。if語句的嵌套中,else部分總是與前面最靠近的、還沒有配對的if配對。08二月2023C++面向對象程序設計2.3.2選擇控制語句例如:比較兩個數的大小#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;}08二月2023C++面向對象程序設計2.3.2選擇控制語句如果if語句的嵌套都是發(fā)生在else分支中,就可以應用if…elseif語句。語法形式為:if(<表達式1>)<語句1>;elseif(<表達式2>)<語句2>;
......elseif(<表達式n>)<語句n>;例如:求分段函數y=f(x)的值,f(x)的表達式如下:
x2―1(x<–1)y=x2(–1≤x≤1)x2+1(x>1)08二月2023C++面向對象程序設計2.3.2選擇控制語句#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;}08二月2023C++面向對象程序設計2.3.2選擇控制語句switch語句C++語言提供了直接實現多分支選擇結構的語句:switch語句,稱為多分支語句,也叫開關語句。switch語句的語法形式如下:switch(<表達式>){case<常量表達式1>:語句1;[break;]case<常量表達式2>:語句2;[break;]......case<常量表達式n>:語句n;[break;][default:語句n+1;[break;]] }08二月2023C++面向對象程序設計2.3.2選擇控制語句使用switch語句需要注意的是:switch后面的表達式可以是整型、字符型、枚舉型,而case后面的常量表達式的類型必須與其匹配。每個case后面常量表達式的值必須各不相同,各case及default子句的先后次序不影響程序執(zhí)行結果。每個case分支可以有多條語句,但不必用{}。case后面的常量表達式僅起語句標號作用,并不進行條件判斷。系統(tǒng)一旦找到入口標號,就從此標號開始執(zhí)行,不再進行標號判斷,所以必須加上break語句,以便結束switch語句,否則會從入口點開始一直執(zhí)行到switch結構的結束點。當若干分支需要執(zhí)行相同操作時,可以使多個case分支共用一組語句。08二月2023C++面向對象程序設計2.3.2選擇控制語句例如:用switch語句實現計算器的簡單功能。#include<iostream>usingnamespacestd;voidmain(){ floatx,y;//運算數
charoper;//運算符
cout<<"Enterx,oper,y:"; cin>>x>>oper>>y;
08二月2023C++面向對象程序設計2.3.2選擇控制語句
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"; }}08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句C++中提供了三種循環(huán)控制語句:while語句、do-while語句和for語句。
while語句while語句的語法形式如下:while(<表達式>)<語句>其中表達式是循環(huán)條件,語句為循環(huán)體。執(zhí)行順序是:先判斷表達式的值,當表達式為真時便開始執(zhí)行while循環(huán)體中的語句,然后反復執(zhí)行,每次執(zhí)行都會判斷表達式是否為真,直到有一次執(zhí)行循環(huán)體后條件表達式的值為假時終止。08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句例如:用while語句求100以內的奇數之和。#include<iostream>usingnamespacestd;voidmain(){ inti=1,sum=0; while(i<=100) { sum+=i; i+=2; } cout<<"sum="<<sum<<endl;}08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句使用while語句需要注意的有:如果循環(huán)體有多個語句時,要用大括號{}把它們括起來,以復合語句形式出現。循環(huán)體中必須有修改條件表達式的語句,可以使條件由成立轉為不成立,從而結束循環(huán)。否則如果開始時條件為真,就會永遠為真,使循環(huán)體永遠重復執(zhí)行下去,稱為“死循環(huán)”。do-while語句do-while語句的語法形式如下:do<語句>while(<表達式>);執(zhí)行順序是:先執(zhí)行循環(huán)中的語句,然后再判斷表達式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句例如:用do-while語句求100以內的奇數之和。#include<iostream>usingnamespacestd;voidmain(){ inti=1,sum=0; do { sum+=i; i+=2; }while(i<=100); cout<<"sum="<<sum<<endl;}08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句for語句for語句的語法形式如下:for([表達式1];[表達式2];[表達式3])<語句>其中,表達式1:給循環(huán)控制變量賦初值;表達式2:循環(huán)條件,是一個邏輯表達式,它決定什么時候退出循環(huán);表達式3:循環(huán)變量增值,規(guī)定循環(huán)控制變量每循環(huán)一次后按什么方式變化。for語句的執(zhí)行流程是:首先計算一次表達式1的值,再計算表達式2(循環(huán)控制條件)的值,并根據表達式2的值判斷是否執(zhí)行循環(huán)體。08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句例如:用for語句求100以內的奇數之和。#include<iostream>usingnamespacestd;voidmain(){ inti,sum; sum=0; for(i=1;i<=100;i+=2) sum+=i; cout<<"sum="<<sum<<endl;}08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句使用for語句需要注意的是:表達式1、表達式2、表達式3都可以省略,但分號“;”不能省略。若表達式1省略或者是與循環(huán)條件無關的其他表達式,則應該在for語句之前給循環(huán)控制條件賦初值。若表達式2省略,則循環(huán)將無終止地進行下去。若表達式3省略或者是與循環(huán)條件無關的其他表達式,則應該在循環(huán)體中另有語句改變循環(huán)條件,以保證循環(huán)能正常結束。表達式1和表達式3可以是一個簡單的表達式,也可以是逗號表達式,既可以是給循環(huán)變量賦初值,也可以是與循環(huán)變量無關的其它表達式。例如:for(i=1,sum=0;i<=100;sum+=i,i+=2);08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句循環(huán)結構與選擇結構的嵌套循環(huán)結構與選擇結構可以互相嵌套,以實現復雜算法。例如:輸入一個整數,求出它的所有因子。#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;}08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句例如:編寫程序打印以下圖案:*************************08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句#include<iostream>usingnamespacestd;voidmain(){ inti,j,n=4; for(i=1;i<=n;i++)//輸出前4行圖案
{//在圖案左側空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; }08二月2023C++面向對象程序設計2.3.3循環(huán)控制語句
for(i=1;i<=n-1;i++)//輸出后3行圖案
{ //在圖案左側空30列 for(j=1;j<=30;j++) cout<<‘’;
for(j=1;j<=7-2*i;j++) cout<<'*'; cout<<endl; }}08二月2023C++面向對象程序設計2.3.4break和continue語句C++轉移語句包括break、continue、goto和return語句。轉移語句的作用是改變程序的順序執(zhí)行流程,將程序執(zhí)行流程轉移到程序其他地方。break語句break語句可用在switch多分支結構和循環(huán)結構中。在switch結構中,break語句用于跳出switch結構。在循環(huán)結構中,break語句用于跳出循環(huán),即程序遇到break語句時提前結束循環(huán),執(zhí)行循環(huán)外的下一條語句。08二月2023C++面向對象程序設計2.3.4break和continue語句例如:用窮舉法找出1~10之間的質數并顯示出來。代碼見教材P29~P30continue語句continue語句只用于循環(huán)結構。當遇到continue語句時,程序只跳過continue語句后的其余語句,即僅結束本次循環(huán),并直接進入下一次循環(huán)。例如:輸出100以內能被3整除且個位數為6的所有整數。代碼見教材[例2-18]08二月2023C++面向對象程序設計實訓2程序控制結構的應用實訓說明在實訓中,我們要實現的功能是驗證哥德巴赫猜想,即任一充分大的偶數可以用兩個素數之和表示。程序分析先不考慮怎樣判斷一個數是否為素數,而從整體上對這個問題進行考慮。我們可以這樣做:讀入一個偶數num,將它分成p和q兩部分,使得num=p+q。那么怎樣分呢?可以令p從2開始,每次增加1,而令q=num-p,如果p、q均為素數,則正為所求,否則令p=p+1再試。08二月2023C++面向對象程序設計實訓2程序控制結構的應用算法如下:讀入大于3的偶數num。p=1do{
p=p+1;q=num-p;判斷p是否素數?判斷q是否素數?}while(p、q有一個不是素數)輸出num=p+q。接下來分析第5、6步,怎樣判斷一個數是否為素數要判斷一個數i是否為素數,方法是用小于等于i的平方根的數依次去除i,看能否除盡,若都除不盡則i必為素數,反之則不是。程序員代碼見教材實訓208二月2023C++面向對象程序設計2.4函數2.4.1函數的定義和調用2.4.2函數的參數傳遞2.4.3函數參數的引用傳遞2.4.4帶默認形參值的函數2.4.5函數的嵌套與遞歸調用2.4.6內聯函數2.4.7函數的重載實訓3函數的應用08二月2023C++面向對象程序設計2.4.1函數的定義和調用函數的定義函數定義的一般形式如下:<函數類型>
<函數名>(<形式參數表>){
<函數體>}
函數類型規(guī)定了所定義函數返回值的類型。函數名是一個有效的C++標識符,同一個文件中的函數不能同名。函數體是一個語句序列,用于實現函數的具體功能。
08二月2023C++面向對象程序設計2.4.1函數的定義和調用例如:定義一個函數,求二個數中最大者intmax(intx,inty)//定義函數max{intz;if(x>y)z=x;elsez=y;returnz;}08二月2023C++面向對象程序設計2.4.2函數的參數傳遞C++中函數的參數傳遞有兩種方式,一種是按值傳遞,另一種是地址傳遞或引用傳遞。這里先來說明按值傳遞的參數傳遞方法。按值傳遞方法是把實參的值拷貝給形參,即調用函數向被調用函數傳遞的參數是變量本身值。在內存中,由于形參與實參占用不同的存儲單元,這時形參值的變化將不影響實參的值。08二月2023C++面向對象程序設計2.4.2函數的參數傳遞例如:交換函數的兩個參數的值#include<iostream>usingnamespacestd;//交換函數swap(),用于交換x和y的值voidswap(intx,inty){ inttemp; temp=x; x=y; y=temp; cout<<"x="<<x<<",y="<<y<<endl;}08二月2023C++面向對象程序設計2.4.2函數的參數傳遞值傳遞的最大好處是保持函數的獨立性。在值傳遞的情況下,函數只有通過return來返回某個類型的值。voidmain(){ inta=10,b=20; cout<<"a="<<a<<",b="<<b<<endl; swap(a,b); cout<<"a="<<a<<",b="<<b<<endl;}
08二月2023C++面向對象程序設計2.4.3函數參數的引用傳遞引用引用是C++提供的一種特殊類型的變量,定義引用類型變量實質上是給一個已定義的變量起一個別名,系統(tǒng)不會為引用類型變量分配內存空間,只是使引用類型變量與其相關聯的變量使用同一個內存空間。定義引用類型變量的一般格式為:<數據類型>&<引用名>=<變量名>;例如:inta=3;int&ra=a;//ra就是一個引用,它是變量a的別名08二月2023C++面向對象程序設計2.4.3函數參數的引用傳遞例如:為變量i聲明一個引用r,在程序中分別對r和i進行計算。#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;}08二月2023C++面向對象程序設計2.4.3函數參數的引用傳遞在使用引用時,需要注意的是:定義引用類型變量時,必須將其初始化。而且引用變量類型必須與為它初始化的變量類型相同。一旦一個引用被初始化后,就不能改為指向其他變量。當引用類型變量的初始化值是常量時,則必須將該引用類型定義成const類型。08二月2023C++面向對象程序設計2.4.3函數參數的引用傳遞函數的引用傳遞引用也可作為形參,如果將引用作為形參,則在函數中對形參所做的更改對主函數中的實參有效。例如:引用作為函數參數的調用方式,使兩數成功地進行交換。#include<iostream>usingnamespacestd;08二月2023C++面向對象程序設計2.4.3函數參數的引用傳遞voidswap(int&x,int&y)//引用作為函數形參{ 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;}08二月2023C++面向對象程序設計2.4.4帶默認形參值的函數C++允許在函數聲明或定義中給一個或多個參數指定默認值。例如,下面聲明一個帶默認值參數的函數fun():voidfun(intval=10);則如下的函數調用把實參值20傳遞給形參:fun(20);而如果函數調用用省略實參,則把默認值10傳遞給形參,如下所示:fun();//等同于fun(10)08二月2023C++面向對象程序設計2.4.4帶默認形參值的函數在設置函數的默認參數值時要注意:當函數既有聲明又有定義后,不能在函數定義中指定默認參數。如果函數有多個形參,在聲明和定義函數時,必須將帶默認值的形參放在參數表的右部,即默認參數應按從右到左的順序定義,在帶默認值的形參右邊不能有未指定默認值的形參。在函數調用時,系統(tǒng)按從左到右的順序將實參與形參結合。當實參的數目不足時,系統(tǒng)將按照同樣的順序用聲明或定義中的默認值來補齊所缺少的參數。08二月2023C++面向對象程序設計2.4.5函數的嵌套與遞歸調用嵌套調用函數允許嵌套調用。所謂嵌套調用就是在調用一個函數并執(zhí)行該函數中,又調用另一個函數的情況。例如:編寫一個計算組合數的程序。計算組合數的公式如下:
08二月2023C++面向對象程序設計2.4.5函數的嵌套與遞歸調用在本例中,組合數的計算用函數functionA()進行,而它需要的階乘計算由函數functionB()進行。主函數main()調用函數functionA(),而函數functionA()三次調用函數functionB(),計算m!,n!,(m-n)!。計算結果返回給主函數進行輸出。m和n由鍵盤輸入。源程序代碼見教材:[例2-23]08二月2023C++面向對象程序設計2.4.5函數的嵌套與遞歸調用例子中函數的調用如下圖所示:08二月2023C++面向對象程序設計2.4.5函數的嵌套與遞歸調用遞歸調用函數可以直接或間接地調用自身,稱為遞歸調用。遞歸調用分兩個階段:第一階段:遞推。將原問題不斷分解為新的子問題,逐漸從未知向已知推進,最終達到已知條件,即遞歸結束的條件,這時遞推階段結束。例如求4!可以這樣分解:4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=108二月2023C++面向對象程序設計2.4.5函數的嵌套與遞歸調用第二階段:回歸。從已知條件出發(fā),按照遞推的逆過程,逐一求值回歸,最后達到遞歸的開始處,結束回歸階段,完成遞歸調用。例如求4!的回歸階段如下:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1遞歸部分實例及代碼見教材:[例2-24]和
[例2-25]08二月2023C++面向對象程序設計2.4.6內聯函數當函數被調用時。若把函數體直接嵌入函數調用處,則可消除附加的現場處理的時間開銷,提高程序的運行效率。當然,這樣將會加大代碼占用內存的空間開銷。C++提供了實現上述嵌入功能的函數,這種函數稱為內聯(inline)函數。內聯函數一般適用于代碼較短的函數。定義一個內聯函數只需在函數頭前加入關鍵字inline。08二月2023C++面向對象程序設計2.4.6內聯函數例如:用內聯函數計算圓的面積。#include<iostream>usingnamespacestd;inlinedoubleCalArea(doubleradius)//內聯函數,計算圓的面積{ return3.14*radius*radius;}voidmain(){ doublearea,r(2.0);//r是圓的半徑
area=CalArea(r); //調用內聯函數求圓的面積,編譯時此處被替換為 //CalArea函數體語句
cout<<area<<endl;}08二月2023C++面向對象程序設計2.4.7函數的重載C++中允許功能相近的函數在相同的作用范圍內以相同函數名定義,從而形成重載。函數的重載指的是兩個以上的函數,取相同的函數名,但是形參的個數或者類型不同,編譯器根據實參和形參的類型及個數的最佳匹配,自動確定調用哪一個函數。函數重載例子及代碼見教材:[例2-27]08二月2023C++面向對象程序設計2.4.7函數的重載函數重載要注意的是:重載函數必須具有不同的參數個數或不同的參數類型,若只有返回值的類型不同是不行的。例如:①intadd(intx,inty);intadd(inta,intb);//錯誤!編譯器不以形 //參名來區(qū)分函數②intadd(intx,inty);voidadd(intx,inty);//錯誤!編譯器不以 //返回值來區(qū)分函數不要將不同功能的函數定義為重載函數,以免出現對調用結果的誤解、混淆。例如避免出現下述重載函數定義:intadd(intx,inty){returnx+y;}floatadd(floatx,floaty){returnx-y;}
08二月2023C++面向對象程序設計實訓3函數的應用實訓說明在實訓中,我們要實現的是古典的數學問題----Hanoi(漢諾)塔問題。問題的描述是:古代有一個梵塔,塔內有3個座A、B、C,開始時A座上有64個盤子,盤子大小不等,大的在下,小的在上(如圖2-4)。有一個老和尚想把這64個盤子從A座移到C座,但每次只允許移動一個盤,且在移動過程中在3個座上都始終保持大盤在下,小盤在上,移動過程中可以利用B座。現在有N個按大小順序擺放的盤子放在A座上,請利用B座,按照漢諾塔問題限定的要求(每次移動小盤始終都在最上面),將A座上的N個盤子移到C座上。程序要求用函數實現盤子的移動操作,并能打印出每次盤子的移動步驟。08二月2023C++面向對象程序設計實訓3函數的應用程序分析為了解決N個圓盤的漢諾塔,可以按下面方式進行操作:將A桿上面的N-1個盤子,借助B桿,移到C桿上;將A桿上剩余的N號盤子移到B桿上;將C桿上的N-1個盤子,借助A桿,移到B桿上。根據以上分析,設計移動N個盤子的遞歸函數:voidhanoi(intn,charone,chartwo,charthree);設計打印輸出移動步驟函數:voidmove(chargetone,charputone);設計主函數,輸入盤子數n,調用以上函數,輸出結果。程序源代碼見教材實訓308二月2023C++面向對象程序設計2.5構造類型2.5.1數組與字符串2.5.2結構體2.5.3共用體2.5.4枚舉類型2.5.5用typedef定義類型08二月2023C++面向對象程序設計2.5.1數組與字符串數組是一組具有相同類型數據的有序集合,其中每個數據稱為數組的元素。數組的定義定義數組的一般形式為:<數據類型><數組名>[<常量表達式1>][<常量表達式2>]…;其中,數據類型是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標識符。方括號中的常量表達式表示數據元素的個數,也稱為數組的長度。例如:
int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物業(yè)維修合同:圍墻整治與修繕條款3篇
- 公共設施用地租賃合同協議書
- 鐵路出發(fā)行合同
- 國際展覽綜合樓租賃合同
- 橄欖球場建設合同
- 銀行信貸專員聘用合同格式
- 辦公設備租賃合同示范文本
- 親子餐廳廚師勞務聘用協議
- 體育賽事場地租賃協議樣本
- 砂石銷售合同范例解析
- 現代學徒制課題:數字化時代中國特色學徒制創(chuàng)新發(fā)展路徑研究(附:研究思路模板、可修改技術路線圖)
- 廣東省汕頭市潮陽區(qū)2023-2024學年高二上學期期末考試 地理 含答案
- 中考語文真題專題復習 小說閱讀(第01期)(解析版)
- 國家電網招聘之財務會計類題庫有答案
- 機械工程測試技術知到智慧樹章節(jié)測試課后答案2024年秋安徽理工大學
- DB36T 1476-2021 碳普惠平臺建設技術規(guī)范
- 中華民族現代文明有哪些鮮明特質建設中華民族現代文明的路徑是什么
- 《信息系統(tǒng)培訓》課件
- GB 45067-2024特種設備重大事故隱患判定準則
- 【MOOC】金羽飛揚-世界冠軍的羽毛球課堂-哈爾濱工業(yè)大學 中國大學慕課MOOC答案
- 2022-2023學年上海市徐匯中學七年級(下)期中語文試卷
評論
0/150
提交評論