程序設(shè)計(jì)初步講義_第1頁
程序設(shè)計(jì)初步講義_第2頁
程序設(shè)計(jì)初步講義_第3頁
程序設(shè)計(jì)初步講義_第4頁
程序設(shè)計(jì)初步講義_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序設(shè)計(jì)初步3.1算法初步及其描述方法3.1.1算法初步1.什么是算法算法是為解決一個特定問題而采取的特定的有限的步驟。廣義地說,做任何事情都有算法,例如一張?zhí)珮O拳打法圖解也可以看作是一個“太極拳算法”。因此,算法概念不限于算術(shù)問題,而是具有更廣泛的含義。從計(jì)算機(jī)應(yīng)用的角度來說,算法是指完成一個任務(wù)所需要的具體步驟和方法(解決問題的方案)。也就是說給定初始狀態(tài)或輸入數(shù)據(jù),經(jīng)過計(jì)算機(jī)程序的有限次運(yùn)算,能夠得出所要求或期望的終止?fàn)顟B(tài)或輸出數(shù)據(jù)?!舅惴?.1】給定兩個正整數(shù)p和q,求其最大公因數(shù)。古希臘數(shù)學(xué)家歐幾里德給出的算法:步驟1:如果p<q,交換p和q。步驟2:

2、求p/q的余數(shù)r。步驟3:如果r=0,則q就是所求的結(jié)果。否則反復(fù)做如下工作:令p=q,q=r,重新計(jì)算p和q的余數(shù)r,直到r=0為止,則q就是原來的兩正整數(shù)的最大公因數(shù)。算法常常含有重復(fù)的步驟和一些比較或邏輯判斷。如果一個算法有缺陷,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務(wù)。一個算法的優(yōu)劣可以用空間復(fù)雜度與時間復(fù)雜度來衡量。從原則上說,有了算法,人們就可以借助紙、筆和算盤等工具直接求解問題了。但如果問題比較復(fù)雜,計(jì)算步驟很多,則應(yīng)通過編寫計(jì)算機(jī)程序,使用計(jì)算機(jī)解決。2.算法的特征算法是在有限步驟內(nèi)求解某一問題所使用的一組定義明

3、確的規(guī)則。通俗點(diǎn)說,就是計(jì)算機(jī)解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實(shí)施某種算法。前者是推理實(shí)現(xiàn)的算法,后者是操作實(shí)現(xiàn)的算法。一個算法應(yīng)該具有以下五個重要的特征:(1)有窮性:一個算法必須保證執(zhí)行有限步之后結(jié)束。(2)確切性:算法的每一步驟必須有確切的定義。(3)輸入:一個算法有0個或多個輸入,以刻畫運(yùn)算對象的初始情況,所謂0個輸入是指算法本身定義了初始條件。(4)輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的。(5)可行性:算法原則上能夠精確地運(yùn)行,而且人們用筆和紙做有限次運(yùn)算后即可完成。3.算法的類型和結(jié)構(gòu)(1)算法的類型

4、算法可分為兩大類:數(shù)值算法和非數(shù)值算法。數(shù)值算法是為數(shù)學(xué)問題形成一個構(gòu)造性解法的完備而確切的描述,并規(guī)定方法中僅允許使用加、減、乘、除等基本的算術(shù)運(yùn)算。非數(shù)值算法廣泛應(yīng)用在“數(shù)據(jù)處理”的場合。需要對大量的信息(數(shù)據(jù))進(jìn)行加工處理,包括轉(zhuǎn)換、分類、查找、排序和存儲等。常用的算法有窮舉、遞推、順序查找和冒泡排序等。(2)算法的結(jié)構(gòu)一個算法是由“結(jié)構(gòu)”和“原操作”構(gòu)成的。原操作包括:輸入、輸出、賦值和比較等。算法的三種基本結(jié)構(gòu)是:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。用這三種基本結(jié)構(gòu)可以表示任意一個復(fù)雜的算法。順序結(jié)構(gòu)順序結(jié)構(gòu)是指通過安排操作的排列順序來決定算法流程的結(jié)構(gòu)。在這種結(jié)構(gòu)中,各個操作是依次執(zhí)行的

5、。順序結(jié)構(gòu)是由若干個依次執(zhí)行的處理塊組成,這是任何一個算法都離不開的基本主體結(jié)構(gòu)。分支結(jié)構(gòu)在絕大多數(shù)情況下,算法不會按部就班地從第一條操作執(zhí)行到最后一條操作,往往由特定的條件決定執(zhí)行哪個操作,這就是分支結(jié)構(gòu)。分支結(jié)構(gòu)是以條件或情況的判斷為起始點(diǎn),它是人腦判斷思維活動的抽象。最基本的分支結(jié)構(gòu)是二分支結(jié)構(gòu),根據(jù)判斷邏輯是否成立而決定選擇哪一邊的處理塊去執(zhí)行。循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是指在算法設(shè)計(jì)中,從某處開始有規(guī)律地反復(fù)執(zhí)行某一處理塊,這個處理塊稱為循環(huán)體。循環(huán)體的執(zhí)行次數(shù)由一個控制循環(huán)條件決定。滿足條件反復(fù)做,不滿足則停止。3.1.2算法的描述工具設(shè)計(jì)一個算法可以根據(jù)問題的不同需要用某種語言符號來描述。

6、目前最常用的幾種算法描述工具有:自然語言、流程圖、N-S圖、偽代碼等。1.自然語言自然語言就是人們?nèi)粘J褂玫恼Z言,可以是中文、英文等。用自然語言表示的算法通俗易懂,但一般篇幅較冗長,表達(dá)上不易準(zhǔn)確,易引起理解上的“歧義性”(即對同一段文字,不同的人會有不同的理解)?!舅惴?.2】輸入3個數(shù),求其最大數(shù)。分析:該算法可以使用分支結(jié)構(gòu)表示。設(shè)num1,num2,num3存放3個數(shù),max存放其最大值。為求其最大數(shù),只要對3個數(shù)進(jìn)行比較,可按如下步驟去做:S1:輸入3個數(shù)num1,num2,num3;S2:先把第1個數(shù)num1的值賦給max;S3:將num2與max比較,如果num2>max,

