C++程序設(shè)計教程_第1頁
C++程序設(shè)計教程_第2頁
C++程序設(shè)計教程_第3頁
C++程序設(shè)計教程_第4頁
C++程序設(shè)計教程_第5頁
已閱讀5頁,還剩355頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,面向?qū)ο蟮某绦蛟O(shè)計語言C+,Welcome to learn C+ ! 講授:劉韶濤 副教授 E-mail:,2,第一部分 C+語言基礎(chǔ),本部分是學(xué)習(xí)C+語言的基礎(chǔ),包括以下幾個方面: 1. C+概述 2. 結(jié)構(gòu)化程序設(shè)計方法與面向?qū)ο蟪绦蛟O(shè)計方法的各自特點、區(qū)別和相互聯(lián)系。 3面向?qū)ο蟮某绦蛟O(shè)計方法中的有關(guān)概念,如類、對象、封裝、繼承、消息和多態(tài)性等。 4C+程序的基本組成和框架結(jié)構(gòu)。 5掌握C+語言中的基本數(shù)據(jù)類型、各種運算符、表達(dá)式。 6C+數(shù)據(jù)輸入流對象cin和輸出流對象cout的使用。 7程序的3種基本結(jié)構(gòu) 8構(gòu)造數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)體、指針等的定義方法、特點和使用方法。 9函

2、數(shù)的定義、調(diào)用及函數(shù)調(diào)用過程中的參數(shù)傳遞的機(jī)理和程序執(zhí)行流程。 10引用的概念及其定義和使用方法。,3,1.1 C+概述,1.1.1 計算機(jī)系統(tǒng)的層次結(jié)構(gòu) 應(yīng)用軟件 通 處 理 工 用 作 具 軟 言 系 系 軟 件 語 操 裸機(jī) 統(tǒng) 統(tǒng) 件 計算機(jī)系統(tǒng)的層次結(jié)構(gòu)圖,4,1.1 C+概述,1.1.1 計算機(jī)系統(tǒng)的層次結(jié)構(gòu) 任何計算機(jī)系統(tǒng)都必須包含硬件和在其上運行的軟件。計算機(jī)硬件必須有軟件的支持才能有效地運轉(zhuǎn)并為人們所利用。計算機(jī)硬件系統(tǒng)一般由處理器(控制器和運算器)、存儲器、輸入設(shè)備和輸出設(shè)備等部分組成。一般來講,人們認(rèn)為軟件系統(tǒng)由系統(tǒng)軟件和應(yīng)用軟件兩部分組成。我們從系統(tǒng)層次的角度,可以把軟

3、件分為:,(1)操作系統(tǒng)(OS,Operating System) 它是計算機(jī)軟件的核心,是硬件的第一級擴(kuò)充。在它的控制下,計算機(jī)的全部資源,如CPU、內(nèi)存、外部設(shè)備(CRT、打印機(jī),掃描儀、光盤機(jī)等)和各種軟件資源可以協(xié)調(diào)一致地工作。它可以有條不紊、高效率地管理和調(diào)度計算機(jī)地硬件設(shè)備和各種軟件資源,使它們最大限度地發(fā)揮作用。操作系統(tǒng)還要協(xié)調(diào)控制許多可能“并發(fā)”執(zhí)行的程序段,按照預(yù)先確定的控制策略合理地組織系統(tǒng)的工作流程,提高系統(tǒng)的執(zhí)行效率,保護(hù)系統(tǒng)和用戶的信息安全。常用的操作系統(tǒng):MS-DOS,Windows,Unix等。,5,1.1 C+概述,(2)語言處理系統(tǒng) 其主要的核心部分是程序設(shè)計

4、語言的編譯系統(tǒng)。程序設(shè)計語言是從事計算機(jī)的技術(shù)人員,特別是軟件編寫者不可缺少的編程工具,是“駕駛”計算機(jī)運行的“方向盤”。,目前世界上經(jīng)設(shè)計和實現(xiàn)的程序設(shè)計語言有上千種之多。大致可分為兩大類,一類是因計算機(jī)中央處理器(CPU)不同而異的匯編語言,另一類是通用的程序設(shè)計語言。前者稱為低級語言,后者稱為高級語言。說匯編語言是一種低級語言,是因為計算機(jī)硬件是最低層的,而隸屬于語言處理系統(tǒng)的匯編語言最接近于硬件,它是在機(jī)器碼語言的基礎(chǔ)上直接發(fā)展起來的一種面向機(jī)器的低級語言,它的每一條指令與機(jī)器碼語言的指令保持著一一對應(yīng)的關(guān)系,可方便地對硬件實現(xiàn)控制和操作,能充分發(fā)揮硬件的潛力,且用匯編語言編寫的程序與

