版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、面向?qū)ο蟪绦蛟O計課程輔導(一)-C+數(shù)據(jù)和運算 一、 數(shù)據(jù)類型 數(shù)據(jù)是人們記錄概念和事物的符號表示。如記錄人的姓名用漢字表示,記錄人的年齡用十進制數(shù)字表示,記錄人的體重用十進制數(shù)字和小數(shù)點表示等,由此得到的姓名、年齡和體重都叫數(shù)據(jù)。根據(jù)數(shù)據(jù)的性質(zhì)不同,可以把數(shù)據(jù)分為不同的類型。在日常使用中,數(shù)據(jù)主要被分為數(shù)值和文字(即非數(shù)值)兩大類,數(shù)值又細分為整數(shù)和小數(shù)兩類。 在C+語言中,每一種具體類型都對應著唯一的類型關鍵字、類型長度和值域范圍。 表1-1類型關鍵字長度值域范圍有符號短整數(shù)short, short int, signed short int2-215215-1內(nèi)的整數(shù)無符號短整數(shù)Unsi
2、gned short, unsigned short int20216-1內(nèi)的整數(shù)有符號整數(shù)int, signed int 4-231231-1內(nèi)的整數(shù)無符號整數(shù)Unsigned, unsigned int 40232-1內(nèi)的整數(shù)有符號長整數(shù)long, long int, signed long int4-231231-1內(nèi)的整數(shù)無符號長整數(shù)Unsigned long, unsigned long int 40232-1內(nèi)的整數(shù)有符號字符char, signed char1-128+127內(nèi)的整數(shù)無符號字符Unsigned char10255內(nèi)的整數(shù)邏輯bool 10和1枚舉enum 4為in
3、t值域內(nèi)的一個子集單精度數(shù)float 4-3.402823*10383.402823*1038內(nèi)的數(shù)雙精度數(shù)double 8-1.7977*103081.7977*10308內(nèi)的數(shù)長雙精度long double8-1.7977*103081.7977*10308內(nèi)的數(shù)指針 *40232-1內(nèi)的整數(shù)引用 &數(shù)組 結(jié)構(gòu)struct 聯(lián)合union 類class 空值void 下面對表1-1作幾點說明: 1. 在每一種類型的關鍵字一欄中,用逗號分開的各組關鍵字是等價的,都是表示該類型的關鍵字。如int和signed int都表示有符號整數(shù)類型。 2. 整數(shù)類型簡稱整型。大的整數(shù)類型包括小的整數(shù)類型、
4、字符類型、邏輯類型和枚舉類型,而小的整數(shù)類型又包括短整型(short int)、整型(int)和長整型(long int)三種具體類型。讀者應根據(jù)上下文聯(lián)系來理解以后敘述中所用“整型”的含義。 3. 對于每一種整數(shù)類型和字符類型,又可分為有符號和無符號兩種類型。通常使用較多的是有符號類型,所以時常也把有符號類型簡稱為所屬類型。如把有符號整數(shù)類型簡稱為整型或int型,把有符號字符類型簡稱為字符型或char型。 4. 類型長度是指存儲該類型值域范圍內(nèi)的任一個數(shù)據(jù)(又稱為值)所占有的存儲字節(jié)數(shù),該字節(jié)數(shù)由系統(tǒng)規(guī)定,并且對任一數(shù)據(jù)都相同。如短整型長度為2,即存儲每個短整數(shù)占用2個字節(jié),對應16個二進制
5、位;整型長度為4,即存儲每個整數(shù)占用4個字節(jié),對應32個二進制位;字符型長度為1,即存儲每個字符占用1個字節(jié),對應8個二進制位。 5. 類型的值域范圍是指該類型所對應的固定大小的存儲空間按照相應的存儲格式所能表示的值的范圍。如對于有符號短整型來說,它對應2個字節(jié)的存儲空間,存儲格式為二進制整數(shù)補碼格式,只能夠表示(即存儲)-215215-1,即-32768+32767之間的所有整數(shù)。若一個整數(shù)小于-32768或大于32767,則它就不是該類型中的一個值,即它不是一個短整數(shù)。又如對于無符號字符類型來說,它對應1個字節(jié)的存儲空間,存儲格式為二進制整數(shù)無符號(隱含為正)格式,只能夠表示028-1,即
6、0255之間的所有整數(shù)。若一個整數(shù)小于0或大于255,則它就不是該類型中的一個值,即它不是一個字符數(shù)據(jù)。 6. 一個數(shù)的有效數(shù)字是指從該數(shù)最左邊不為0的數(shù)字位起至最右邊不為0的數(shù)字位止之間的每一個數(shù)字位,而這些數(shù)字位的個數(shù)稱為該數(shù)的有效數(shù)字位數(shù)。如3500,2.705,-0.278,63.00和0.00104的有效數(shù)字位數(shù)分別為2,4,3,2和3。另外,若一個數(shù)帶有指數(shù)部分,則它不影響整個數(shù)的有效數(shù)字位數(shù)。如3.14,3.14*105,314*10-6等都具有相同的有效數(shù)字的位數(shù),即都為3位。 7. 單精度型的值域范圍是從-3.402823*1038至3.402823*1038之間的不超過7位
7、有效數(shù)字的所有整數(shù)和小數(shù)。如-372.65, -0.14*10-6, 0.0, +12.7, -6.45, 100.0, 8.062*1025等都是單精度范圍內(nèi)的數(shù)。2.00708463不是單精度范圍內(nèi)的一個數(shù),若舍去它的最后兩位有效數(shù)字,使之近似為2.007084,則就成為單精度范圍內(nèi)的一個數(shù)。 8. 雙精度型的值域范圍比單精度型的值域范圍更廣,能夠表示從-1.79769313486241*10308至1.79769313486241*10308之間的不超過15位有效數(shù)字的所有整數(shù)和小數(shù)。當一個數(shù)的有效數(shù)字的位數(shù)超過15時,則舍去第15位以后的所有位后,則可近似成為雙精度范圍內(nèi)的一個數(shù)。在V
8、C+中長雙精度型與雙精度型定義完全相同。 9. 在VC+6.0版本中,整型(int)和長整型(long ing)具有完全相同的長度和存儲格式,所以它們是等同的。但在早期的C+版本中,由于當時的機器字長為16位,所以整型和長整型的長度是不同的,前者為2個字節(jié),后者為4個字節(jié)。無論如何,任一種C+語言都遵循short int型的長度小于等于int型長度,同時int型長度又小于等于long ing型長度的規(guī)定。 與上述情況類似,在VC+6.0中,雙精度型(double)和長雙精度型(long double)也具有完全相同的長度和存儲格式,它們是等同的。在其他C+語言中也可能不同,但無論如何,它們都遵
9、循float型的長度小于等于double型長度,同時double型長度又小于等于long double型長度的規(guī)定。 使用C+中的sizeof運算符(該運算符是一個保留字)能夠很容易知道任一種數(shù)據(jù)類型的長度。如sizeof(int)的值就是一個整型的長度,sizeof(long double)的值就是一個長雙精度型的長度。 10. C+中的枚舉、數(shù)組、結(jié)構(gòu)、聯(lián)合和類都是需要用戶進行具體定義的類型,而其他所有類型都是預定義類型,即在C+系統(tǒng)內(nèi)部已經(jīng)定義了的類型。對于預定義類型,用戶可以在程序中的任何地方直接使用它,對于用戶定義類型,只有用戶根據(jù)需要給出具體定義后,才能夠在后面的程序中使用它。 二
10、、常量 常量是指在程序執(zhí)行中不變的量,它分為字面常量和符號常量(又稱標識符常量)兩種表示方法。如25,-3.26,a,“constant”等都是字面常量,即字面本身就是它的值。符號常量是一個標識符,對應著一個存儲空間,該空間中保存的數(shù)據(jù)就是該符號常量的值,這個數(shù)據(jù)是在定義符號常量時賦予的,是以后不能改變的。如C+保留字中的true和false就是系統(tǒng)預先定義的兩個符號常量,它們的值分別為數(shù)值0和1。 關于符號常量的定義和賦初值的問題將在下一節(jié)同變量一起討論,這一節(jié)只討論字面常量的表示問題。 (一) 整型常量 整型常量簡稱整數(shù),它有十進制、八進制和十六進制三種表示。 1. 十進制整數(shù) 十進制整數(shù)
11、由正號(+)或負號(-)開始的、接著為首位非0的若干個十進制數(shù)字所組成。若前綴為正號則為整數(shù),若前綴為負號則為負數(shù),若無符號則認為是正數(shù)。如38,-25,+120,74286等都是符合書寫規(guī)定的十進制整數(shù)。 當一個十進制整數(shù)大于等于-2147483648即-231-1,同時小于等于2147483647即231-1時,則被系統(tǒng)看作是int型常量;當在21474836484294967295即232-1范圍之內(nèi)時,則被看作是unsigned int型常量;當超過上述兩個范圍時,則無法用C+整數(shù)類型表示,只有把它用實數(shù)(即帶小數(shù)點的數(shù))表示才能夠被有效地存儲和處理。 2. 八進制整數(shù) 八進制整數(shù)由首
12、位數(shù)字為0的后接若干個八進制數(shù)字(借用十進制數(shù)字中的07)所組成。八進制整數(shù)不帶符號位,隱含為正數(shù)。如0,012,0377,04056等都是八進制整數(shù),對應的十進制整數(shù)依次為0,10,255和2094。 當一個八進制整數(shù)大于等于0同時小于等于017777777777時,則稱為int型常量,當大于等于020000000000同時小于等于037777777777時,則稱為unsigned int型常量,超過上述兩個范圍的八進制整數(shù)則不要使用,因為沒有相對應的C+整數(shù)類型。 3. 十六進制整數(shù) 十六進制整數(shù)由數(shù)字0和字母x(大、小寫均可)開始的、后接若干個十六進制數(shù)字(09,AF或af)所組成。同八
13、進制整數(shù)一樣,十六進制整數(shù)也均為正數(shù)。如0x0,0X25,0x1ff,0x30CA等都是十六進制整數(shù),對應的十進制整數(shù)依次為0,37,511和4298。 當一個十六進制整數(shù)大于等于0同時小于等于0x7FFFFFFF時,則稱為int型常量,當大于等于0x80000000同時小于等于0xFFFFFFFF時,則稱為unsigned int型常量,超過上述兩個范圍的十六進制整數(shù)沒有相對應的C+整數(shù)類型,所以不能使用它們。 4. 在整數(shù)末尾使用u和l字母 對于任一種進制的整數(shù),若后綴有字母u(大、小寫等效),則硬性規(guī)定它為一個無符號整型(unsigned int)數(shù),若后綴有字母l(大、小寫等效),則硬
14、性規(guī)定它為一個長整型(long int)數(shù)。在一個整數(shù)的末尾,可以同時使用u和l,并且對排列無要求。如25U,0327UL,0x3ffbL,648LU等都是整數(shù),其類型依次為unsigned int,unsigned long int,long int和unsigned long int。 (二) 字符常量 字符常量簡稱字符,它以單引號作為起止標記,中間為一個或若干個字符。如a,%,n,012,125,x4F等都是合乎規(guī)定的字符常量。每個字符常量只表示一個字符,當字符常量的一對單引號內(nèi)多于一個字符時,則將按規(guī)定解釋為一個字符。如a表示字符a,125解釋為字符U(稍后便知是如何解釋的)。 因為字
15、符型的長度為1,值域范圍是-128127或0255,而在計算機領域使用的ASCII字符,其ASCII碼值為0127,正好在C+字符型值域內(nèi)。所以,每個ASCII字符均是一個字符型數(shù)據(jù),即字符型中的一個值。 對于ASCII字符集中的每個可顯示字符(個別字符除外),對應的C+字符常量就是它本身,對應的值就是該字符的ASCII碼,表示時用單引號括起來;對于象回車、換行那樣的具有控制功能的字符,以及對于象單引號、雙引號那樣的作為特殊標記使用的字符,就無法采用上述的表示方法。為此引入了“轉(zhuǎn)義”字符的概念,其含義是:以反斜線作引導的下一個字符失去了原來的含義,而轉(zhuǎn)義為具有某種控制功能的字符。如n中的字符n
16、通過前面使用的反斜線轉(zhuǎn)義后就成為一個換行符,其ASCII碼為10。為了表示用作特殊標記使用的可顯示字符,也需要用反斜線字符引導。如表示單引號字符,若直接使用表示單引號是不行的,因為此時的單引號具有二義性。另外,還允許用反斜線引導一個具有1至3位的八進制整數(shù)或一個以字母x作為開始標記的具有1至2位的十六進制整數(shù),對應的字符就是以這個整數(shù)作為ASCII碼的字符。如0,12,73,146,x5A等對應的字符依次為空字符(其ASCII碼為0,注意:它不同與空格字符,空格字符的ASCII碼為32),換行符,;,f和Z等。 由反斜線字符開始的符合上述使用規(guī)定的字符序列稱為轉(zhuǎn)義序列,C+語言中的所有轉(zhuǎn)義序列
17、如表1-2所示。 表1-2轉(zhuǎn)義序列對應值對應功能或字符轉(zhuǎn)義序列對應值對應功能或字符a7響鈴92反斜線b8退格39單引號f12換頁”34雙引號n10換行?63問號r13回車cccccc的十進制值該值對應的字符t9水平制表xhhhh的十進制值該值對應的字符v11垂直制表 轉(zhuǎn)義序列不但可以作為字符常量,也可以同其他字符一樣使用在字符串中。如 “abcn”字符串中含有四個字符,最后一個為換行符, “tx=”中的首字符為水平制表符,當輸出它時將使光標后移8個字符位置。 對于一個字符,當用于輸出顯示時,將顯示出字符本身或體現(xiàn)出相應的控制功能,當出現(xiàn)在計算表達式中時,將使用它的ASCII碼。如: (1) c
18、har ch=E; (2) int x=ch+2; (3) if(chC) coutchCendl; (4) coutC比較,實際上是取出各自的值(即對應的ASCII碼)比較,因條件成立,所以執(zhí)行其后的輸出語句,將向屏幕輸出EC。第四條語句輸出一個字符串,即原樣輸出apple和使光標移到下一行開始位置。 (三) 邏輯常量 邏輯常量是邏輯類型中的值,VC+用保留字bool表示邏輯類型,該類型只含有兩個值,即整數(shù)0和1,用0表示邏輯假,用1表示邏輯真。在VC+中還定義了這兩個邏輯值所對應的符號常量false和true,false的值為0,表示邏輯假,true的值為1,表示邏輯真。 由于邏輯值是整數(shù)
19、0和1,所以它也能夠象其他整數(shù)一樣出現(xiàn)在表達式里,參與各種整數(shù)運算。 (四) 枚舉常量 枚舉常量是枚舉類型中的值,即枚舉值。枚舉類型是一種用戶定義的類型,只有用戶在程序中定義它后才能被使用。用戶通常利用枚舉類型定義程序中需要使用的一組相關的符號常量。枚舉類型的定義格式為: enum ; 它是一條枚舉類型定義語句,該語句以enum保留字開始,接著為枚舉類型名,它是用戶命名的一個標識符,以后就直接使用它表示該類型,枚舉類型名后為該類型的定義體,它是由一對花括號和其中的枚舉表所組成,枚舉表為一組用逗號分開的由用戶命名的符號常量,每個符號常量又稱為枚舉常量或枚舉值。如: (1) enum colorr
20、ed, yellow, blue; (2) enum daySun, Mon, Tues, Wed, Thur, Fri, Sat; 第一條語句定義了一個枚舉類型color,用來表示顏色,它包含三個枚舉值red,yellow和blue,分別代表紅色、黃色和蘭色。 第二條語句定義了一個枚舉類型day,用來表示日期,它包含7個枚舉值,分別表示星期日、星期一至星期六。 一種枚舉類型被定義后,可以象整型等預定義類型一樣使用在允許出現(xiàn)數(shù)據(jù)類型的任何地方。如可以利用它定義變量。 (1) enum color c1, c2,c3;(2) enum day today, workday; (3) c1=red
21、;(4) workday=Wed; 第一條語句開始的保留字enum和類型標識符colou表示上述定義的枚舉類型color,其中enum可以省略不寫,后面的三個標識符c1,c2和c3表示該類型的三個變量,每一個變量用來表示該枚舉表中列出的任一個值。 第二條語句開始的兩個成分(成分之間的空格除外)表示上述定義的枚舉類型day,同樣enum可以省略不寫,后面的兩個標識符today和workday表示該類型的兩個變量,每一個變量用來表示該枚舉表中列出的七個值中的任一個值。 第三條語句把枚舉值red賦給變量c1,第四條語句把枚舉值Wed賦給變量workday。 在一個枚舉類型的枚舉表中列出的每一個枚舉常
22、量都對應著一個整數(shù)值,該整數(shù)值可以由系統(tǒng)自動確認,也可以由用戶指定。若用戶在枚舉表中一個枚舉常量后加上賦值號和一個整型常量,則就表示枚舉常量被賦予了這個整型常量的值。如: enum daySun=7, Mon=0, Tues, Wed, Thur, Fri, Sat; 用戶指定了Sun的值為7,Mon的值為0。 若用戶沒有給一個枚舉常量賦初值,則系統(tǒng)給它賦予的值是它前一項枚舉常量的值加1,若它本身就是首項,則被自動賦予整數(shù)0。如對于上述定義的color類型,red,yellow和blue的值分別為0,1和2;對于剛被修改定義的day類型,各枚舉常量的值依次為7,0,1,2,3,4,5,6。 由
23、于各枚舉常量的值是一個整數(shù),所以可把它同一般整數(shù)一樣看待,參與整數(shù)的各種運算。又由于它本身是一個符號常量,所以當作為輸出數(shù)據(jù)項時,輸出的是它的整數(shù)值,而不是它的標識符,這一點同輸出其他類型的符號常量是一致的。 (五) 實型常量 實型常量簡稱實數(shù),它有十進制的定點和浮點兩種表示方法,不存在其他進制的表示。 1. 定點表示 定點表示的實數(shù)簡稱定點數(shù),它是由一個符號(正號可以省略)后接若干個十進制數(shù)字和一個小數(shù)點所組成,這個小數(shù)點可以處在任何一個數(shù)字位之前或之后。如.12, 1.2, 12., 0.12, -12.40, +3.14, -.02037, -36.0等都是符合書寫規(guī)定的定點數(shù)。 2.
24、浮點表示 浮點表示的實數(shù)簡稱浮點數(shù),它是由一個十進制整數(shù)或定點數(shù)后接一個字母e(大、小均可)和一個1至3位的十進制整數(shù)所組成,字母e之前的部分稱為該浮點數(shù)的尾數(shù),之后的部分成為該浮點數(shù)的指數(shù),該浮點數(shù)的值就是它的尾數(shù)乘以10的指數(shù)冪。如3.23E5, +3.25e-8, 2E4, 0.376E-15,1e-6, -6.04E+12, .43E0, 96.e24等都是合乎規(guī)定的浮點數(shù),它們對應的數(shù)值分別為:3.25*105, 3.25*10-8, 20000, 0.376*10-15, 10-6, -6.04*1012, 0.43, 96*1024等。 對于一個浮點數(shù),若將它尾數(shù)中的小數(shù)點調(diào)整到
25、最左邊第一個非零數(shù)字的后面,則稱它為規(guī)格化(或標準化)浮點數(shù)。如21.6E8和-0.074E5是非規(guī)定化的,若將它們分別調(diào)整為2.16E9和-7.4E3則都是規(guī)格化的浮點數(shù)。 3. 實數(shù)類型的確定 對于一個定點數(shù)或浮點數(shù),C+自動按一個雙精度數(shù)來存儲,它占用8個字節(jié)的存儲空間。若在一個定點數(shù)或浮點數(shù)之后加上字母f(大、小寫均可),則自動按一個單精度數(shù)來存儲,它占用4個字節(jié)的存儲空間。如3.24和3.24f,雖然數(shù)值相同,但分別代表一個雙精度數(shù)和一個單精度數(shù),同樣,-2.78E5為一個雙精度數(shù),而-2.78E5F為一個單精度數(shù)。 (六) 地址常量 指針類型的值域是0232-1之間的所有整數(shù),每一
26、個整數(shù)代表內(nèi)存空間中一個對應單元(若存在的話)的存儲地址,每一個整數(shù)地址都不允許用戶直接使用來訪問內(nèi)存,以防止用戶對內(nèi)存系統(tǒng)數(shù)據(jù)的有意或無意的破壞。但用戶可以直接使用整數(shù)0作為地址常量,它是C+中唯一允許使用的地址常量,并稱為空地址常量,它對應的符號常量為NULL,表示不代表任何地址,在iostream.h等頭文件中有此常量的定義。 三、變量 變量是其值可以被改變的量。每一個變量都屬于一種數(shù)據(jù)類型,用來表示(即存儲)該類型中的一個值。在程序中只有存在了一種數(shù)據(jù)類型后,才能夠利用它定義出該類型的變量。根據(jù)這一原則,我們可以隨時利用C+語言中的每一種預定義類型和用戶已經(jīng)定義的每一種類型定義所需要使
27、用的變量。一個變量只有被定義后才能被使用,即才能進行存儲和讀取其值的操作。 (一) 變量定義語句 變量定義是通過變量定義語句實現(xiàn)的,該語句的一般格式為: =,; 為已存在的一種數(shù)據(jù)類型,如short, int, long, char, bool, float, double等都是類型關鍵字,分別代表系統(tǒng)預定義的短整型、整型、長整型、字符型、邏輯型(又稱布爾型)、單精度型和雙精度型。對于用戶自定義的類型,可從類型關鍵字中省略其保留字。如假定struct worker是用戶自定義的一種結(jié)構(gòu)類型,則前面的保留字struct可以省略。 是用戶定義的一個標識符,用來表示一個變量,該變量可以通過后面的可選
28、項賦予一個值,稱為給變量賦初值,是一個表達式,它的值就是賦予變量的初值。 該語句格式后面使用的省略號表示在一條語句中可以定義多個變量,但各變量定義之間必須用逗號分開。 (二) 語句格式舉例 (1) int a,b; (2) char ch1=a, ch2=A; (3) int x=a+2*b; (4) double d1, d2=0.0, d3=3.14159; 第一條語句定義了兩個整型變量a和b;第二條語句定義了兩個字符變量ch1和ch2,并被分別賦初值為字符a和A;第三條語句定義了一個整型變量x,并賦予表達式a+2*b的值作為初值;第四條語句定義了三個雙精度變量,分別為d1, d2和d3,
29、其中d2被賦予初值0.0,d3被賦予初值3.14159。 (三) 語句執(zhí)行過程 當程序執(zhí)行到一條變量定義語句時,首先為所定義的每個變量在內(nèi)存中分配與類型長度相同的存儲單元,如對每個整型變量分配4個字節(jié)的存儲單元,對每個雙精度變量分配8個字節(jié)的存儲單元;接著若變量名后帶有可選項,則計算出初值表達式的值,并把它保存到變量所對應的存儲單元中,表示給變量賦初值,若變量名后不帶有可選項,則當所屬語句處于函數(shù)之外時,將自動給變量賦予初值0,否則不賦予任何值,此時的變量值是不確定的,實際上是存儲單元中的原有值(現(xiàn)在被稱為垃圾)。 (四) 語句應用舉例 假定要計算一個圓的周長和面積,則圓的半徑、周長和面積都需
30、要設定為變量,假定分別用radius, girth和area標識符表示,它們的類型均應為實數(shù)型,即單精度或雙精度型,通常使用雙精度型。根據(jù)圓的半徑計算周長和面積的公式為: girth=2pradius area=pradiusradius 下面給出用C+語言編寫的計算程序: #include void main() double radius, girth, area; /定義變量 cinradius; /從鍵盤輸入一個圓的半徑 girth=2*3.14159*radius; /計算周長 area=3.14159*radius*radius; /計算面積 coutradius:radiusen
31、dl; coutgirth: girthendl; coutarea: areaendl; 在這個程序的主函數(shù)中,第一條語句定義了三個變量,由于沒有給它們賦初值,所以其值是不確定的;第二條語句從鍵盤輸入一個常數(shù)給半徑radius,輸入的常數(shù)可以是整數(shù),也可以是定點數(shù)或浮點數(shù),系統(tǒng)將自動把它轉(zhuǎn)換為一個雙精度數(shù)后再賦給radius,即賦給該變量所對應的存儲單元;第三條和第四條語句分別計算出賦值號右邊表達式的值,再分別賦給變量girth和area;第五至七條語句依次向屏幕輸出圓的半徑、周長和面積。 假定程序運行后從鍵盤上輸入的半徑為5.62,則得到的輸出結(jié)果為: radius:5.62 girth:
32、 35.3115 area: 99.2252 (五) 符號常量定義語句 符號常量定義語句同變量定義語句類似,其語句格式為: const = ,; 該語句以保留字const開始并標識,后跟符號常量的類型關鍵字,接下去為符號常量名,它是一個用戶定義的標識符,符號常量名之后為一個賦值號和一個表達式(注意:表達式中既可以含有常量也可以含有變量),由此可見,在定義符號常量時必須同時對其賦初值。該語句同樣也可以定義多個符號常量。 系統(tǒng)執(zhí)行符號常量定義語句也同執(zhí)行變量定義語句一樣,需要依次為每個符號常量分配存儲單元并賦初值。 一個符號常量被定義后,它的值就是定義時所賦予的初值,以后將始終保持不變,因為系統(tǒng)只
33、允許讀取它的值,而不允許向它賦值。 另外,在符號常量的定義語句中,若為int,則可以被省略。 下面給出幾個符號常量定義語句的例子: (1) const int A1=5, A2=A1*4; (2) const double PI=3.14159; (3) const int MaxSize=100; 第一條語句定義了兩個整型符號常量A1和A2,并使得它們的初值分別為5和20;第二條語句定義了一個雙精度符號常量PI,用它表示數(shù)學上p的值3.14159;第三條語句定義了一個整型符號常量MaxSize,用它代表整數(shù)100。第一條和第三條語句中的int均可以省略不寫。 符號常量定義語句既可以出現(xiàn)在函數(shù)
34、體外,也可以出現(xiàn)在函數(shù)體內(nèi),這一點也跟變量定義語句相同。 符號常量也必須遵循先定義后使用的原則,這也與變量的定義和使用的規(guī)則相同。 (六) 使用#define命令定義符號常量 #define命令是一條預處理命令,其命令格式為: #define 是用戶定義的標識符,又稱為宏或宏標識符,也是由用戶給定的、將用來代替宏的一個字符序列。宏被該命令定義后,可以使用在其后的程序中,當程序被編譯時將把所有地方使用的宏標識符替換為對應的,并把宏命令刪除掉。 如一個宏命令為: #define ABC 10 若在主函數(shù)中有這樣一條語句: int x=ABC*ABC; 則當編譯后改變?yōu)椋?int x=10*10;
35、若上述宏命令中的字符序列不是10,而是2+5,則編譯后改變?yōu)椋?int x=2+5*2+5; 可見宏替換后改變了原表達式中運算的優(yōu)先次序,為了克服可能出現(xiàn)的這種錯誤,通常使用帶括號的宏字符序列。如可將上述定義的宏命令改寫為: #define ABC (2+5) 上述語句將會被正確地替換為: int x=(2+5)*(2+5); 由于使用const語句定義符號常量帶有數(shù)據(jù)類型,以便系統(tǒng)進行類型檢查,同時該語句具有計算初值表達式和給符號常量賦初值的功能,所以使用它比使用宏命令定義符號常量要優(yōu)越得多,因此提倡在程序中使用const語句定義符號常量。 (七) 使用變量和常量的程序舉例 #include
36、 #define M -1 /符號常量中的字母通常采用大寫 const int N=10; void main() int x,y; coutx; if(xN) y=M*x+1; else y=(x+M)*x-3; coutx yendl; 程序運行后若從鍵盤上輸入數(shù)值5,則得到的輸出結(jié)果為: 5 -4 若從鍵盤上輸入的數(shù)值為20,則得到的輸出結(jié)果為: 20 377 四、運算符 C+運算符又稱操作符,它是對數(shù)據(jù)進行運算的符號,參與運算的數(shù)據(jù)稱為操作數(shù)或運算對象,由操作數(shù)和操作符連接而成的有效的式子稱為表達式。 按照運算符要求操作數(shù)個數(shù)的多少,可把C+運算符分為單目(或一元)運算符、雙目(或二元
37、)運算符和三目(或三元)運算符三類。單目運算符一般位于操作數(shù)的前面,如對x取負為-x;雙目運算符一般位于兩個操作數(shù)之間,如兩個數(shù)a和b相加表示為a+b;三目運算符只有一個,即為條件運算符,它含有兩個字符,分別把三個操作數(shù)分開。 一個運算符可能是一個字符,也可能由兩個或三個字符所組成,還有的是一些C+保留字。如賦值號(=)就是一個字符,不等于號(!=)就是兩個字符,左移賦值號(間接訪問數(shù)據(jù)成員 2 !邏輯非 單目從右向左 按位取反+,-取正,取負 *間接訪問對象 &取對象地址+,-增1,減1()強制類型轉(zhuǎn)換Sizeof測類型長度New動態(tài)申請內(nèi)存單元Delete釋放new申請的單元 3 .*引用
38、指向類成員的指針 雙目從左到右 -*引用指向類成員的指針 4*,/,%乘,除,取余 雙目從左向右 5+,- 加,減 6按位左移,按位右移 7,=小于,小于等于,大于,大于等于 8=,!=等于,不等于 9&按位與 10按位異或 11|按位或 12&邏輯與 13|邏輯或 14?:條件運算符 三目從右向左 15=賦值 雙目從右向左+=,-=加賦值,減賦值*=,/=乘賦值,除賦值%=,&=取余賦值,按位與賦值=按位異或賦值|=按位或賦值=按位右移賦值 16,逗號運算符 雙目從左向右 下面對表1-3中的一些運算符作簡要介紹,對剩余的一些運算符將結(jié)合以后各章的有關內(nèi)容一同介紹。 1. 雙目算術運算符 這類
39、運算符包括加、減、乘、除和取余等五種,它們的含義與數(shù)學上相同。該類運算的操作數(shù)為任一種數(shù)值類型,包括任一種整數(shù)類型和任一種實數(shù)類型。由算術運算符(包括單目和雙目)連接操作數(shù)而成的式子稱為算術(或數(shù)值)表達式,每個算術表達式的值為一個數(shù)值,其類型按如下規(guī)則確定: 當參加運算的兩個操作數(shù)均為整型(但具體類型可以不同,如一個為int型,另一個為char型)時,則運算結(jié)果為int型(因在VC+中int和long int的值域范圍相同,所以可均認為是int型),注意:兩個整數(shù)相除得到的是它們的整數(shù)商,兩個整數(shù)取余得到的是整余數(shù); 當參加運算的兩個操作數(shù)中至少有一個是單精度型,并且另一個不是雙精度型時,則
40、運算結(jié)果為float型; 當參加運算的兩個操作數(shù)中至少有一個是雙精度型時,則運算結(jié)果為double型。 假定整型變量x和y的值分別為25和6,則下面給出整數(shù)運算,特別是含有除和取余運算的例子: x/8=3 x/y+5=9 10-y%x=4 x%5=0 x*3%4=3 65%x/3=5 -56/6=-9 -56%6=-2 若要使兩個整數(shù)相除得到一個實數(shù),則必須將其中之一轉(zhuǎn)變?yōu)閷崝?shù)。如: 9.0/2=4.5 -15/4.0=-3.75 float(y)/x=0.24 x/double(-8)=-3.125 其中float(y)和double(-8)分別表示把括號內(nèi)的表達式的值轉(zhuǎn)換為一個單精度數(shù)和雙
41、精度數(shù)。 2. 賦值運算符 賦值運算除了一般的賦值運算(=)外,還包括各種復合賦值運算,如+=,-=,*=,/=等。一般賦值運算采用的賦值號借用數(shù)學上的等號,其功能是把賦值號右邊的表達式的值賦給左邊變量所對應的存儲單元中。由一般或復合賦值號連接左邊變量和右邊表達式而構(gòu)成的式子稱為賦值表達式,每個賦值表達式都有一個值,它就是通過賦值得到的左邊變量的值。如x=3*15-2的值就是通過賦值保存在x中的值43。 通常在一個賦值表達式中,賦值號兩邊的數(shù)據(jù)類型是相同的,若出現(xiàn)不同時,則在賦值前自動會把右邊表達式的值轉(zhuǎn)換為與左邊變量類型相同的值,然后再把這個值賦給左邊變量。如執(zhí)行x=20/3.0時,若x為整
42、型,則得到的x的值為6,它是將右邊計算得到的雙精度值舍去小數(shù)部分,只保留整數(shù)部分6的結(jié)果。再如,執(zhí)行y=40時,若y為雙精度變量,則首先把40轉(zhuǎn)換為雙精度數(shù)40.0(或表示為4.0e1)后再賦給y。注意,當把一個實數(shù)值賦給一個整型量時,將丟失小數(shù)部分,獲得的只是整數(shù)部分,它是實數(shù)的一個近似值。 在一個賦值表達式中可以使用多個賦值號實現(xiàn)給多個變量賦值的功能。如執(zhí)行x=y=z=0時就能夠同時給x,y和z賦值0。由于賦值號的結(jié)合性是從右向左,所以實際賦值過程是:首先把0賦給z,得到子表達式z=0的值為z的值0,接著把這個值賦給y,得到子表達式y(tǒng)=z=0的值為y的值0,最后把這個值賦給x,使x的值也為
43、0。整個表達式的值也就是x的值0。 賦值號也可以使用在常量和變量的定義語句中,用于給它們賦初值。但這里的賦值號只起到賦初值的作用,并不構(gòu)成賦值表達式。 在C+中有許多復合賦值運算符,每個運算符的含義為:把右邊表達式的值同左邊變量的值進行相應運算后,再把這個運算結(jié)果賦給左邊的變量,該復合賦值表達式的值也就是保存在左邊變量中的值。如執(zhí)行x+=3時,就是把x的值加上3后再賦給x,它與執(zhí)行x=x+3表達式的計算是等價的,若x的值為5,則計算后得到的x的值為8,它也是這個表達式的值。 對于任一種賦值運算,其賦值號或復合賦值號左邊必須是一個左值。左值是指具有對應的可由用戶訪問的存儲單元,并且能夠由用戶改變
44、其值的量。如一個變量就是一個左值,因為它對應著一個存儲單元,并可由編程者通過變量名訪問和改變其值,而一個字面常量就不是一個左值,因為它不存在供用戶訪問并能改變其值的存儲單元,一個通過const語句定義的符號常量也不是一個左值,因為雖然用戶能訪問它,但不能改變它的值,一般的算術表達式(如x*5+2)也不是一個左值,因為它的值只能隨時被使用,不能再訪問和改變它。由此可知:表達式(x+5)=10是非法的,因為賦值號左邊的(x+5)是一個值,而不是一個左值,常量10無法賦給它。不是左值的量被稱為右值。 一個賦值表達式的結(jié)果實際上是一個左值,指的是賦值號左邊的變量。如x=y-2的值就是被賦值后的x,它是
45、一個左值,代表著對應存儲單元中的值。同樣,x*=y的結(jié)果也是一個左值,即x。表達式(x+=5)*=2是合法的,其結(jié)果為左值x,若x的原值為5,則最后得到的x值為20。 3. 增1和減1運算符 增1運算符用連續(xù)兩個加號(+)表示,減1運算符用連續(xù)兩個減號(-)表示。它們都是單目操作符,并且要求操作數(shù)必須是左值,通常為一個變量,操作數(shù)的類型可以是任一種整數(shù)類型,不過對于枚舉類型需要有相應操作符重載的定義。 +和-運算符有兩種使用格式:一是使用在操作數(shù)的前面,另一是使用在操作數(shù)的后面,它們都是將操作數(shù)分別增1或減1,但含義略有區(qū)別。進行+或-運算構(gòu)成的表達式稱為增1或減1表達式,當操作符使用在前面時
46、,首先使操作數(shù)增1或減1,然后求出表達式的值就是被增1或減1后的操作數(shù),它是一個左值;當操作符使用在后面時,同樣使操作數(shù)增1或減1,但求出的表達式的值是運算前的操作數(shù)的值,注意:它不是一個左值。 假定下面每個表達式中整型變量x的值均為10,則: (1) +x /表達式的值為增1后的x,值為11 (2) x+ /x變?yōu)?1,但表達式的值為10 (3) -x /表達式的值為減1后的x,值為9 (4) x- /x變?yōu)?,但表達式的值為10 (5) +x=5 /x首先變?yōu)?1,然后變?yōu)?,此語句合法,但可能沒意義 (6) x+=5 /x+不是左值,因此不能被賦值,此表達式非法(7) -x- /因-的結(jié)
47、合性為從右向左,所以先得到x的值為9, /x-的值為10,它不是左值,當接著進行左邊減1時非法 (8) -+x /結(jié)果仍為左值x (9) y=x+ /x變?yōu)?1,y的值為10 (10) y=-x /x變?yōu)?,y的值為10 (11) y=5*x+ /x變?yōu)?1,y的值為50(12) y=x*+x; /y的值為121。當算術表達式中多處出現(xiàn)有同一變量時, /最好不要對它進行+或-操作,以免發(fā)生混亂。如應將 /此語句改寫為“x+;”和“y=x*x;”這兩條語句。 還要注意:x+和x+1是不同的表達式,x+的值為x的原值,x的值為增1后的值,x+1的值為x的值加1后的結(jié)果,運算前后x的值不變。+x和x+=1及x=x+1的作用是完全相同的。同理,x-與x-1不同,而-x和x-=1及x=x-1的作用是完全相同的。 4. 測類型長度運算符 該運算符的使用格式為: sizeof() 運算結(jié)果是類型名所表示類型的長度或表達
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年暑期工勞動合同標準文本集3篇
- 番禺2025版租賃市場房源代理服務合同
- 2024結(jié)款協(xié)議合同范本
- 二零二四年國際貨物銷售合同:FOB條款與運輸2篇
- 二零二五版高校畢業(yè)生就業(yè)指導與職業(yè)規(guī)劃服務合同6篇
- 二零二五版電影劇本改編與制作投資合同范本3篇
- 2024物聯(lián)網(wǎng)應用項目建設的合同標的
- 年度健腹椅競爭策略分析報告
- 年度全自動板框污泥脫水機產(chǎn)業(yè)分析報告
- 2025年度教育領域臨時工招聘及教學質(zhì)量合同4篇
- 第7課《中華民族一家親》(第一課時)(說課稿)2024-2025學年統(tǒng)編版道德與法治五年級上冊
- 2024年醫(yī)銷售藥銷售工作總結(jié)
- 急診科十大護理課件
- 山東省濟寧市2023-2024學年高一上學期1月期末物理試題(解析版)
- GB/T 44888-2024政務服務大廳智能化建設指南
- 2025年上半年河南鄭州滎陽市招聘第二批政務輔助人員211人筆試重點基礎提升(共500題)附帶答案詳解
- 山東省濟南市歷城區(qū)2024-2025學年七年級上學期期末數(shù)學模擬試題(無答案)
- 國家重點風景名勝區(qū)登山健身步道建設項目可行性研究報告
- 投資計劃書模板計劃方案
- 《接觸網(wǎng)施工》課件 3.4.2 隧道內(nèi)腕臂安裝
- 2024-2025學年九年級語文上學期第三次月考模擬卷(統(tǒng)編版)
評論
0/150
提交評論