7、則把num2的值賦給max,否則,不做任何事情。S4:將num3與max比較,如果num3>max,則把num3的值賦給max,否則,不做任何事情。S5:輸出max的值,即最大值。【算法3.3】求1+2+3+100。分析:該算法可以使用循環(huán)結(jié)構(gòu)表示。設(shè)n存放1到100之間的整數(shù),sum存放1到100的和,即sum=1+2+3+100,可按如下步驟去做:S1:進(jìn)行初始化,1=>n,0=>sum;S2:sum+n=>sum;S3:n+1=>n;S4:進(jìn)行判斷,n是否小于等于100,如果條件為真,則返回S2,否則執(zhí)行S5;S5:輸出sum的值。2.流程圖流程圖是用一組規(guī)

8、定的圖形符號、流程線和文字說明來表示算法,它直觀形象,易于理解。流程圖的特點(diǎn)是用“流線”給算法執(zhí)行中的每一個步驟指定了邏輯上的順序,因此能把程序執(zhí)行的控制流表達(dá)得十分清楚。但如果使用不當(dāng)會使程序的流程出現(xiàn)纏繞,不利于結(jié)構(gòu)化程序設(shè)計(jì)的實(shí)施。流程圖符號見圖3-1?!舅惴?.4】用流程圖描述算法3.2(如圖3-2)?!舅惴?.5】用流程圖描述算法3.3(如圖3-3)。3.N-S圖N-S圖也是描述算法的常用工具。與流程圖相比,N-S圖完全去掉了流程圖中的流線和箭頭,因此能用N-S圖表示的算法,必是結(jié)構(gòu)化的算法?!舅惴?.6】用N-S圖描述算法3.2(如圖3-5)?!舅惴?.7】用N-S圖描述算法3.3

9、(如圖3-6)。4.偽代碼偽代碼是一種算法描述語言,使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種編程語言實(shí)現(xiàn)。因此,偽代碼必須結(jié)構(gòu)清晰,代碼簡單,可讀性好,并且類似自然語言。【算法3.8】用偽代碼描述算法3.2。INPUTnum1,num2,num3num1=>maxIFnum2>maxTHENnum2=>maxIFnum3>maxTHENnum3=>maxPRINTmax【算法3.9】用偽代碼描述算法3.3。1=>n,0=>sumwhile(n<=100)sum+n=>sum;n+1=>n;printsum3.1.3算法

10、和程序設(shè)計(jì)前面介紹了如何描述算法,但計(jì)算機(jī)是無法識別流程圖和偽代碼的,只有用計(jì)算機(jī)語言編寫的程序,經(jīng)編譯成目標(biāo)程序后,才能被計(jì)算機(jī)執(zhí)行。因此,用任何方法描述的算法,還得要將它轉(zhuǎn)化成計(jì)算機(jī)語言程序。程序設(shè)計(jì)是人關(guān)于現(xiàn)實(shí)問題求解的思維活動的“代碼化”過程,是用計(jì)算機(jī)語言作為工具進(jìn)行的創(chuàng)造性勞動。編程序的一個主要內(nèi)容就是如何將解決應(yīng)用問題所使用的算法用程序設(shè)計(jì)語言來描述。1.程序設(shè)計(jì)的一般步驟(1)分析問題根據(jù)用戶的具體要求,進(jìn)行需求分析、數(shù)據(jù)及處理分析、可行性分析、運(yùn)行環(huán)境分析。然后在分析的基礎(chǔ)上,將實(shí)際問題抽象化,建立相應(yīng)的數(shù)學(xué)模型并確定解決方案。讀者在初學(xué)程序設(shè)計(jì)的時候,教科書中的例題都比較簡

11、單,從這些簡單的例題中讀者很難體會到分析問題的作用。而且題目本身往往已經(jīng)對需要解決的問題做了清楚準(zhǔn)確的描述。但盡管如此,我們也不應(yīng)直接開始編程,而應(yīng)該首先進(jìn)行問題分析。(2)確定算法根據(jù)選取的數(shù)學(xué)模型和確定的方案,設(shè)計(jì)出具體的操作步驟,并可以通過流程圖等描述算法的工具將確定的算法清晰、直觀的表示出來。(3)編寫程序選用合適的開發(fā)平臺和程序設(shè)計(jì)語言,將算法按所選語言的規(guī)則描述出來,即形成程序設(shè)計(jì)語言編制的源程序。(4)調(diào)試運(yùn)行程序?qū)帉懞玫某绦蜻M(jìn)行試運(yùn)行和檢驗(yàn),發(fā)現(xiàn)問題立即對程序進(jìn)行修改,然后再試運(yùn)行和檢驗(yàn),直至得出正確的結(jié)果。(5)建立文檔資料整理分析計(jì)算結(jié)果,并建立相應(yīng)的文檔資料(程序技術(shù)說

12、明書、用戶使用說明書等),以便維護(hù)和修改。2.結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化的程序設(shè)計(jì)方法的要點(diǎn)如下:(1)程序的質(zhì)量標(biāo)準(zhǔn)是“清晰第一,效率第二”。(2)程序的設(shè)計(jì)采用“自頂向下,逐步求精,模塊化設(shè)計(jì),結(jié)構(gòu)化編程”的方法。(3)程序的結(jié)構(gòu)僅由順序、分支、循環(huán)三種基本結(jié)構(gòu)的組合、嵌套而成,且滿足:·每個程序模塊只有一個入口和一個出口;·沒有死語句(永遠(yuǎn)執(zhí)行不到的語句);·沒有死循環(huán)(永遠(yuǎn)不能終止的循環(huán));(4)程序的書寫必須按一定的規(guī)范和格式進(jìn)行(參見附錄部分)。(5)程序的設(shè)計(jì)風(fēng)格要以好的可讀性為標(biāo)準(zhǔn),力求外觀美觀、結(jié)構(gòu)流暢、語句簡潔。3.2基本計(jì)算3.2.1數(shù)據(jù)類型在

13、C+中,數(shù)據(jù)具有不同的類型,類型定義了變量可存儲的數(shù)值范圍以及可進(jìn)行的操作。變量是用于內(nèi)存中保存數(shù)據(jù)的,每個變量都必須有確定的數(shù)據(jù)類型,C+語言的數(shù)據(jù)類型如圖3-7所示。說明:基本數(shù)據(jù)類型前可以添加修飾符,以改變基本類型的意義,可用的修飾符有l(wèi)ong、short、signed和unsigned四種,其中,unsigned和signed只用于修飾char和int,且signed修飾詞可以省略。當(dāng)用unsigned修飾詞時,后面的類型說明符可以省略。另外,雙精度型前可以加long修飾符。基本的數(shù)據(jù)類型及其表示范圍,可參見表3-1。當(dāng)多種類型的數(shù)據(jù)進(jìn)行混合運(yùn)算時,往往需要進(jìn)行類型轉(zhuǎn)換,將它們轉(zhuǎn)換為相