5、高級語言相比執(zhí)行速度最快。,6,1.1 C+概述,從計算機(jī)的根本原理來說,計算機(jī)只能理解和執(zhí)行一系列二進(jìn)制指令碼,即由數(shù)字0和1的不同排列組合而成的二進(jìn)制碼對應(yīng)不同操作的指令,這就是通常所說的“機(jī)器碼指令”。用上述各 種語言(包括匯編語言在內(nèi))編寫的程序稱為“源程序(Source Program)”,源程序不能直接在計算機(jī)上運行,而必須經(jīng)過語言處理系統(tǒng)進(jìn)行“翻譯”加工,轉(zhuǎn)換成機(jī)器碼指令后才能執(zhí)行。常用的語言有:古典語言(Fortran、Pascal、Cobol,Basic等)、人工智能語言(LISP,PROLOG等)以及現(xiàn)代的語言(C/C+,JAVA,Delphi,Powerbuilder,C

6、#等)。,7,1.1 C+概述,關(guān)于C和C+ C是最靠近機(jī)器的通用程序設(shè)計語言。在最初設(shè)計時是作為一種面向系統(tǒng)軟件(操作系統(tǒng)和語言處理系統(tǒng))的開發(fā)語言,即用來代替匯編語言的,但是由于它具有強大的生命力,因而在事務(wù)處理、科學(xué)計算、工業(yè)控制和數(shù)據(jù)庫技術(shù)等各個方面都得到了廣泛的應(yīng)用。即使進(jìn)入到以計算機(jī)網(wǎng)絡(luò)為核心的信息時代,C語言仍然是作為通用的匯編語言使用,用于開發(fā)軟(件)、硬(件)結(jié)合的程序,如實時監(jiān)控程序、系統(tǒng)控制程序和設(shè)備驅(qū)動程序等。 C+是C的面向?qū)ο髷U(kuò)展,是面向?qū)ο蟪绦蛟O(shè)計語言的一個大眾化版本,是當(dāng)前學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計方法的首選語言。C+是C的超集,它保留了C的所有組成部分并與其完全兼容

7、,既可以做傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計,又能進(jìn)行面向?qū)ο蟪绦蛟O(shè)計,是當(dāng)今世界最為流行的面向?qū)ο蟪绦蛟O(shè)計語言。大大型應(yīng)用軟件開發(fā)上,以Windows開發(fā)環(huán)境為操作平臺的C+類庫和組件正在迅猛發(fā)展,C+即將取代C已是不可抗拒的事實,它的觸角幾乎已觸及到計算機(jī)研究和應(yīng)用的各個領(lǐng)域。完全遵循美國國家標(biāo)準(zhǔn)化組織制定的ANSI C+標(biāo)準(zhǔn),目前廣泛流行在微型計算機(jī)上使用的C+產(chǎn)品,有美國Microsoft公司推出的、以Windows開發(fā)環(huán)境為操作系統(tǒng)平臺的Visual C+,還有美國Borland公司開發(fā)的C+ Builder等。,8,1.1 C+概述,(3)通用軟件 通用軟件可分為如下幾組: (a)數(shù)據(jù)處理類軟件

8、:進(jìn)行數(shù)值計算(行列式、矩陣、復(fù)變函數(shù)等計算)、統(tǒng)計分析、數(shù)學(xué)表達(dá)式分析計算以及模擬處理的程序等。 (b)進(jìn)行聲音、圖形、圖像和動畫等多媒體信息處理的程序。 (c)有關(guān)自然語言處理、模式識別、神經(jīng)網(wǎng)絡(luò)和專家系統(tǒng)等人工智能方面的應(yīng)用程序。 (d)計算機(jī)輔助設(shè)計與制造(CAD/CAM)、計算機(jī)輔助教學(xué)(CAI)、計算機(jī)輔助分析以及決策支持系統(tǒng)等方面的通用程序。 (4)應(yīng)用軟件 除通用軟件以外的各種應(yīng)用程序統(tǒng)稱為應(yīng)用軟件。當(dāng)前從事應(yīng)用軟件的開發(fā)是各類計算機(jī)應(yīng)用專業(yè)技術(shù)人員的大舞臺,這些技術(shù)人員既具有扎實的本專業(yè)知識,又掌握了計算機(jī)的應(yīng)用知識,很善于把計算機(jī)當(dāng)作工具來完成本應(yīng)用領(lǐng)域中的各種任務(wù)。應(yīng)用領(lǐng)

9、域大致可劃分為:科學(xué)計算,如天文、氣象等大型計算任務(wù);辦公自動化(OA-Office Automation),如Office 2000;數(shù)據(jù)庫技術(shù)領(lǐng)域,如FoxPro、Sybase和Oracle等;工業(yè)控制領(lǐng)域,產(chǎn)品如Intouch等。,9,1.1 C+概述,(5)工具軟件 是為協(xié)助用戶更方便地使用計算機(jī)完成開發(fā)任務(wù)而研制,并集多種功能于一體地支程序軟件包。如PC Tools、FrontPage 2000、Cutftp等等。,10,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,1.2.1 傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(Structured Programming-SP)方法 1使用SP方法設(shè)計程序

10、的步驟 在數(shù)據(jù)處理過程中,采用的是自頂向下、分而治之的方法,將整個程序按功能劃分為幾個可獨立編程的子過程模塊,每一子模塊完成指定的子任務(wù),并且提供一個清晰、嚴(yán)格的調(diào)用界面,主過程通過調(diào)用各子過程完來成全部處理工作 。,11,2SP方法的特點 優(yōu)點: (1)這種程序設(shè)計方法力求算法描述準(zhǔn)確。 (2)對每一子過程模塊容易進(jìn)行程序正確性證明。 缺點: (1)這種程序設(shè)計方法本質(zhì)上是面向“過程”的,而“過程”和“操作”又是不穩(wěn)定和多變的,因此不能直接反映人類求解問題的思路。 (2)程序代碼可重用性差。程序中除少數(shù)標(biāo)準(zhǔn)庫函數(shù)外,每設(shè)計一個程序時,程序員幾乎從零做起。即使重用代碼,通常也是通過拷貝或編輯重

11、新生成一份。 (3)維護(hù)程序的一致性困難。該種方法將數(shù)據(jù)與對數(shù)據(jù)進(jìn)行處理的程序代碼分離。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,12,1.2.2 面向?qū)ο蟮某绦蛟O(shè)計(Object-Oriented Programming -OOP)方法 1. 面向?qū)ο蟮挠嘘P(guān)概念 面向?qū)ο蟮某绦蛟O(shè)計方法強調(diào)直接以問題域(現(xiàn)實世界)中的事物為中心來思考和認(rèn)識問題,并按照這些事物的本質(zhì)特征把它們抽象為對象,以作為構(gòu)成軟件系統(tǒng)的基礎(chǔ)。 (1)對象(Object):每個對象都具有屬性(Attribute)和方法(Method)這兩方面的特征。對象的屬性描述了對象的狀態(tài)和特征,對象的方法說明了對象的行為和功能

12、,并且對象的屬性值只應(yīng)由這個對象的方法來讀取和修改,兩者結(jié)合在一起就構(gòu)成了對象的完整描述。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,13,(2)類(Class):具有相似屬性和行為的一組對象,就稱為類??梢?,有了類的概念以后,就可以對具有共同特征的事物進(jìn)行統(tǒng)一描述。 (3)封裝(Encapsulation):封裝把對象的屬性和方法看成了一個密不可分的整體,從而使對象能夠完整地描述并對應(yīng)于一個具體事物 。 (4)繼承(Inheritance):將客觀事物進(jìn)行歸類是一個逐步抽象的過程,反之,將類進(jìn)行層層分類便是一個概念逐漸細(xì)化的過程。 在面向?qū)ο蟮某绦蛟O(shè)計中,允許在已有類的基礎(chǔ)上通過增加

