C++語言的基本成分 – 數(shù)據(jù)成分_第1頁
C++語言的基本成分 – 數(shù)據(jù)成分_第2頁
C++語言的基本成分 – 數(shù)據(jù)成分_第3頁
C++語言的基本成分 – 數(shù)據(jù)成分_第4頁
C++語言的基本成分 – 數(shù)據(jù)成分_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算概論計算概論A課程課程 程序設計部分程序設計部分C+C+語言基本成分(語言基本成分(1 1)崔崔 斌斌2 / 76問問 題題n為什么計算機能夠完成計算任務?為什么計算機能夠完成計算任務?n說說以下幾個概念之間的關系:說說以下幾個概念之間的關系:u內(nèi)存、地址、存儲單元、字節(jié)內(nèi)存、地址、存儲單元、字節(jié)n計算機程序為什么要先編譯再運行?計算機程序為什么要先編譯再運行?n說說程序中說說程序中“#include ”的含義。的含義。n判斷題:判斷題:u 函數(shù)是函數(shù)是C/C+程序的基本組成單位。程序的基本組成單位。u 每個程序中只能包含一個函數(shù)。每個程序中只能包含一個函數(shù)。u 每個程序中只能包含一個每個

2、程序中只能包含一個Main()函數(shù)。()函數(shù)。u 每個程序只能由一個文件組成。每個程序只能由一個文件組成。3 / 76簡單程序的組成簡單程序的組成/*/* example.cpp */*#includeusing namespace std;int main( )int number45 = 78, 56, 69, 31, 36, 67, 31, 47, 69, 34, 45, 74, 61, 82, 43, 41, 76, 79, 81, 66, 54, 50, 76, 51, 53, 28, 74, 39, 45, 61, 52, 41, 43, 75, 78, 84, 72, 51, 4

3、3, 64, 75, 81, 69, 55, 74;int max = 0;int i = 0;for(i = 0; i max)max = numberi;coutThe Maximal Number is:max;return 0; /函數(shù)結束返回函數(shù)結束返回注釋注釋預編譯:文件包含命令預編譯:文件包含命令聲明名字空間聲明名字空間函數(shù)體函數(shù)體變量定義變量定義循環(huán)控制語句循環(huán)控制語句賦值語句賦值語句運算表達式運算表達式輸入輸出語句輸入輸出語句函數(shù)名函數(shù)名每個程序中都包含哪些成分?每個程序中都包含哪些成分?5 / 76程序設計語言的構成程序設計語言的構成n語言的種類千差萬別,但是,一般說來,基

4、語言的種類千差萬別,但是,一般說來,基本成分不外四種:本成分不外四種:u 數(shù)據(jù)成分,用以描述程序中所涉及的數(shù)據(jù);數(shù)據(jù)成分,用以描述程序中所涉及的數(shù)據(jù);u 運算成分,用以描述程序中所包含的運算;運算成分,用以描述程序中所包含的運算;u 控制成分,用以表達程序中的控制構造;控制成分,用以表達程序中的控制構造;u 傳輸成分,用以表達程序中數(shù)據(jù)的傳輸;傳輸成分,用以表達程序中數(shù)據(jù)的傳輸;計算機科學技術百科全書計算機科學技術百科全書6 / 76簡單程序的組成簡單程序的組成/*/* example.cpp */*#includeusing namespace std;int main( )int numb

5、er45 = 78, 56, 69, 31, 36, 67, 31, 47, 69, 34, 45, 74, 61, 82, 43, 41, 76, 79, 81, 66, 54, 50, 76, 51, 53, 28, 74, 39, 45, 61, 52, 41, 43, 75, 78, 84, 72, 51, 43, 64, 75, 81, 69, 55, 74;int max = 0;int i = 0;for(i = 0; i max)max = numberi;coutThe Maximal Number is:max;return 0; /函數(shù)結束返回函數(shù)結束返回注釋注釋預編譯:

6、文件包含命令預編譯:文件包含命令聲明名字空間聲明名字空間函數(shù)體函數(shù)體變量定義變量定義控制語句控制語句賦值語句賦值語句運算表達式運算表達式數(shù)據(jù)成分數(shù)據(jù)成分運算成分運算成分輸入輸出成分輸入輸出成分控制成分控制成分函數(shù)名函數(shù)名C+程序設計的基本構成程序設計的基本構成 數(shù)據(jù)成分(基本數(shù)據(jù)成分)數(shù)據(jù)成分(基本數(shù)據(jù)成分)8 / 76計算機能夠哪種類型的數(shù)據(jù)計算機能夠哪種類型的數(shù)據(jù)?9 / 76n數(shù)制及數(shù)制轉換數(shù)制及數(shù)制轉換n整型數(shù)據(jù)整型數(shù)據(jù)n實型數(shù)據(jù)實型數(shù)據(jù)n字符型數(shù)據(jù)字符型數(shù)據(jù)n變量、常量變量、常量n輸入、輸出輸入、輸出10 / 76數(shù)制及數(shù)制轉換n數(shù)制也稱計數(shù)制,是指用一組固定的符號和數(shù)制也稱計數(shù)制,

7、是指用一組固定的符號和統(tǒng)一的規(guī)則來表示數(shù)值的方法。通常按進位統(tǒng)一的規(guī)則來表示數(shù)值的方法。通常按進位的方法進行計數(shù),也稱為進位計數(shù)制。計算的方法進行計數(shù),也稱為進位計數(shù)制。計算機系統(tǒng)中幾種常用進位計數(shù)制:機系統(tǒng)中幾種常用進位計數(shù)制: 十位制(Decimal notation) 二進制(Binary notation) 八進制(Octal notation) 十六進制數(shù)(Hexdecimal notation)11 / 76數(shù)制及數(shù)制轉換12 / 76例例: 十進制數(shù)十進制數(shù)253在不同數(shù)制下的表示在不同數(shù)制下的表示253 = 2102 + 5101 + 3100 = An2n + A(n-1)2

8、(n-1) + + A121 + A020 = Bm8m + B(m-1)8(m-1) + + B181 + B080 = Ck16k+C(k-1)16(k-1) +C1 161+C0 160AnA(n-1)A1A0 : 二進制數(shù)BmB(m-1)B1B0 : 十進制數(shù)CkC(k-1)C1C0 : 十六進制數(shù)數(shù)制及數(shù)制轉換13 / 76 不同數(shù)制之間的轉換,實質是基數(shù)間的轉換。一般轉換的原則是:如果兩個有理數(shù)如果兩個有理數(shù)相等,則兩數(shù)的整數(shù)部分和小數(shù)部分一定相等,則兩數(shù)的整數(shù)部分和小數(shù)部分一定分別相等。分別相等。因此,各數(shù)制之間進行轉換時,通常對整數(shù)部分和小數(shù)部分分別進行轉換。數(shù)制及數(shù)制轉換14

9、 / 76整數(shù)的轉換整數(shù)的轉換數(shù)制及數(shù)制轉換十進制數(shù)轉換成二進制數(shù)十進制數(shù)轉換成二進制數(shù) 把十進制數(shù)轉換為二進制數(shù)的方法是:整數(shù)轉換用“除除2取余法取余法”;小數(shù)轉換用“乘乘2取整法取整法”。1111110115 / 76十進制數(shù)轉換成二進制數(shù)十進制數(shù)轉換成二進制數(shù) 將(0.745)10轉換成四位二進制小數(shù)四位二進制小數(shù),轉換過程如下:0.7452 1.490 取出整數(shù)取出整數(shù)1 (最高位最高位)0.4902 0.980 取出整數(shù)取出整數(shù)00.9802 1.960 取出整數(shù)取出整數(shù)10.9602 1.920 取出整數(shù)取出整數(shù)1 (最低位最低位)0.920 轉換結束轉換結束 這里,第四次乘積的小

10、數(shù)部分不為0,但已滿足題目所要求的精度精度,所以, (0.745)10 (0.1011)2。顯然,在轉換過程中,做的乘法次數(shù)越多,結果就越精確。小數(shù)的轉換小數(shù)的轉換數(shù)制及數(shù)制轉換16 / 76整型數(shù)據(jù)的分類整型數(shù)據(jù)的分類n按照數(shù)據(jù)的表示范圍分類按照數(shù)據(jù)的表示范圍分類u基本型:以基本型:以int表示表示u短整型:以短整型:以short int或或short表示表示u長整型:以長整型:以long int 或或long 表示表示n按照數(shù)據(jù)有無符號分類按照數(shù)據(jù)有無符號分類u有符號型:表示某個范圍內(nèi)的整數(shù)有符號型:表示某個范圍內(nèi)的整數(shù)signed int; signed short; signed lo

11、ngu無符號型:表示某個范圍內(nèi)的正整數(shù)無符號型:表示某個范圍內(nèi)的正整數(shù)unsigned int;unsigned short;unsigned long17 / 76整型數(shù)據(jù)的范圍整型數(shù)據(jù)的范圍nC/C+標準標準沒有具體規(guī)定以上各類數(shù)據(jù)所占內(nèi)存字沒有具體規(guī)定以上各類數(shù)據(jù)所占內(nèi)存字節(jié)數(shù),只要求節(jié)數(shù),只要求long型數(shù)據(jù)長度不短于型數(shù)據(jù)長度不短于int型,型,short型型不長于不長于int型。型。nVC中每種類型所占內(nèi)存空間和表示的范圍中每種類型所占內(nèi)存空間和表示的范圍:18 / 76如何知道某種類型的數(shù)占多少字節(jié)?如何知道某種類型的數(shù)占多少字節(jié)?nsizeof 運算符運算符u用于計算某種類型的

12、對象在內(nèi)存中所占的字節(jié)數(shù)。用于計算某種類型的對象在內(nèi)存中所占的字節(jié)數(shù)。#include void main()coutsizeof(short int)=sizeof(short int)endl;coutsizeof(signed short int)=sizeof(signed short int)endl;coutsizeof(unsigned short int)=sizeof(unsigned short int)endl;coutsizeof(int)=sizeof(int)endl;coutsizeof(signed int)=sizeof(signed int)endl;cou

13、tsizeof(unsigned int)=sizeof(unsigned int)endl;coutsizeof(long int)=sizeof(long int)endl;coutsizeof(signed long int)=sizeof(signed long int)endl;coutsizeof(unsigned long int)=sizeof(unsigned long int)endl;19 / 76以不同的方式輸出整數(shù)以不同的方式輸出整數(shù)#include using namespace std;int main()int x = 010, y = 10, z = 0 x1

14、0;cout以十進制形式顯示:以十進制形式顯示:;coutx=x, y=y, z=zendl;cout以八進制形式顯示:以八進制形式顯示:;coutoctx=x,y=y,z=zendl;cout以十六進制形式顯示:以十六進制形式顯示:;couthexx=x,y=y,z=zendl;return 0;20 / 76整型數(shù)據(jù)的初始值整型數(shù)據(jù)的初始值n在在VC中,定義一個中,定義一個int類型的變量,而不給它賦值,類型的變量,而不給它賦值,會出現(xiàn)什么情況會出現(xiàn)什么情況?n例例:#include using namespace std;int main()int a;couta;return 0; 運

15、行結果為:運行結果為:-858993460當輸出是個當輸出是個很大的負數(shù)很大的負數(shù)時,檢查一時,檢查一下是否忘記下是否忘記賦值。賦值。21 / 76整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出n在在VC中一個中一個int型變量的最大允許值為型變量的最大允許值為2147483647,如果再加如果再加1,會出現(xiàn)什么情況,會出現(xiàn)什么情況?n例:例:int main()int a,b;a=2147483647; b=a+1; couta“ ”b;return 0;n運行結果為:運行結果為:2147483647,-21474836480 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1

16、1 1 1 1 1 1 1 1 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0a:b:22 / 76整型數(shù)據(jù)的存儲整型數(shù)據(jù)的存儲n存儲空間的分配存儲空間的分配n8位有符號整數(shù)例位有符號整數(shù)例0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1有符號整數(shù)變量:有符號整數(shù)變量:無符號整數(shù)變量:無符號整數(shù)變量:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 123 / 76

17、整型數(shù)據(jù)的存儲整型數(shù)據(jù)的存儲n原碼、反碼、補碼原碼、反碼、補碼u在計算機中,負數(shù)以其正值的補碼形式表達。正數(shù)在計算機中,負數(shù)以其正值的補碼形式表達。正數(shù)即在符號為補即在符號為補0.u原碼:一個整數(shù),按照絕對值大小轉換成的二進制原碼:一個整數(shù),按照絕對值大小轉換成的二進制數(shù),稱為原碼。數(shù),稱為原碼。u反碼:將二進制數(shù)按位取反,所得的新二進制數(shù)稱反碼:將二進制數(shù)按位取反,所得的新二進制數(shù)稱為原二進制數(shù)的反碼。為原二進制數(shù)的反碼。u補碼補碼: 反碼反碼+1u只有有符號的整數(shù)才有原碼、反碼和補碼的只有有符號的整數(shù)才有原碼、反碼和補碼的!24 / 76n用二進制中最小的數(shù)去對應最小的負數(shù),最大的也相對應

18、用二進制中最小的數(shù)去對應最小的負數(shù),最大的也相對應最大正數(shù)?最大正數(shù)?u不科學不科學n1個字節(jié)表示個字節(jié)表示256個數(shù)個數(shù)u表示范圍:表示范圍:-128-127。u簡單理解:簡單理解:最高位表示符號位,如果是最高位表示符號位,如果是0表示正數(shù),如表示正數(shù),如果是果是1表示負數(shù),剩下的表示負數(shù),剩下的7位用來儲存數(shù)的絕對值的話,位用來儲存數(shù)的絕對值的話,能表示能表示27個數(shù)的絕對值,再考慮正負兩種情況,個數(shù)的絕對值,再考慮正負兩種情況,27*2還還是是256個數(shù)。個數(shù)。n首先定義首先定義0在計算機中儲存為在計算機中儲存為00000000,對于正數(shù)我們依然,對于正數(shù)我們依然可以像無符號數(shù)那樣換算,

19、從可以像無符號數(shù)那樣換算,從00000001到到01111111依次表示依次表示1到到127。(原碼原碼)25 / 76n那負數(shù)是不是從那負數(shù)是不是從10000001到到11111111依次表示依次表示-1到到-127?u如果這樣的話那么一共就只有如果這樣的話那么一共就只有255個數(shù)了個數(shù)了(10000000的情的情況沒有考慮在內(nèi)況沒有考慮在內(nèi))u10000000在計算機中表示最小的負整數(shù),就是這里的在計算機中表示最小的負整數(shù),就是這里的-128u實際上并不是從實際上并不是從10000001到到11111111依次表示依次表示-1到到-127,而是剛好相反的,從而是剛好相反的,從1000000

20、1到到11111111依次表示依次表示-127到到-1。n負整數(shù)在計算機中是以補碼形式儲存的,補碼是怎么樣表負整數(shù)在計算機中是以補碼形式儲存的,補碼是怎么樣表示的呢示的呢?26 / 76n引入另一個概念引入另一個概念反碼反碼u反碼就是把負數(shù)的原碼(負數(shù)的原碼和和它的絕對值所反碼就是把負數(shù)的原碼(負數(shù)的原碼和和它的絕對值所對應的原碼相同,簡單的說就是絕對值相同的數(shù)原碼相對應的原碼相同,簡單的說就是絕對值相同的數(shù)原碼相同)各個位按位取反,是同)各個位按位取反,是1就換成就換成0,是,是0就換成就換成1,u如如-1的原碼是的原碼是00000001,和,和1的原碼相同,那么的原碼相同,那么-1的反碼的

21、反碼就是就是11111110n而補碼就是在反碼的基礎上加而補碼就是在反碼的基礎上加1,即,即-1的補碼是的補碼是11111110+1=11111111u-1在計算機中是按在計算機中是按11111111儲存的。儲存的。n總結總結:u計算機儲存有符號的整數(shù)時,是用該整數(shù)的補碼進行儲計算機儲存有符號的整數(shù)時,是用該整數(shù)的補碼進行儲存的,存的,0的原碼、補碼都是的原碼、補碼都是0,正數(shù)的原碼、補碼可以特,正數(shù)的原碼、補碼可以特殊理解為相同,負數(shù)的補碼是它的反碼加殊理解為相同,負數(shù)的補碼是它的反碼加1。27 / 76n【例例1】+9的補碼是的補碼是00001001。u注:這個注:這個+9的補碼是用的補碼

22、是用8位的位的2進制來表示。補進制來表示。補碼表示方式很多,還有碼表示方式很多,還有16位位2進制補碼表示形式進制補碼表示形式,以及,以及32位位2進制補碼表示形式等。進制補碼表示形式等。n【例例2】求求-7的補碼。的補碼。u因為給定數(shù)是負數(shù),則符號位為因為給定數(shù)是負數(shù),則符號位為“1”。u后七位:后七位:-7的原碼(的原碼(10000111)按位取反(按位取反(11111000)(負數(shù)符號位不變)(負數(shù)符號位不變)加加1(11111001)u所以所以-7的補碼是的補碼是11111001。28 / 76n為什么使用補碼形式:為什么使用補碼形式:u一是為了防止一是為了防止0有有2個編碼,個編碼,

23、u其次就是為了把減法運算用加法運算表示出來,以達到其次就是為了把減法運算用加法運算表示出來,以達到簡化電路的作用。簡化電路的作用。在補碼的系統(tǒng),加法電路就可以處理有負數(shù)在補碼的系統(tǒng),加法電路就可以處理有負數(shù)的加法,不需另外處理減法的電路。而且,只要有電路負責數(shù)字的的加法,不需另外處理減法的電路。而且,只要有電路負責數(shù)字的變號(例如將變號(例如將 1 變換為變換為 -1),也可以用加法電路來處理減法。),也可以用加法電路來處理減法。n4位數(shù)例:位數(shù)例: 3 + (-1)0011 (3) + 1111 (-1) - 10010 (2) 結果結果 10010 似乎是錯的,因為已經(jīng)超過四似乎是錯的,因

24、為已經(jīng)超過四位位,不過若忽略掉(從右數(shù)起的)第不過若忽略掉(從右數(shù)起的)第 5 位位,結果,結果是是 0010 (2),和我們計算的結果一樣。而且若,和我們計算的結果一樣。而且若可以將二進制的可以將二進制的 0001 (1) 變號為變號為 1111 (-1),以,以上的式子上的式子就就可以計算減法:可以計算減法:3-1 = 2。29 / 76n問題?問題?u為什么用補碼表示有符號整數(shù)為什么用補碼表示有符號整數(shù),比如比如8位整數(shù)位整數(shù)表示的范圍是表示的范圍是-128127,而不是,而不是-127128呢?呢?u為什么補碼能這么巧妙實現(xiàn)了正負數(shù)的加減為什么補碼能這么巧妙實現(xiàn)了正負數(shù)的加減運算?運算

25、?“模模”的概念的概念30 / 76#include using namespace std;int main()int x = 0 x7fffffff;cout以十六進制形式顯示:以十六進制形式顯示:;couthexx=xendl;cout以十進制形式顯示:以十進制形式顯示:;coutdecx=xendl;int y = 0 xffffffff;cout以十六進制形式顯示:以十六進制形式顯示:;couthexy=yendl;cout以十進制形式顯示:以十進制形式顯示:;coutdecy=yendl;int z = 0 x80000000;cout以十六進制形式顯示:以十六進制形式顯示:;co

26、uthexz=zendl;cout以十進制形式顯示:以十進制形式顯示:;coutdecz=zendl;return 0;以十六進制形式顯示:以十六進制形式顯示:x=7fffffff以十進制形式顯示:以十進制形式顯示:x=2147483647以十六進制形式顯示:以十六進制形式顯示:y=ffffffff以十進制形式顯示:以十進制形式顯示:y=-1以十六進制形式顯示:以十六進制形式顯示:z=80000000以十進制形式顯示:以十進制形式顯示:z=-214748364831 / 76實型數(shù)據(jù)的分類及范圍實型數(shù)據(jù)的分類及范圍n實型數(shù)據(jù)實型數(shù)據(jù)u 單精度型(單精度型(float型)型)u 雙精度型(雙精度

27、型(double型)型)u 長雙精度型(長雙精度型(long double型)型)n實型數(shù)據(jù)的范圍(實型數(shù)據(jù)的范圍(VC中)中)ufloat: 浮點型,占浮點型,占4個字節(jié)個字節(jié)范圍:范圍:-3.4*10383.4*1038,有效最高為有效最高為7位位udouble:雙精度,占雙精度,占8個字節(jié)個字節(jié)范圍:范圍:-1.7*103081.7*10308,有效為,有效為15位位ulong double:長雙精度,占長雙精度,占8個個字節(jié)(具體和機器和編字節(jié)(具體和機器和編譯器相關)譯器相關)范圍:范圍:-1.7*103081.7*10308,有效為,有效為15位位32 / 76問題?問題?nflo

28、at型可以表示的十進制范圍是型可以表示的十進制范圍是-3.402823466e38 3.402823466e38,而作為同為,而作為同為4個字節(jié)的定點數(shù)(整型)個字節(jié)的定點數(shù)(整型)卻只能表示卻只能表示-21474836482147483647的范圍,使用同樣的范圍,使用同樣的內(nèi)存空間,浮點數(shù)卻能比定點數(shù)表示大得多的范圍的內(nèi)存空間,浮點數(shù)卻能比定點數(shù)表示大得多的范圍,這是不是太神奇了?,這是不是太神奇了?n既然浮點數(shù)能表示這么大的范圍,那么我們?yōu)楹尾皇辜热桓↑c數(shù)能表示這么大的范圍,那么我們?yōu)楹尾皇褂酶↑c數(shù)來代替定點數(shù)呢?用浮點數(shù)來代替定點數(shù)呢?u浮點數(shù)實現(xiàn)起來比較復雜,有些處理器還專門配置了硬

29、件浮浮點數(shù)實現(xiàn)起來比較復雜,有些處理器還專門配置了硬件浮點運算單元用于浮點運算點運算單元用于浮點運算u根本原因是浮點數(shù)根本就無法取代定點數(shù),因為精度問題。根本原因是浮點數(shù)根本就無法取代定點數(shù),因為精度問題。魚和熊掌不可兼得,浮點數(shù)表示了非常大的范圍,但它失去魚和熊掌不可兼得,浮點數(shù)表示了非常大的范圍,但它失去了精度。了精度。33 / 76浮點型的存儲方式浮點型的存儲方式n浮點型的存儲方式和其他類型有很大不同,而浮點型的存儲方式和其他類型有很大不同,而不同編譯器之間也存在差別,但大部分都遵從不同編譯器之間也存在差別,但大部分都遵從IEEEIEEE數(shù)值標準數(shù)值標準。n一個浮點數(shù)一個浮點數(shù)a a由由

30、符號符號s s和和兩個數(shù)兩個數(shù)m m和和e e來表示:來表示:a = a = s s m m b be e,其,其的內(nèi)存形式包含的內(nèi)存形式包含3 3個部分:個部分:n1 1符號位符號位u浮點型的符號位只有一位,為其最高位。如果浮點型的符號位只有一位,為其最高位。如果該位為該位為1 1,則表示其為負數(shù);如果該位為,則表示其為負數(shù);如果該位為0 0,則,則表示其為非負數(shù)。表示其為非負數(shù)。34 / 76n2. 2. 指數(shù)位(指數(shù)偏差)指數(shù)位(指數(shù)偏差)u浮點型的指數(shù)位存儲其科學計數(shù)法表示形式的指數(shù)部浮點型的指數(shù)位存儲其科學計數(shù)法表示形式的指數(shù)部分。分。u指數(shù)位決定浮點型可存儲的數(shù)值范圍。但是,需要注

31、指數(shù)位決定浮點型可存儲的數(shù)值范圍。但是,需要注意的是,浮點型數(shù)據(jù)的內(nèi)存形式中的指數(shù)位的值并非意的是,浮點型數(shù)據(jù)的內(nèi)存形式中的指數(shù)位的值并非真正的指數(shù)值,真正的指數(shù)值為該類型的偏差值減去真正的指數(shù)值,真正的指數(shù)值為該類型的偏差值減去該存儲值的結果。該存儲值的結果。u偏差值是為了校正指數(shù)值而設定的,每種類型的偏差偏差值是為了校正指數(shù)值而設定的,每種類型的偏差值是固定的,不同類型的偏差值不同。值是固定的,不同類型的偏差值不同。u用長度為用長度為e個比特的無符號整數(shù)來表示所有的指數(shù)取個比特的無符號整數(shù)來表示所有的指數(shù)取值,這使得兩個浮點數(shù)的指數(shù)大小的比較更為容易。值,這使得兩個浮點數(shù)的指數(shù)大小的比較更

32、為容易。35 / 76n3. 3. 基數(shù)位(小數(shù)部分)基數(shù)位(小數(shù)部分)u基數(shù)位是浮點型的最后一部分,其位數(shù)決定精確基數(shù)位是浮點型的最后一部分,其位數(shù)決定精確度。度。ulong doublelong double型的基數(shù)位即為其科學計數(shù)法的基型的基數(shù)位即為其科學計數(shù)法的基數(shù)位的二進制表示形式。數(shù)位的二進制表示形式。ufloatfloat型和型和doubledouble型的基數(shù)位與型的基數(shù)位與long doublelong double型略型略有不同。由于科學計數(shù)法的基數(shù)表示為二進制時有不同。由于科學計數(shù)法的基數(shù)表示為二進制時,由于二進制中除了,由于二進制中除了0 0即為即為1 1,故可以確定其

33、整數(shù),故可以確定其整數(shù)位肯定為位肯定為1 1。因此,為了得到多一位的存儲空間。因此,為了得到多一位的存儲空間,存儲,存儲floatfloat型和型和doubledouble型數(shù)據(jù)時,省去基數(shù)的型數(shù)據(jù)時,省去基數(shù)的整數(shù)位,而默認其整數(shù)位為整數(shù)位,而默認其整數(shù)位為1 1。36 / 76n在不同浮點型中,這三個部分所占空間不同,在不同浮點型中,這三個部分所占空間不同,下表列出了下表列出了GCC中各浮點類型的分段情況。中各浮點類型的分段情況。uGCC中中l(wèi)ong double是是10位位37 / 7632位二進制的位二進制的float浮點類型為例浮點類型為例n它被分為它被分為3個部分,分別是符號位個部

34、分,分別是符號位S(sign bit)、)、指數(shù)偏差指數(shù)偏差E(exponent bias)和小數(shù)部分)和小數(shù)部分F(fraction),這三部分都是對應二進制碼的。),這三部分都是對應二進制碼的。n浮點表示的一般形式為:浮點表示的一般形式為:R=(S) * (1 + F) * 2e uR:實數(shù),:實數(shù),S:正負符號,:正負符號,F(xiàn):小數(shù)部分,:小數(shù)部分, e:指數(shù):指數(shù),不同于指數(shù)偏差,不同于指數(shù)偏差)。38 / 76n符號位符號位S:占:占1位,位,0代表浮點數(shù)是正數(shù),代表浮點數(shù)是正數(shù),1代表浮點數(shù)是負數(shù)。代表浮點數(shù)是負數(shù)。n指數(shù)偏差指數(shù)偏差E:占:占8位,范圍是位,范圍是0255,e =