14、同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運(yùn)算,轉(zhuǎn)換規(guī)則如圖3-8。注:其中,type表示一種非void的數(shù)據(jù)類型。圖3-7C+數(shù)據(jù)類型表3-1基本的數(shù)據(jù)類型及其表示范圍類型名類型字節(jié)表示范圍char字符型1-128127unsignedchar無符號字符型10255int整型4-2,147,483,6482,147,483,647unsignedint無符號整型404,294,967,295short短整型2-32,76832,767unsignedshort無符號短整型2065,535long長整型4-2,147,483,6482,147,483,647unsignedlong無符號長

15、整型404,294,967,295float浮點(diǎn)型43.4E+/-38(7位有效數(shù)字)double雙精度型81.7E+/-308(15位有效數(shù)字)longdouble長雙精度型101.2E+/-4932(19位有效數(shù)字)圖中橫向的箭頭表示必須的轉(zhuǎn)換,如兩個float型數(shù)參加運(yùn)算,雖然它們類型相同,但仍要先轉(zhuǎn)換成double型再進(jìn)行運(yùn)算,結(jié)果亦為double型。縱向箭頭表示當(dāng)運(yùn)算符兩邊的操作數(shù)為不同類型時的轉(zhuǎn)換,如一個long型數(shù)據(jù)與一個int型數(shù)據(jù)一起運(yùn)算,需要先將int型數(shù)據(jù)轉(zhuǎn)換為long型,然后兩者再進(jìn)行運(yùn)算,結(jié)果為long型。所有這些轉(zhuǎn)換都是由系統(tǒng)自動進(jìn)行的,因此也稱為隱式轉(zhuǎn)換。#inc

16、lude<iostream>usingnamespacestd;intmain(void)chara='x'intb=3;intf=2;floatc=2.5678;doubled=5.2345;longe=32L;cout<<a-b+d/c-e*f<<endl;return0;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

17、75;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

18、75;¯¯¯¯¯¯¯下面我們來分析一下這段程序:(1)進(jìn)行d/c運(yùn)算時,要將c轉(zhuǎn)換成double型,運(yùn)算的中間結(jié)果為double型;(2)進(jìn)行e*f運(yùn)算時,將f轉(zhuǎn)換為long型,運(yùn)算的中間結(jié)果為long型;(3)進(jìn)行a-b運(yùn)算時,將a轉(zhuǎn)換為int型,運(yùn)算的中間結(jié)果為int型;(4)當(dāng)(3)的中間結(jié)果與(1)的中間結(jié)果運(yùn)算時,將(3)的中間結(jié)果轉(zhuǎn)換為double型,運(yùn)算的中間結(jié)果為double型;(5)當(dāng)(4)的中間結(jié)果與(2)的中間結(jié)果運(yùn)算時,將(2)的中間結(jié)果轉(zhuǎn)換為double型,得出最后結(jié)果。程序最后的運(yùn)行結(jié)果為:程序所

19、處理的數(shù)據(jù)不僅分為不同的類型,而且每種類型的數(shù)據(jù)還有常量和變量之分。接下來,我們詳細(xì)討論各種基本類型的數(shù)據(jù)。3.2.2變量在程序執(zhí)行過程中其值可以變化的量稱為變量。變量是需要用名字來標(biāo)識的,其命名規(guī)則與標(biāo)識符相同。為了提高程序的可讀性,給變量命名時,應(yīng)該注意使用有意義的名字,以幫助描述變量所保存的值。例如:要用一個變量保存工資總額,可以使用total_payroll,也可以使用XYZ作變量名,它們都是合法的名字。但使用前者比使用后者就更好,因?yàn)閺淖兞棵湍艽笾轮浪4媪耸裁礃拥闹担阌谑褂?。在使用一個變量之前,必須先定義。變量的定義的一般格式如下:數(shù)據(jù)類型變量名1=初始值1,變量名2=初始值

20、2,.;“數(shù)據(jù)類型”是指C+有效的數(shù)據(jù)類型,如int、double、long等。方括號中的內(nèi)容是可選的,它是在變量定義時給變量賦初值。下面是幾個變量定義的實(shí)例:longn;/定義了一個長整型變量n,未賦初值doublea,b=0.5;/定義雙精度型變量a、b,a未賦初值,b的初值為0.5下面是一個使用變量的程序?qū)嵗?include<iostream>usingnamespacestd;intmain(void)intworkDays=5;/定義了一個整型變量workDays,并初始化為5,表示一周的工作天數(shù)。floatworkHours,payRate,weeklyPay;/定義

21、了三個實(shí)型變量,分別表示每天工作的小時數(shù)、每小時應(yīng)支付的薪水及每周應(yīng)支付的薪水。workHours=7.5;payRate=38.55;/兩個賦值語句。7.5賦給變量workHours,38.55賦給變量payRate。weeklyPay=workDays*workHours*payRate;/計(jì)算每周的工資,即三個變量workDays、workHours、payRate的積,*是乘運(yùn)算符,結(jié)果保存在變量weeklyPay變量中。cout<<"WeeklyPay="<<weeklyPay<<'n'/輸出字符串"W

22、eeklyPay="、變量weeklyPay的值和換行符。return0;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

23、¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯本程序的運(yùn)行結(jié)果如下:注意:我們定義一個變量時,如果沒有給它賦初值,它的值是不定的。例如,在上面的第四行執(zhí)行前,weeklyPay的值是不定的。因此,變量第