13、新特征而派生出新的類,這稱為繼承。其原有的類稱為基類(base class),而新建立的類稱為派生類(derived class)。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,14,(5)消息(Message):在面向?qū)ο蟮某绦蛟O(shè)計中,由于對象描述了客觀實體,它們之間的聯(lián)系通過對象間的聯(lián)系來反映。當(dāng)一個對象需要另外一個對象提供服務(wù)時,它向?qū)Ψ桨l(fā)出一個服務(wù)請求,而收到請求的對象會響應(yīng)這個請求并完成指定的服務(wù)。這種向?qū)ο蟀l(fā)出的服務(wù)請求就稱為消息。 (6)多態(tài)性(Polymorphism):多態(tài)性是面向?qū)ο蟮牧硪恢匾卣?。在通過繼承而派生出的一系列類中,可能存在一些名稱相同,但實現(xiàn)過程和功能

14、不同的方法(Method)。 所謂多態(tài)性是指當(dāng)程序中的其他部分發(fā)出同樣的消息時,按照接收消息對象的不同能夠自動執(zhí)行類中相應(yīng)的方法。其好處是,用戶不必知道某個對象所屬的類就可以執(zhí)行多態(tài)行為,從而為程序設(shè)計帶來更大方便。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,15,2. 面向?qū)ο蟮某绦蛟O(shè)計方法(OOP方法) 這種方法將設(shè)計目標(biāo)從模擬現(xiàn)實世界的行為轉(zhuǎn)向了模擬現(xiàn)實世界中存在的對象及其各自的行為。 在OOP中,將“對象”作為系統(tǒng)中最基本的運行實體,整個程序即由各種不同類型的對象組成,各對象既是一個獨立的實體,又可通過消息相互作用,對象中的方法決定要向哪個對象發(fā)消息、發(fā)什么消息以及收到消息時如

15、何進(jìn)行處理等。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,16,3OOP方法的特點 (1)OOP以“對象”或“數(shù)據(jù)”為中心。由于對象自然地反映了應(yīng)用領(lǐng)域的模塊性,因此具有相對穩(wěn)定性,可以被用作一個組件去構(gòu)成更復(fù)雜的應(yīng)用,又由于對象一般封裝的是某一實際需求的各種成分,因此,某一對象的改變對整個系統(tǒng)幾乎沒有影響。 (2)引入了“類”(class)的概念。類與類以層次結(jié)構(gòu)組織,屬于某個類的對象除具有該類所描述的特性外,還具有層次結(jié)構(gòu)中該類上層所有類描述的全部性質(zhì),OOP中稱這種機(jī)制為繼承。 (3)OOP方法的模塊性與繼承性,保證了新的應(yīng)用程序設(shè)計可在原有對象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用、

16、擴(kuò)展和細(xì)化來進(jìn)行,而不必從頭做起或復(fù)制原有代碼,這樣,大大減少了重新編寫新代碼的工作量,同時降低了程序設(shè)計過程中出錯的可能性,達(dá)到了事半功倍的效果。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,17,1.2.3 面向?qū)ο蟮某绦蛟O(shè)計方法與結(jié)構(gòu)化程序設(shè)計方法的比較 (1)傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法以過程為中心構(gòu)造應(yīng)用程序,數(shù)據(jù)和處理數(shù)據(jù)的過程代碼是分離的、相互獨立的實體,設(shè)計出的程序可重用代碼少,且當(dāng)代碼量增加時維護(hù)數(shù)據(jù)和代碼的一致性困難。 (2)面向?qū)ο蟪绦蛟O(shè)計方法中,對象所具有的封裝性和繼承性使得代碼重用成為可能,并大大減少了程序出錯的可能性。 (3)面向?qū)ο蠓椒ㄎ樟私Y(jié)構(gòu)化程序設(shè)計方法的

17、優(yōu)點,同時引入了新概念、新機(jī)制并建立了比傳統(tǒng)方法更高層次的抽象。,1.2 從面向過程的程序設(shè)計到面向?qū)ο蟮某绦蛟O(shè)計,18,1.3.1 從C語言到C+語言 C語言以其如下獨有的特點風(fēng)靡了全世界: (1)語言簡潔、緊湊,使用方便、靈活。C語言只有32個關(guān)鍵字,程序書寫形式自由。 (2)豐富的運算符和數(shù)據(jù)類型。 (3)可以直接訪問內(nèi)存地址,能進(jìn)行位操作,使其能夠勝任開發(fā)操作系統(tǒng)的工作。 (4)生成的目標(biāo)代碼質(zhì)量高,程序運行效率高。 (5)可移植性好。,1.3 C+程序的基本組成,19,1.3 C+程序的基本組成,局限性: (1)數(shù)據(jù)類型檢查機(jī)制相對較弱,這使得程序中的一些錯誤不能在編譯階段被發(fā)現(xiàn)。

18、(2)C本身幾乎沒有支持代碼重用的語言結(jié)構(gòu),因此一個程序員精心設(shè)計的程序,很難為其它程序所用。 (3)當(dāng)程序的規(guī)模達(dá)到一定程度時,程序員很難控制程序的復(fù)雜性。,20,1.3 C+程序的基本組成,C+包含了整個C,C是建立C+的基礎(chǔ)。C+包括C的全部特征和優(yōu)點,同時添加了對面向?qū)ο缶幊蹋∣OP)的完全支持。 1980年,貝爾實驗室的Bjarne Stroustrup開始對C進(jìn)行改進(jìn)和擴(kuò)充。 1983年正式命名為C+。 在經(jīng)歷了3次C+修訂后,1994年制定了ANSI C+ 標(biāo)準(zhǔn)的草案。以后又經(jīng)過不斷完善,成為目前的C+。 C+仍在不斷發(fā)展中。美國微軟公司現(xiàn)已推出C#(C Sharp)語言,來代替