35、 E - 127,e為正值表明轉為正值表明轉換成二進制碼后,按科學計數(shù)法表達時向左移動了換成二進制碼后,按科學計數(shù)法表達時向左移動了e位,位, 負值負值表明向右移動了表明向右移動了e位。位。n小數(shù)部分小數(shù)部分F:占:占23位,實際上是將浮點數(shù)轉換成二進制碼,再按位,實際上是將浮點數(shù)轉換成二進制碼,再按科學計數(shù)法表達,將其小數(shù)部分存在科學計數(shù)法表達,將其小數(shù)部分存在F上,由于二進制碼按科學上,由于二進制碼按科學計數(shù)法表達后,只要值不為計數(shù)法表達后,只要值不為0,整數(shù)部分就必然為,整數(shù)部分就必然為1,所以可以,所以可以省略整數(shù)部分。省略整數(shù)部分。n例如,例如,3.75的二進制碼為的二進制碼為11.

36、11,將該二進制碼按科學計數(shù)法表,將該二進制碼按科學計數(shù)法表達為達為1.111,則向左移動了,則向左移動了1u即即e=1,E=e+127=128,uF記錄的便是小數(shù)部分,實際為記錄的便是小數(shù)部分,實際為111000.000。39 / 76n例例1: float型浮點數(shù)型浮點數(shù)0.5轉化成轉化成32位二進制浮點數(shù)位二進制浮點數(shù)。u0.5的二進制碼為的二進制碼為0.1,按科學技術法寫為,按科學技術法寫為1.0*2-1,即,即向右移向右移1位,則位,則e=-1,則,則E=e+127=126,126的二進制的二進制碼為碼為01111110。u而而1.0把整數(shù)部分的把整數(shù)部分的1去掉后,剩下小數(shù)部分為去

