C程序設計課本翻譯programminginC緊縮版_第1頁
C程序設計課本翻譯programminginC緊縮版_第2頁
C程序設計課本翻譯programminginC緊縮版_第3頁
C程序設計課本翻譯programminginC緊縮版_第4頁
C程序設計課本翻譯programminginC緊縮版_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+程序設計課本翻譯programming in C+前     言本書特點  網(wǎng)絡鏈接 貫穿整本書都能找到特定網(wǎng)絡圖標,促使學生訪問位于 這些網(wǎng)站鏈接能立即給學生取出在課本中出現(xiàn)的實際應用資料,網(wǎng)絡鏈接定期升級,以確保學生在因特網(wǎng)上收到最新的信息。目標 每一章開始都為學生列出一系列學習目標,這些目標在章節(jié)末尾的練習中得到增強和測試。編程例子 大部分章節(jié)都包含了編程例子,編程例子提出問題并討論它的解決方法。然后我們用C+編碼解答。我們同樣要顯示出例子測試的數(shù)據(jù)和輸出結(jié)果并進一步對程序測試結(jié)果進行討論。測試和調(diào)試 這部分涉及有

2、關(guān)程序測試的章節(jié)內(nèi)容,它們以一系列測試和調(diào)試的心得來結(jié)束。快速測試 這些問題測試學生回憶與章節(jié)目標相聯(lián)系的要點,在閱讀每一個問題時,學生立即應該知道答案,然后他或她可以看一下在這部分的末尾的答案來證實。被討論的概念的頁碼出現(xiàn)在每個問題的末尾,以便學生萬一有不正確的回答時,能夠復習這部分內(nèi)容。檢查準備練習 為了幫助學生準備測試,這些問題一般有客觀答案,并且這些問題被設計成只需幾分鐘就可以回答的。選擇問題的答案給出在書的后面,剩下的問題在教師用書中作回答。編程熱身練習 這些問題提供給學生編寫C+代碼段的感受,學生能夠在每章練習語法結(jié)構(gòu),而不要負擔編寫完整程序。編程問題 這些練習題需要學生設計解決方

3、法并寫出完整程序。 第一章   編程和解題概述目  標· 理解什么是計算機程序· 能夠列出編寫計算機程序的基本步驟· 理解什么是算法· 學習什么是高級編程語言· 能夠描述什么是編譯器及它的作用· 理解編輯和執(zhí)行過程· 學習什么是計算機的主要組成部件和部件如何一起工作· 能夠區(qū)分硬件和軟件· 能夠選擇一種適當?shù)慕鉀Q問題的方法來對一個問題研制出一種算法解1.1    編程概述什么是編程?編程:計劃或安排一項工作或一件事件的步驟。計

4、算機:能夠存儲,取出和處理數(shù)據(jù)的一種可編程裝置。計算機編程:為計算機連續(xù)執(zhí)行計劃一系列步驟的過程。計算機程序:一系列由計算機執(zhí)行的指令。我們?nèi)绾螌懸粋€程序?為計算機連續(xù)執(zhí)行寫一系列指令,我們必須通過兩步過程:解題和執(zhí)行。解題階段  1 分析和詳細敘述  弄懂(定義)問題和解決方法必須做什么。  2 一般解決方法(算法) 研究一系列解決問題的步驟。  3 驗證  確切地按照步驟看看是否解決方法真能做到解決問題。執(zhí)行階段  1 具體解決方法(程序) 把算法轉(zhuǎn)換成編程語言。  2

5、測試 使計算機按照指令執(zhí)行,然后手工地檢查結(jié)果。如果你發(fā)現(xiàn)錯誤,分析程序和算法,決定錯誤源,然后糾正。  3 一旦程序?qū)懞?,進入第三階段:維護。維護階段  1 使用 使用程序。  2 維護 為了滿足改變程序的需要或糾正出現(xiàn)在使用程序中的錯誤而修改程序。  編程者開始通過分析問題并研究一個通常的解決方法的編程過程,稱為算法。算法:在有限的時間內(nèi),為解決問題的一步一步的步驟。  在研究一個通常的解決方法后,編程者測試算法,人工檢查走過每一步,如果算法不能工作,編程者重復解決問題的過程,再一次分析問題

6、并提出來。編程語言  用于構(gòu)造一個計算機程序的一套規(guī)則,符號和特殊詞。程序語言   是一些附著一套嚴格語法的英語簡化形式(具有數(shù)學符號)。  英語遠復雜于今天的計算機所遵循的語言。由于編程語言限制了詞匯和語法,編程語言簡單的多。  雖然編程語言在形式上是簡單的,但它不容易使用。使用不多于45個詞匯嘗試給某人最近的方向,你會開始看到問題。編程強迫你寫非常簡單、確切的指令。  轉(zhuǎn)換一個算法成一個編程語言被稱為編碼算法。轉(zhuǎn)換的產(chǎn)品程序在計算機上運行程序來測試它。如果程序不能產(chǎn)生期望的結(jié)果,編程者必須調(diào)

7、試它即,檢測錯誤是什么然后修改程序,或者甚至是算法,修改它。編碼和測試一個算法的結(jié)合稱為實現(xiàn)。 1.2    什么是編程語言?能夠直接在計算機上運行的僅有的編程語言是建立在計算機內(nèi)的原始指令機器語言或機器代碼。  機器語言: 由二進制代碼指令所組成的語言,機器語言被直接用于計算機.  例如:  指令名                機器語言形式 &