19、C+語言。,21,1.3.2 C+程序的結(jié)構(gòu)與基本組成 一個簡單的C+程序,是由若干個函數(shù)構(gòu)成的,其中有且僅有一個名稱為main的函數(shù)存在,下圖說明了C+程序的基本框架結(jié)構(gòu):,1.3 C+程序的基本組成,22,1聲明區(qū) 聲明區(qū)處在程序文件的所有函數(shù)的外部。 (1)包含頭文件:如#include iostream.h (2)宏定義:如#define PI 3.1415926 (3)類定義:如class name;/也可以在函數(shù)體內(nèi) (4)結(jié)構(gòu)體定義:如struct record; (5)函數(shù)聲明:如void print(); (6)全局變量聲明:如float H=2.58; (7)條件編譯:如#

20、ifdef等。,1.3 C+程序的基本組成,23,2主程序區(qū) 主程序以main()函數(shù)開始,是整個程序運行的入口,該函 數(shù)中可能包含的內(nèi)容主要有: (1)局部變量的聲明:如:int i=1; (2)函數(shù)調(diào)用:如:y=sin(x); (3)一般運算:如:a=b+c+d/3; (4)結(jié)構(gòu)控制:如:if(ab) c=a; (5)對象與結(jié)構(gòu)的處理。 (6)文件的處理等。,1.3 C+程序的基本組成,24,圖2.3 C+函數(shù)的組成 4程序舉例,1.3 C+程序的基本組成,3函數(shù)定義區(qū) 程序中除了main函數(shù)之外,還可以包含其它的函數(shù),每個函數(shù)是由函數(shù)說明和函數(shù)體兩部分構(gòu)成的。如圖2.3所示:,25,1.

21、3 C+程序的基本組成,26,上例程序結(jié)構(gòu)可寫為如下程序: 【例2-1】一個簡單的C+程序。 / This is the first C+ program /* C語言的某些特征仍可沿用*/ #include iostream.h void print(); /函數(shù)聲明 void main() int i; char s80;,1.3 C+程序的基本組成,27,print( ); couts; couti; /驗證結(jié)果 couts is i years old.; void print( ) printf(printf is also can be usedn); ,1.3 C+程序的基本組成

22、,28,從上例可以看出: (1)C語言中原有的規(guī)則和語句在C+中仍可繼續(xù)使用,但C+又增添了很多新的風(fēng)格。 (2)一個C+的程序是由一到若干個函數(shù)構(gòu)成的,但其中必須有且僅有一個名稱為main的函數(shù)存在。 (3)不管一個程序中有多個函數(shù),只有main函數(shù)整個程序運行時的入口,程序運行時從此函數(shù)開始執(zhí)行。但在程序中,main函數(shù)所處的位置可以任意。 (4)一個C+的函數(shù)是由兩部分構(gòu)成的,即函數(shù)的說明部分和函數(shù)體,函數(shù)的說明部分包括了函數(shù)的返回值的類型、函數(shù)的名稱、圓括號、形參及形參的類型說明。函數(shù)體由一對大括號括起來,其內(nèi)容是由若干條語句,1.3 C+程序的基本組成,29,構(gòu)成,函數(shù)體的內(nèi)容決定了

23、該函數(shù)的功能。 (5)C+對程序中的名稱是大小寫“敏感”的,除特殊情況下,應(yīng)一律小寫。 (6)程序中的注釋:可以用/*/或/(單行注釋)對程序中的內(nèi)容進(jìn)行注釋。二者的區(qū)別在于,采用/*/方法時,注釋可以寫成多行,而采用/方法時,注釋只能寫成一行,它可單獨占一行,也可寫在某行程序代碼的末尾。 (7)數(shù)據(jù)輸出:除了使用printf( )函數(shù),還可使用功能更強大、更方便的cout對象進(jìn)行輸出數(shù)據(jù)。格式如下: cout數(shù)據(jù)1 數(shù)據(jù)2 數(shù)據(jù)n 如:上例中的語句couts“ is ”i“ years old.”; 表示同時輸出了變量s的值、字符串“is”、變量i的值和字符,1.3 C+程序的基本組成,30

24、,串“years old.” (8) 數(shù)據(jù)輸入:除了使用scanf( )函數(shù),還可使用功能更強大、更方便的cin對象進(jìn)行數(shù)據(jù)輸入。格式如下: cin變量1變量2變量n 如:上例中的語句cins;表示給變量s輸入一個值 (9) 在分別使用cout和cin進(jìn)行數(shù)據(jù)的輸出和輸入時,需要在程序的開頭嵌入”iostream.h”文件。在該頭文件中定義了輸入輸出流對象cout和cin等。 (10) 一個C+的源程序文件在存盤時,要以.CPP為文件名后綴,而不是.C。 (11)C+程序的開發(fā)過程,1.3 C+程序的基本組成,31,串“years old.” 2.2 C+程序的基本組成,C+程序的開發(fā)過程,3

25、2,1.4 C+數(shù)據(jù)類型、運算符和表達(dá)式,2.3.1 數(shù)據(jù)類型 (1)預(yù)定義數(shù)據(jù)類型(基本數(shù)據(jù)類型)。包括布爾型(bool)、字符型、整型、浮點型、無值型四種,其中浮點型又分為單精度浮點型和雙精度浮點型兩種。 (2)構(gòu)造數(shù)據(jù)類型,包括數(shù)組、結(jié)構(gòu)體、共用體(聯(lián)合)、枚舉、類等。 本節(jié)重點介紹C+的基本數(shù)據(jù)類型,有關(guān)構(gòu)造數(shù)據(jù)類型將在后面章節(jié)進(jìn)行介紹。,33, 基本數(shù)據(jù)類型,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,34, 類型修飾符 C+還允許在基本數(shù)據(jù)類型(除void類型外)前加上類型修飾符,來更具體地表示數(shù)據(jù)類型。C+的類型修飾符包括: signed 有符號 unsig

26、ned無符號 short短型 long長型,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,35,表2.2 C+的基本數(shù)據(jù)類型,36,表2.2 C+的基本數(shù)據(jù)類型,37,說明: (1)表中帶 的部分表示是可以省略的,如short int可以寫為short int 或簡寫為short,二者的含義是相同的。 (2)四種修飾符都可以用來修飾整型和字符型。用signed修飾的類型的值可以為正數(shù)或負(fù)數(shù),用unsigned修飾的類型的值只能為正數(shù)。 (3)ANSI C和ANSI C+標(biāo)準(zhǔn)中并沒有具體規(guī)定各種數(shù)據(jù)類型的“數(shù)據(jù)長度”,只要求long型的數(shù)據(jù)長度不短于int型,short型不長于int型。只要遵循標(biāo)準(zhǔn)所給