37、掉后,剩下小數(shù)部分為0,之后補之后補0至至23位,構成位,構成F。所以。所以0.5的的32位二進制浮位二進制浮點數(shù)為:點數(shù)為:0 01111110 0000000000000000000000040 / 76n例例2:float型浮點數(shù)型浮點數(shù)125.5轉化成轉化成32位二進制浮點數(shù)位二進制浮點數(shù)。u125.5的整數(shù)和小數(shù)部分的二進制碼分別為的整數(shù)和小數(shù)部分的二進制碼分別為1111101和和0.1,u于是于是125.5的二進制碼為的二進制碼為1111101.1,按科學技術法寫,按科學技術法寫為為1.1111011*26,即向左移,即向左移6位,則位,則e=6,E=e+127=133,133的二

38、進制碼為的二進制碼為10000101。u而而1.1111011把整數(shù)部分的把整數(shù)部分的1去掉后,剩下小數(shù)部分為去掉后,剩下小數(shù)部分為1111011,之后補,之后補0至至23位,構成位,構成F。u所以所以125.5的的32位二進制浮點數(shù)為:位二進制浮點數(shù)為:0 10000101 1111011000000000000000041 / 76實型數(shù)據(jù)的舍入誤差實型數(shù)據(jù)的舍入誤差n由于實型變量是由有限的存儲單元組成的,因此能由于實型變量是由有限的存儲單元組成的,因此能提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去。由此可能會產(chǎn)生一些誤差。將被舍去。由此