8、#160;Add                     100101  Subtract            010011計算機科學家了研制高級編程語言,由于高級語言更接進英語和其它自然語言.  編譯器: 轉(zhuǎn)換高級語言為機器代碼的程序. 

9、; 被稱為編譯器的程序轉(zhuǎn)換以高級語言(例如,C+, Pascal , FORTRAN , COBOL, or Ada)寫的程序成機器語言. 如果你以高級語言寫一個程序,你能夠在任何有適當編譯器的計算機上運行它. 這是可能的,因為大多數(shù)高級語言是標準化的, 這意味著一種正式的語言描述是存在的.  高級語言程序被稱為源程序, 對編譯器來說, 一個源程序正是輸入數(shù)據(jù). 編譯器轉(zhuǎn)換源程序成被稱為目標程序的機器語言程序. 一些編譯器也輸出一個列表-一個具有錯誤信息和其它插入信息的拷貝.  弄懂編譯和執(zhí)行是兩個不同的過程是重要的.在編譯期間,編譯器運行編譯

10、程序,在執(zhí)行期間,目標程序被裝載到計算機的內(nèi)存單元,取代編譯器程序. 然后計算機運行目標程序,程序命令它做的任何要做的事情(見圖1-4).  在編程語言中的指令影響一個計算機能夠完成的操作.   編程語言需要我們使用某些控制結(jié)構(gòu)表示算法作為程序.在大部分編程語言中有四種基本結(jié)構(gòu)語句的方法(指令):  (1) 順序結(jié)構(gòu)   (2) 條件結(jié)構(gòu)  (3) 重復結(jié)構(gòu)   (4) 子程序結(jié)構(gòu)(見圖1-5)  順序結(jié)構(gòu)是一系列一條接一條被執(zhí)行的語句.  選擇結(jié)構(gòu)(條件

11、控制結(jié)構(gòu)), 取決某些條件執(zhí)行不同的語句.  重復控制結(jié)構(gòu), 當某些條件滿足時循環(huán),重復語句.  子程序允許我們構(gòu)造一個被中斷進入更小單元的程序.  這四種結(jié)構(gòu)語句方法的每一種控制計算機執(zhí)行語句的次序, 這就是為什么它們被稱為控制結(jié)構(gòu).圖1-5 基本編程語言結(jié)構(gòu)  一個子程序是由多個步驟組成的一個過程,子程序允許分別地寫我們程序各部分,然后裝配它們成最終形式. 它們能極大地簡化寫大程序的工作. 1.3    什么是計算機?如果你知道某些有關(guān)計算機的各部分,你能更好地理解編程語言中每種指

12、令的影響.  大部分計算機有六種基本的部件:  (1) 內(nèi)存單元   (2) 算術(shù)/邏輯單元  (3) 控制單元   (4) 輸入設備  (5) 輸出設備   (6) 輔助存儲設備  圖1-6是計算機基本部件的形式圖    存儲單元: 在計算機中的內(nèi)部數(shù)據(jù)存儲器。  存儲單元是一個按照順序存儲的單位, 每個單位能保存一些數(shù)據(jù), 每個存儲單位有一個不同的地址, 我們利用這個地址為了存儲數(shù)據(jù)到存儲單位或從存儲單

13、位取出數(shù)據(jù). 存儲單元即保持數(shù)據(jù)也保持指令。  控制處理單元(CPU): 計算機執(zhí)行被存儲在存儲器中的指令的部件. 由算術(shù)/邏輯單元(ALU)和控制單元組成。  算術(shù)/邏輯單元(ALU): 完成算術(shù)和邏輯操作的中央處理單元的部件。  控制單元: 控制其它部件的活動的中央處理單元的部件。  輸入/輸出(I/O)設備: 接受要處理(輸入)的數(shù)據(jù)和給出處理(輸出)結(jié)果的計算機部件。  鍵盤是一個普通的輸入設備,另一個是鼠標, 一個指示設備. 屏幕顯示是一個普通的輸出設備, 像打印機和液晶顯示屏幕(LC

14、D)也是輸出設備. 某些設備,例如連接到計算機網(wǎng)絡的設備,既可以用做輸入也可以用做輸出。  硬件: 計算機的物理部件。  軟件: 計算機程序;有關(guān)計算機的所有程序的設置。  接口: 一個共享地邊界, 在這個邊界允許獨立系統(tǒng)匯集和作用或互相通信。  操作系統(tǒng): 管理所有計算機資源的一套程序。  編輯器: 被用來建立和修改源程序或數(shù)據(jù)的交互程序。  軟件工程: 對軟件研究的傳統(tǒng)工程應用的方法學和技能。 第二章  C+ 語法和語義及程序研究過程目 &#

15、160;標懂得一個C+ 程序是如何由一個或多個子程序(函數(shù))組成 .· 為了弄懂一般管理C+ 程序的規(guī)則,能閱讀語法模板.· 能夠建立和識別合法的C+ 標識符.· 能夠聲明字符和字符串類型的名字常數(shù)和變量.· 能夠區(qū)別C+中保留字與用戶自定義標識符.· 能夠?qū)ψ兞抠x值.· 能夠建立由常量、變量和連接運算符組成的簡單串表達式.· 能夠建立一條寫到輸出流的語句.· 能夠確定輸出語句打印什么內(nèi)容.· 能夠使用注釋來說明你的程序.· 能夠建立簡單的C+ 程序.2.1   C+ 程序的