27、出的這些原則,具體如何實現(xiàn)由各種語言系統(tǒng)自行決定。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,38,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式, 常量 在C+語言中,數(shù)據(jù)分為常量和變量兩大類。 由于程序中的數(shù)據(jù)是有類型的,所以常量和變量都是有類型之分的。 常量按照不同的數(shù)據(jù)類型可以分為: 字符型常量、整型常量、浮點型常量,以及字符串常量等。 程序是根據(jù)程序中常量的書寫格式來區(qū)分它是哪種類型常量的。,39,1.整型常量 在程序中書寫整型常量時,沒有小數(shù)部分。用戶可根據(jù)需要分別可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制的形式書寫: 十進(jìn)制格式 :由數(shù)字0至9和正、負(fù)號組成,書寫時直接寫出數(shù)字,如:123,

28、-516,+1000等。 八進(jìn)制格式 :以數(shù)字0開頭的數(shù)字(0至7)序列,0111,010007,0177777等。 十六進(jìn)制格式 :以0 x或0X開頭的數(shù)字(數(shù)字0至9、字母a至z)序列,如0 x78AC,0 xFFFF等。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,40,2.浮點型常量 只能用十進(jìn)制來表示??梢杂眯?shù)或指數(shù)形式表示(缺省為double)。如:34.5f, .345, 1.5e-3 3.字符型常量 (1)用一對單引號括起來的一個字符,單引號只是字符與其他部分的分割符,不是字符的一部分,并且,不能用雙引號代替單引號。在單引號中的字符不能是單引號或反斜杠。如: a , A, # 合法

29、的字符常量 , 非法的字符常量/可以 , “A” 不代表字符常量/為字符串常量 (2)另一種表示字符常量的方法是使用轉(zhuǎn)義字符。C+規(guī)定,采用反斜杠后跟一個字母來代表一個控制字符,具有新的含義 。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,41,C+中常用的轉(zhuǎn)義字符 /例 轉(zhuǎn)義字符例.cpp,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,42,4.字符串常量 用一對雙引號括起來的一個或多個字符的序列稱為字符串常量或字符串。字符串以雙引號為定界符,雙引號不作為字符串的一部分。如: “Hello”, “Good Morning!” ,“I say: “ Goodbye!” 字符串中的字符數(shù)稱為該字符串的長度,在

30、存儲時,系統(tǒng)自動在字符串的末尾加以字符串結(jié)束標(biāo)志,即轉(zhuǎn)義字符 0。/可以“hello0” /串比較的錯誤方式.cpp 5.符號常量 常量也可用一個標(biāo)識符來代表,稱為符號常量。如: #define PRICE 30 void main(void) ,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,43,使用符號常量應(yīng)注意以下幾個方面: (1)它不同于變量,在作用域內(nèi)其值不能改變和賦值。 如:在上例中如再用PRICE=40;這一語句進(jìn)行賦值則是錯誤的。 (2)符號常量名一般用大寫,而變量名用小寫,以示區(qū)別。 6. 程序中常量的表示方法 在程序中的常量有以下三種表示方法: (1)在程序中直接寫入常量 如:-2

31、00,3.4E-10,A,1,0 x120,045,5.35,1000l int i; char s; float f; i=20; s=a; f=2.0F;,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,44,(2)利用#define定義宏常量 一般格式: #define 宏名 常數(shù) 如:#define PI 3.14 s=2*PI*r; (3)利用const定義正規(guī)常數(shù) 一般格式:const數(shù)據(jù)類型標(biāo)識符 常數(shù)名=常量值; 說明: const必須放在被修飾類型符和類型名前面 數(shù)據(jù)類型是一個可選項,用來指定常數(shù)值的數(shù)據(jù)類型,如果省略了該數(shù)據(jù)類型,那么編譯程序認(rèn)為它是 int 類型,1.3 C+數(shù)據(jù)類

32、型、運算符和表達(dá)式,45,如:const int a=10; 表示定義了一個初始值為10的整型常量,它在程序中不可改變,但可用于表達(dá)式的計算中. /const面試題1.cpp const面試題2.cpp 變量 1變量的概念及特點 每一變量就相當(dāng)于一個容器,對應(yīng)著計算機(jī)內(nèi)存中的某一塊存儲單元,用于存儲程序中的數(shù)據(jù)。變量的值具有以下兩個特點: (1)“一充即無”:即將一個新數(shù)據(jù)存放到一個變量中時,該變量中原來的值消失,變量的值變成了新值。 如:執(zhí)行完語句int i; i=10; i=20;后i的值為20,而不是10。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,46,(2)“取之不盡”:

33、可將某個變量的值與程序中的其它數(shù)據(jù)進(jìn)行各種運算,在運算過程中,如果沒有改變該變量的值時,那么,不管用該變量的值進(jìn)行多少次運算,其值始終保持不變。 如:語句int i,j,k; i=10; j=i+10; k=i+j*5;其中,i的值可無限制地多次使用,但它的值始終保持值10,因為在程序中沒有改變變量i的值。 2定義變量 程序中的每一變量,都要先定義,后使用。 定義變量的一般有以下三種格式: 數(shù)據(jù)類型標(biāo)識符 變量名; 數(shù)據(jù)類型標(biāo)識符 變量名=初始化值;,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,47,數(shù)據(jù)類型標(biāo)識符 變量名1=初始值1,變量名2=初始值2,; 如: char a; /定義字符型變量a

34、 int i=1000; /定義整型變量i,i的初始值為1000; float a=2.0,b=3.0,c; /定義浮點型變量 a、b、c,且a、b的 初始值分別為2、3。 變量名是每個變量的名稱,其命名遵循以下規(guī)則: (1)由字母、數(shù)字和下劃線(_)三類符號排列組合形成,且開頭字符必須是字母或下劃線。 (2)名稱中字符的最大個數(shù)是31個。 (3)C+中區(qū)分變量名的大小寫。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,48,(4)變量名不能和C+中的關(guān)鍵字同名,也不能和用戶編制的函數(shù)或C+庫函數(shù)同名。如:int, double或static都不能作為變量名。 (5)變量名盡量做到“見名知意”。 3定