24、一次賦值稱之為初始化,變量在使用之前應(yīng)當(dāng)先初始化。下面分別介紹各種類型的變量。1.整型整型變量可用short、int、long定義,可以表示正整數(shù)、負(fù)整數(shù)和零。缺省的情況下,整型變量假定為有符號的,但是,使用unsigned關(guān)鍵字,也可以把整型變量定義為無符號的。整型是常用的一種數(shù)據(jù)類型,但是,它的大小是不固定的。整數(shù)能存儲的最大值是由計(jì)算機(jī)給它分配的存儲空間的大小決定的,而整數(shù)所占的存儲空間因不同的計(jì)算機(jī)而異。當(dāng)一個整數(shù)存儲在計(jì)算機(jī)中時,左起第一位叫做第0位,即符號位,它用來表示該數(shù)是正數(shù)或負(fù)數(shù)。如果是負(fù)數(shù),符號位被置1,正數(shù)則為0。例如,某種計(jì)算機(jī)可能用16位(兩個字節(jié))來存儲一個整數(shù),能

25、表示的整數(shù)范圍是-3276832767。如圖3-9。2.實(shí)型實(shí)型變量分為單精度(float)型、雙精度(double)型和長雙精度(longdouble)型三類。有關(guān)規(guī)定見表3-2。表3-2實(shí)型數(shù)據(jù)類型比特?cái)?shù)有效數(shù)字?jǐn)?shù)值范圍float32673.4×10-383.4×1038double6415161.7×10-3081.7×10308longdouble12818191.2×10-49321.2×一個實(shí)型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,實(shí)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個實(shí)型數(shù)據(jù)分成小數(shù)部分和指數(shù)

26、部分分別存放,小數(shù)部分采用規(guī)范化的指數(shù)方式表示。實(shí)數(shù)3.14159在內(nèi)存中的存放形式如圖3.10示意。3.字符型字符變量用char定義,表示用單引號括起來的一個字符,如'a','D','?','$'等。另外,還有一些字符是不可顯示字符,也無法通過鍵盤輸入,例如響鈴、換行、制表符、回車等。這樣的字符變量該如何寫到程序中呢?C+提供一種稱為轉(zhuǎn)義序列的表示方法來表示這些字符,表3-3列出了C+預(yù)定義的轉(zhuǎn)義序列。表3-3C+預(yù)定義的轉(zhuǎn)義序列字符常量形式ASCII碼含義a07響鈴n0A換行t09水平制表符v0B垂直制表符b08退格r0D回車

27、5C字符“”22雙引號27單引號一個字符變量僅占用一個字節(jié),存放該字符的ASCII碼,如圖3-11所示。例如:字符'A'的ASCII碼為65,字符'a'的ASCII碼為97。象整型數(shù)一樣,字符變量也可被指定為signed或unsigned。一個有符號字符變量可以保存-128127之間的整數(shù),而一個無符號字符變量可以保存0255之間的整數(shù),它們均可用于表示小整數(shù),象整型數(shù)一樣賦值,例如:signedcharoffset=-88;unsignedcharrow=2,column=26;C+語言把字符型變量當(dāng)作整型量一樣使用,下面舉例說明:#include<io

28、stream>usingnamespacestd;intmain(void)charc1='a'charc2='b'charc3,c4;c3=c1-('a'-'A');c4=c2-('a'-'A');cout<<c3<<c4<<endl;return0;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯&#

29、175;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯&#

30、175;¯¯¯¯¯¯¯¯¯¯¯¯運(yùn)行結(jié)果為:程序中的'a'-'A'是大小寫字母之間的差值,其值為32。所以我們也可以把程序?qū)懗桑篶3=c1-32;c4=c2-32;如果我們想看一看c3、c4中到底存儲的值是多少,可以這樣:cout<<(int)c3<<(int)c4<<endl;其運(yùn)行結(jié)果為:6566注意:在內(nèi)存中,字符數(shù)據(jù)以ASCII碼存儲,即以整數(shù)表示,因此,'0'和0是不同的。4.布爾型

31、布爾類型變量用bool定義,其值為true或false,true和false都是C+的關(guān)鍵字。整型值也可賦給bool變量,但會被隱式轉(zhuǎn)換成true或false。轉(zhuǎn)換規(guī)則如下:整型值非0時,轉(zhuǎn)換為true,整型值為0時,轉(zhuǎn)換為false。同樣,布爾值也可賦值給整型變量,但要進(jìn)行隱式轉(zhuǎn)換,轉(zhuǎn)換規(guī)則為:布爾值為true時,轉(zhuǎn)換為1,布爾值為false時,轉(zhuǎn)換為0。所有的條件表達(dá)式返回類型都是bool型,比如n!=0(!=是“不等于”運(yùn)算符,我們在本章后面要介紹)根據(jù)不同的n,返回true或false。3.2.3常量常量就是在程序運(yùn)行過程中其值不發(fā)生變化的量。常量可分為直接常量與符號常量。直接常量就是

32、平常我們所說的常數(shù),例如:'r'為字符型直接常量,3.為雙精度直接常量。符號常量就是用一個標(biāo)識符代表某個常量。符號常量可用關(guān)鍵字const聲明,其格式如下:const數(shù)據(jù)類型常量名常數(shù)值;例如:constinta=1234;/定義a為整型常量,其值為1234。constcharb='a'/定義b為字符型常量,其值為'a'。在程序設(shè)計(jì)中,盡量使用符號常量來代替常數(shù),這是一種好的編程習(xí)慣,這樣可以增加程序的可讀性、可維護(hù)性。例如,在數(shù)值計(jì)算中,我們會經(jīng)常遇到一些常量,比如圓周率,如果把它定義成符號常量,當(dāng)需要更改常量值的時候,只需要更改符號常量的定義

33、語句即可。也可以使用預(yù)處理語句定義符號常量,例如:#definePI3.14159定義符號常量PI,然后在程序中使用PI,跟使用常數(shù)3.14159的效果是一樣的。編譯器在編譯時,把符號PI替換成3.14159,當(dāng)需要修改PI的值時,只需要修改上面的語句即可。但是我們不推薦這樣做,因?yàn)樵诰幾g時使用常數(shù)替代了所有的預(yù)定義符號,這樣在代碼中相應(yīng)位置實(shí)際都是常數(shù)。程序中過多的常數(shù)會導(dǎo)致程序代碼量變大,而且在多個源文件中定義了同樣的符號,會產(chǎn)生符號重定義的問題。由于大部分內(nèi)容在變量的相關(guān)內(nèi)容中介紹了,下面簡單介紹各種類型的常量。1.整型常量整型常量即以文字形式出現(xiàn)的整數(shù),包括正整數(shù)、負(fù)整數(shù)和零。一個整型