16、元素  在這章, 我們開始看看組成C+ 程序設計語言的規(guī)則和符號. 我們也回顧一下建立一個程序并能在計算機上運行的所需步驟.C+ 程序結(jié)構(gòu)  在第1章, 我們說子程序允許我們分別地寫程序各部分,然后將各部分匯集成最終的形式。 在C+中, 所有子程序都被稱為函數(shù),一個C+程序由一個或多個函數(shù)匯集而成。  每個C+程序必須有一個名為main的函數(shù)。程序總是從main函數(shù)開始執(zhí)行。當main希望Square函數(shù)完成一項工作,那么main調(diào)用Square函數(shù),當Square函數(shù)執(zhí)行完它的語句后,Square自然返回控制到main,這樣main

17、能夠繼續(xù)執(zhí)行。  讓我們看一個有3個函數(shù)(main,Square和Cube)的簡單C+程序。暫不要關(guān)心程序詳細內(nèi)容,只是大致觀察程序的形式和結(jié)構(gòu)。#include <iostream>using namespace std;int Square( int ) ;int Cube( int );int main( )cout << "The square of 27 is " << Square(27) << endl;cout << "and the cube of 27 is &qu

18、ot; << Gube(27) << endl;return 0; int Square( int n )return n * n;int Gube( int n )return n * n * n;  三個函數(shù)中的每一個函數(shù)的左花括號和右花括號分別標志著語句執(zhí)行的開始和結(jié)束。出現(xiàn)在花括號中間的語句被稱為函數(shù)體。  程序執(zhí)行總是從main函數(shù)的第一條語句開始,在我們的程序中,第一條語句是cout << "The square of 27 is " << Square(27) <&l

19、t; endl;  這是一條引起信息在計算機屏幕上打印出來的輸出語句。  因此,執(zhí)行這個程序完整的輸出結(jié)果是:The square of 27 is 729and the cube of 27 is 19683  Square 和 Cube 都是帶回返回值函數(shù)的例子,一個帶回返回值的函數(shù)返回一個值給它的主調(diào)函數(shù)。在Square函數(shù)的第一行“int Square( int n )”開始的單詞int 表示函數(shù)返回一個整型值。  你看到main函數(shù)的第一行是:int main( )  單詞 int 指

20、示了main 是一個應該返回一個整數(shù)的帶回返回值的函數(shù),main確實要返回值,在屏幕打印出27的平方和立方后,main執(zhí)行語句return 0 ;  返回值0到它的主調(diào)者,但是誰是main函數(shù)的主調(diào)者?回答是:計算機的操作系統(tǒng)。  當main結(jié)束執(zhí)行時,操作系統(tǒng)希望 main 返回一個值(退出狀態(tài)),習慣上,返回0值意味著所有運行正常。任何其它的返回值(典型的有 1,2,)意味著出現(xiàn)了某些錯誤。2.1     C+ 程序的元素語法和語義  編程語言是一組用于構(gòu)造一個程序的規(guī)則、符號和特殊字。規(guī)則

21、既有語法也有語義的規(guī)則。  語法:在編程語言中,控制如何書寫有效指令的正式規(guī)則。  在編程語言中,語法是是一組正式的,確切定義了字母、數(shù)字和符號結(jié)合在一起被使用的規(guī)則。  語義:編程語言中,決定指令的含義的的規(guī)則。語法模板  一個語法模板是定義C+結(jié)構(gòu)的通用例子。圖形方便顯示了哪些是可選擇的,哪些能夠被重復。在C+語言中,有黑影的字是字面上的字或字符,無黑影的字能夠由其它模板重復?;ɡㄌ柋挥脕碇甘卷椖苛斜恚瑥捻椖苛斜碇羞x擇一項。   讓我們來看一個例子,這個模板定義了C+中的標識符。 

22、  陰影部分指示了定義部分是可選的。三個點(. . .)意味著前導符號或陰影塊能夠被重復。然而,C+中的一個標識符必須用字母或下劃線開始,接著后面的一個或多個字母、下劃線或數(shù)字是可選的。   這些是用于字母和數(shù)字的模板:字母 數(shù)字AZ az 09  現(xiàn)在讓我們來看看C+中主函數(shù)main的語法模板:  main 函數(shù)用int開始,接著單詞main,然后是左右括號。函數(shù)的第一行是起首部分,在起首部分后,左花括號標記著函數(shù)語句 (函數(shù)體)的開始。陰影和三個點(注:本網(wǎng)頁只有兩個點)指示了函數(shù)體由零個或多個語句組成。最后右

23、花括號指示了函數(shù)的結(jié)束。  最短的C+程序是:int main( )return 0;  為程序的元素命名: 標識符  C+中,標識符被用來為某事命名例如為像子程序這樣的程序命名,并將程序存儲在計算機的存儲器中。標識符由字母 (A-Z, a-z), 數(shù)字 (O-9), 和下劃線( _ )組成,但是必須用字母或下劃線開始。  標識符與函數(shù)和數(shù)據(jù)對象聯(lián)系在一起,使用標識符就涉及到函數(shù)或數(shù)據(jù)。(在某些C+系統(tǒng)中,用下劃線開始的標識符有特殊的意義,所以最好用字母開始一個標識符。)  這里是一些有效標識符