39、可能會產(chǎn)生一些誤差。n例:實型數(shù)據(jù)的舍入誤差例:實型數(shù)據(jù)的舍入誤差main()float a,b; a = 123456.789e5; b = a + 20 ; printf(%f,b); na+20的理論值應是的理論值應是12345678920,而一個實型變量只能保證的有效而一個實型變量只能保證的有效數(shù)字是數(shù)字是7位有效數(shù)字;位有效數(shù)字;n運行程序得到的運行程序得到的a和和b的值是的值是12345678848.000000n應當避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,應當避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會否則就會“丟失丟失”小的數(shù)。小的數(shù)。42 / 76Floa

40、t, double, 精度精度#include using namespace std;int main( )float a, b;double c;a = 12345.6789;c = a;cout a = a endl;cout c = c endl; cout.setf(ios:fixed | ios:showpoint); cout.precision(5);cout a = a endl; cout c = c endl;c = 12345.6789;cout c = c endl;return 0;43 / 76布爾型布爾型n布爾類型布爾類型(bool)是是C+新增的類型,只能取新

41、增的類型,只能取true 和和false 兩兩個值,分別對應整數(shù)的個值,分別對應整數(shù)的1 和和0。#include void main()bool b1=true,b2=false;coutb1=true 時,時,b1=b1endl;coutb2=false 時,時,b2=b2endl;int i;couti;b1=i3;cout3 時,時,b1=b1endl;b2=(bool)-100;coutb2=-100 時,時,b2=b23 時,時,b1=1b2=-100 時,時,b2=144 / 76字符型數(shù)據(jù)字符型數(shù)據(jù)n字符型常量字符型常量u用用單引號括起來的單個字符。單引號括起來的單個字符。如如