34、常量,例如2007,總是被假定為int類型,除非有L或l后綴,才被處理為longint類型。例如2007L,2007l。同樣,一個整型數(shù)也可以加U或u后綴,指定為unsigned類型。例如2007U,2007u。整型常量的表示形式有10進(jìn)制、8進(jìn)制和16進(jìn)制。如果一個整型數(shù)有前綴0,則表示是8進(jìn)制數(shù),有前綴0x或0X,表示是16進(jìn)制數(shù)。例如:92(十進(jìn)制),0134(8進(jìn)制),0x5C(16進(jìn)制)。其中,8進(jìn)制數(shù)只能使用數(shù)字07,16進(jìn)制數(shù)可用09及AF(或af)表示。2.實(shí)型常量實(shí)型常量即以文字形式出現(xiàn)的實(shí)數(shù),實(shí)數(shù)有一般形式和指數(shù)形式兩種表示形式。一般形式:例如,12.5,-12.5等。指數(shù)

35、形式:例如,0.345E+2表示0.345×102,其中字母E可以大寫或小寫。一個實(shí)型數(shù),如0.06總是假定為double型,除非有F或f后綴,才被處理為float型。若有L或l后綴,則被處理為longdouble型。3.字符型常量字符常量可以表示用一對單引號括起來的普通字符及轉(zhuǎn)義字符(轉(zhuǎn)義序列)。4.字符串常量字符串常量簡稱字符串,是用一對雙引號括起來的字符序列,例如,"abcd","China","Thisisastring."都是字符串常量。由于雙引號是字符串的界限符,所以字符串中間的雙引號就要用轉(zhuǎn)義序列來表示。例如,

36、"Pleaseenter"Yes"or"No""則表示的是下列文字:Pleaseenter"Yes"or"No"字符串與字符是不同的,它在內(nèi)存中的存放形式是:按串中字符的排列次序順序存放,每個字符占一個字節(jié),并在末尾添加'0'作為結(jié)尾標(biāo)記。需要注意的是:(1)不要把字符與字符串混淆了。例如:"A"與'A'不等價,前者由兩個字節(jié)組成(字符'A'與字符'0'),而后者只有一個字節(jié)。(2)最短的字符串是空字符串(&qu

37、ot;"),它僅由一個結(jié)尾符'0'組成。5.布爾常量布爾常量只有兩個:false(假)和true(真)。3.2.4運(yùn)算符與表達(dá)式到現(xiàn)在為止,我們了解了C+語言中各種類型數(shù)據(jù)的特點(diǎn)及其表示形式。那么如何對這些數(shù)據(jù)進(jìn)行處理和計(jì)算呢?通常當(dāng)我們要進(jìn)行某種計(jì)算時,都要首先列出算式,然后求解其值。利用C+語言編寫程序求解問題時也是這樣。在程序中,表達(dá)式是計(jì)算求值的基本單位??梢院唵蔚貙⒈磉_(dá)式理解為用于計(jì)算的公式,它由運(yùn)算符(例如:+-*/)、運(yùn)算量(也稱操作數(shù),可以是常量、變量等)和括號組成。執(zhí)行表達(dá)式所規(guī)定的運(yùn)算,所得到的結(jié)果值便是表達(dá)式的值。例如,a+b,x/y都是表達(dá)式。

38、下面我們給表達(dá)式下一個定義,讀者如果不能夠完全理解也不要緊,表達(dá)式在程序中無處不在,而且接下來我們還要詳細(xì)討論各種類型的表達(dá)式,用得多了自然也就理解了。表達(dá)式可以被定義為:·一個常量或標(biāo)識對象的標(biāo)識符是一個最簡單的表達(dá)式,其值是常量或?qū)ο蟮闹怠?#183;一個表達(dá)式的值可以用來參與其他操作,即用作其他運(yùn)算符的操作數(shù),這就形成了更復(fù)雜的表達(dá)式。·包含在括號中的表達(dá)式仍是一個表達(dá)式,其類型和值與未加括號時的表達(dá)式相同。C+語言中定義了豐富的運(yùn)算符,如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等等。有些運(yùn)算符需要兩個操作數(shù),使用形式為:操作數(shù)1運(yùn)算符操作數(shù)2這樣的運(yùn)算符稱為二元運(yùn)算符(或

39、雙目運(yùn)算符)。另一些運(yùn)算符只需要一個操作數(shù),稱為一元運(yùn)算符(或單目運(yùn)算符)。下面就來詳細(xì)討論各種類型的運(yùn)算符和表達(dá)式。1.算術(shù)運(yùn)算符與算術(shù)表達(dá)式()算術(shù)運(yùn)算符C+提供5種基本的算術(shù)運(yùn)算符,參見表3-4。表3-4算術(shù)運(yùn)算符運(yùn)算符名稱實(shí)例+加12+4.9/得出16.9-減3.98-4/得出-0.02*乘2*3.4/得出6.8/除9/2.0/得出4.5%取余13%3/得出1說明:這5個算術(shù)運(yùn)算符都是雙目運(yùn)算符。其中,“%”是取余運(yùn)算,只能用于整型操作。其它算術(shù)運(yùn)算符的兩個操作數(shù)可以是整型和實(shí)型的混合類型,運(yùn)算結(jié)果的數(shù)據(jù)類型是兩個操作數(shù)的數(shù)據(jù)類型中具有較高級別的數(shù)據(jù)類型。當(dāng)除運(yùn)算符(/)的兩個操作數(shù)均

40、為整數(shù)時,所得的結(jié)果總是被化為整數(shù)。例如:9/2/得出4,不是4.5!-9/2/得出5,不是-4!另外,C+還提供了“+”運(yùn)算符和“”運(yùn)算符,其中“+”是自增運(yùn)算符,“”是自減運(yùn)算符,這兩個運(yùn)算符都是單目運(yùn)算符,且功能相近,都是將數(shù)值變量的值加1或減1,用戶只能將這類操作符應(yīng)用于變量而不能應(yīng)用于常量。例如可以將下列代碼:valuel=valuel+1;替換為+valuel;或valuel+;假設(shè)value的初值為15,參見表3-5。我們可以看出,自加和自減運(yùn)算符可在變量名前,也可在變量名后,即都可以用于前綴和后綴的形式,但含義并不相同。對于前綴的形式,變量先作自加或自減運(yùn)算,然后將運(yùn)算結(jié)果用于