24、的例子:sum_of_squares J9 box_22A GetData Bin3D4 count下面是一些無效標識符的例子以及為什么它們是無效的原因:  表中最后的標識符int是一個保留字的例子。  C+中,保留字有特殊的用途,你不能像編程者定義標識符那樣使用它。附錄A列出C+中所有的保留字。  保留字: C+中有特殊意義的單詞,它不能像編程者定義標識符那樣被使用。  使用有意義、可讀性好的標識符  C+是一種敏感的語言。大寫字母與小寫字母是不同的。標識符:PRINTTOPPORTION &

25、#160; printtopportion   RiNtToPpOrTiOn   PrintTopPortion是四種有區(qū)別的名字,無論如何不能交換。正如你看到的,這些形式中的最后一個標識符是最容易讀的。在本書中,我們使用大寫字母、小寫字母和下劃線組合在一起的標識符。數(shù)據(jù)和數(shù)據(jù)類型   數(shù)據(jù)被存儲在計算機的存儲器中,每一個存儲器的位置有唯一的地址,我們用這個地址存儲和取出數(shù)據(jù)。在機器語言代碼中,存儲器的每個位置的實際地址是一個二進制數(shù)。 C+中,我們使用標識符來命名存儲器的位置;然后編譯器為我們將標識符轉(zhuǎn)換成二進制。這是高級

26、編程語言的有點之一: 它避免我們與存儲器位置的數(shù)字地址(在這個地址中,我們存儲數(shù)據(jù)和指令)接觸。  數(shù)據(jù)類型:一組特殊的數(shù)據(jù)值及在這組數(shù)據(jù)值上的操作。  在C+中,每片數(shù)據(jù)必須具有指定的數(shù)據(jù)類型,數(shù)據(jù)類型決定了數(shù)據(jù)在計算機中如何被表示以及計算機能夠在數(shù)據(jù)上處理的種類。  一些類型的數(shù)據(jù)被如此頻繁的使用,所有C+為我們定義了它們。這些標準類型的例子是int (用于整數(shù))、 float (用于具有小數(shù)的實數(shù))和 char (用于字符數(shù)據(jù))。  此外,C+允許編程者定義自己的數(shù)據(jù)類型( 用戶定義的類型)。 &#

27、160;在本章中,我們集中在兩種數(shù)據(jù)類型一種是用來描述只有一個字符組成的數(shù)據(jù),另一種是用來描述字符串的數(shù)據(jù)。char 數(shù)據(jù)類型:標準類型char描述由一個字母數(shù)字字符(一個字母、一個數(shù)字或一個特殊符號)組成的數(shù)據(jù):   A a 8 2 + - $ ? *   注意每個字符用單引號括起來,也就是說,C+編譯器需要引號來區(qū)分字符8和整數(shù)值8,因為兩種數(shù)據(jù)在計算機內(nèi)存儲是不同的。注意空格, ,也是有效的字符。  string數(shù)據(jù)類型: 鑒于類型char的值被限定為一個字符,因此string是一系列字符。像用雙引號括起來的一個單詞、名字或句子

28、。例如,下面是C+中的字符串:    "Problem Solving"   "C+"   "Programming and "   "."  一個串必須完整的打印在一行上,例如,下面串"This string is invalid because itis typed on more than one line."是無效的,因為它分裂成了兩行。  引號不屬

29、于串的部分,而只是簡單用于把串與C+程序的其它部分區(qū)分開來。  一個不包含字符的串被稱為空串。我們使用兩個雙引號來寫空串,雙引號中間不包含任何字符(甚至不包含空格):""  空串不等于空格串;空串是不包含字符的特殊串。2.1     C+ 程序的元素為元素命名:聲明  標識符既可以被用于命名常量也可以命名變量。換句話說,標識符可以是內(nèi)容不允許改變的存儲器位置的名字或是內(nèi)容可以改變的存儲器位置的名字。  我們?nèi)绾胃嬖V計算機標識符表示的是什么?我們使用聲明來命

30、名一個標識符以及它表示的是什么。例如,聲明int empNum;通告empNum 是一個內(nèi)容是類型int的變量名。當我們聲明一個變量時,編譯器為我們挑出存儲器中的一個位置與標識符聯(lián)系起來,并自動地與它保持聯(lián)系。  聲明:將標識符與一個數(shù)據(jù)對象、一個函數(shù)或一種數(shù)據(jù)類型聯(lián)系起來的一條語句,以便程序員用名字來涉及那些項目。   在C+中,每個標識符只可以表示一種事情,你使用在程序中的每個標識符必須與所有其它的標識符不同。常量和變量統(tǒng)稱為數(shù)據(jù)對象。程序中,數(shù)據(jù)對象和實際指令都存儲在各個存儲器位置中。  在 C+中,每個標識符在它被使用之前,你

31、必須聲明它。這樣允許編譯器驗證標識符的使用與它聲明的是否是一致的。  C+中每種數(shù)據(jù)對象、函數(shù)或數(shù)據(jù)類型有不同的聲明語句。   變量:當程序執(zhí)行時,不同的變量在不同的時間也許被存儲在同一存儲器位置中,這種存儲器位置被稱為變量,并且它的內(nèi)容是變量值。與存儲器位置相聯(lián)的符號名字是變量名或變量標識符(見圖2-1)。圖 2-1 變 量  聲明變量意味著具體指出它的名字和它的數(shù)據(jù)類型。這告訴編譯器將名字與存儲器位置聯(lián)系在一起,存儲器的內(nèi)容具有具體的類型(例如,字符型char或字符串型string),下列語句聲明 myChar 是一個類型char