42、 a, x, D, #u一些特殊的字符常量,一些特殊的字符常量,以以 開頭開頭的字符序列,有特殊的含的字符序列,有特殊的含義義, 故故叫轉義叫轉義符,如:符,如:n表示換行表示換行#include using namespace std;int main( ) char a = a; coutaendl; coutThis is the first line ! n; coutan; return 0;45 / 76C+中的轉義字符中的轉義字符46 / 76字符型數(shù)據(jù)字符型數(shù)據(jù)n一個字符占一個字節(jié)一個字符占一個字節(jié)u字符要字符要轉化成數(shù)字存儲轉化成數(shù)字存儲;u一個字符變量只能存放一個字符;一個

43、字符變量只能存放一個字符;u字符與字符串是不同的數(shù)據(jù)類型;字符與字符串是不同的數(shù)據(jù)類型;不能用字符變量來存放字符串;不能用字符變量來存放字符串;n字符數(shù)據(jù)的存儲形式字符數(shù)據(jù)的存儲形式u在內(nèi)存中字符變量的存儲形式是在內(nèi)存中字符變量的存儲形式是ASCII碼碼47 / 76ASCII碼碼nASCII碼碼(America Standard Code for Information Interchange,美國信息交換標準碼,美國信息交換標準碼)u美國國家標準學會(美國國家標準學會(American National Standards Institute ANSI) 制定制定u早期使用早期使用7 位表

44、示,只規(guī)定了位表示,只規(guī)定了128個最常用的個最常用的英文字符;英文字符;u現(xiàn)在則使用現(xiàn)在則使用8個位,共可表示個位,共可表示256個不同的文個不同的文字與符號;字與符號;u在此基礎上發(fā)展了在此基礎上發(fā)展了16bits的的Unicode48 / 76字符型數(shù)據(jù)字符型數(shù)據(jù)49 / 76字符型數(shù)據(jù)字符型數(shù)據(jù)n由于存儲類型和整型相同由于存儲類型和整型相同u字符數(shù)據(jù)和整型數(shù)據(jù)可以相互賦值字符數(shù)據(jù)和整型數(shù)據(jù)可以相互賦值uASCII碼可以和整數(shù)一樣進行運算碼可以和整數(shù)一樣進行運算u字符和整型均可以以兩種形式輸出字符和整型均可以以兩種形式輸出int a=32;char b=a; int c = b-a; /

45、結果為結果為 65char a=6+256; /溢出!因為溢出!因為a只能占用只能占用8位,最大位,最大256 /輸出:輸出: 與與 a = 6; 相同相同50 / 76數(shù)數(shù) 組組n什么是數(shù)組什么是數(shù)組u 問題:有問題:有26個數(shù),寫個數(shù),寫 程序找出其中最大的數(shù)。程序找出其中最大的數(shù)。u 解:先要找個結構存下這解:先要找個結構存下這26個數(shù)個數(shù) int a, b, c, d, e, f, g, h, i, j, , z;u 新問題:實在是太麻煩!新問題:實在是太麻煩!n數(shù)組是良好的解決方案!數(shù)組是良好的解決方案!u int a26 = 78, 56, 69, 31, 36, 67, 31,

46、47, 69, 34, 45, 74, 61, 82, 43, 41, 76, 79,; 51 / 76簡單程序簡單程序#includeusing namespace std;int main( )int number45 = 78, 56, 69, 31, 36, 67, 31, 47, 69, 34, 45, 74, 61, 82, 43, 41, 76, 79, 81, 66, 54, 50, 76, 51, 53, 28, 74, 39, 45, 61, 52, 41, 43, 75, 78, 84, 72, 51, 43, 64, 75, 81, 69, 55, 74;int max

47、 = 0;int i = 0;for(i = 0; i max)max = numberi;coutThe Maximal Number is:max;return 0; /函數(shù)結束返回函數(shù)結束返回52 / 76數(shù)數(shù) 組組n定義其他類型的數(shù)組并附初始值定義其他類型的數(shù)組并附初始值u int a26;u float a26;u bool a26;u char a26 = a, b, c, , z;n數(shù)組的使用數(shù)組的使用u 要使用第要使用第n個數(shù):個數(shù):an-1; an-1 = 1+2;u 注意:對數(shù)組注意:對數(shù)組an,只能使用,只能使用a0 an-1; an不能用;不能用;53 / 76字符類型

48、與字符串常量字符類型與字符串常量n字符串常量字符串常量u用雙引號括起來的字符序列。如:用雙引號括起來的字符序列。如:u“How do you do”, “CHINA”, “a”, “$ 123.34” 等等n字符串可以一次輸出,如:字符串可以一次輸出,如:ucout“How do you do n”;n注意注意a是字符常量,是字符常量,“a”是字符串常量,二者是字符串常量,二者不同不同54 / 76看看這段程序看看這段程序#include using namespace std;int main( )int int_char_a = a;int int_char_b = ab; coutdec

49、int_char_a = int_char_aendl;couthexint_char_a = int_char_aendl;coutdecint_char_b = int_char_bendl;couthexint_char_b = int_char_bb59 / 76C+ 語言的語言的 保留字保留字n在在程序里具有語言程序里具有語言預先定義好的特殊意義預先定義好的特殊意義,因此不能用,因此不能用于其他目的,不能作為普通的名字使用于其他目的,不能作為普通的名字使用。uC+保留字:保留字:60 / 76變量的命名變量的命名n匈牙利命名法匈牙利命名法u由由Microsoft的著名開發(fā)人員、的著名

50、開發(fā)人員、Excel的主要設計者的主要設計者查查爾斯爾斯西蒙尼西蒙尼在他的博士論文中提出來的,由于西蒙在他的博士論文中提出來的,由于西蒙尼的國籍是匈牙利,所以這種命名法叫尼的國籍是匈牙利,所以這種命名法叫匈牙利命名法匈牙利命名法。nC標識符的命名規(guī)則:標識符的命名規(guī)則:1. 標識符的名字以一個或者多個標識符的名字以一個或者多個小寫字母開頭小寫字母開頭,用這些,用這些字母來字母來指定數(shù)據(jù)類型指定數(shù)據(jù)類型。2. 在標識符內(nèi),前綴以后就是一個或者多個在標識符內(nèi),前綴以后就是一個或者多個第一個字母第一個字母大寫大寫的單詞,這些單詞清楚地指出了源代碼內(nèi)那個的單詞,這些單詞清楚地指出了源代碼內(nèi)那個對對象的

51、用途象的用途。n如:如:chGrade; nLength; bEnable; strStudentName61 / 76Examplen計算計算n用到的數(shù)學函數(shù)用到的數(shù)學函數(shù) sqrt(x), pow(x,n);#include #include using namespace std;int main() int a = 2, b = 3, c = 4, d = 2;int nPow1 = pow(a,b), nPow2 = pow(4,2);float fResult = sqrt(nPow1+nPow2); cout fResult; return 0;n輸出:輸出:4.89898234

52、2 62 / 76常常 量量n常量常量u在程序運行過程中,其值在程序運行過程中,其值保持不變的量保持不變的量n字面常量字面常量u1,0,123,4.6, 1.23;n符號常量符號常量u用一個標識符代表一個常用一個標識符代表一個常量的,稱為符號常量量的,稱為符號常量#include int main( )const float PI=3.14159f;float r, area;cinr;area = r * r * PI;cout“area = ”area;return 0;63 / 76常量有類型嗎?常量有類型嗎?n整型常量的后綴整型常量的后綴un = 10000L; /長整型常量長整型常量

53、um = -0 x88abL; /長整型十六進制常量長整型十六進制常量uk = 10000U; /無符號整型常量無符號整型常量ui = 07777LU; /無符號長整型八進制常量無符號長整型八進制常量n浮點型常量的后綴浮點型常量的后綴ux = 3.1415F /單精度浮點型常量單精度浮點型常量uy = 3.1415L /長雙精度浮點型常量長雙精度浮點型常量n說明:說明:u浮點型常量默認為浮點型常量默認為double 型;型;uU, L, F均可以小寫;均可以小寫;64 / 76C 程序的程序的 基本字符基本字符n一個一個C 程序程序 = 一個符合規(guī)定形式的基本字符序列一個符合規(guī)定形式的基本字符

54、序列nC 語言基本字符包括:語言基本字符包括:1. 數(shù)字字符,數(shù)字字符,0,1,2,3,4,5,6,7,8,9;2. 大小寫拉丁字母:大小寫拉丁字母:az,AZ;3. 其他一些可打?。梢燥@示)的字符(如各種標點符其他一些可打?。梢燥@示)的字符(如各種標點符號、運算符號、括號等),號、運算符號、括號等),包括:包括:!%&*()_-+=:;,.?/|4. 還有一些特殊字符,如空格符、換行符、制表符等。還有一些特殊字符,如空格符、換行符、制表符等。空格符、換行符、制表符等統(tǒng)稱為空白字符??瞻鬃址崭穹?、換行符、制表符等統(tǒng)稱為空白字符??瞻鬃址诔绦蛑兄饕糜诜指羝渌煞帧T诔绦蛑兄饕?/p>

