信息學奧賽入門培訓教程_第1頁
信息學奧賽入門培訓教程_第2頁
信息學奧賽入門培訓教程_第3頁
信息學奧賽入門培訓教程_第4頁
信息學奧賽入門培訓教程_第5頁
已閱讀5頁,還剩224頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

--PAGE100-目 錄青少年信息學奧林匹克競賽情況簡介 5第一章 計算機基礎知識 7計機基常識 7計機產與展 7計機統工理 7計機有數碼的識 8原、碼補碼 10邏運算 10作統 DOS(DiskOperatingSystem)的組成 DOS的件目錄 DOS命令 12Windows12算網常識 13網基知識 13Internet簡介 14算信安基知識 16計機網安全 16計機毒 17病的類 17第2章C++編程簡介 19機語、編和高語言 19C言與C++的史 202.3 C++標庫 20結化程 21簡程序 22簡程:個相加 25算運算 27判:等關算符 29新頭件名間 31第3章C++輸入/輸出流 333.1 簡介 333.2 流 33iostream類的件 34輸入輸流和象 34輸流 35流入算符 35連使流入/讀取算符 37出char*類型的量 37用員數put出字和put函的調 383.4 輸流 39流取算符 39成數get和getline 41成函數read、gcount和write的無式入/44流縱子 45整流基:操縱子dec、oct、hex和setbase 45設浮數度(precision、setprecision) 46設域寬(setw、width) 47用自定義流縱算子 48流式態 49格狀標志 50尾零十制數點(ios::showpoint) 50對齊(ios::left、ios::right、ios::internal) 51設填字符(fillsetfill) 53整流基:(ios::dec、ios::oct、ios::hex、ios::showbase) 54浮數科記法(ios::scientific、ios::fixed) 55大/寫制(ios::upercase) 56設及除式志(flags、setiosflags、resetosflags) 57流誤態 58第4章文件處理 614.1 簡介 61文和流 61建并入件 61讀文中數據 65更訪文件 67第5章C++的字符串流 68流繼關系 68字流輸操作 68字流輸操作 69字流數類換中應用 70輸入/出狀標志 71第6章 控制結構 746.1 簡介 746.2 算法 74控結構 74if擇構 75if/else選結構 76while復構 78構算:例究1(計器制復) 78構算與上逐步善實究2(記控重復) 80構算與上逐步善實究3(套控結構) 85賦運符 88增自運符 88計器制環要點 91for重結構 92for結使舉例 94switch多項擇構 97do/while重結構 101break和continue102邏運符 1046.19 混相等(==)與(=)運符 1056.20 結化程結 106第7章函數 1087.1 簡介 1087.2 數函庫 1087.3 函數 1097.4 函定義 1097.5 頭件 7.6 作域則 7.7 遞歸 使遞舉,Fibonacci數列 遞與代 120帶參表函數 121聯數 122函重載 123第8章數組 1258.1 簡介 1258.2 數組 125聲數組 126使數的例 126將組遞函數 137排數組 141查數:性與折查找 142多數組 147第9章指針與字符串 1539.1 簡介 153指變的明始化 153指運符 154按用用數 156指與量定符 158按用用冒序 163指表式指法 167指與組關系 169指數組 173函指針 173符字串簡介 177符字串礎 177符處庫符串作數 179第10章 信息學奧賽中的常用算法 185算簡介 185枚算法 187回算法 191遞算法 193遞算法 196分算法 200貪算法 202搜算一深優先) 205搜算二廣優先) 209態劃法 212精計算 215附 錄 228ASCII表 228青少年信息學奧林匹克競賽情況簡介信息學奧林匹克競賽是一項旨在推動計算機普及的學科競賽活動,重在培養學生能力,使得(全國青少年信息學(計算機)奧林匹克分區聯賽:1995年NOI從1995年起,至2001年共舉辦了七屆全國青少年信息學奧林匹克分區聯賽,每年舉辦一次((()簡稱A(19841-8全國青少年信息學)奧林匹克競賽簡稱N由中國算機學會主辦的、并與國際信息學奧林匹克接軌的一項全國性青少年學科競賽活動。1984年舉辦首屆全國計算機競賽。由各省市組織參賽,每年舉辦一次。獎項有個人一、二、三等獎,女選手第一、二、三名,各省隊團體總分名次排隊。國際青少年信息學)奧林匹克競賽簡稱每年舉辦一次,由各參賽國家組隊參賽。的識誕生與展 的識誕生與展 特點在現代會中應用#計算機息全礎識 計算機網絡計基算本機操的作MSDOSWindows常用輸入漢字輸入程序設計基本知程序的表示BASIC數據結構的類型()程序設計識*—>信息世界(表達解法)—>計算機世界(將解法用計算機能實現的數據結構和算法描述出來)基本算法處理簡單搜索 *字串理排序 *查找統計 *分類 *合并二、復賽內容與要求:計算機軟件*操作系統的使用知識*編程語言的使用數據結構*結構類型中的記錄類型*指針類型*文件(提高組必須會使用文本文件輸入)*鏈表*樹*圖#程序設計*程序設計能力*設計測試數據的能力*運行時間和占用空間的估算能力#算法處理*排列組合的應用*進一步加深回溯算法、遞歸算法*分治法*搜索算法:寬度、深度優先算法*表達式處理:計算、展開、化簡等#*動態規劃#在初賽的內容上增加以下內容(2008年修改稿):三、初賽試題類型:注:試題語言兩者選一(程序設計語言:FREEPASCAL、C、C++)*判斷*填空*完善程序*讀程序寫運行結果*問答四、推薦讀物:*分區聯賽輔導叢書*學生計算機世界報及少年電世界雜志第一章 計算機基礎知識計算機的產生與發展計算機的產生是20世紀最重要的科學技術大事件之一。世界上的第一臺計算機(ENIAC)于1946年誕生在美國賓夕法尼亞大學,到目前為止,計算機的發展大致經歷了四代:1946CPU19581964197119561億/199210億/1997130計算機系統及工作原理(1)計算機的主要硬件輸入設備:鍵盤、鼠標、掃描儀等。輸出設備:顯示器、打印機、繪圖儀等。中央處理器P存儲器:具有記憶功能的物理器件,用于存儲信息。存儲器分為內存和外存:它分為只讀存儲器(ROM)和隨機存儲器(RAM)和高速緩沖存儲器(Cache);ROM:((EPROM)(EEPROM_));RAM:可讀可寫,斷電后內容全部丟失;Cache:因為CPU讀寫RAM的時間需要等待,為了減少等待時間,在RAM和CPU間需要設置高速緩存Cache,斷電后其內容丟失。②外存:磁性存儲器——軟盤和硬盤;光電存儲器——光盤,它們可以作為永久存器;③存儲器的兩個重要技術指標:存取速度和存儲容量。內存的存取速度最快(與CPU速度相匹配),軟盤存取速度最慢。存儲容量是指存儲的信息量,它用字節(Byte)作為基本單位,1字節用8位二進制數表示,1KB=1024B,1MB=1024KB,lGB=1024MB(2)計算機的軟件計算機的軟件主要分為系統軟件和應用軟件兩類:①系統軟件:為了使用和管理計算機的軟件,主要有操作系統軟件如,WINDOWS95/98/2000/NT4.0、DOS6.0、UNIX等;WINDOWS95/98/2000/NT4.0是多任務可視化圖形界面,而DOS是字符命令形式的單任務的操作系統。②應用軟件:為了某個應用目的而編寫的軟件,主要有輔助教學軟件(CAI)、輔助設計軟件(CAD)、文字處理軟件、工具軟件以及其他的應用軟件。到目前為止,電子計算機的工作原理均采用馮.若依曼的存儲程序方式,即把程序存儲在計算機內,由計算機自動存取指令(計算機可執行的命令=操作碼+操作數)并執行它。工作原理圖如下:計算機中有關數及編碼的知識0,1二進制數運算非常簡單,計算機很容易實現,其主要法則是:0+0=00+1=11+0=11+1=0 0*0=00*1=01*0=01*1=1由于運算簡單,電器元件容易實現,所以計算機內部都用二進制編碼進行數據的傳送和計算。(1)計數的進制不同,則它們的基數也不相同,如表1-1所示。進制基數特點二進制0,1逢二進一八進制0,1,2,3,4,5,6,7逢八進一十六進制0,1,2,...,9,A,B,C,D,E,F逢十六進一(2)數的權(權191=2102+1101+9100(11010)2=1*24+1*23+0*22+1*21+1*20(273)8=2*82+7*81+3*80(27AF)16=2*163+7*162+10*161+15*160,(39)10=(100111)2 (245)10=(365)8將十進制小數的小數部分乘以進制數取整,作為轉換后的小數部分,如.351=00112 0.151=0.012:如:(219)10=2*102+1*101+9*100(11010)2=1*24+1*23+0*22+1*21+1*20=26(273)8=2*82+7*81+3*80=187(7AF)16=7*162+10*161+15*160=1867浮點數的形式可寫成:N=M*2E(其中M代表尾數,E代表階碼)其形式如下:階碼尾數(包括符號位)ASCII編碼,(ASCII)70ASCII128個如:0-9:48-57:00110000-...A-Z:65-90:01000001-...a-z:97-122:01100000-...ASCII碼不能表示漢字,因此要有漢字信息交換碼,我國國家標準是gb2312,它也被稱作國際碼。gb23126763(常用字)37553008)流水碼:如區位碼、電報碼、通信密碼,優點重碼律少,缺點難于記憶;音碼:以漢語拼音為基準輸入漢字,優點是容易掌握,但重碼律高;形碼:根據漢字的字型進行編碼,優點重碼少,但不容易掌握;音形碼:將音碼和形碼結合起來,能減少重碼律同時提高漢字輸入速度。16*16,24*24,32*32,48*48,64*64((bit)存16*1632原碼、反碼與補碼在計算機中,數據是以補碼的形式存儲的:n1n-101。當真值為正時:原碼、反碼、補碼數值位完全相同;當真值為負時:原碼的數值位保持原樣,反碼的數值位是原碼數值位的各位取反,補碼則是反碼的最低位加一。16位十進制數17的原碼、反碼與補碼均為:0000000000010001十進制數-17的原碼、反碼與補碼分別為:1000000000010001、1111111111101110、1111111111101111邏輯運算:::1110010101∩10110111=1001010111(1)交換律:A+B=B+A,A·B=B·A2A+B+C=A+(B+C,·BC=A(·)(3)冪等律:A·A=A,A+A=A4AA+B=A,A+AB=A5AB+C=·B+AC,A(·=A+A+)(6)互補律:A+A=1,A·A=0(7)非深入:A+B=A·B,A·B=A+B(8)0-1律:A+0=A,A+1=1,A·1=A,A·0=0例:化簡函數Q=AD+AD+AB+ACEF。這個函數有5個自變量,化簡過程如下:Q=AD+AD+AB+ACEF=A+AB+ACEF=A+ACEF=A練習:求證:(A+B)(A+C)=AB+ACDOS(DiskOperatingSystem)的組成MS—DOS采用模塊結構,它由五部分組成:ROM中的BIOS模塊、IO.SYS模塊、MSDOS.SYS模塊、COMMAND.COM模塊和引導程序。BIOS模塊:在PCROMCMOS(BIOS)。BIOSBIOSIO.SYSIO.SYSMS—DOSROMBIOSRONBIOSMSDOS.SYSMS—DOS(4)COMMAND.COMMS—DOS5統文件則把DOS系統從磁盤裝人內存。一張系統盤上應該包含有:引導記錄、IO.SYS、MSDOS.SYS和COMMAND.COMDOS的文件和目錄():+路徑+(18)+(13)4)樹形目錄:DOS采用樹形目錄結構。由一個根目錄和若干層子目錄組成。這種目例如要查找UCDOS子目錄下的二級子目錄下的README.TXTDOS:CODAADOS命令DOS(1)DIR(顯示文件目錄)MD、CD、RD(子目錄的建立、進入、刪除命令)(2)文件操作命令:COPY(復制命令)、DEL(刪除命令)、REN(更改文件名)TYPE(顯示文本文件內容)(3)其他內部命令、TIMEVER、等 ·DOS磁盤格式化命令:盤符[/S)I/V]軟盤復制命令:DISKCOPY[1:][2:]其作用,能夠進行軟盤之間的全盤復制(以磁道方式),不僅可以復制系統文件而且可以復制隱含文件。Windows簡介WindowsMS-DOSWindowsWindowsWindows具有以下主要特點。Windows提供了一種不同于DOS系統下命令行的工作方式,它通過對窗口、圖標、選單、對話框、命令按鈕、滾動框等圖形符號與畫面的操作來實現對計算機的各種操作。在Windows中,所有的操作都是通過窗口中的圖形界面進行的。在Windows中,平穩的多任務機制可以同時運行多道程序以及執行多項任務,各程序與各任務之間不僅轉換容易,而且還可以方便地交換數據。Winddws640在Windows中,可以簡單直觀地實現網絡的安裝、配置、瀏覽,從而可以更加方便地實現網絡管理和資源共享。Windows還支持其他廠商基于技術真實字體)例在ndos5“務”作 。示統所功能 B)只示前動窗C)只示在臺作窗口名 D)現口的切換解答在務中顯了所打的序圖。本題正確答案為D。網絡基礎知識計算機網絡是將地理位置不同的計算機,用通信鏈路連接起來,共同遵守一定的協議,以實現計算機軟硬件資源共享為目標的通信系統。計算機網絡由網絡硬件和網絡軟件組成。(。網絡硬件包括網絡的拓撲結構、網絡服務器、網絡工作站、傳輸介質和設備。:(LAN):(10)。Internet如nene(。。星形網:以一臺計算機為中心,以放射狀連接若干臺計算機。環形網:傳輸線路構成一個封閉的環,入網的計算機連到這個環形線路上。總線網:用一條通信線路作主干,入網的計算機通過相應接口連到線路上。(OSI模型OSI7層:各層功能如下:1.物理層物理層與移動二進制數和維護物理連接有關。2.數據鏈路層(3.網絡層4.傳輸層5-7.會話層、表示層和應用層提供了如下功能:處理計算機間數據表示的差別。確保數據在網絡傳輸中不被竊取和泄露,并且確保網絡不允許未經授權就訪問數據。最高效地使用網絡資源通過應用程序及活動同步來管理對話和活動。在網絡節點間共享數據。Internet簡介nenet2080InternetIPIPInternetInternetIPIP4,0-255,8,IP32位二4IP:IPDDDD,IDIP地址ID5ABCD類地址和EA類IP地址一個A類P地址由1字節的網絡地址和3地址范圍從A1261B類IP地址BIP220到5B16326C類IP地址CIP31192.000到5C29254D(MucaDIPE類IP地址以“llll0”開始,為將來使用保留。00..0)”的P25.25.25.2在IP地址3種主要類型里,各保留了3個區域作為私有地址,其地址范圍如下:A類地址:~55B類地址:~55C類地址:~55InternetIPIPP"。IP地址如同電腦的身份證號碼,而域名相當電腦的姓名。Internet(1)信息瀏覽(WWW)Netscape瀏覽器和MicrosoftInternetExplorer(IP如http://;ftp://(2)文件傳輸(FTP)FTP(FileTransferProtocol)是Internet的一種標準協議,這一協議使用戶能在聯網的計算機之間傳送文件如上載(UPLOAD把本地計算機上地文件復制到遠程計算機上)和下載(DOWNLOAD把遠程計算機上的文件復制到本地計算機上)。(3)傳送電子郵件(E-mail)電子郵件地址=用戶名+@+主機域名;如:zhangming@(BBS)(telnet)TCP/IPTCP/IP協議的開發研制人員將Internet分為五個層次,以便于理解,它也稱為互聯網分層模型或互聯網分層參考模型,如下表:()()網絡接口層(第二層)物理層(第一層)各層簡要說明如下:Internet如PC信息包傳輸層:為兩個用戶進程之間建立、管理和拆除可靠而又有效的端到端連接。應用層:它定義了應用程序使用互聯網的規程。計算機的網絡安全1、不同環境和應用中的網絡安全2、網絡安全應具有以下四個方面的特征:保密性:信息不泄露給非授權用戶、實體或過程,或供其利用的特性。可控性:對信息的傳播及內容具有控制能力。3、主要的網絡安全威脅自然災害、意外事故;計算機犯罪;人為行為,比如使用不當,安全意識差等;“黑客”行為:由于黑客的入侵或侵擾,比如非法訪問、拒絕服務計算機病毒、非法連接等;電子諜報,比如信息流量分析、信息竊取等;信息戰;網絡協議中的缺陷,例如TCP/IP協議的安全問題等等。4、黑客常用的信息收集工具信息收集是突破網絡系統的第一步。黑客可以使用下面幾種工具來收集所需信息:SNMP協議,用來查閱非安全路由器的路由表,從而了解目標機構網絡拓撲的內部細節。TraceRoute程序,得出到達目標主機所經過的網絡數和路由器數。Whois協議,它是一種信息服務,能夠提供有關所有DNS域和負責各個域的系統管理員數據。(。DNS服務器,可以訪問主機的IP地址表和它們對應的主機名。Finger。Ping實用程序,可以用來確定一個指定的主機的位置并確定其是否可達。把這個簡單的工具用在掃描程序中,可以Ping網絡上每個可能的主機地址,從而可以構造出實際駐留在網絡上的主機清單。計算機病毒計算機病毒是一種程序,是人為設計的具有破壞性的程序。計算機病毒具有破壞性、傳播性、可激發性、潛伏性、隱蔽性等特點。病毒的分類①良性病毒:這種病毒的目的不是為了破壞計算機系統,而只是為了編制者表現自己。此類病毒破壞性較小,只是造成系統運行速度降低,干擾用戶正常工作。②惡性病毒:這類病毒的目的是人為的破壞計算機系統的數據。具有明顯破壞目標,其破壞和危害性都很大,可能刪除文件或對硬盤進行非法的格式化。①源碼病毒:在源程序被編譯之前,就插入到用高級語言編寫的源程序當中。編寫這種病毒程序較困難。但是,一旦插入,其破壞性和危害性都很大。②入侵病毒:是把病毒程序的一部分插入到主程序中。這種病毒程序也難編寫,一旦入侵,難以清除。②操作系統病毒:是把病毒程序加入或替代部分操作系統進行工作的病毒。這種病毒攻擊力強、常見、破壞性和危害性最大。④外殼病毒:是把病毒程序置放在主程序周圍,一般不修改源程序的一種病毒。它大多是感染DOS下的可執行程序。這種病毒占一半以上,易編制,也易于檢測和消除。在日常維護中應隔離計算機病毒的來源,經常要用殺毒軟件檢查計算機系統和存儲器。[例設張盤染病毒能除毒措是 A)除軟上所文件本題正確答案為B。第2章C++編程簡介(tranlation)(machinelanguage)01)+1300042774+1400593419+1200274027(assemblylanguage)(assembler)LOAD ADD STORE 盡管這種代碼對于人們一目了然,但計算機卻無法理解,必須先翻譯為相應的機器語言。(high-levellanguage)(compiler)grossPay =basePay+overTimePayCC++(interpreter)程序可新編譯程序。一旦程序開發完成,編譯版本的運行最有效。C的歷史C++CC語言又是從兩個編程語言BCPL和BBCPLMartinRichards1967KenThompsonB語言(1970)DCPLBC語言是從DDennisRitchie1972年在DECPDP—11CBCPLBC語言最初作為UNIXCCC到20世紀70CCPPengha/RitchieC"1978年PrenticeHallKernighanRitchieTheCProgrmmmingLanguageCKe78)。C()個標準的C1983(x3)x3JII技術分1989AN5I(IS0)CANSIANSI1988KernighanRitchie稱為ANSIC)C++C2080BjarnestroustrupC++的許多特性是從c語言中派生的,但更重要的是,它提供了面向對象編程(object-orientedprogramming)(object)實際上是模擬實際項目的可復用軟件組件(component)。軟件開tXerox的PaloAltosmalltalk。SmalltalkC++C2.9基于C/C++Java。標準庫C++(class)(function)C++C++C++C++C++本。PlaugerC++中ANSIC(indepandentsofterwarevender)也提常用數據類型與PascalPascal數據類型C/C++ShorInt8位有符號整數charByte8位無符號整數BYTE,unsignedshortSmallInt16位有符號整數shortWord16位無符號整數unsignedshortInteger,LongInt32位有符號整數int,longCardinal,LongWord/DWORD32位無符號整數unsignedlongInt6464位有符號整數_int64Single4字節浮點數float*Real486字節浮點數Double8字節浮點數double*Extended10字節浮點數longdoubleCurrency64位貨幣類型TDate/TDateTime8字節日期/時間Variant,OleVariant16字節可變類型VARIANT,^Variant,^OleVariantChar,AnsiChar1字節字符charWideChar2字節字符WCHAR*ShortString短字符串stringAnsiString/String長字符串^AnsiStringWideString寬字符串^WideStringPChar,PAnsiCharNULL結束的字符串char*PWideCharNULLLPCWSTRBoolean,ByteBool1字節布爾類型任何1字節WordBool2字節布爾類型任何2字節BOOL,LongBool4字節布爾類型BOOL注:有*前綴的是向前兼容類型;有^前綴的是C++Builder特有類型。20602060(structuredprogramming)的出現,用235結構化編程研究的一個更具體結果是1971年NiklausWirth教授推出了Pascal語言。Pascal17(BlaisePascal)Ada207080Ada以PascalPascalLordByron的女兒(AdaLovelace)AdaLovelace19用于charlesBabbage設計的分析機引擎的計算設備。Ada的一個最重要功能是多任務(multiasking).程序員可以使多個活動任務并行發生。我們要介紹的其他常用高級語言(包括C/C++)簡單程序C++2.2。這段程序演示了C++語言的幾個重要特性。我們詳細介紹程序的每一行。//Fig.2.2:fig1_02.cpp//AfirstprograminC++以//(comment)C++"firstprograminC++"http://(singned-linecomment),(C++C/*結束)。1//Fig.2.2:fig01_02.cpp2//AfirstprograminC++3#include<iostream>usingnamespaceintmain()6{7 cout<<"WelcomtoC++!\n";89 rerturn0; //indicatethatprogramendedsucessfully10}輸出結果:WelcomtoC++!下列語句:#include<iostream>(preprocessordirective),是發給C++#iostream.hC++ANSIISOC++雜標準實際上指定iostream.h和其它.h,如iostream譯器還不支持最新的ANSI/ISOC++下列語句:intmain()是每個C++程序都包的語句。main后面的括號表示main是個程序基本組件,稱為函數(function)C++mainmainmainmainintmain(body)(})cout<<"WelcomtoC++!\n";(string)cout<<toC++!\n"((stream)toC++!"sndadouutseamobeccout3Ccout。<<(streminsertionoperator)\n(escapcharacter)(escapesequence)\n(newline)即當2.3下列語句:return0; //indicatethatprogramendedsucessfullymainC++returnmain函數末return03右花括號(})表示main函數結束。義列 \n \t \r \a \\ \" 2.3(\n)確定一個喜歡的縮排長度,然后一直堅持這個縮排長度。可以用制表符生成縮排,但制表位可能改變。建議用1/4英寸制表位或三個空格的縮排長度。toC++!"2.42.2C++2.5\n\n2.5。1//Fig.2.4:fig01_04.cpp2//printingalinewithmultplestatements3#include<iostream>usingnamespaceintmain()6{7 cout<<"Welcom";8 cout<<"toC++!\n";910 return}輸出結果:WelcomtoC++!2.41//Fig.2.5:fig01_05.cpp2//printingmultiplelineswithasinglestatement3#include<iostream>usingnamespaceintmain()6{7 89 return0; //indicatethatprogramendedsucessfully10}輸出結果:WelcometoC++!2.5下一個程序用輸入流對象cin和流讀取運算符>>取得用戶從鍵盤中輸入的兩個整,計算這兩個值的和,并將結果用cout輸出。程序及其輸出如圖2.6。1//Fig.2.6:fig01_06.cpp2//Additionprogram3#include<iostream>4usingnamespacestd;5intmain()6{7 intinteger1,integer2,sum; //8cout<<"Enterfirstinteger\n"; //cin>>integer1; //cout<<"Entersecondinteger\n"; //cin>>integer2; //sum=integer1+integer2; //sumcout<<"Sumissum<<endl; //1516 return0; //017}45Entersecond72Sumis1172.6注釋語句://Fig.2.6:fig01_06.cpp//Additionprogram指定文件名和用途。C++預處理指令:#include<iostream>將iostream.h頭文件的內容放進程序中。mainmainmainintinteger1,integer2,sum;(declaration)integer1,integer2sum(variable)integer1,integer2sum的數據類型為7、、319143.40.0char(定義charx、$、7、*等等)。intinteger1;可以放在下列語句之前:cin>>integerl;下列聲明:int integer2;可以放在下列語句之前:cin>>integer2;下列聲明:intsum;可以放在下列語句之前:sum=integer1+integer2;下列句:cout<<"Enterfirstinteger\n";在屏幕上打印字符串Enterfirstinteger(b(stringliteral)(literal)),coutEnterfirstinteger\n".下列語句:cin>>integer1;cin>>cin(。上述語句表示cininteger1integer1Enter鍵(或Return鍵)(值integer1cout和cin流對象實現用戶與計算機之間的交互。由于這個交互像對話一樣,因此通常稱為對話式計算(conversationalcomputing)或交互式計算(interactivecomputing)。下列語句:cout<<"Entersecondinteger\n";secondinteger"cin>>integer2;從用戶取得變量integer2的值。賦值語句:sum=integer1+integer2;計算變量integer1和integer2的和,然后用賦值運算符(assignmentoperator)"="將結果賦給變sumsuminteger1integer2+integer1integer2suminteger1+integer2下列語句:cout<<"Sumis"<<sum<<endl;"Sumis"sumendl(endline)。endl,endl(concatenating)、鏈接(chaining)或連續使用流插入操作。這樣,計算可以在輸出語句中進行。可以將上述語句合二為一:cout<<"Sumis"<<integer1+integer2<<endl;從而不需要變量sum。右花括號告訴計算機到達了函數main的結尾。C++6章)C++用>><<8章)。算術運算算術運算符見圖2.10(*)表示乘法、百分號(%)(modulus)2.10"integer1+integer2"+”和兩個操作數integer1integer2。C++操作算術運算符代數表達式C++表達式加+f+7f+7減-p-cp-c乘*bmb*m除/x/y或x÷yx/y模 % rmods r%s圖2.10算術運算符()7/4117/53。C++(modulus)x%yxy7%43,17%52()。C++中的算術運算表達式應以直線形式在計算機中輸入。這樣,a除以b應輸入為"a/b",使所有常量、變量和運算符放在一行中。編譯器通常不接受下列代數符號:a-b但有些特殊專業軟件包支持復雜數學表達式更自然的表示方法。C++表達式中括號的使用和代數表達式中相同。例如,要將a乘以b+c的和,可以用:a*(b+c)C++中算術運算符的運算順序是由運算符的優先級規則確定的,與代數中的相同:運算符優先級保證C++按正確順序采用運算符。從左向右求值指的是運算符的結合律(associativity),也有一些運算符結合律是從右向左。圖2.11總結了運算符優先級規則,引入其它C++運算符時,這個表可以擴充,詳細的運算符優先級請參見附錄。運算符運算求值順序()括號最先求值,如果有嵌套括號,則先求最內層表達式的值,如果同一層有幾對括號,則從左向右求值。*、/、或%乘、除、求模其次求值。如果有多個,則從左向右求值。+或-加、減最后求值。如要有多個,則從左向右求值。圖2.11算術運算符優先級C+代數:

mabcde5C++: m=(a+b+c+d+e)/5;(a+b+c+d+e)a+b+c+d+(e/5)下例直的程代數:y=mx+bC++: y=m*x+b;不需要括號,乘法優先于加法,因此先乘后加。下列包含模(%)、乘、除、加、減運算:代數:z=pr%q+w/x-yC++:z=p*r%q+w/x-y;⑥①②④③⑤語句下面的圓圈數字表示C++采用運算符的順序。乘法、求模和除法首先從左向右求值(結合律為從左向右)因為它們的優先級高于加法和減法。然后進行加法和減法運算,也是從左向右求值。并不是有多對括號的表達式都包含嵌套括號。例如下列表達式不包含嵌套括號:a*(b+c)+c*(d+e)這些括號在同一層。要更好地了解運算符優先級規則,考慮二次多項式的求值:y=a*x*x+b*x+c;⑥①②④③⑤C++C++x2表示x*x,pow(數)powabcxa=2,b=3,c=7x=52.12上述賦值語句可以加上多余的括號,使代碼更清晰:y=(a*x*x)+(b*x)+c;C++ififif結構中的條件可以用相等運算符(equalityoperator)和關系運算符(relationaloperator)表示,如圖2.13關系運算符具有相同的優先級,結合律為從左向右。相等運算符的優先級也相同,但低于關系運算符的優先級,結合律也為從左向右。標準代數相等與關系運算符C++相等與關系運算符C++條件舉例C++條件含義===x==yx等于y≠關系運算符!=x!=yx不等于y>>x>yx大于y<<x<yx小于y≥>=x>=yx大于或等于y≤<=x<=yx小于或等于y圖2.13相等與關系運算符ififif2.142.14num1一個值讀到num2if2.14if語句2if()。1//Fig.2.14:fig01_14.cpp//Usingifstatements,relationnal//operators,andequalityoperators4#include<iosream>usingnamespaceintmain()7{8 int9cout<<"Enterintegers,andIwilltellyou\n"<<"therelationshipstheysatisfy:";cin>>num1>>num2; //13if(num1==num2)cout<<num1<<"isequalto"<<num2<<endl;16if(num1!=num2)cout<<num1<<"isnotequalto"num2<<endl;19if(num1<num2)cout<<num1<<"islessthan"<<num2<<endl;22if(num1>num2)cout<<num1<<"isgreaterthan"<<num2<<endl;25if(num1<=num2)cout<<num1<<"islessthanorequalto"29if(num1>=num2)cout<<num1<<"isgreaterthanorequalto"3334 return0; //35}輸出結果:Entertwointegers,andIwilltllyouTherelationshipstheysatisfy:373isnotequal73islessthan73islessthanorequalto7Entertwointegers,andIwilltellyoutherelationshipstheysatisfy:221222isnotequal1222isgretaerthan1222isgreaterthanorequalto12Entertwointegers,andIwilltellyoutherelationshipstheysatisfy:777isequalto77islessthanorequalto77isgreaterthanorequalto72.142.14C++圖2.15x+y+z求值為(x+y)+z。x=y=0x=(y=0)00。運算符結合律類型()從左向右括號* /%從左向右乘+ -從左向右加<< >>從左向右流插入/讀取< <=> >=從左向右關系== !=從左向右等于=從右向左賦值圖2.15運算符優先級和結合律本節是為使用支持ANSI/ISOC++頭文件的新名,包括.h2.16第3行:#include<iostream>演示新型頭文件名語法。第5行:usingnamespacestd;stdC++字空間能為每個新軟件組件保持惟一的名稱。1//Fig.2.16:fig01_16.cpp2//Usingnew-styleheaderfiles3#include<iostream.h>45usingnamespacestd;67intmain()8{cout<<"WelcomtoC++!\n";std::cout<<"WelwcomtoC++!\n";12 return13}輸出結果:WelcomtoC++!WelcomtoC++!圖2.16使用新型頭文件C++草案標準中的每個頭文件用名字空間std保證今后C++標準庫操作的每個特性是惟一句只是表示我們使用C++數放在名字空間deitelC++"usingnamespacestd"9cout10std::cout:std::cout<<"WelcomtoC++!\n";cout的完全限定名為5行的"usingnamespacestd"using語句可以在C++()C++第3章C++輸入/輸出流簡介C++/(I/O)操作,并對其余的輸入/入/C++C++中還大量利用了C++C++(typesafe)I/O(CC)。I/OI/OC++流C++(()。應用程序把字節的含義與字節關聯起來。字節可以是ASCII字符、內部格式的原始數據、圖形圖像、數字音頻、數字視頻或其他任何應用程序所需要的信息。輸人/輸出系統的任務實際上就是以一種穩定、可靠的方式在設備與內存之間傳輸數據。傳操(C++功能(I/O)(I/O)iostream類庫的頭文件C++iostreamiostream.hC++cincoutcerrclog4功能。在執行格式化I/O時,如果流中帶有含參數的流操縱算子,頭文件iomanip.h所包含的信息是有用的。fstream.h13C++輸入/輸出流類和對象iostream類庫包含了許多用于處理大量I/O操作的類。其中,類istream支持流輸入操作.類ostream支持流輸出操作,類iostream同時支持流輸入和輸出操作。istreamostreamiosiostreamistreamostream運算符重載為完成輸入/輸出提供了一種方便的途徑。重載的左移位運算符(<<)表示流的輸(>>)cin、cout、cerr、clogcinistream)算符把整數變量grade(gradeint)cincin>>grade;gradecout是類ostream的對象,它與標準輸出設備(通常指顯示設備)連在一起。下面的語句用流插入運算符cout把整型變量grade的值從內存輸出到標準輸出設備上。cout<<grade;gradecerr是類osteam的對象,它與標準錯誤輸出設備連在一起。到對象cerr的輸出是非緩沖輸出,也就是說插入到cerr中的輸出會被立即顯示出來,非緩沖輸出可迅速把出錯信息告訴用戶。clogostreamclog即每次插入clogC++ifstreamofstreamfstream/ifstream繼承了類istream,類ofstream繼承了類ostreamfstreamiostreamC++輸出流C++ostreamputwrite(3.5節);輸出(3.6.1節(3.6.2節)(3.7.2節)(3.7.6節)(3.7.3節)(3.7.4節)(3.7.7節)。流插入運算符流插入運算符(即重載的運算符<<)可實現流的輸出。重載運算符<<是為了輸出內部類型的數據項、字符中和指針值。3.9節要詳細介紹如何用重載運算符<<輸出用戶自定義類型的數據項。圖3.3中的范例程序用一條流插入語句顯示了輸出的字符串。圖3.4中的范例程序用多條流插入語句顯示輸出的字符串,該程序的運行結果與圖3.3中程序的運行結果相同。//Fig.3.3:figll03.cpp//Outputtingastringusingstreaminsertion.3#include<iostream>4usingnamespaceintmain()cout<<toC++!\n";89 return10}輸出結果:WelcometoC++!圖3.3//Fig.3.4:figllO4.cpp//Outputtingastringusingtwostreaminsertions.3#include<iostream>usingnamespaceintmain()6{7 cout<<to";8 cout<<"C++!\n";910 return0;11}輸出結果:WelcometoC++!圖3.4也可以用流操縱算子endl()\n()(3.5)endl發送一個換行符并刷新輸出緩沖區(不管輸出緩沖區是否已滿都把輸出緩沖區中的內容立即輸出)cout<<flush;3.6節要詳細討論流操縱算子。1//Fig.3.5:fig11_05.cpp2//Usingtheendlstreammanipulator.3#include<iostream.h>usingnamespaceintmain{)6{7 cout<<to";8 cout<<"c++!';9 cout<<endl; //endlinestreammanipulator10return12}輸出結果:WelcometoC++!圖3.5endl流插入運算符還可以輸出表達式的值(見圖3.6)1//Fig.3.6:fig11_O6.cpp2//Outputtingexpressionvalues.3#include<iostream.h>usingnamespaceintmain()6{7 cout<<"47plus53is";8//parenthesesnotneeded;usedforclaritycout<<(47+53); //expressioncout<<endt;1213 return14}輸出結果:47plus53is100圖3.6連續使用流插入/流讀取運算符載運<<和>>都可在條句連使用(圖3.7)。1 file:// Fig.3.7:fig11_07.cppfile:// CascadlngtheoverlOadGd<<OPeratOr.45 int 6 {7 cout<<"47plus53is"<<(47+53)<<endl;89 return 10 }輸出結果:47plus53is100圖3.7連續使用重載運算符<<圖中多次使用流插入運算符的語句等同于下面的語句:(((cout<<"47plus53is")<<47+53)<<endl);<<cout)(cout<<"47plus53is")它輸出一個指定的字符串,并返回對cout的引用,因而使中間括號內的表達式解釋為:(cout<<(47+53))它輸出整數值100,并返回對cout的引用。于是最右邊括號內的表達式解釋為:cout<<endl;它輸出一個換行符,刷新cout并返回對cout的引用。最后的返回結果未被使用。char*類型的變量C語言式的I/O必須要提供數據類型信息。C++對此作了改進,能夠自動判別數據類型。但是,C++char*<<(null)char*類型的字符串,因此使用void*類型來完成上述需求(需要輸出指針變量的地址時都可以使用void*類型)3.8char*C++0x0X打頭,3.6.1節、.53.7.7節1//Fig.3.8:fig11_08.cpp2//Printingtheaddressstoredinachar*variable3#include<iostream.h>usingnamespaceintmain()6{7 char*string="test";8cout<<ofstringis:"<<string<<ofstaticcast<void*>(string)is:"<<static_cast<void*>(string)<<endl;return13}輸出結果:Valueofstringis:testValueofstaticcast<void*>(string)is:Ox00416D50圖3.8char*putput函數的連續調用put成員函數用于輸出一個字符,例如語句:cout.put('A');將字符A顯示在屏幕上。也可以像下面那樣在一條語句中連續調用put函數:cout.put('A').put('\n');該語句在輸出字符A后輸出一個換行符。和<<一樣,上述語句中圓點運算符(.)從左向右結合,put成員函數返回調用put的對象的引用。還可以用ASCII碼值表達式調用put函數,語句cout.put(65)也輸出字符A。4 輸入流(>>)tab0(false);)failbit3.73.8流讀取運算符3.9cin>>//Fig.3.9:figll_09.cpp//Calculatingthesumoftwointegersinputfromthekeyboard3//withthecinoctandthestream-extractionoperator.4#include<iostream>5usingnamespacestd;6intmain()7{8 intx,9cout<<"Entertwointegers:";cin>>x>>12 cout<<"Sumof"<<x<<"and"<<y<<"is:"13 <<(x+y)<<endl;1415 return16}輸出結果:Entertwointegers:3092Sumof30and92is:122圖3.9計算用cin和流讀取運算符從鍵盤輸入的兩個整數值的和>><<3.10()。//Fig.3.10:figlll0.cpp//aprecedenceproblembetweenthestream-insertion3//operatorandtheconditionaloperator.4//Needparenthesesaroundtheconditionalexpression.5#include<iostream.h>usingnamespaceintmain()89 intx,10cout<<"Entertwointegers:";cin>>x>>cout<<x<<(x==y?"is":"isnot")<<"equalto"<<y<<endl;1516 return17}輸出結果:Entertwointegers:7 5isnotequalto5Entertwointegers:88isequalto8圖3.10避免在流插入運算符和條件運算符之間出現優先級錯誤我們通常在while0false)3.11(cin>>grade)0(false)。3.ios(istream的類)void*0void*//Fig.3.11:figll_ll.cpp//Stream-extractionoperatorreturningfalseonend-of-file.3#include<iostream.h>usingnamespaceintmain()6{7 intgrade,highestGrade=-1;8cout<<"Entergrade(enterend-of-filetoend):";while(cin>>grade){if(grade>highestGrade)highestGrade=1314 cout<<"Entergrade(enterend-of-filetoend):";15 }16cout<<"\n\nHighestgradeis:"<<highestGrade<<endl;return19}輸出結果:Entergrade(enterend-of-filetoend):67Entergrade(enterend-of-filetoend):87Entergrade(enterendoffiletoend):73Entergrade(enterend-of-filetoend):95Entergrade(enterend-of-filetoend):34Entergrade(enterend-of-filetoend):99Entergrade(enterend-of-filetoend):^zHeighestgradeis:99圖3.11流讀取運算符在遇到文件結束符時返回falsegetgetline不帶參數的getget。3.12eofgetputcout序首先輸出了cin.eof()0(false)cin(在IBMPC<ctrl>-z表示;在UNIXMacintosh<ctrl>-d)putcoutwhilecin.eof()1(true)cin中不帶參數的get成員函數,其返回值是所輸入的字符。1//Fig.3.12:figll_12.cpp2//Usingmemberfunctionsget,putandeof.3#include<iostream>usingnamespaceintmain()6{7 char8cout<<"Beforeinput,cin.eof()is"<<cin.eof()<<"\nEnterasentencefollowedbyend-of-file:\n";11while((c=cin.get())!=EOF)cout.put(c14cout<<"\nEOFinthissystemis:"<<c;cout<<"\nAfterinput,cin.eof()is"<<cin.eof()<<endl;return18}輸出結果:Beforeinput,cin.eof()is0Enterasentencefollowedbyend-of-file:thegetandputmemberfunctions^zthegetandputmemberfunctionsEOFinthissystemis:-1Afterinputcin.eof()is1圖3.12使用成員函數get.put和eofget(istreamget函數。

溫馨提示

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

評論

0/150

提交評論