32、的變量:char myChar;  一個聲明語句總是以分號結(jié)尾。  在一條語句中聲明幾個變量是可以的:char letter , middleInitial , ch ;  這里,三個變量都聲明是char變量。盡管這樣,我們還是偏愛用分開的語句聲明每一個變量:char letter;char middleInitial ;char ch ;  當修改程序、增加新變量到行中或刪除你不再想要的項時,這種形式更容易。   用分開的語句聲明每個變量也允許你附加注釋到每個聲明語句的右邊,如下面這樣:flo

33、at payRate; / 雇員支付比例float hours; /工作小時 float wages; / 應得薪水float total; / 總的公司薪資總額int empNum; / 雇員ID號  這些聲明告訴編譯器為四個float變量payRate 、 hours 、 wages 、total和一個int變量empNum預留存儲器空間。注釋(寫在/ 后面的每行單詞)為讀程序者解釋每個變量表示什么。   現(xiàn)在我們已看到C+中如何聲明變量,讓我們再看看如何聲明常量。  所有單個字符( 用單引號括起來)和串(用雙引號括起來)是常量。

34、   'A'   ''   "Howdy boys"   "Please enter an employee number: "  常量是它的值決不能改變的一些數(shù) ,當我們在程序中使用一個實際的常量值時,我們使用的是字面常量。  字面常量:寫在程序中的任何常量。  名字常量(符號常量):涉及到一個標識符的存儲器位置,這個存儲器包含了不能改變的數(shù)據(jù)。  這里,我們看一

35、些常量聲明的一些例子。注意聲明以保留字const開始,并且等號出現(xiàn)在標識符和字面常量之間。const string STARS = "* * * * * * * *"const char BLANK = ' ' const string BOOK_TITLE = "Programming in C+" ;const string MESSAGE = "Error condition" ;  正如我們上面所做的,許多C+編程者都大寫名字常量的整個標識符并且用下劃線分開英語單詞。這種方法讓讀者迅速區(qū)別出

36、現(xiàn)在程序中的變量名和常量名。  本書中我們使用標識符的習慣如下: · 對于變量,我們以小寫字母開始,每個后續(xù)單詞以大寫字母開始   lengthInYards    middleInitial    hours · 編程者寫的函數(shù)和編程者寫的數(shù)據(jù)類型,每個后續(xù)單詞以大寫字母開始,但是開始用大寫字母開始。   GalcPay(payRate ,hours ,wages)    Cube(27) &#

37、160;  MyDataType · 對于名字常量,每個字母用大寫并且用下劃線分開英語單詞。   BOOK_TITLE    OVERTIME    MAX_LENGTH  2.1     C+ 程序的元素執(zhí)行語句  賦值:變量的值能夠通過賦值語句被設置或改變。例如:lastName = "Lincoln" ;賦串值"Lincoln"到變量lastName中。 

38、60;這是賦值語句的語法模板:  賦值語句:存儲一個表達式的值到一個變量中,任何預先設置在變量中的值被破壞并且被表達式的值所代替。  僅能有一個變量能放在一個賦值語句的左邊,一個賦值語句與一個數(shù)學等式(x+y=z+4)是不同的。給出聲明:string firstName ;string middleName ;string lastName ;string title;char middleInitial ;char letter ;  下列賦值是有效的:firstName = "Abraham" ;middleN

39、ame = firstName;middleName = " " ;lastName = "Lincoln" ;title = "President" ;middleInitial = ' ' ;letter = middlelnitial;  無效賦值語句 原因middleInitial = "A ." middleInitial 具有字符類型;而 "A. " 是串。letter = firstName ; letter 具有字符類型;具有串類型。first

40、Name = Thomas ; Thomas 是一個沒有聲明的標識符。"Edison" = lastName ; 只有變量才能出現(xiàn)在賦值號“”的左邊。lastName = ; 賦值號右邊的表達式丟失。  可是,這些賦值是無效的:  表達式:由標識符、字面常量和運算符排列的能求出一個給定類型值的式子。  串表達式:雖然我們不能在串上實現(xiàn)算術(shù)運算,但串數(shù)據(jù)類型提供了一個特殊的使用“”運算符的被稱為連接的串操作,  兩個串連接的結(jié)果是一個包含兩個串中字符的新串。例如,給出語句: string book

41、Title ;string phrasel ;string phrase2 ;phrase1 = "Programming and " ;phrase2 = "Problem Solving" ;  我們能夠?qū)懗觯篵ookTitle = phrasel + phrase2;  這個語句從存儲器中取出phrase1的值,并且連接 phrase2形成一個新的、暫時的包含字符"Programming and Problem Solving"的串。然后這個暫時的串賦給(存儲到) bookTitle。&#

42、160; 如果我們?nèi)〈孟率剑篵ookTitle = phrase2 + phrase1;  那么bookTitle的內(nèi)容為:"Problem SolvingProgramming and "  名字串常量、字面串和字符數(shù)據(jù)及串變量的連接,僅有的限制是,用“”連接符連接的操作數(shù)之一至少必須有一個是串變量和名字常量(所以你不能使用像這樣的表達式:"Hi" + "there" Or 'A' + 'B')。例如,如果我們已經(jīng)聲明了下面的常量:const str

