




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言C+,Welcome to learn C+ ! 講授:劉韶濤 副教授 E-mail:,2,第一部分 C+語(yǔ)言基礎(chǔ),本部分是學(xué)習(xí)C+語(yǔ)言的基礎(chǔ),包括以下幾個(gè)方面: 1. C+概述 2. 結(jié)構(gòu)化程序設(shè)計(jì)方法與面向?qū)ο蟪绦蛟O(shè)計(jì)方法的各自特點(diǎn)、區(qū)別和相互聯(lián)系。 3面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中的有關(guān)概念,如類、對(duì)象、封裝、繼承、消息和多態(tài)性等。 4C+程序的基本組成和框架結(jié)構(gòu)。 5掌握C+語(yǔ)言中的基本數(shù)據(jù)類型、各種運(yùn)算符、表達(dá)式。 6C+數(shù)據(jù)輸入流對(duì)象cin和輸出流對(duì)象cout的使用。 7程序的3種基本結(jié)構(gòu) 8構(gòu)造數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)體、指針等的定義方法、特點(diǎn)和使用方法。 9函
2、數(shù)的定義、調(diào)用及函數(shù)調(diào)用過程中的參數(shù)傳遞的機(jī)理和程序執(zhí)行流程。 10引用的概念及其定義和使用方法。,3,1.1 C+概述,1.1.1 計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu) 應(yīng)用軟件 通 處 理 工 用 作 具 軟 言 系 系 軟 件 語(yǔ) 操 裸機(jī) 統(tǒng) 統(tǒng) 件 計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu)圖,4,1.1 C+概述,1.1.1 計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu) 任何計(jì)算機(jī)系統(tǒng)都必須包含硬件和在其上運(yùn)行的軟件。計(jì)算機(jī)硬件必須有軟件的支持才能有效地運(yùn)轉(zhuǎn)并為人們所利用。計(jì)算機(jī)硬件系統(tǒng)一般由處理器(控制器和運(yùn)算器)、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備等部分組成。一般來講,人們認(rèn)為軟件系統(tǒng)由系統(tǒng)軟件和應(yīng)用軟件兩部分組成。我們從系統(tǒng)層次的角度,可以把軟
3、件分為:,(1)操作系統(tǒng)(OS,Operating System) 它是計(jì)算機(jī)軟件的核心,是硬件的第一級(jí)擴(kuò)充。在它的控制下,計(jì)算機(jī)的全部資源,如CPU、內(nèi)存、外部設(shè)備(CRT、打印機(jī),掃描儀、光盤機(jī)等)和各種軟件資源可以協(xié)調(diào)一致地工作。它可以有條不紊、高效率地管理和調(diào)度計(jì)算機(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)語(yǔ)言處理系統(tǒng) 其主要的核心部分是程序設(shè)計(jì)
4、語(yǔ)言的編譯系統(tǒng)。程序設(shè)計(jì)語(yǔ)言是從事計(jì)算機(jī)的技術(shù)人員,特別是軟件編寫者不可缺少的編程工具,是“駕駛”計(jì)算機(jī)運(yùn)行的“方向盤”。,目前世界上經(jīng)設(shè)計(jì)和實(shí)現(xiàn)的程序設(shè)計(jì)語(yǔ)言有上千種之多。大致可分為兩大類,一類是因計(jì)算機(jī)中央處理器(CPU)不同而異的匯編語(yǔ)言,另一類是通用的程序設(shè)計(jì)語(yǔ)言。前者稱為低級(jí)語(yǔ)言,后者稱為高級(jí)語(yǔ)言。說匯編語(yǔ)言是一種低級(jí)語(yǔ)言,是因?yàn)橛?jì)算機(jī)硬件是最低層的,而隸屬于語(yǔ)言處理系統(tǒng)的匯編語(yǔ)言最接近于硬件,它是在機(jī)器碼語(yǔ)言的基礎(chǔ)上直接發(fā)展起來的一種面向機(jī)器的低級(jí)語(yǔ)言,它的每一條指令與機(jī)器碼語(yǔ)言的指令保持著一一對(duì)應(yīng)的關(guān)系,可方便地對(duì)硬件實(shí)現(xiàn)控制和操作,能充分發(fā)揮硬件的潛力,且用匯編語(yǔ)言編寫的程序與
5、高級(jí)語(yǔ)言相比執(zhí)行速度最快。,6,1.1 C+概述,從計(jì)算機(jī)的根本原理來說,計(jì)算機(jī)只能理解和執(zhí)行一系列二進(jìn)制指令碼,即由數(shù)字0和1的不同排列組合而成的二進(jìn)制碼對(duì)應(yīng)不同操作的指令,這就是通常所說的“機(jī)器碼指令”。用上述各 種語(yǔ)言(包括匯編語(yǔ)言在內(nèi))編寫的程序稱為“源程序(Source Program)”,源程序不能直接在計(jì)算機(jī)上運(yùn)行,而必須經(jīng)過語(yǔ)言處理系統(tǒng)進(jìn)行“翻譯”加工,轉(zhuǎn)換成機(jī)器碼指令后才能執(zhí)行。常用的語(yǔ)言有:古典語(yǔ)言(Fortran、Pascal、Cobol,Basic等)、人工智能語(yǔ)言(LISP,PROLOG等)以及現(xiàn)代的語(yǔ)言(C/C+,JAVA,Delphi,Powerbuilder,C
6、#等)。,7,1.1 C+概述,關(guān)于C和C+ C是最靠近機(jī)器的通用程序設(shè)計(jì)語(yǔ)言。在最初設(shè)計(jì)時(shí)是作為一種面向系統(tǒng)軟件(操作系統(tǒng)和語(yǔ)言處理系統(tǒng))的開發(fā)語(yǔ)言,即用來代替匯編語(yǔ)言的,但是由于它具有強(qiáng)大的生命力,因而在事務(wù)處理、科學(xué)計(jì)算、工業(yè)控制和數(shù)據(jù)庫(kù)技術(shù)等各個(gè)方面都得到了廣泛的應(yīng)用。即使進(jìn)入到以計(jì)算機(jī)網(wǎng)絡(luò)為核心的信息時(shí)代,C語(yǔ)言仍然是作為通用的匯編語(yǔ)言使用,用于開發(fā)軟(件)、硬(件)結(jié)合的程序,如實(shí)時(shí)監(jiān)控程序、系統(tǒng)控制程序和設(shè)備驅(qū)動(dòng)程序等。 C+是C的面向?qū)ο髷U(kuò)展,是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的一個(gè)大眾化版本,是當(dāng)前學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的首選語(yǔ)言。C+是C的超集,它保留了C的所有組成部分并與其完全兼容
7、,既可以做傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì),又能進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì),是當(dāng)今世界最為流行的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。大大型應(yīng)用軟件開發(fā)上,以Windows開發(fā)環(huán)境為操作平臺(tái)的C+類庫(kù)和組件正在迅猛發(fā)展,C+即將取代C已是不可抗拒的事實(shí),它的觸角幾乎已觸及到計(jì)算機(jī)研究和應(yīng)用的各個(gè)領(lǐng)域。完全遵循美國(guó)國(guó)家標(biāo)準(zhǔn)化組織制定的ANSI C+標(biāo)準(zhǔn),目前廣泛流行在微型計(jì)算機(jī)上使用的C+產(chǎn)品,有美國(guó)Microsoft公司推出的、以Windows開發(fā)環(huán)境為操作系統(tǒng)平臺(tái)的Visual C+,還有美國(guó)Borland公司開發(fā)的C+ Builder等。,8,1.1 C+概述,(3)通用軟件 通用軟件可分為如下幾組: (a)數(shù)據(jù)處理類軟件
8、:進(jìn)行數(shù)值計(jì)算(行列式、矩陣、復(fù)變函數(shù)等計(jì)算)、統(tǒng)計(jì)分析、數(shù)學(xué)表達(dá)式分析計(jì)算以及模擬處理的程序等。 (b)進(jìn)行聲音、圖形、圖像和動(dòng)畫等多媒體信息處理的程序。 (c)有關(guān)自然語(yǔ)言處理、模式識(shí)別、神經(jīng)網(wǎng)絡(luò)和專家系統(tǒng)等人工智能方面的應(yīng)用程序。 (d)計(jì)算機(jī)輔助設(shè)計(jì)與制造(CAD/CAM)、計(jì)算機(jī)輔助教學(xué)(CAI)、計(jì)算機(jī)輔助分析以及決策支持系統(tǒng)等方面的通用程序。 (4)應(yīng)用軟件 除通用軟件以外的各種應(yīng)用程序統(tǒng)稱為應(yīng)用軟件。當(dāng)前從事應(yīng)用軟件的開發(fā)是各類計(jì)算機(jī)應(yīng)用專業(yè)技術(shù)人員的大舞臺(tái),這些技術(shù)人員既具有扎實(shí)的本專業(yè)知識(shí),又掌握了計(jì)算機(jī)的應(yīng)用知識(shí),很善于把計(jì)算機(jī)當(dāng)作工具來完成本應(yīng)用領(lǐng)域中的各種任務(wù)。應(yīng)用領(lǐng)
9、域大致可劃分為:科學(xué)計(jì)算,如天文、氣象等大型計(jì)算任務(wù);辦公自動(dòng)化(OA-Office Automation),如Office 2000;數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,如FoxPro、Sybase和Oracle等;工業(yè)控制領(lǐng)域,產(chǎn)品如Intouch等。,9,1.1 C+概述,(5)工具軟件 是為協(xié)助用戶更方便地使用計(jì)算機(jī)完成開發(fā)任務(wù)而研制,并集多種功能于一體地支程序軟件包。如PC Tools、FrontPage 2000、Cutftp等等。,10,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),1.2.1 傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)(Structured Programming-SP)方法 1使用SP方法設(shè)計(jì)程序
10、的步驟 在數(shù)據(jù)處理過程中,采用的是自頂向下、分而治之的方法,將整個(gè)程序按功能劃分為幾個(gè)可獨(dú)立編程的子過程模塊,每一子模塊完成指定的子任務(wù),并且提供一個(gè)清晰、嚴(yán)格的調(diào)用界面,主過程通過調(diào)用各子過程完來成全部處理工作 。,11,2SP方法的特點(diǎn) 優(yōu)點(diǎn): (1)這種程序設(shè)計(jì)方法力求算法描述準(zhǔn)確。 (2)對(duì)每一子過程模塊容易進(jìn)行程序正確性證明。 缺點(diǎn): (1)這種程序設(shè)計(jì)方法本質(zhì)上是面向“過程”的,而“過程”和“操作”又是不穩(wěn)定和多變的,因此不能直接反映人類求解問題的思路。 (2)程序代碼可重用性差。程序中除少數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)外,每設(shè)計(jì)一個(gè)程序時(shí),程序員幾乎從零做起。即使重用代碼,通常也是通過拷貝或編輯重
11、新生成一份。 (3)維護(hù)程序的一致性困難。該種方法將數(shù)據(jù)與對(duì)數(shù)據(jù)進(jìn)行處理的程序代碼分離。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),12,1.2.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)(Object-Oriented Programming -OOP)方法 1. 面向?qū)ο蟮挠嘘P(guān)概念 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法強(qiáng)調(diào)直接以問題域(現(xiàn)實(shí)世界)中的事物為中心來思考和認(rèn)識(shí)問題,并按照這些事物的本質(zhì)特征把它們抽象為對(duì)象,以作為構(gòu)成軟件系統(tǒng)的基礎(chǔ)。 (1)對(duì)象(Object):每個(gè)對(duì)象都具有屬性(Attribute)和方法(Method)這兩方面的特征。對(duì)象的屬性描述了對(duì)象的狀態(tài)和特征,對(duì)象的方法說明了對(duì)象的行為和功能
12、,并且對(duì)象的屬性值只應(yīng)由這個(gè)對(duì)象的方法來讀取和修改,兩者結(jié)合在一起就構(gòu)成了對(duì)象的完整描述。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),13,(2)類(Class):具有相似屬性和行為的一組對(duì)象,就稱為類??梢姡辛祟惖母拍钜院?,就可以對(duì)具有共同特征的事物進(jìn)行統(tǒng)一描述。 (3)封裝(Encapsulation):封裝把對(duì)象的屬性和方法看成了一個(gè)密不可分的整體,從而使對(duì)象能夠完整地描述并對(duì)應(yīng)于一個(gè)具體事物 。 (4)繼承(Inheritance):將客觀事物進(jìn)行歸類是一個(gè)逐步抽象的過程,反之,將類進(jìn)行層層分類便是一個(gè)概念逐漸細(xì)化的過程。 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,允許在已有類的基礎(chǔ)上通過增加
13、新特征而派生出新的類,這稱為繼承。其原有的類稱為基類(base class),而新建立的類稱為派生類(derived class)。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),14,(5)消息(Message):在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,由于對(duì)象描述了客觀實(shí)體,它們之間的聯(lián)系通過對(duì)象間的聯(lián)系來反映。當(dāng)一個(gè)對(duì)象需要另外一個(gè)對(duì)象提供服務(wù)時(shí),它向?qū)Ψ桨l(fā)出一個(gè)服務(wù)請(qǐng)求,而收到請(qǐng)求的對(duì)象會(huì)響應(yīng)這個(gè)請(qǐng)求并完成指定的服務(wù)。這種向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求就稱為消息。 (6)多態(tài)性(Polymorphism):多態(tài)性是面向?qū)ο蟮牧硪恢匾卣?。在通過繼承而派生出的一系列類中,可能存在一些名稱相同,但實(shí)現(xiàn)過程和功能
14、不同的方法(Method)。 所謂多態(tài)性是指當(dāng)程序中的其他部分發(fā)出同樣的消息時(shí),按照接收消息對(duì)象的不同能夠自動(dòng)執(zhí)行類中相應(yīng)的方法。其好處是,用戶不必知道某個(gè)對(duì)象所屬的類就可以執(zhí)行多態(tài)行為,從而為程序設(shè)計(jì)帶來更大方便。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),15,2. 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(OOP方法) 這種方法將設(shè)計(jì)目標(biāo)從模擬現(xiàn)實(shí)世界的行為轉(zhuǎn)向了模擬現(xiàn)實(shí)世界中存在的對(duì)象及其各自的行為。 在OOP中,將“對(duì)象”作為系統(tǒng)中最基本的運(yùn)行實(shí)體,整個(gè)程序即由各種不同類型的對(duì)象組成,各對(duì)象既是一個(gè)獨(dú)立的實(shí)體,又可通過消息相互作用,對(duì)象中的方法決定要向哪個(gè)對(duì)象發(fā)消息、發(fā)什么消息以及收到消息時(shí)如
15、何進(jìn)行處理等。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),16,3OOP方法的特點(diǎn) (1)OOP以“對(duì)象”或“數(shù)據(jù)”為中心。由于對(duì)象自然地反映了應(yīng)用領(lǐng)域的模塊性,因此具有相對(duì)穩(wěn)定性,可以被用作一個(gè)組件去構(gòu)成更復(fù)雜的應(yīng)用,又由于對(duì)象一般封裝的是某一實(shí)際需求的各種成分,因此,某一對(duì)象的改變對(duì)整個(gè)系統(tǒng)幾乎沒有影響。 (2)引入了“類”(class)的概念。類與類以層次結(jié)構(gòu)組織,屬于某個(gè)類的對(duì)象除具有該類所描述的特性外,還具有層次結(jié)構(gòu)中該類上層所有類描述的全部性質(zhì),OOP中稱這種機(jī)制為繼承。 (3)OOP方法的模塊性與繼承性,保證了新的應(yīng)用程序設(shè)計(jì)可在原有對(duì)象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用、
16、擴(kuò)展和細(xì)化來進(jìn)行,而不必從頭做起或復(fù)制原有代碼,這樣,大大減少了重新編寫新代碼的工作量,同時(shí)降低了程序設(shè)計(jì)過程中出錯(cuò)的可能性,達(dá)到了事半功倍的效果。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),17,1.2.3 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法與結(jié)構(gòu)化程序設(shè)計(jì)方法的比較 (1)傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法以過程為中心構(gòu)造應(yīng)用程序,數(shù)據(jù)和處理數(shù)據(jù)的過程代碼是分離的、相互獨(dú)立的實(shí)體,設(shè)計(jì)出的程序可重用代碼少,且當(dāng)代碼量增加時(shí)維護(hù)數(shù)據(jù)和代碼的一致性困難。 (2)面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,對(duì)象所具有的封裝性和繼承性使得代碼重用成為可能,并大大減少了程序出錯(cuò)的可能性。 (3)面向?qū)ο蠓椒ㄎ樟私Y(jié)構(gòu)化程序設(shè)計(jì)方法的
17、優(yōu)點(diǎn),同時(shí)引入了新概念、新機(jī)制并建立了比傳統(tǒng)方法更高層次的抽象。,1.2 從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì),18,1.3.1 從C語(yǔ)言到C+語(yǔ)言 C語(yǔ)言以其如下獨(dú)有的特點(diǎn)風(fēng)靡了全世界: (1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。C語(yǔ)言只有32個(gè)關(guān)鍵字,程序書寫形式自由。 (2)豐富的運(yùn)算符和數(shù)據(jù)類型。 (3)可以直接訪問內(nèi)存地址,能進(jìn)行位操作,使其能夠勝任開發(fā)操作系統(tǒng)的工作。 (4)生成的目標(biāo)代碼質(zhì)量高,程序運(yùn)行效率高。 (5)可移植性好。,1.3 C+程序的基本組成,19,1.3 C+程序的基本組成,局限性: (1)數(shù)據(jù)類型檢查機(jī)制相對(duì)較弱,這使得程序中的一些錯(cuò)誤不能在編譯階段被發(fā)現(xiàn)。
18、(2)C本身幾乎沒有支持代碼重用的語(yǔ)言結(jié)構(gòu),因此一個(gè)程序員精心設(shè)計(jì)的程序,很難為其它程序所用。 (3)當(dāng)程序的規(guī)模達(dá)到一定程度時(shí),程序員很難控制程序的復(fù)雜性。,20,1.3 C+程序的基本組成,C+包含了整個(gè)C,C是建立C+的基礎(chǔ)。C+包括C的全部特征和優(yōu)點(diǎn),同時(shí)添加了對(duì)面向?qū)ο缶幊蹋∣OP)的完全支持。 1980年,貝爾實(shí)驗(yàn)室的Bjarne Stroustrup開始對(duì)C進(jìn)行改進(jìn)和擴(kuò)充。 1983年正式命名為C+。 在經(jīng)歷了3次C+修訂后,1994年制定了ANSI C+ 標(biāo)準(zhǔn)的草案。以后又經(jīng)過不斷完善,成為目前的C+。 C+仍在不斷發(fā)展中。美國(guó)微軟公司現(xiàn)已推出C#(C Sharp)語(yǔ)言,來代替
19、C+語(yǔ)言。,21,1.3.2 C+程序的結(jié)構(gòu)與基本組成 一個(gè)簡(jiǎn)單的C+程序,是由若干個(gè)函數(shù)構(gòu)成的,其中有且僅有一個(gè)名稱為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ù)開始,是整個(gè)程序運(yùn)行的入口,該函 數(shù)中可能包含的內(nèi)容主要有: (1)局部變量的聲明:如:int i=1; (2)函數(shù)調(diào)用:如:y=sin(x); (3)一般運(yùn)算:如:a=b+c+d/3; (4)結(jié)構(gòu)控制:如:if(ab) c=a; (5)對(duì)象與結(jié)構(gòu)的處理。 (6)文件的處理等。,1.3 C+程序的基本組成,24,圖2.3 C+函數(shù)的組成 4程序舉例,1.3 C+程序的基本組成,3函數(shù)定義區(qū) 程序中除了main函數(shù)之外,還可以包含其它的函數(shù),每個(gè)函數(shù)是由函數(shù)說明和函數(shù)體兩部分構(gòu)成的。如圖2.3所示:,25,1.
21、3 C+程序的基本組成,26,上例程序結(jié)構(gòu)可寫為如下程序: 【例2-1】一個(gè)簡(jiǎn)單的C+程序。 / This is the first C+ program /* C語(yǔ)言的某些特征仍可沿用*/ #include iostream.h void print(); /函數(shù)聲明 void main() int i; char s80;,1.3 C+程序的基本組成,27,print( ); couts; couti; /驗(yàn)證結(jié)果 couts is i years old.; void print( ) printf(printf is also can be usedn); ,1.3 C+程序的基本組成
22、,28,從上例可以看出: (1)C語(yǔ)言中原有的規(guī)則和語(yǔ)句在C+中仍可繼續(xù)使用,但C+又增添了很多新的風(fēng)格。 (2)一個(gè)C+的程序是由一到若干個(gè)函數(shù)構(gòu)成的,但其中必須有且僅有一個(gè)名稱為main的函數(shù)存在。 (3)不管一個(gè)程序中有多個(gè)函數(shù),只有main函數(shù)整個(gè)程序運(yùn)行時(shí)的入口,程序運(yùn)行時(shí)從此函數(shù)開始執(zhí)行。但在程序中,main函數(shù)所處的位置可以任意。 (4)一個(gè)C+的函數(shù)是由兩部分構(gòu)成的,即函數(shù)的說明部分和函數(shù)體,函數(shù)的說明部分包括了函數(shù)的返回值的類型、函數(shù)的名稱、圓括號(hào)、形參及形參的類型說明。函數(shù)體由一對(duì)大括號(hào)括起來,其內(nèi)容是由若干條語(yǔ)句,1.3 C+程序的基本組成,29,構(gòu)成,函數(shù)體的內(nèi)容決定了
23、該函數(shù)的功能。 (5)C+對(duì)程序中的名稱是大小寫“敏感”的,除特殊情況下,應(yīng)一律小寫。 (6)程序中的注釋:可以用/*/或/(單行注釋)對(duì)程序中的內(nèi)容進(jìn)行注釋。二者的區(qū)別在于,采用/*/方法時(shí),注釋可以寫成多行,而采用/方法時(shí),注釋只能寫成一行,它可單獨(dú)占一行,也可寫在某行程序代碼的末尾。 (7)數(shù)據(jù)輸出:除了使用printf( )函數(shù),還可使用功能更強(qiáng)大、更方便的cout對(duì)象進(jìn)行輸出數(shù)據(jù)。格式如下: cout數(shù)據(jù)1 數(shù)據(jù)2 數(shù)據(jù)n 如:上例中的語(yǔ)句couts“ is ”i“ years old.”; 表示同時(shí)輸出了變量s的值、字符串“is”、變量i的值和字符,1.3 C+程序的基本組成,30
24、,串“years old.” (8) 數(shù)據(jù)輸入:除了使用scanf( )函數(shù),還可使用功能更強(qiáng)大、更方便的cin對(duì)象進(jìn)行數(shù)據(jù)輸入。格式如下: cin變量1變量2變量n 如:上例中的語(yǔ)句cins;表示給變量s輸入一個(gè)值 (9) 在分別使用cout和cin進(jìn)行數(shù)據(jù)的輸出和輸入時(shí),需要在程序的開頭嵌入”iostream.h”文件。在該頭文件中定義了輸入輸出流對(duì)象cout和cin等。 (10) 一個(gè)C+的源程序文件在存盤時(shí),要以.CPP為文件名后綴,而不是.C。 (11)C+程序的開發(fā)過程,1.3 C+程序的基本組成,31,串“years old.” 2.2 C+程序的基本組成,C+程序的開發(fā)過程,3
25、2,1.4 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,2.3.1 數(shù)據(jù)類型 (1)預(yù)定義數(shù)據(jù)類型(基本數(shù)據(jù)類型)。包括布爾型(bool)、字符型、整型、浮點(diǎn)型、無值型四種,其中浮點(diǎn)型又分為單精度浮點(diǎn)型和雙精度浮點(diǎn)型兩種。 (2)構(gòu)造數(shù)據(jù)類型,包括數(shù)組、結(jié)構(gòu)體、共用體(聯(lián)合)、枚舉、類等。 本節(jié)重點(diǎn)介紹C+的基本數(shù)據(jù)類型,有關(guān)構(gòu)造數(shù)據(jù)類型將在后面章節(jié)進(jìn)行介紹。,33, 基本數(shù)據(jù)類型,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,34, 類型修飾符 C+還允許在基本數(shù)據(jù)類型(除void類型外)前加上類型修飾符,來更具體地表示數(shù)據(jù)類型。C+的類型修飾符包括: signed 有符號(hào) unsig
26、ned無符號(hào) short短型 long長(zhǎng)型,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,35,表2.2 C+的基本數(shù)據(jù)類型,36,表2.2 C+的基本數(shù)據(jù)類型,37,說明: (1)表中帶 的部分表示是可以省略的,如short int可以寫為short int 或簡(jiǎn)寫為short,二者的含義是相同的。 (2)四種修飾符都可以用來修飾整型和字符型。用signed修飾的類型的值可以為正數(shù)或負(fù)數(shù),用unsigned修飾的類型的值只能為正數(shù)。 (3)ANSI C和ANSI C+標(biāo)準(zhǔn)中并沒有具體規(guī)定各種數(shù)據(jù)類型的“數(shù)據(jù)長(zhǎng)度”,只要求long型的數(shù)據(jù)長(zhǎng)度不短于int型,short型不長(zhǎng)于int型。只要遵循標(biāo)準(zhǔn)所給
27、出的這些原則,具體如何實(shí)現(xiàn)由各種語(yǔ)言系統(tǒng)自行決定。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,38,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式, 常量 在C+語(yǔ)言中,數(shù)據(jù)分為常量和變量?jī)纱箢悺?由于程序中的數(shù)據(jù)是有類型的,所以常量和變量都是有類型之分的。 常量按照不同的數(shù)據(jù)類型可以分為: 字符型常量、整型常量、浮點(diǎn)型常量,以及字符串常量等。 程序是根據(jù)程序中常量的書寫格式來區(qū)分它是哪種類型常量的。,39,1.整型常量 在程序中書寫整型常量時(shí),沒有小數(shù)部分。用戶可根據(jù)需要分別可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制的形式書寫: 十進(jìn)制格式 :由數(shù)字0至9和正、負(fù)號(hào)組成,書寫時(shí)直接寫出數(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ù)類型、運(yùn)算符和表達(dá)式,40,2.浮點(diǎn)型常量 只能用十進(jìn)制來表示??梢杂眯?shù)或指數(shù)形式表示(缺省為double)。如:34.5f, .345, 1.5e-3 3.字符型常量 (1)用一對(duì)單引號(hào)括起來的一個(gè)字符,單引號(hào)只是字符與其他部分的分割符,不是字符的一部分,并且,不能用雙引號(hào)代替單引號(hào)。在單引號(hào)中的字符不能是單引號(hào)或反斜杠。如: a , A, # 合法
29、的字符常量 , 非法的字符常量/可以 , “A” 不代表字符常量/為字符串常量 (2)另一種表示字符常量的方法是使用轉(zhuǎn)義字符。C+規(guī)定,采用反斜杠后跟一個(gè)字母來代表一個(gè)控制字符,具有新的含義 。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,41,C+中常用的轉(zhuǎn)義字符 /例 轉(zhuǎn)義字符例.cpp,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,42,4.字符串常量 用一對(duì)雙引號(hào)括起來的一個(gè)或多個(gè)字符的序列稱為字符串常量或字符串。字符串以雙引號(hào)為定界符,雙引號(hào)不作為字符串的一部分。如: “Hello”, “Good Morning!” ,“I say: “ Goodbye!” 字符串中的字符數(shù)稱為該字符串的長(zhǎng)度,在
30、存儲(chǔ)時(shí),系統(tǒng)自動(dòng)在字符串的末尾加以字符串結(jié)束標(biāo)志,即轉(zhuǎn)義字符 0。/可以“hello0” /串比較的錯(cuò)誤方式.cpp 5.符號(hào)常量 常量也可用一個(gè)標(biāo)識(shí)符來代表,稱為符號(hào)常量。如: #define PRICE 30 void main(void) ,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,43,使用符號(hào)常量應(yīng)注意以下幾個(gè)方面: (1)它不同于變量,在作用域內(nèi)其值不能改變和賦值。 如:在上例中如再用PRICE=40;這一語(yǔ)句進(jìn)行賦值則是錯(cuò)誤的。 (2)符號(hào)常量名一般用大寫,而變量名用小寫,以示區(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ù)類型、運(yùn)算符和表達(dá)式,44,(2)利用#define定義宏常量 一般格式: #define 宏名 常數(shù) 如:#define PI 3.14 s=2*PI*r; (3)利用const定義正規(guī)常數(shù) 一般格式:const數(shù)據(jù)類型標(biāo)識(shí)符 常數(shù)名=常量值; 說明: const必須放在被修飾類型符和類型名前面 數(shù)據(jù)類型是一個(gè)可選項(xiàng),用來指定常數(shù)值的數(shù)據(jù)類型,如果省略了該數(shù)據(jù)類型,那么編譯程序認(rèn)為它是 int 類型,1.3 C+數(shù)據(jù)類
32、型、運(yùn)算符和表達(dá)式,45,如:const int a=10; 表示定義了一個(gè)初始值為10的整型常量,它在程序中不可改變,但可用于表達(dá)式的計(jì)算中. /const面試題1.cpp const面試題2.cpp 變量 1變量的概念及特點(diǎn) 每一變量就相當(dāng)于一個(gè)容器,對(duì)應(yīng)著計(jì)算機(jī)內(nèi)存中的某一塊存儲(chǔ)單元,用于存儲(chǔ)程序中的數(shù)據(jù)。變量的值具有以下兩個(gè)特點(diǎn): (1)“一充即無”:即將一個(gè)新數(shù)據(jù)存放到一個(gè)變量中時(shí),該變量中原來的值消失,變量的值變成了新值。 如:執(zhí)行完語(yǔ)句int i; i=10; i=20;后i的值為20,而不是10。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,46,(2)“取之不盡”:
33、可將某個(gè)變量的值與程序中的其它數(shù)據(jù)進(jìn)行各種運(yùn)算,在運(yùn)算過程中,如果沒有改變?cè)撟兞康闹禃r(shí),那么,不管用該變量的值進(jìn)行多少次運(yùn)算,其值始終保持不變。 如:語(yǔ)句int i,j,k; i=10; j=i+10; k=i+j*5;其中,i的值可無限制地多次使用,但它的值始終保持值10,因?yàn)樵诔绦蛑袥]有改變變量i的值。 2定義變量 程序中的每一變量,都要先定義,后使用。 定義變量的一般有以下三種格式: 數(shù)據(jù)類型標(biāo)識(shí)符 變量名; 數(shù)據(jù)類型標(biāo)識(shí)符 變量名=初始化值;,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,47,數(shù)據(jù)類型標(biāo)識(shí)符 變量名1=初始值1,變量名2=初始值2,; 如: char a; /定義字符型變量a
34、 int i=1000; /定義整型變量i,i的初始值為1000; float a=2.0,b=3.0,c; /定義浮點(diǎn)型變量 a、b、c,且a、b的 初始值分別為2、3。 變量名是每個(gè)變量的名稱,其命名遵循以下規(guī)則: (1)由字母、數(shù)字和下劃線(_)三類符號(hào)排列組合形成,且開頭字符必須是字母或下劃線。 (2)名稱中字符的最大個(gè)數(shù)是31個(gè)。 (3)C+中區(qū)分變量名的大小寫。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,48,(4)變量名不能和C+中的關(guān)鍵字同名,也不能和用戶編制的函數(shù)或C+庫(kù)函數(shù)同名。如:int, double或static都不能作為變量名。 (5)變量名盡量做到“見名知意”。 3定
35、義變量的位置 在程序中的不同位置采用不同的變量定義方式,決定了該變量具有不同的特點(diǎn)。變量的定義一般可有以下三種位置: (1)在函數(shù)體內(nèi)部 在函數(shù)體內(nèi)部定義的變量稱為局部變量,這種局部變量只在進(jìn)入定義它的函數(shù)體時(shí)起作用,離開該函數(shù)體后該變量就消失(被釋放),即不再起作用。因此,不同函數(shù)體內(nèi)部可以定義相同名稱的變量,而互不干擾。如:,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(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ù)類型、運(yùn)算符和表達(dá)式,50,(2)形式參數(shù) 當(dāng)定義一個(gè)有參函數(shù)時(shí),函數(shù)名后面括號(hào)內(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后面括號(hào)內(nèi)的變量a和b是該函數(shù)的形式參數(shù),它們都只能在該函數(shù)體內(nèi)起作用,是該函數(shù)的局部變量。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,51,(3)全局變量:在所有函數(shù)體外部定義的變量,其作用范圍是整個(gè)程序,并在整個(gè)程序運(yùn)行期間有效。如: #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ù)類型、運(yùn)算符和表達(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(.); /賦值語(yǔ)句面試題2.cpp,1.3 C+數(shù)據(jù)
38、類型、運(yùn)算符和表達(dá)式,53,1.3.2 運(yùn)算符和表達(dá)式 程序中對(duì)數(shù)據(jù)進(jìn)行的各種運(yùn)算是由運(yùn)算符來決定的,不同運(yùn)算符的運(yùn)算方法和特點(diǎn)是不同的,從此可以看出,一個(gè)運(yùn)算式子中要涉及到數(shù)據(jù)及運(yùn)算符,而運(yùn)算符是對(duì)數(shù)據(jù)進(jìn)行指定操作,并產(chǎn)生新值的特殊符號(hào)。 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 算術(shù)運(yùn)算符就是對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,如:加、減、乘、除等,是在程序中使用最多的一種運(yùn)算符,C+的算術(shù)運(yùn)算符如表2.4所示。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,54,表2.4 C+的算術(shù)運(yùn)算符,算術(shù)表達(dá)式是指由算術(shù)運(yùn)算符、括號(hào)將常量、變量、函數(shù)、圓括號(hào)等連接形成的一個(gè)有意義的式子。如:,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á)式中的括號(hào)不管有多少層,一律使用圓括號(hào)。 (2)在將一個(gè)數(shù)學(xué)上的運(yùn)算式子寫成對(duì)應(yīng)的C+的表達(dá)式時(shí),要注意進(jìn)行必要的轉(zhuǎn)換。 乘號(hào)不能省略。 數(shù)學(xué)表達(dá)式中出現(xiàn)的數(shù)學(xué)運(yùn)算函數(shù)要用C+提供的對(duì)應(yīng)的數(shù)學(xué)運(yùn)算庫(kù)函數(shù)來代替。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,56, 要特別注意表達(dá)式中兩個(gè)整型數(shù)相除的情況。如:有一數(shù)學(xué)表達(dá)式為2/3(f-32),要寫成對(duì)應(yīng)的C+的表達(dá)式時(shí),正確地寫法應(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 賦值運(yùn)算符和賦值表達(dá)式 賦值運(yùn)算符的功能將某個(gè)數(shù)據(jù)的值賦給某個(gè)變量。賦值運(yùn)算符的用法格式: 變量名 賦值運(yùn)算符 常量、變量或表達(dá)式 說明: (1)被賦值的目標(biāo),即賦值運(yùn)算符左邊的量必須是變量,而不能是常量或表達(dá)式。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,57,(2)C+中的賦值運(yùn)算符如表2.5所示。 (3)要注意區(qū)分賦值運(yùn)算符“=”與數(shù)學(xué)上的“等號(hào)”間的區(qū)別,如: int x,y; /定義變量x,y為int類型變量 x=10; /將變量x賦成值10,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,58,x=x+20; /將x的值在原值(10)的基礎(chǔ)上再加上值20后(結(jié)果為30)賦給變量x y-
41、=x+5; /等價(jià)于y=y-(x+5) x%=y+10; /等價(jià)于x=x%(y+10) (4) 前增/減運(yùn)算是變量的值先自增1或自減1,然后以該變量自增或自減后的值參加其它運(yùn)算;后增/減運(yùn)算是該變量先以原來的值參加其它運(yùn)算,然后再自增1或自減1;增減量運(yùn)算符只能用于變量,不能用于常量和表達(dá)式。 如:7+;(i+j)+; /error,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,59,(5)對(duì)表達(dá)式x+y的理解:是(x+)+y還是x+(+y)? C+規(guī)定,處理時(shí)從左至右取盡可能多的“+”或“-”號(hào)字符組成一個(gè)運(yùn)算符,將解釋為(x+)+y。編程者最好采用便于閱讀和理解的寫法,寫成(x+)+y的形式。 /
42、i+面試題2.cpp i+面試題3.cpp i+面試題4.cpp (6)在ANSI C中,增量運(yùn)算符“+”和減量運(yùn)算符“-”只能用于整型量,而在ANSI C+中,這兩個(gè)運(yùn)算符對(duì)整型和浮點(diǎn)型均可使用。 sizeof運(yùn)算符 sizeof運(yùn)算符功能是求某一數(shù)據(jù)類型或某一變量在內(nèi)存中所占空間的字節(jié)數(shù)。其使用的一般形式: sizeof(變量名或數(shù)據(jù)類型)或sizeof 變量名或數(shù)據(jù)類型 如:,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(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ù)類型、運(yùn)算符和表達(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)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系運(yùn)算符就是對(duì)兩個(gè)量之間進(jìn)行比較的運(yùn)算符,如表2.6所示。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,62,由關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接形成的運(yùn)算式子是關(guān)系表達(dá)式,一個(gè)關(guān)系表達(dá)式的值是一個(gè)邏輯值,當(dāng)為真時(shí),值為1,為假時(shí),值為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ù)類型、運(yùn)算符和表達(dá)式,63,注意: 在對(duì)兩個(gè)表達(dá)式的值進(jìn)行是否相等的比較時(shí),要用運(yùn)算符“=”,而不能寫成“=”。 2.3.
45、2.5 邏輯運(yùn)算符和邏輯表達(dá)式 邏輯運(yùn)算符是對(duì)兩個(gè)邏輯量間進(jìn)行運(yùn)算的運(yùn)算符,如表2.7所示。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,64,由邏輯運(yùn)算符將兩個(gè)表達(dá)式連接形成的式子叫邏輯表達(dá)式。各種邏輯運(yùn)算的“真值表”如表2.8所示。對(duì)于參加邏輯運(yùn)算的操作數(shù),系統(tǒng)認(rèn)為“非0”為真,“0”為假。而邏輯表達(dá)式的結(jié)果只能為邏輯真(1)或邏輯假(0)。 表2.8 邏輯運(yùn)算真值表,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,65,注意: (1)C或C+中在給出一個(gè)邏輯表達(dá)式的最終計(jì)算結(jié)果值時(shí),用1表示真,用0表示假。但在進(jìn)行邏輯運(yùn)算的過程中,凡是遇到非零值時(shí)就當(dāng)真值參加運(yùn)算,遇到0值時(shí)就當(dāng)假值參加運(yùn)算。如:int
46、 a=10,b=15,c=14; 則(a+6)則表達(dá)式i 則表達(dá)式i+|i+|i+的值為1(真),運(yùn)算結(jié)束后,變量i的值為2,而不是4。 對(duì)于數(shù)學(xué)上的表示多個(gè)數(shù)據(jù)間進(jìn)行比較的表達(dá)式,在C或C+中要拆寫成多個(gè)條件并用邏輯運(yùn)算符連接形成一個(gè)邏輯表達(dá)式。如:在數(shù)學(xué)上,要表示一個(gè)變量a的值處于-1和-9之間時(shí),可以用-9-9 float a,b; a=float(i);/將變量i的類型強(qiáng)制轉(zhuǎn)換為浮點(diǎn)型,并將/其值賦給變量a,C不允許這樣寫(編譯錯(cuò)誤)。 b=(float)i;/將變量i的類型強(qiáng)制轉(zhuǎn)換為浮點(diǎn)型,并將/其值賦給變量b,但變量i的值沒變! 關(guān)于自動(dòng)(隱式(implicit)類型)類型轉(zhuǎn)換:
47、這種類型的轉(zhuǎn)換是在執(zhí)行表達(dá)式中的運(yùn)算符操作時(shí),自動(dòng)進(jìn)行的一種轉(zhuǎn)換。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,72,低高 long double 高 int unsigned long unsigned long double | | short,char float 低 數(shù)據(jù)類型的轉(zhuǎn)換方向 說明:水平方向的箭頭表示運(yùn)算的變量為不同的數(shù)據(jù)類型時(shí)的轉(zhuǎn)換的方向。 如一個(gè)int型和一個(gè)float型數(shù)據(jù)進(jìn)行運(yùn)算時(shí),由于float型首先轉(zhuǎn)換成double型,因此把int的數(shù)據(jù)也轉(zhuǎn)換成double型,然后再運(yùn)算,計(jì)算結(jié)果也是double型。這里的箭頭只表示數(shù)據(jù)類型級(jí)別的高低,不是指數(shù)據(jù)實(shí)際轉(zhuǎn)換的步驟,不能把i
48、nt型轉(zhuǎn)換成double型理解為int型先轉(zhuǎn)換成unsigned,再轉(zhuǎn)換為long型,再轉(zhuǎn)換成unsigned long型,最后才轉(zhuǎn)換成double型,實(shí)際上是把int型數(shù)據(jù)直接轉(zhuǎn)換成double型。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,73,縱向箭頭表示必定的類型轉(zhuǎn)換。如字符型必定先轉(zhuǎn)換成整數(shù)型,short型也必定轉(zhuǎn)換為int型。如兩個(gè)float型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算時(shí),為了提高運(yùn)算精度,先都轉(zhuǎn)換成double型后再進(jìn)行運(yùn)算。 當(dāng)不同數(shù)據(jù)類型的變量同時(shí)出現(xiàn)在一個(gè)表達(dá)式時(shí),將實(shí)現(xiàn)“隱式類型轉(zhuǎn)換”。它是在數(shù)據(jù)運(yùn)算過程中自動(dòng)進(jìn)行的類型轉(zhuǎn)換,即把它們轉(zhuǎn)變成同一類型的變量再進(jìn)行運(yùn)算。 在賦值語(yǔ)句中,當(dāng)左
49、值和右值的數(shù)據(jù)類型不同時(shí),首先將右值類型自動(dòng)轉(zhuǎn)換成左值的類型(向左看齊),然后再賦值給左值。 /類型轉(zhuǎn)換面試題.cpp,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,74, 逗號(hào)運(yùn)算符 逗號(hào)運(yùn)算符的運(yùn)算優(yōu)先級(jí)是最低的。一般形式為: 表達(dá)式1,表達(dá)式2,表達(dá)式N 在計(jì)算逗號(hào)表達(dá)式的值時(shí),按從左至右的順序依次分別計(jì)算各個(gè)表達(dá)式的值,而整個(gè)逗號(hào)表達(dá)式的值和類型是由最右邊的表達(dá)式?jīng)Q定。 如:有語(yǔ)句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ùn)算符的優(yōu)先級(jí)與結(jié)合性 每個(gè)運(yùn)算符都有自己優(yōu)
50、先級(jí)和結(jié)合性。當(dāng)一個(gè)表達(dá)式中包含多個(gè)運(yùn)算符時(shí),要確定運(yùn)算的結(jié)果,必須首先確定運(yùn)算的先后順序,即運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。C+中運(yùn)算符的優(yōu)先級(jí)和結(jié)合性如表2.11所示。,1.3 C+數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,75,表2.11 C+中運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,76,1.4 數(shù)據(jù)的輸入與輸出,在C+語(yǔ)言中,數(shù)據(jù)的輸入和結(jié)果的輸出是分別使用系統(tǒng)所提供的輸入流對(duì)象cin和輸出流對(duì)象cout來完成的。在使用過程中,只要在程序的開頭嵌入相應(yīng)的頭文件“iostream.h”即可。 1.4.1 數(shù)據(jù)的輸出cout 輸出流對(duì)象輸出數(shù)據(jù)的語(yǔ)句格式為: cout數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)n; 說明: (1)cout是系統(tǒng)預(yù)定義的一
51、個(gè)標(biāo)準(zhǔn)輸出設(shè)備(一般代表顯示器);“”是輸出操作符(插入符),用于向cout輸出流中插入數(shù)據(jù)。 (2)cout的作用是向標(biāo)準(zhǔn)輸出設(shè)備上輸出數(shù)據(jù),被輸出的數(shù)據(jù)可以是常量、已有值的變量或是一個(gè)表達(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)可以將多個(gè)被輸出的數(shù)據(jù)寫在一個(gè)cout中,各輸出項(xiàng)間用“”操作符隔開即可,但要注意cout首先按從右向左的順序計(jì)算出各輸出項(xiàng)的值,然后再輸出各項(xiàng)的值。如: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)一個(gè)cout語(yǔ)句也可拆成若干行書寫,但注意語(yǔ)句結(jié)束符“;”只能寫在最后一行上。如:對(duì)于上面的語(yǔ)句也可寫成如下形式:,2.4 數(shù)據(jù)的輸入與輸出,79,cou
53、t value of a: /注意行末無分號(hào) a value of b: b The result is : sqrt(a*a+b*b); /在此處書寫分號(hào) (6)在cout中,實(shí)現(xiàn)輸出數(shù)據(jù)換行功能的方法:既可使用轉(zhuǎn)義字符“n”,也可使用表示行結(jié)束的流操作子endl。如: coutThis is first Line.nThis is second line. ; 上面語(yǔ)句可等價(jià)地寫為: coutThis is first Line.endlThis is second line. ;,2.4 數(shù)據(jù)的輸入與輸出,80,(7)在cout中還可以使用流控制符控制數(shù)據(jù)的輸出格式,但使用這些流控制符時(shí)
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ū)?。但是?cout.width(n)和setw(n)二者都只對(duì)下一個(gè)被輸出的數(shù)據(jù)有作用,若一個(gè)輸出語(yǔ)句內(nèi)有多個(gè)被輸出的數(shù)據(jù),而要保持一定格式域?qū)挄r(shí),需要在每一輸出數(shù)據(jù)前加上cout.width(n)或setw(n)。
55、 此外,當(dāng)參數(shù)n的值比實(shí)際被輸出數(shù)據(jù)的寬度大時(shí),則在給定的域?qū)拑?nèi),數(shù)據(jù)靠右輸出,不足部分自動(dòng)填充空格符;若被輸出數(shù)據(jù)的實(shí)際寬度比n值大時(shí),則數(shù)據(jù)所占的實(shí)際位數(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、第一個(gè)cout的輸出結(jié)果 999999 999 /程序中第二個(gè)cout的輸出結(jié)果 102010201020 /程序中第三個(gè)cout的輸出結(jié)果,2.4 數(shù)據(jù)的輸入與輸出,84, 設(shè)置域內(nèi)填充字符:在默認(rèn)情況下,當(dāng)被輸出的數(shù)據(jù)未占滿域?qū)挄r(shí),會(huì)自動(dòng)在域內(nèi)靠左邊填充相應(yīng)個(gè)數(shù)的空格符。但我們也可以設(shè)置在域內(nèi)填充其他的字符,方法是利用cout的fill方法cout.fill(c)或setfill(c)。 cout.fill(c)和 setfill(c)可以對(duì)所有被輸出的數(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 /程序中第一個(gè)cout的輸出結(jié)果,未占 滿域?qū)挼牟糠痔畛?字符。 999#999#999 /程序中第二個(gè)cout的輸出結(jié)果 10201020%1020 /程序中第三
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升商務(wù)英語(yǔ)考試聽說能力的綜合策略研究試題及答案
- 現(xiàn)代揚(yáng)塵測(cè)試題及答案
- 應(yīng)城一中高考試卷及答案
- 一年級(jí)下同步試卷及答案
- 一年級(jí)位置題及答案試卷
- 護(hù)士業(yè)務(wù)面試題及答案
- 未來智能充電技術(shù)的創(chuàng)新考核試題及答案
- 小學(xué)教師教學(xué)反思及改進(jìn)策略
- 家具設(shè)計(jì)師應(yīng)掌握的創(chuàng)新工具試題及答案
- 政策扶持與創(chuàng)業(yè)者創(chuàng)新能力試題及答案
- DB4403T339-2023城市級(jí)實(shí)景三維數(shù)據(jù)規(guī)范
- 設(shè)備維護(hù)工程師簡(jiǎn)歷
- 2023版押品考試題庫(kù)必考點(diǎn)含答案
- 挖孔樁基施工方案(水磨鉆)
- 變電檢修技能考試計(jì)算
- 國(guó)際經(jīng)濟(jì)法學(xué)(湘潭大學(xué))智慧樹知到答案章節(jié)測(cè)試2023年
- 以案說德發(fā)言四篇
- 大氣污染控制工程課后題答案解析
- 臨床試驗(yàn)倫理委員會(huì)倫理審查不同意見溝通的標(biāo)準(zhǔn)操作規(guī)程
- 梅毒診療指南(2023年)
- 高中物理3-3熱學(xué)練習(xí)題(含答案)
評(píng)論
0/150
提交評(píng)論