35、義變量的位置 在程序中的不同位置采用不同的變量定義方式,決定了該變量具有不同的特點。變量的定義一般可有以下三種位置: (1)在函數(shù)體內(nèi)部 在函數(shù)體內(nèi)部定義的變量稱為局部變量,這種局部變量只在進(jìn)入定義它的函數(shù)體時起作用,離開該函數(shù)體后該變量就消失(被釋放),即不再起作用。因此,不同函數(shù)體內(nèi)部可以定義相同名稱的變量,而互不干擾。如:,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,49,void func1(void) int y; y=2; void func2(void) int y; y=-100; 在本例中,函數(shù)func1和func2的函數(shù)體內(nèi)部都分別定義了變量y,但它們都只能在各自的函數(shù)體內(nèi)起作用

36、,都是局部變量。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,50,(2)形式參數(shù) 當(dāng)定義一個有參函數(shù)時,函數(shù)名后面括號內(nèi)的變量,統(tǒng)稱為形式參數(shù)。如: int is_in(char *a, char b) while(*a) if (*a=b) return 1; else a+; return 0; 本例中,函數(shù)名is_in后面括號內(nèi)的變量a和b是該函數(shù)的形式參數(shù),它們都只能在該函數(shù)體內(nèi)起作用,是該函數(shù)的局部變量。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,51,(3)全局變量:在所有函數(shù)體外部定義的變量,其作用范圍是整個程序,并在整個程序運行期間有效。如: #include “stdio.h” in

37、t count; /定義count變量是全局變量 void func1(void); void func2(void); int main() count=10; func1(); return 0; ,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,52,void func1(void) int temp; temp=count; func2(); printf(“count is %d”, count); / /輸出10 void func2(void) int count; for(count=1;count10;count+) putchar(.); /賦值語句面試題2.cpp,1.3 C+數(shù)據(jù)

38、類型、運算符和表達(dá)式,53,1.3.2 運算符和表達(dá)式 程序中對數(shù)據(jù)進(jìn)行的各種運算是由運算符來決定的,不同運算符的運算方法和特點是不同的,從此可以看出,一個運算式子中要涉及到數(shù)據(jù)及運算符,而運算符是對數(shù)據(jù)進(jìn)行指定操作,并產(chǎn)生新值的特殊符號。 算術(shù)運算符和算術(shù)表達(dá)式 算術(shù)運算符就是對數(shù)據(jù)進(jìn)行算術(shù)運算,如:加、減、乘、除等,是在程序中使用最多的一種運算符,C+的算術(shù)運算符如表2.4所示。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,54,表2.4 C+的算術(shù)運算符,算術(shù)表達(dá)式是指由算術(shù)運算符、括號將常量、變量、函數(shù)、圓括號等連接形成的一個有意義的式子。如:,55,(1+x)/(3*x)

39、(2*x-3)*x+2)*x)-5 3.14*sqrt(r) b*b-4.0*a*c 注意: (1)表達(dá)式中的括號不管有多少層,一律使用圓括號。 (2)在將一個數(shù)學(xué)上的運算式子寫成對應(yīng)的C+的表達(dá)式時,要注意進(jìn)行必要的轉(zhuǎn)換。 乘號不能省略。 數(shù)學(xué)表達(dá)式中出現(xiàn)的數(shù)學(xué)運算函數(shù)要用C+提供的對應(yīng)的數(shù)學(xué)運算庫函數(shù)來代替。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,56, 要特別注意表達(dá)式中兩個整型數(shù)相除的情況。如:有一數(shù)學(xué)表達(dá)式為2/3(f-32),要寫成對應(yīng)的C+的表達(dá)式時,正確地寫法應(yīng)寫2.0/3.0*(f-32)。而不是2/3*(f-32) (5/2得到結(jié)果2,5.0/2.0得到結(jié)果2.5) 2.3

40、.2.2 賦值運算符和賦值表達(dá)式 賦值運算符的功能將某個數(shù)據(jù)的值賦給某個變量。賦值運算符的用法格式: 變量名 賦值運算符 常量、變量或表達(dá)式 說明: (1)被賦值的目標(biāo),即賦值運算符左邊的量必須是變量,而不能是常量或表達(dá)式。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,57,(2)C+中的賦值運算符如表2.5所示。 (3)要注意區(qū)分賦值運算符“=”與數(shù)學(xué)上的“等號”間的區(qū)別,如: int x,y; /定義變量x,y為int類型變量 x=10; /將變量x賦成值10,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,58,x=x+20; /將x的值在原值(10)的基礎(chǔ)上再加上值20后(結(jié)果為30)賦給變量x y-

41、=x+5; /等價于y=y-(x+5) x%=y+10; /等價于x=x%(y+10) (4) 前增/減運算是變量的值先自增1或自減1,然后以該變量自增或自減后的值參加其它運算;后增/減運算是該變量先以原來的值參加其它運算,然后再自增1或自減1;增減量運算符只能用于變量,不能用于常量和表達(dá)式。 如:7+;(i+j)+; /error,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,59,(5)對表達(dá)式x+y的理解:是(x+)+y還是x+(+y)? C+規(guī)定,處理時從左至右取盡可能多的“+”或“-”號字符組成一個運算符,將解釋為(x+)+y。編程者最好采用便于閱讀和理解的寫法,寫成(x+)+y的形式。 /

42、i+面試題2.cpp i+面試題3.cpp i+面試題4.cpp (6)在ANSI C中,增量運算符“+”和減量運算符“-”只能用于整型量,而在ANSI C+中,這兩個運算符對整型和浮點型均可使用。 sizeof運算符 sizeof運算符功能是求某一數(shù)據(jù)類型或某一變量在內(nèi)存中所占空間的字節(jié)數(shù)。其使用的一般形式: sizeof(變量名或數(shù)據(jù)類型)或sizeof 變量名或數(shù)據(jù)類型 如:,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,60,#include void main() short int aShort; int anInt; long aLong; char aChar; flo