43、ing WORD1 = "rogramming" ;const string WORD3 = "Solving" ;const string MORD5 = "C+" ;  那么我們能夠?qū)懗鱿铝匈x值語句:bookTitle = 'P' + MORd1 + " and Problem " + MORD3 + " with " + WORD5;結(jié)果,bookTitle 包含串:"Programming and Problem Solving with C

44、+"  假如bookTitle 已經(jīng)包含 "Programming and Problem Solving", 并且我們希望得到標題,我們能夠使用形如下式的一條語句:bookTitle = bookTitle + " with C+"  記住連接只能用串類型變量。甚至是對操作數(shù)用算術(shù)加運算符,我們也不能將像int和float這樣的數(shù)字數(shù)據(jù)類型值與串連接。  輸出:在C+中,我們使用一個特殊變量名cout與插入運算符(<<)一道來寫出變量和表達式的值: cout <&l

45、t; "Hello"  這個語句在標準輸出設備(通常是顯示器)上顯示字符Hello。  變量cout被預先在C+系統(tǒng)中定義來指示輸出流。你能夠認為一個輸出流就像一系列無休止的字符送往輸出設備。在有cout場合, 輸出流就送往標準輸出設備。  插入運算符 << (常發(fā)音為"put to")要兩個操作數(shù)。它的左邊操作數(shù)是一個流表達式(最簡單的場合,只有一個如cout這樣的流變量),它的右邊操作數(shù)是一個表達式,這個表達式可以是一個字面串這樣的簡單表達式: cout << &qu

46、ot;The title is "cout << bookTitle + ". 2nd Edition"  插入運算符將右邊的操作數(shù)轉(zhuǎn)換成一系列字符并把它們插入到輸出流中。注意<<的指向,數(shù)據(jù)是將寫在“<<”右邊的表達式送往“<<”左邊的輸出流。  在一條輸出語句中,你能夠使用<<運算符多次,每添加下一個數(shù)據(jù)項到輸出流,“<<”就出現(xiàn)一次。例如,我們能夠?qū)⑶懊鎸懙膬蓷l輸出語句寫為:cout << "The title is &quo

47、t; << bookTitle + ". 2nd Edition"  如果bookTitle 包含"American History", 那么兩種方法產(chǎn)生相同的結(jié)果:The title is American History. 2nd Edition  下列是輸出語句產(chǎn)生的輸出顯示,這些例子假設字符變量ch包含2,串變量firstName包含"Marie", 并且串變量lastName 包含 "Curie".    如果你想

48、打印出包含雙引號的一個串,你必須打入反斜杠和雙引號,它們中間沒有空格。例如,打印字符:A1 "Butch" Jones  輸出語句像如下這樣:cout << "A1 "Butch" Jones"  通常,一個接一個的輸出語句引起輸出連續(xù)顯示在同一行上。序列語句:cout << "Hi" ;cout << "there" ;  寫出下列串在同一行屏幕上:Hithere  要打印兩個單

49、詞分別在兩行上,我們可以這樣寫:cout << "Hi" << endl;cout << "there" << endl;  這些語句輸出是:Hithere  標識符endl (意思是"end line")是一個特殊的被稱為控制符的 C+特性。endl 讓你結(jié)束一個輸出行并且繼續(xù)到下一行。在程序中增加注釋  所有你需要執(zhí)行的程序是由聲明和執(zhí)行語句正確的結(jié)合在一起的。編譯器忽略注釋,但注釋極大地幫助了那些必須讀程序的人們。注釋可以

50、出現(xiàn)在除標識符、保留字或字面常量中間以外的任何程序中的地方。C+注釋以兩種形式出現(xiàn)。第一種是用一對/* */括起來的任何序列字符,編譯器忽略一對/* */內(nèi)的任何字符。這里是一個例子: string idNumber; /* Identification number of the aircraft */  第二種更普遍,用兩個斜杠(/)開始并延續(xù)到那行程序的結(jié)尾: string idNumber; / Identification number of the aircraft編譯器忽略兩斜杠后面的任何字符。   充分的注釋程序是好的編程風格。一個注釋因

51、該出現(xiàn)在程序的開始來解釋程序做什么。另一個好的注釋地方是在常量和聲明中,那里的注釋解釋每個標識符被用來做什么。此外,在一個長的程序中,注釋應該引導每個主要步驟并解釋那些不常出現(xiàn)或難讀懂的程序步驟。 2.2     程序結(jié)構(gòu)我們已經(jīng)看過了C+程序的基本元素:標識符、聲明、變量、常量、表達式、語句和注釋?,F(xiàn)在讓我們來看看這些元素如何集成為一個程序。正如早些時候看到的那樣,C+程序由函數(shù)組成,其中之一必須是名為main的函數(shù)。一個程序也可以有位于任何函數(shù)外的聲明。程序模板見如下: 一個函數(shù)的定義由函數(shù)頭和左右花括號限定的函數(shù)體組成: 

52、60;這里是一個只有main函數(shù)的程序例子:/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ PrintName 程序/ 這個程序用兩種不同的形式打印一個人名 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #include <iostream>#include <string>using namespace std;const string FIRST = "Herman" / 人名的名const st

53、ring LAST = "Smith" / 人名的姓const char MIDDLE = 'G' ; /中間名的首寫字母int main( )string firstLast; / 名字以“名姓”格式string lastFirst; / 名字以“姓名”格式firstLast = FIRST + " " + LAST;cout << "Name in first-last format is " << firstLast << endl;lastFirst = LAST + &qu