55、于分隔其他成分。65 / 76輸入輸入/輸出輸出n如何從程序中輸出信息?如何從程序中輸出信息?ucout“Webcome to Beijing!”endl;cout是是輸出流對象輸出流對象(支持輸出的東西)(支持輸出的東西) “ x;ucin是輸入流對象(支持輸出的東西)是輸入流對象(支持輸出的東西)u “”(提取操作符)(提取操作符)u空格、空格、Tab、回車符作為分隔符、回車符作為分隔符66 / 76控制輸出控制輸出固定小數(shù)點輸出固定小數(shù)點輸出#include #include using namespace std;int main() double x = 35.54767;cout

56、x endl;/缺省輸出缺省輸出6位位cout setprecision(7)x endl; /輸出輸出7位位cout fixed; /按定點輸出按定點輸出cout x endl;/fixed缺省,小數(shù)點后面輸出缺省,小數(shù)點后面輸出7位位coutsetprecision(0)xendl;/小數(shù)點后面小數(shù)點后面0位位coutsetprecision(1)xendl; /小數(shù)點后面小數(shù)點后面1位位coutsetprecision(2)xendl;coutsetprecision(3)xendl;coutresetiosflags(ios:fixed)endl; /取消定點取消定點cout x en

57、dl;/恢復恢復setprecision(3)return 0;67 / 76控制輸出控制輸出位數(shù)控制位數(shù)控制#include #include using namespace std;int main() double x = 35.54767;cout setw(10) x endl;/輸出占輸出占10位,包括小數(shù)點位,包括小數(shù)點cout setw(10)setprecision(7)x endl;cout fixed; /按定點輸出按定點輸出cout x endl; /小數(shù)點后面輸出小數(shù)點后面輸出7位,位,setw(n)只控制一次只控制一次coutsetprecision(0)xendl