41、表達(dá)式中;而對于后綴的形式,變量的值先在表達(dá)式中參與運(yùn)算,然后再作自加或自減運(yùn)算。表3-5自加和自減運(yùn)算符運(yùn)算符名稱實(shí)例+自加(前綴)+valuel+10/得出26,valuel變?yōu)?6+自加(后綴)valuel+10/得出25,valuel變?yōu)?6-自減(前綴)-valuel+10/得出24,valuel變?yōu)?4-自減(后綴)valuel-+10/得出25,valuel變?yōu)?4例如:a=6;b=a+;執(zhí)行結(jié)果為:b=6,a=7而a=6;b=+a;執(zhí)行結(jié)果為:b=7,a=7。自減運(yùn)算符也存在同樣情況,例如:a=6;b=a-;執(zhí)行結(jié)果為:b=6,a=5.而a=6;b=-a;執(zhí)行結(jié)果為:b=5,a

42、=5.()算術(shù)表達(dá)式算術(shù)表達(dá)式是由算術(shù)運(yùn)算符組成的表達(dá)式,其表達(dá)式的值是一個數(shù)值。表達(dá)式的類型具體地由運(yùn)算符和操作數(shù)決定。#include<iostream>usingnamespacestd;intmain(void)inta,b,m=3,n=4;a=7*2+-3%5-4/3;/-3%5=-3,4/3=1b=m+-n;cout<<a<<"t"<<b<<"t"<<m<<"t"<<n<<endl;return0;¯

43、75;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

44、75;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯執(zhí)行結(jié)果如下:2.關(guān)系運(yùn)算符與關(guān)系表達(dá)式()關(guān)系運(yùn)算符C+提供6種關(guān)系運(yùn)算符,用于數(shù)值之間的比較,表達(dá)式的值或?yàn)?(表示true),或?yàn)?(表示false),參見表3-6。表3-6關(guān)系運(yùn)算符運(yùn)算符名稱實(shí)例=等于5=5/得出1!=不等于5!=5/得出0<

45、小于5<5.5/得出1<=小于或等于5<=5/得出1>大于5>5.5/得出0>=大于或等于6.3>=5/得出1注意:字符串不應(yīng)當(dāng)用關(guān)系運(yùn)算符比較,因?yàn)楸槐容^的不是字符串的內(nèi)容本身,而是字符串的地址。例如:"Welcome"<"Beijing"引起"Welcome"的地址與"Beijing"的地址進(jìn)行比較。由于字符串的地址是由編譯器決定的,所以,表達(dá)式的結(jié)果或?yàn)榧?,或?yàn)檎妫⒉淮_定。我們以后會看到:可以用C+的庫函數(shù)strcmp,比較兩個字符串。()關(guān)系表達(dá)式由關(guān)系運(yùn)算

46、符組成的表達(dá)式為關(guān)系表達(dá)式。關(guān)系表達(dá)式的運(yùn)算結(jié)果為邏輯型,即bool型。在C+中常常將邏輯真用非0表示(一般為1),邏輯假用0表示。常用在條件語句和循環(huán)語句中。#include<iostream>usingnamespacestd;intmain(void)charx='m',y='n'intn;n=x<y;cout<<n<<endl;n=x=y-1;cout<<n<<endl;n=('y'!='Y')+(5<3)+(y-x=1);cout<<n&

47、lt;<endl;return0;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

48、5;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯程序執(zhí)行結(jié)果為:通過上面的程序可以看出:關(guān)系運(yùn)算的結(jié)果為真時值等于1,結(jié)果為假時值等于0。3.邏輯運(yùn)算符和邏輯表達(dá)式()邏輯運(yùn)算符C+提供了3種邏輯運(yùn)算符,參見表3-7。如同關(guān)系運(yùn)算符,用邏輯運(yùn)算符組