43、at aReal; coutdata typetmemory used(bytes); coutnshort inttsizeof(aShort); coutninteger tsizeof(anInt); coutnLong integertsizeof(aLong); coutnchar achart sizeof(aChar); coutnfloat tsizeof(aReal); ,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,61,其輸出結(jié)果為: data type memory used(bytes) short int 2 integer 4 Long integer 4 char ac

44、har 1 float 4 /sizeof面試題1.cpp 關(guān)系運算符和關(guān)系表達(dá)式 關(guān)系運算符就是對兩個量之間進(jìn)行比較的運算符,如表2.6所示。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,62,由關(guān)系運算符將兩個表達(dá)式連接形成的運算式子是關(guān)系表達(dá)式,一個關(guān)系表達(dá)式的值是一個邏輯值,當(dāng)為真時,值為1,為假時,值為0。 如:假設(shè)a=1,b=20,c=3,則 ab表達(dá)式成立,其值為1 b=c表達(dá)式不成立,其值為0 (a+b)!=c表達(dá)式成立,其值為1,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,63,注意: 在對兩個表達(dá)式的值進(jìn)行是否相等的比較時,要用運算符“=”,而不能寫成“=”。 2.3.

45、2.5 邏輯運算符和邏輯表達(dá)式 邏輯運算符是對兩個邏輯量間進(jìn)行運算的運算符,如表2.7所示。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,64,由邏輯運算符將兩個表達(dá)式連接形成的式子叫邏輯表達(dá)式。各種邏輯運算的“真值表”如表2.8所示。對于參加邏輯運算的操作數(shù),系統(tǒng)認(rèn)為“非0”為真,“0”為假。而邏輯表達(dá)式的結(jié)果只能為邏輯真(1)或邏輯假(0)。 表2.8 邏輯運算真值表,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,65,注意: (1)C或C+中在給出一個邏輯表達(dá)式的最終計算結(jié)果值時,用1表示真,用0表示假。但在進(jìn)行邏輯運算的過程中,凡是遇到非零值時就當(dāng)真值參加運算,遇到0值時就當(dāng)假值參加運算。如:int

46、 a=10,b=15,c=14; 則(a+6)則表達(dá)式i 則表達(dá)式i+|i+|i+的值為1(真),運算結(jié)束后,變量i的值為2,而不是4。 對于數(shù)學(xué)上的表示多個數(shù)據(jù)間進(jìn)行比較的表達(dá)式,在C或C+中要拆寫成多個條件并用邏輯運算符連接形成一個邏輯表達(dá)式。如:在數(shù)學(xué)上,要表示一個變量a的值處于-1和-9之間時,可以用-9-9 float a,b; a=float(i);/將變量i的類型強制轉(zhuǎn)換為浮點型,并將/其值賦給變量a,C不允許這樣寫(編譯錯誤)。 b=(float)i;/將變量i的類型強制轉(zhuǎn)換為浮點型,并將/其值賦給變量b,但變量i的值沒變! 關(guān)于自動(隱式(implicit)類型)類型轉(zhuǎn)換:

47、這種類型的轉(zhuǎn)換是在執(zhí)行表達(dá)式中的運算符操作時,自動進(jìn)行的一種轉(zhuǎn)換。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,72,低高 long double 高 int unsigned long unsigned long double | | short,char float 低 數(shù)據(jù)類型的轉(zhuǎn)換方向 說明:水平方向的箭頭表示運算的變量為不同的數(shù)據(jù)類型時的轉(zhuǎn)換的方向。 如一個int型和一個float型數(shù)據(jù)進(jìn)行運算時,由于float型首先轉(zhuǎn)換成double型,因此把int的數(shù)據(jù)也轉(zhuǎn)換成double型,然后再運算,計算結(jié)果也是double型。這里的箭頭只表示數(shù)據(jù)類型級別的高低,不是指數(shù)據(jù)實際轉(zhuǎn)換的步驟,不能把i

48、nt型轉(zhuǎn)換成double型理解為int型先轉(zhuǎn)換成unsigned,再轉(zhuǎn)換為long型,再轉(zhuǎn)換成unsigned long型,最后才轉(zhuǎn)換成double型,實際上是把int型數(shù)據(jù)直接轉(zhuǎn)換成double型。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,73,縱向箭頭表示必定的類型轉(zhuǎn)換。如字符型必定先轉(zhuǎn)換成整數(shù)型,short型也必定轉(zhuǎn)換為int型。如兩個float型數(shù)據(jù)進(jìn)行算術(shù)運算時,為了提高運算精度,先都轉(zhuǎn)換成double型后再進(jìn)行運算。 當(dāng)不同數(shù)據(jù)類型的變量同時出現(xiàn)在一個表達(dá)式時,將實現(xiàn)“隱式類型轉(zhuǎn)換”。它是在數(shù)據(jù)運算過程中自動進(jìn)行的類型轉(zhuǎn)換,即把它們轉(zhuǎn)變成同一類型的變量再進(jìn)行運算。 在賦值語句中,當(dāng)左

49、值和右值的數(shù)據(jù)類型不同時,首先將右值類型自動轉(zhuǎn)換成左值的類型(向左看齊),然后再賦值給左值。 /類型轉(zhuǎn)換面試題.cpp,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,74, 逗號運算符 逗號運算符的運算優(yōu)先級是最低的。一般形式為: 表達(dá)式1,表達(dá)式2,表達(dá)式N 在計算逗號表達(dá)式的值時,按從左至右的順序依次分別計算各個表達(dá)式的值,而整個逗號表達(dá)式的值和類型是由最右邊的表達(dá)式?jīng)Q定。 如:有語句int a=3,b=4;則表達(dá)式a+,b+,a+b的值為9。 再如:設(shè)有int i;則表達(dá)式i=1,i+= =2?i+1:i+4的值為6。 0 運算符的優(yōu)先級與結(jié)合性 每個運算符都有自己優(yōu)