54、ot;, " + FIRST + ", "cout << "Name in last-first-initial format is "cout << lastFirst << MIDDLE << '.' << endl; return 0;  程序開始用注釋解釋程序做什么,注釋后面緊跟著出現(xiàn)下列行:#include <iostream>#include <string>using namespace std; &#

55、160;#include行指示C+系統(tǒng)將名為iostream 和 string的文件內(nèi)容插入到我們的程序中。為了將輸出值送到像cout這樣的流中,第一個文件包含了C+所需要的信息。第二個文件包含了有關(guān)程序員定義的數(shù)據(jù)類型string的信息。  接下來是常量FIRST、 LAST和 MIDDLE的聲明,注釋解釋了它們?nèi)绾问褂谩JO碌某绦蚴莔ain函數(shù)的定義,第一行是函數(shù)頭:保留字int、 函數(shù)名、然后是開合圓括號 (圓括號告訴編譯器main是函數(shù)名,不是變量或名字常量。)。函數(shù)體包含兩個變量firstLast 和 lastFirst的聲明,接著是一系列執(zhí)行語句。 main 函

56、數(shù)以返回0作為函數(shù)值來結(jié)束函數(shù)。塊(復合語句)函數(shù)體是一個塊(或復合語句)的例子。這是塊的語法模板:  一個塊只是用一對花括號 括起來的零條或多條語句序列。   這里是一個在本章討論的限于C+語句的語句模板:  一條語句可以是空語句,空語句只是一個分號( ; )。在執(zhí)行時絕對不做任何事,只是開始著手下一條語句,它不常使用。  我們常使用塊,特別是用它作為其它語句的部分。刪去一對花括號 會引起戲劇性的改變含義及程序的執(zhí)行。這就是為什么我們總是在一個塊內(nèi)鋸齒排列語句在一個長的、復雜的程序中,鋸齒排列語句使得塊容易認出。

57、塊的語法模板顯示在右花括號后沒有分號。  按照語句的語法模板,一個聲明正式地被認為是一條語句。因此一個聲明可以出現(xiàn)在任何執(zhí)行語句能夠出現(xiàn)的地方。如果我們希望的話,在一個塊中我們可以將聲明和執(zhí)行語句混合在一起:char ch;ch = 'A'cout << ch;string str;str = "Hello"cout << str;  雖然這樣,編程者更普通的還是把聲明語句組織在一起放在執(zhí)行語句之前: char ch ;string str;ch = 'A'cout <&l

58、t; ch;str = "Hello"cout << str;C+預處理器  預處理器概念是C+的基礎(chǔ),預處理器是一個程序,這個程序在編譯階段作為濾波器。你的源程序在先通過預處理器再到編譯器(見圖22)。用“”符號開始的一行不被認為是一個C+語言語句(而且不用分號結(jié)尾),它被稱為預處理指令。預處理器展開#include指令,具體地插入#include后面名字的文件到你的源程序中。出現(xiàn)在一個#include 指令中名字的文件被稱為頭文件,頭文件包含了程序所需的常量、變量、數(shù)據(jù)類型和函數(shù)的聲明。在指令:#include <iostream&

59、gt;#include <string>中,需要尖括號< >。尖括號告訴預處理器在標準的包含指令中搜索文件,標準的包含指令位于計算機系統(tǒng)中,計算機系統(tǒng)中包含了所有與C+標準庫相關(guān)的頭文件。文件 iostream 包含了靈活的輸入、輸出的聲明,并且文件string 包含了有關(guān)串數(shù)據(jù)類型的聲明。介紹Namespaces 在我們的“Happy Birthday”程序中,即使我們增加預處理器指令#include <iostream>,程序也不會編譯,編譯器仍不能識別標識符 cout 和endl。 問題在于頭文件iostream 聲明它所有的標識符都在名為std 的n

60、amespace 中:namespace std: 變量、數(shù)據(jù)類型等的聲明  在namespace塊內(nèi)聲明的標識符只能被那個塊內(nèi)的語句訪問,為了能訪問“隱藏”在namespace內(nèi)的標識符,編程者有幾種方法可選擇,這里我們描述兩種選擇。第一個選擇是為標識符使用一個有附帶條件的名字,一個有附帶條件的名字由 namespace的名字,然后是:運算符(范圍決定運算符), 再就是所希望的標識符組成:std:cout  用這種方法,我們的程序看起來如下:#include <iostream>int main( )std:cout << &q

61、uot;Happy Birthday" << std: :endl;return 0;  注意cout 和endl 必須被附帶條件。  第二種選擇是使用一條稱為 using 指令的語句:using namespace std;  當我們安排這條語句在main函數(shù)之前的程序頂部附近時,我們就可以使std 名字空間中的所有標識符在我們的程序中可訪問,而不需對標識符附加條件:#include <iostream>using namespace std;int main()cout << &quo

62、t;Happy Birthday" << endl;return 0; 2.3   關(guān)于輸出我們能控制輸出的水平和垂直的空處(空白的地方),使得輸出更合要求(更可理解)。讓我們首先看看輸出的垂直空行。產(chǎn)生空行   在輸出語句中我們使用endl 控制符來控制垂直空行。你已經(jīng)看見了一系列輸出語句持續(xù)寫出字符在當前行,直到endl才中斷當前行(光標移到下一行)。這里是一些例子:   你認為下列語句會打印出什么?cout << "Hi there, " <<