49、成的表達(dá)式的值或?yàn)?(表示true),或?yàn)?(表示false)。邏輯非(?。┦菃文窟\(yùn)算符,它將操作數(shù)的邏輯值取反。即:如果操作數(shù)是非零,它使表達(dá)式的值為0;如果操作數(shù)是0,它使表達(dá)式的值為1。邏輯與(&&)與邏輯或(|)的含義,參見表3-8。下面是一些有效的邏輯表達(dá)式:!20/得出010&&5/得出110|5.5/得出110&&0/得出0表3-7邏輯運(yùn)算符運(yùn)算符名稱實(shí)例!邏輯非!(5=5)/得出0&&邏輯與5<6&&6<6/得出0|邏輯或5<6|6<5/得出1表3-8邏輯與(&&am

50、p;)和邏輯或(|)運(yùn)算運(yùn)算符操作數(shù)1操作數(shù)2表達(dá)式的值邏輯與(&&)TruetruetrueFalsetruefalseTruefalsefalseFalsefalsefalse邏輯或(|)TruetruetrueFalsetruetrueTruefalsetrueFalsefalsefalse()邏輯表達(dá)式由邏輯運(yùn)算符組成的表達(dá)式稱為邏輯表達(dá)式。邏輯表達(dá)式的值為邏輯型,結(jié)果為1和0。C+規(guī)定:在由&&和|運(yùn)算符組成的邏輯表達(dá)式中,當(dāng)計(jì)算出一個子表達(dá)式的值之后便可確定整個邏輯表達(dá)式的值時,后面的子表達(dá)式就不需要再計(jì)算了,整個表達(dá)式的值就是該子表達(dá)式的值。這種表

51、達(dá)式也稱為短路表達(dá)式。例如:inta=3,b=0;該表達(dá)式運(yùn)算后a和b的值是多少?(1)!a&&a+b&&a+(2)!a|a+|b+分析:第一題:這是一個由&&組成的邏輯表達(dá)式,從左至右計(jì)算三個子表達(dá)式,只要有一個為0就不再計(jì)算其他子表達(dá)式。當(dāng)計(jì)算!a的值為0時,便可確定整個表達(dá)式的值為0,因此后面的子表達(dá)式就不再計(jì)算了。所以a的值為3,b的值為0。第二題:這是一個由|組成的邏輯表達(dá)式,從左至右計(jì)算三個子表達(dá)式,只要有一個結(jié)果為真則不再計(jì)算后面的子表達(dá)式。第一個子表達(dá)式為!a結(jié)果為0,再計(jì)算a+結(jié)果為4,所以就不再計(jì)算后面的子表達(dá)式。所以結(jié)果a為

52、4,b為0。4.賦值運(yùn)算符和賦值表達(dá)式()賦值運(yùn)算符=是賦值運(yùn)算符,它的作用是將等號右邊表達(dá)式的值賦給等號左邊的對象。例如:inta,b,c;a=3;b=4;c=(a+b)*(2*a-b)/得出14除了“”以外,賦值運(yùn)算符還可與算術(shù)運(yùn)算符組合,產(chǎn)生復(fù)合賦值運(yùn)算符,參見表3-9(假定n是一個整型變量)。表3-9賦值運(yùn)算符運(yùn)算符實(shí)例等價于=n=25+=n+=25n=n+25-=n-=25n=n-25*=n*=25n=n*25/=n/=25n=n/25%=n%=25n=n%25()賦值表達(dá)式由賦值運(yùn)算符組成的表達(dá)式為賦值表達(dá)式。賦值運(yùn)算符除了“=”之外還有+=,-=,*=,/=,%=等復(fù)合運(yùn)算符。賦

53、值運(yùn)算符的結(jié)合性是由右至左,因此,C+程序中允許出現(xiàn)連續(xù)賦值的情況。例如:inta,b,c,d;a=b=c=d=5/2;這里先計(jì)算5/2結(jié)果為2,再賦值給d,結(jié)果d=5/2表達(dá)式的值為2,再將這個值賦給c,以此類推,結(jié)果a、b、c、d的值均為2。在計(jì)算復(fù)合賦值運(yùn)算符表達(dá)式中,首先計(jì)算右值表達(dá)式的值后再與左值運(yùn)算。例如:inta=3,b=4;a*=b+1;這里先計(jì)算b+1等于5,再與a相乘賦值給a,結(jié)果等于15。5.條件運(yùn)算符與條件表達(dá)式()條件運(yùn)算符條件運(yùn)算符是C+中唯一的三目運(yùn)算符,也稱為三元運(yùn)算符,它有三個操作數(shù),格式為:操作數(shù)1?操作數(shù)2:操作數(shù)3操作數(shù)1一般是條件表達(dá)式,若表達(dá)式成立,

54、即為真,則整個表達(dá)式的值為操作數(shù)2,否則為操作數(shù)3。例如:('A'<=ch&&ch<='Z')?('a'+ch-'A'):ch結(jié)果是一個小寫字母。例如:intm=1,n=2;intmin=(m<n?m:n);/min取1()條件表達(dá)式由三目運(yùn)算符?:組成的表達(dá)式為條件表達(dá)式。例如a>b?x=4:x=9;條件表達(dá)式的值取決于?前面的表達(dá)式的值,該表達(dá)式的值為非0時,整個表達(dá)式的值為“:”前面的表達(dá)式的值,否則為“:”后面的表達(dá)式的值。#include<iostream>usingn

55、amespacestd;intmain(void)inta=3,b=4,c;c=a>b?+a:+b;cout<<a<<","<<b<<","<<c<<endl;c=a-b?a-3?b:b-a:a;cout<<a<<","<<b<<","<<c<<endl;return0;¯¯¯¯¯¯¯¯&

56、#175;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯&

57、#175;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯該程序執(zhí)行的結(jié)果為:6.逗號運(yùn)算符與逗號表達(dá)式多個表達(dá)式可以用逗號組合成一個表達(dá)式,即逗號表達(dá)式。逗號表達(dá)式的一般形式是:表達(dá)式1,表達(dá)式2,表達(dá)式n,它的值是取表達(dá)式n的值。逗號表達(dá)式是用逗號將若干個表達(dá)式連起來組成的表達(dá)式。該表達(dá)式的值是組成逗號表達(dá)式的若干個表達(dá)式中的最后一個表達(dá)式的值,類型也是最后一個表達(dá)式的類型。逗號表達(dá)式的計(jì)

58、算順序是自左至右。#include<iostream>usingnamespacestd;intmain(void)inta,b,c;a=1,b=2,c=a+b+3;cout<<a<<','<<b<<','<<c<<endl;c=(a+,a+=b,a-b);cout<<a<<','<<b<<','<<c<<endl;return0;¯¯¯¯

59、;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

60、;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯輸出結(jié)果如下:7.求字節(jié)數(shù)運(yùn)算符C+提供了求字節(jié)的運(yùn)算符sizeof,它是一個單目運(yùn)算符,用于計(jì)算表達(dá)式或數(shù)據(jù)類型的字節(jié)數(shù),其運(yùn)算結(jié)果與不同的編譯器和機(jī)器相關(guān)。當(dāng)我們進(jìn)行算術(shù)運(yùn)算時,如果運(yùn)算結(jié)果超出變量所能表達(dá)的數(shù)據(jù)范圍時,就會發(fā)生溢出。而利用sizeof運(yùn)算符計(jì)算變量所占的字節(jié)數(shù),也

61、就是說,可以算出變量的數(shù)據(jù)范圍,從而可以避免可能出現(xiàn)的錯誤。8.優(yōu)先級和結(jié)合性當(dāng)不同的運(yùn)算符混合運(yùn)算時,運(yùn)算順序是根據(jù)運(yùn)算符的優(yōu)先級而定的,優(yōu)先級高的運(yùn)算符先運(yùn)算,優(yōu)先級低的運(yùn)算符后運(yùn)算。在一個表達(dá)式中,如果各運(yùn)算符有相同的優(yōu)先級,運(yùn)算順序是從左向右,還是從右向左,是由運(yùn)算符的結(jié)合性確定的。所謂結(jié)合性是指運(yùn)算符可以和左邊的表達(dá)式結(jié)合,也可以與右邊的表達(dá)式結(jié)合。C+運(yùn)算符的優(yōu)先級和結(jié)合性參見表3-10。表中有一些運(yùn)算符,我們還沒有介紹,以后我們會在有關(guān)的內(nèi)容中學(xué)習(xí)。表3-10C+運(yùn)算符的優(yōu)先級和結(jié)合性優(yōu)先級運(yùn)算符種類結(jié)合性最高()->.雙目從左到右+-+-!*&newdeletes

62、izeof(類型)單目從右到左->*.*雙目從左到右+/%雙目從左到右+雙目從左到右<<>>雙目從左到右<<=>>=雙目從左到右=!=雙目從左到右&雙目從左到右雙目從左到右|雙目從左到右&&雙目從左到右|雙目從左到右?:三目從左到右=雙目從右到左最低,雙目從左到右9.類型轉(zhuǎn)換當(dāng)表達(dá)式中出現(xiàn)了多種類型數(shù)據(jù)的混合運(yùn)算時,往往需要進(jìn)行類型轉(zhuǎn)換。表達(dá)式中的類型轉(zhuǎn)換分為顯式轉(zhuǎn)換和隱式轉(zhuǎn)換。() 顯式轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換)顯式轉(zhuǎn)換是通過類型名和括號來實(shí)現(xiàn)的,一般形式為:(類型名)(表達(dá)式)顯式轉(zhuǎn)換的作用是將表達(dá)式的結(jié)果類型轉(zhuǎn)換為類