58、; /小數(shù)點后面小數(shù)點后面0位位coutsetprecision(1)xendl; /小數(shù)點后面小數(shù)點后面1位位coutsetprecision(2)xendl;coutsetw(10)setprecision(3)xendl;coutresetiosflags(ios:fixed); /取消定點取消定點cout x endl;/恢復恢復setprecision(3)return 0;68 / 76#include #include using namespace std;int main()float c;double d,e;c = 1.234567f;d = 1.234567890123

59、45;e = c + d;cout c “ ” d endl; /缺省都是缺省都是6位位/單精度最多輸出單精度最多輸出7位,雙精度最多位,雙精度最多16位,此處輸出位,此處輸出8位位coutsetprecision(8)c d endl;cout setw(10) this endl;cout setw(10) e endl;return 0;69 / 76說明說明n不加任何說明不加任何說明cout一個浮點數(shù),共輸出一個浮點數(shù),共輸出6位。位。u 例:例:cout 22.0/7; / 3.14286n coutsetprecision(n);單獨使用,設置整個數(shù)據(jù)的長度,不包括單獨使用,設置整個數(shù)據(jù)的長度,不包括小數(shù)點小數(shù)點ucout setprecision(3)22.0/7 endl;/3.14n coutfixedsetprecision(n);結合使用,設置小數(shù)點后面的精度結合使用,設

溫馨提示

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

評論

0/150

提交評論