63、 endl;cout << endl;cout << "Lois Lane." << endl;   輸出的結(jié)果是三行:Hi there,Lois Lane.   記住,在C+程序中如何寫一個輸出語句有很大的靈活性,我們能夠?qū)⑶懊嫒龡l語句結(jié)合成兩條語句:cout << "Hi there, " << endl << endl;cout << "Lois Lane." << endl

64、;   事實上,我們能將三條語句寫成一條語句,一種可能是:cout << "Hi there, " << endl << endl << "Lois Lane." << endl;   另一個可能是:cout << "Hi there, " << endl << endl;<< "Lois Lane." << endl; 

65、60; 后面的例子顯示了你能將一條C+語句擴展到程序的多行上,編譯器處理一條語句的結(jié)束,不是以物理行作為結(jié)束,而是以分號作為語句的結(jié)束。在一行內(nèi)插入空格   為了控制輸出的水平空白處,一種技巧是送一個空格字符到輸出流中(記住,在C+中由鍵盤上按空格鍵產(chǎn)生的空格字符是完全有效的字符)   例如,為了產(chǎn)生下列這個輸出:   * * * * * * * * * * * * * * * * * * *   * * * * * * * * * 你可以使用這些語句: cout << &

66、quot; * * * * * * * * * " << endl << endl; cout << "* * * * * * * * * *" << endl << endl; cout << " * * * * * * * * *" << endl;    所有的空格和星號都用雙引號括起來,這樣真實打印出來的與程序中寫的是一樣的。多加的endl控制符在星號行之間產(chǎn)生空行。   如果你想打印出空格,你必須用引號

67、括起它們,語句: cout << '* ' <<                      '* ' 產(chǎn)生輸出為: * *   盡管我們已經(jīng)把所有空格都包含在輸出語句中了,但是星號還是接著打印,這是因為空格沒有被引號括起來。 第三章 數(shù)字數(shù)據(jù)類型、表達式和輸出目  標· 能

68、夠聲明int和float類型的名字常量和變量· 能夠建立和求簡單算術(shù)表達式的值· 能夠建立和求包含復合算術(shù)操作的表達式的值· 理解隱含類型的強制轉(zhuǎn)換和顯式類型的轉(zhuǎn)換· 能夠調(diào)用一個帶回返回值的函數(shù)· 能夠識別和理解函數(shù)自變量的用途· 能夠在表達式中使用C+庫函數(shù)· 能夠調(diào)用空函數(shù)(不帶回返回值的函數(shù))· 能夠使用C+控制符來格式化輸出· 學習和能夠使用與string類型有關(guān)的附加操作· 能夠在程序中以清楚、可讀性好的風格格式化語句31 C+數(shù)據(jù)類型的概述   C+標準數(shù)據(jù)類型

69、是由簡單類型,構(gòu)造類型和地址類型組成(見圖3-1),這章集中在整型和實型,其它類型在書的后續(xù)部分詳細介紹,首先我們看看整型(這種類型主要描述整數(shù)),然后再考慮實型(用來描述包含十進制小數(shù)的實數(shù)) 3.2    數(shù)字數(shù)據(jù)類型整型  數(shù)據(jù)類型char, short , int 和long 被認為是整型,因為它們都涉及到整數(shù)值整個數(shù)沒有小數(shù)部分,例如:22   16   498   0   4600   -378   -912

70、60; 除非是當你明確將保留字unsigned加到數(shù)字類型名前:unsigned int  unsigned 整型值只能被確定為正數(shù)或零。  數(shù)據(jù)類型char, short , int 和long是要描述占用不同字節(jié)的大小的整數(shù),對于特定的機器,我們可以用下列這種方式畫出它們占用的字節(jié)大小。  int值的范圍是從32768到32767。如果你的程序試圖計算大于你計算機取值范圍的最大值,那么會產(chǎn)生整數(shù)溢出。  C+中有關(guān)整型值有一點要小心:一個以零開始的字面常量是用八進制數(shù)取代十進制數(shù),如果你寫數(shù)為:015

71、  C+編譯器取這個值為十進制13。 浮點類型(實數(shù)類型)  浮點類型被用來表示實數(shù)。浮點數(shù)有一個整數(shù)部分和小數(shù)部分,整數(shù)和小數(shù)中間有一個小數(shù)點,這里是一些例子:18.0   127.54   0.57   4.   193145.8523   .8  正如C+ 中整型類型(char, short, int和 long)有不同的字節(jié)大小一樣,浮點類型也有不同的字節(jié)大小。浮點類型的字節(jié)大小由小到大依次為float, double和 lon

72、g double。較大的字節(jié)類型數(shù)可能給我們更寬的取值范圍并且更精確,但損失更多的存儲空間來保存數(shù)據(jù)。  浮點值也能有一個指數(shù)形式,稱為科學標記法。3.504*1O12在C+ 中我們用3.504E12代替,E意味著是以10為基數(shù)的指數(shù),這里是一些用科學標記法表示的浮點數(shù)的例子:1.74536E-12   3.652442E4   7E20  個人計算機提供了6位或7位數(shù)字精度的浮點值,最大值約3.4E+38。  計算機不是總能確切地表示浮點數(shù),在第一章,你了解到計算機以二進制形式存儲所有數(shù)據(jù),許多浮點值只能用二進制數(shù)近

溫馨提示

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

評論

0/150

提交評論