63、型名所指定的類型。例如:(int)3.14/3.14轉(zhuǎn)換成整型數(shù)3(long)3.14/3.14轉(zhuǎn)換成長整型數(shù)3L(double)2/2轉(zhuǎn)換成雙精度數(shù)2.0(char)122/122轉(zhuǎn)換成ASCII碼為122的字符(unsignedshort)3.14/3.14轉(zhuǎn)換成無符號整型數(shù)3如果類型名僅為一個單詞,顯式類型轉(zhuǎn)換的形式也可以寫成:類型表示符(表達(dá)式)。例如:int(3.14)等價于(int)3.14需要注意的是:(int)(x+y)是將(x+y)轉(zhuǎn)換為int型,而(int)x+y是將x轉(zhuǎn)換為int型后再與y相加。顯式類型轉(zhuǎn)換只是得到一個所需類型的中間變量,原來變量的類型并不發(fā)生變化。()隱

64、式轉(zhuǎn)換(自動類型轉(zhuǎn)換)在一般情況下,各種數(shù)據(jù)都按默認(rèn)類型參與運(yùn)算,當(dāng)兩個不同的數(shù)據(jù)類型進(jìn)行運(yùn)算時,數(shù)據(jù)將進(jìn)行自動類型轉(zhuǎn)換,轉(zhuǎn)換后再參與運(yùn)算。自動類型轉(zhuǎn)換也稱為隱式轉(zhuǎn)換(見3.2.1)。3.2.5基本輸入和輸出C+語言本身并不帶輸入和輸出(即I/O)功能,而是提供了輸入輸出庫,也稱為I/O庫。通過I/O庫,我們可以完成輸入和輸出的操作。大多數(shù)C程序使用一種稱為stdio的標(biāo)準(zhǔn)I/O庫,該庫也能夠在C+中使用。但是,在C+程序中,一種稱為iostream(I/O流庫)的I/O庫用得更多。標(biāo)準(zhǔn)的輸出流(通常是屏幕)稱為cout,標(biāo)準(zhǔn)的輸入流(通常是鍵盤)稱為cin。在C+中,I/O使用運(yùn)算<&

65、lt;和>>,<<與cout結(jié)合用于輸出,>>與cin結(jié)合用于輸入。要使用C+標(biāo)準(zhǔn)的I/O流的功能,必須包括頭文件iostream.h。iostream.h中預(yù)定義了四個全局的流對象:cout、cerr、clog和cin,用于標(biāo)準(zhǔn)輸出和輸入,cout和cin在程序設(shè)計(jì)中會經(jīng)常用到。1.用cout輸出()輸出流的使用輸出流cout與運(yùn)算符<<一起使用,其格式如下:cout<<表達(dá)式1<<表達(dá)式2<<<<表達(dá)式n;例如:cout<<"您好,世界!"/輸出“您好,世界!”到

66、屏幕上cout<<120;/輸出數(shù)字120到屏幕上cout<<x;/輸出變量x的值到屏幕上運(yùn)算符“<<”又叫插入運(yùn)算符,因?yàn)樗鼘⒑竺嫠臄?shù)據(jù)插入到它前面的數(shù)據(jù)流中。在以上的例子中,字符串常量"您好,世界!"、120、變量x先后被插入輸出流cout中。每當(dāng)我們使用字符串常量的時候,必須用引號把字符串引起來,以便將它和變量名明顯的區(qū)分開來。例如,下面兩個語句是不同的:cout<<"Hello"/將字符串常量"Hello"輸出到屏幕上cout<<Hello;/將變量Hello的值

67、輸出到屏幕上插入運(yùn)算符“<<”可以在同一語句中被多次使用:cout<<"Hello,"<<"Iam"<<"aC+sentence!"上面這一行語句將會在屏幕上輸出:Hello,IamaC+sentence!()換行符的使用必須注意,除非我們明確指定,cout并不會自動在其輸出內(nèi)容的末尾加換行符,因此下面的語句:cout<<"Thisisasentence."cout<<"Thisisanothersentence."將會有如

68、下內(nèi)容輸出到屏幕:Thisisasentence.Thisisanothersentence.雖然我們分別調(diào)用了兩次cout,兩個句子還是被輸出在同一行。所以,為了在輸出中換行,我們必須插入一個換行符來明確表達(dá)這一要求。在C+中換行符可以寫作n。cout<<"Thisisasentence.n"cout<<"Thisisanothersentence."將會產(chǎn)生如下輸出:Thisisasentence.Thisisanothersentence.另外,也可以用操作符endl來換行,例如下面兩行語句也會實(shí)現(xiàn)換行輸出:cout<<"Firstsentence."<<endl;cout<<"Secondsentence."<<endl;()格式輸出在輸出數(shù)據(jù)時,為簡便起見,往往不指定輸出的格式,由系統(tǒng)根據(jù)數(shù)據(jù)的類型采取默認(rèn)的格式,但有時希望數(shù)據(jù)按指定的格式輸出,有兩種方法可以達(dá)到此目的。使用控制符控制輸出格式表3-11常用的I/O流控制符控制符含義dec設(shè)置整數(shù)的基數(shù)為10hex設(shè)置整數(shù)的基數(shù)為16oct設(shè)置整數(shù)的基數(shù)為8setw(n)設(shè)置字段寬度為nsetprecision(n)設(shè)置實(shí)數(shù)的精度為nsetioflags(ios:l

溫馨提示

  • 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

提交評論