50、先級和結(jié)合性。當(dāng)一個表達(dá)式中包含多個運算符時,要確定運算的結(jié)果,必須首先確定運算的先后順序,即運算符的優(yōu)先級和結(jié)合性。C+中運算符的優(yōu)先級和結(jié)合性如表2.11所示。,1.3 C+數(shù)據(jù)類型、運算符和表達(dá)式,75,表2.11 C+中運算符的優(yōu)先級和結(jié)合性,76,1.4 數(shù)據(jù)的輸入與輸出,在C+語言中,數(shù)據(jù)的輸入和結(jié)果的輸出是分別使用系統(tǒng)所提供的輸入流對象cin和輸出流對象cout來完成的。在使用過程中,只要在程序的開頭嵌入相應(yīng)的頭文件“iostream.h”即可。 1.4.1 數(shù)據(jù)的輸出cout 輸出流對象輸出數(shù)據(jù)的語句格式為: cout數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)n; 說明: (1)cout是系統(tǒng)預(yù)定義的一

51、個標(biāo)準(zhǔn)輸出設(shè)備(一般代表顯示器);“”是輸出操作符(插入符),用于向cout輸出流中插入數(shù)據(jù)。 (2)cout的作用是向標(biāo)準(zhǔn)輸出設(shè)備上輸出數(shù)據(jù),被輸出的數(shù)據(jù)可以是常量、已有值的變量或是一個表達(dá)式。,77,如: #include #include void main() float a=3,b=4; cout The result is :; coutsqrt(a*a+b*b); 該程序的輸出結(jié)果為:The result is :5 (3)可以在cout輸出流中插入C+中的轉(zhuǎn)義字符。如: cout the value of a:n; couta;,2.4 數(shù)據(jù)的輸入與輸出,78,表示輸出完字符串

52、Input the value of a:后,在下一行輸出變量a的值。 (4)可以將多個被輸出的數(shù)據(jù)寫在一個cout中,各輸出項間用“”操作符隔開即可,但要注意cout首先按從右向左的順序計算出各輸出項的值,然后再輸出各項的值。如:cout value of a:a value of b:b The result is : sqrt(a*a+b*b); 再如:設(shè)變量i的值為10,則couti,i+,i+;的輸出結(jié)果為:12,11,10 (5)一個cout語句也可拆成若干行書寫,但注意語句結(jié)束符“;”只能寫在最后一行上。如:對于上面的語句也可寫成如下形式:,2.4 數(shù)據(jù)的輸入與輸出,79,cou

53、t value of a: /注意行末無分號 a value of b: b The result is : sqrt(a*a+b*b); /在此處書寫分號 (6)在cout中,實現(xiàn)輸出數(shù)據(jù)換行功能的方法:既可使用轉(zhuǎn)義字符“n”,也可使用表示行結(jié)束的流操作子endl。如: coutThis is first Line.nThis is second line. ; 上面語句可等價地寫為: coutThis is first Line.endlThis is second line. ;,2.4 數(shù)據(jù)的輸入與輸出,80,(7)在cout中還可以使用流控制符控制數(shù)據(jù)的輸出格式,但使用這些流控制符時

54、,要在程序的頭上嵌入頭文件#include 。常用的流控制符及其功能如表2.12所示。 表2.12 I/O流的常用控制符,2.4 數(shù)據(jù)的輸入與輸出,81,2.4 數(shù)據(jù)的輸入與輸出,82,2.4 數(shù)據(jù)的輸入與輸出, 設(shè)置域?qū)挘核^域?qū)捑褪潜惠敵鰯?shù)據(jù)所占的輸出寬度(單位是字符數(shù))。設(shè)置域?qū)捒梢允褂昧骺刂品鹲etw(n)和cout的方法cout.width(n) 其中n為正整數(shù),表示域?qū)挕5牵?cout.width(n)和setw(n)二者都只對下一個被輸出的數(shù)據(jù)有作用,若一個輸出語句內(nèi)有多個被輸出的數(shù)據(jù),而要保持一定格式域?qū)挄r,需要在每一輸出數(shù)據(jù)前加上cout.width(n)或setw(n)。

55、 此外,當(dāng)參數(shù)n的值比實際被輸出數(shù)據(jù)的寬度大時,則在給定的域?qū)拑?nèi),數(shù)據(jù)靠右輸出,不足部分自動填充空格符;若被輸出數(shù)據(jù)的實際寬度比n值大時,則數(shù)據(jù)所占的實際位數(shù)輸出數(shù)據(jù),設(shè)置域?qū)挼膮?shù)n不再起作用。,83,【例2-2】cout流控制符setw的使用。 #include #include void main() int a=21,b=999; coutsetw(3)asetw(4)asetw(5)aendl; coutsetw(3)bsetw(4)bsetw(5)bendl; coutsetw(3)a+bsetw(4)a+bsetw(5)a+bendl; 其輸出結(jié)果是: 21 21 21 /程序中

56、第一個cout的輸出結(jié)果 999999 999 /程序中第二個cout的輸出結(jié)果 102010201020 /程序中第三個cout的輸出結(jié)果,2.4 數(shù)據(jù)的輸入與輸出,84, 設(shè)置域內(nèi)填充字符:在默認(rèn)情況下,當(dāng)被輸出的數(shù)據(jù)未占滿域?qū)挄r,會自動在域內(nèi)靠左邊填充相應(yīng)個數(shù)的空格符。但我們也可以設(shè)置在域內(nèi)填充其他的字符,方法是利用cout的fill方法cout.fill(c)或setfill(c)。 cout.fill(c)和 setfill(c)可以對所有被輸出的數(shù)據(jù)起作用。 【例2-3】 在例2-2的基礎(chǔ)上增加域內(nèi)填充字符的功能。 #include “iostream.h” #include “i

57、omanip.h” void main() int a=21,b=999; cout.fill(#); /設(shè)置域內(nèi)填充字符為#字符 coutsetw(3)asetw(4)asetw(5)aendl;,2.4 數(shù)據(jù)的輸入與輸出,85,coutsetw(3)bsetw(4)bsetw(5)bendl; cout.fill(%); /將域內(nèi)填充字符改為%字符 coutsetw(3)a+bsetw(4)a+bsetw(5)a+bendl; 其輸出結(jié)果是: #21#21#21 /程序中第一個cout的輸出結(jié)果,未占 滿域?qū)挼牟糠痔畛?字符。 999#999#999 /程序中第二個cout的輸出結(jié)果 10201020%1020 /程序中第三

溫馨提示

  • 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

提交評論