程序設計基礎課件第03章 數(shù)據(jù)的存儲表示_第1頁
程序設計基礎課件第03章 數(shù)據(jù)的存儲表示_第2頁
程序設計基礎課件第03章 數(shù)據(jù)的存儲表示_第3頁
程序設計基礎課件第03章 數(shù)據(jù)的存儲表示_第4頁
程序設計基礎課件第03章 數(shù)據(jù)的存儲表示_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

v程序設計基礎——從問題到程序(第3版)

第3章數(shù)據(jù)的存儲表示基本數(shù)據(jù)類型

常量

變量

存儲數(shù)據(jù)的載體

程序設計的首要問題是數(shù)據(jù)表示(即數(shù)據(jù)的存儲表示),其主要任務是將待處理的數(shù)據(jù)存儲在計算機的存儲器(內(nèi)存)中——馮·諾依曼體系結(jié)構的特點。本章基本內(nèi)容【問題】給定圓的半徑,求圓的面積。算法需要處理哪些數(shù)據(jù)——常量π、常量2、變量radius和變量area,這些數(shù)據(jù)在計算機內(nèi)如何存儲呢?【引例3.1】計算圓的面積1.給定半徑值radius;2.根據(jù)式3.1計算圓的面積area;3.輸出area;【算法】設變量radius存儲(表示)圓的半徑,變量area存儲(表示)圓的面積。

【想法】設圓的半徑為radius,圓的面積為area,則根據(jù)下式求圓的面積:area=π×radius2(式3.1)【程序】如何編程實現(xiàn)呢?②首先考慮數(shù)據(jù)表示?、偎惴ㄅc程序設計語言無關!【程序】定義符號常量表示π,定義int型變量radius和area分別存儲圓的半徑和面積#include<stdio.h>#definePI3.14

/*定義符號常量PI*/

intmain(){intradius;

/*定義radius為整型變量,存儲半徑*/doublearea;

/*定義area為實型變量,存儲圓的面積*/radius=10;

/*給變量radius賦值*/area=PI*radius*radius;

/*給變量area賦值*/printf(“radius=%d,area=%6.2f\n”,radius,area);

/*輸出結(jié)果*/return0;}程序中涉及到新的語法?【引例3.1】計算圓的面積

計數(shù)方法:當某一位的值達到某個固定量時,就要向高位產(chǎn)生進位。不同的進制以基數(shù)來區(qū)分,若以r代表基數(shù),則:

r=10為十進制,可使用0,1,2,…,9共10個數(shù)碼;r=2為二進制,可使用0,1共2個數(shù)碼;r=8為八進制,可使用0,1,2,…,7共8個數(shù)碼;r=16為十六進制,可使用0,1,2,…,9,A,B,C,D,E,F共16個數(shù)碼。3.1存儲數(shù)據(jù)的載體進位計數(shù)制(簡稱進制)r進制數(shù)通常寫作(an…a1a0.a-1…a-m)r,例如:(1101)2,(689.12)10

位權值計數(shù):每個位置對應一個位權值。對于r進制數(shù)(an…a1a0.a-1…a-m)r,小數(shù)點左面的位權值依次為r0,r1,…,rn,小數(shù)點右面的位權值依次為r-1,…,r-m。每個位置上的數(shù)碼所表示的數(shù)值等于該數(shù)碼乘以該位置的位權值。(198.63)10=1×102+9×101+8×100+6×10-1+3×10-2(1101.11)2=1×23+1×22+0×21+1×20+1×2-1+2×2-2進位計數(shù)制(簡稱進制)3.1存儲數(shù)據(jù)的載體1.二進制數(shù)轉(zhuǎn)換為十進制數(shù):將二進制數(shù)按位權值展開然后求和。二進制數(shù)與十進制數(shù)之間的轉(zhuǎn)換例3.1將二進制數(shù)1101.11轉(zhuǎn)換為十進制數(shù)。解:1101.11=1×23+1×22+0×21+1×20+1×2-1+1×2-2=13.75則:(1101.11)2=(13.75)102.十進制數(shù)轉(zhuǎn)換為二進制數(shù)十進制整數(shù)轉(zhuǎn)換為二進制整數(shù):除基取余,逆序排列。十進制小數(shù)轉(zhuǎn)換為二進制小數(shù):乘基取整,正序排列。3.1存儲數(shù)據(jù)的載體例3.2將十進制數(shù)46.375轉(zhuǎn)換為二進制數(shù)。解:除數(shù)商余數(shù)

4623

02311

1115

152

121

010

1逆序排列

乘數(shù)積整數(shù)0.3750.75

00.751.5

10.51.0

1正序排列則:(46.375)10=(101110.011)23.1存儲數(shù)據(jù)的載體計算機的工作是在程序控制下進行的,其過程是連續(xù)不斷地從內(nèi)存中取出指令予以分析和執(zhí)行,從內(nèi)存中讀取數(shù)據(jù)進行處理再存儲到內(nèi)存中。中央處理器CPU讀取指令和數(shù)據(jù)

執(zhí)行指令,存儲結(jié)果內(nèi)

存學習程序設計的一個關鍵是要深刻理解內(nèi)存計算機的工作過程3.1存儲數(shù)據(jù)的載體

內(nèi)存儲器的最小存儲單位是位(bit),每個位可以存儲一位二進制數(shù)。

存儲單元是可管理的最小存儲單位,典型的存儲單元是一個字節(jié)(Byte)。每個存儲單元的編號稱為地址,地址一般從0開始連續(xù)編號——線性編址。地址存儲單元存儲單元的信息1110001110001101101010101110100000110010FFFFFFFE000200010000……內(nèi)存儲器任意時刻存儲單元的內(nèi)容都不會是空的!一定是0和1的編碼!3.1存儲數(shù)據(jù)的載體訪問(存取):讀出/寫入信息,對存儲器的正確訪問需要兩個條件:(1)存儲單元的起始地址;(2)所占存儲單元的個數(shù)。000000000000100000101000000010000010100000001000十進制數(shù)1024800000000000010000010100000001000十進制數(shù)534536起始地址地址增加方向內(nèi)存儲器3.1存儲數(shù)據(jù)的載體

數(shù)據(jù)通常以某種特定形式(整數(shù)、實數(shù)、字符串)存在,不同形式的數(shù)據(jù)其處理規(guī)則不同。高級程序設計語言根據(jù)數(shù)據(jù)對象的不同使用規(guī)則,在二進制形式存儲的基礎上引入了整型、實型、字符型、邏輯型等基本數(shù)據(jù)類型?;乇芰舜鎯ζ鞯母拍睿ǘM制、字節(jié)、存儲單元、地址等)

…010101111101011110000110111001…程序基本數(shù)據(jù)類型:整型、實型、字符型、邏輯型3.2

基本數(shù)據(jù)類型數(shù)據(jù)類型——回避存儲器C語言中,整型數(shù)據(jù)的基本類型說明符是int(integer的簡寫)。1.存儲格式:在微型計算機中,整型數(shù)據(jù)的存儲格式一般采用補碼表示。

0011000000111001符號12345的補碼高字節(jié)

低字節(jié)

1100111111000111符號-12345的補碼高字節(jié)

低字節(jié)存儲高地址低地址00110000001110013.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——整型存儲1100111111000111高地址低地址例3.4

X=+1000101,則[X]補=01000101X=-1000101,則[X]補=10111010+1=10111011[X]補=01000101,則X=+1000101[X]補=10111011,則X=10111011-1=10111010=-1000101

補碼表示法的編碼規(guī)則:采用1位二進制表示整數(shù)的符號(稱為符號位),正數(shù)的補碼其符號位為0,其余各位與數(shù)的絕對值相同,負數(shù)的補碼其符號位為1,其余各位是數(shù)的絕對值取反然后在最末位加1。3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——整型2.取值范圍:抽象地講,整型數(shù)據(jù)的值域是全體整數(shù),但計算機內(nèi)存和其他硬件設備只能存儲和操作一定量的數(shù)據(jù),因此,每種計算機能表示的整數(shù)都在某一范圍之內(nèi)。位串01110110010101000011001000010000數(shù)值76543210位串111111101101110010111010100111000數(shù)值-1-2-3-4-5-6-7-88位二進制數(shù)表示的整數(shù)集合是多少?16位呢?32位呢?3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——整型例如,4位二進制數(shù)表示的整數(shù)集合如下:C語言根據(jù)取值范圍的不同,將整型數(shù)據(jù)進一步分為基本整型(int)、短整型(修飾符short)和長整型(修飾符long)。類型名類型說明符二進制位數(shù)取值范圍基本整型int16-32768~32767即-215~(215-1)短整型shortint16-32768~32767即-215~(215-1)長整型longint32-2147483648~2147483647即-231~(231-1)3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——整型C標準沒有規(guī)定int型數(shù)據(jù)的位數(shù),只是要求short的位數(shù)不大于int的位數(shù),long的位數(shù)不大于int的位數(shù),這部分由實現(xiàn)定義(a)有符號最大正整數(shù)32767(b)無符號最大正整數(shù)655350111111111111111符號位1111111111111111數(shù)據(jù)位無符號整型unsignedint160~65535即0~216-1無符號短整型unsignedshortint160~65535即0~216-1無符號長整型unsignedlongint320~4294967295即0~(232-1)類型名類型說明符二進制位數(shù)取值范圍無符號整數(shù)主要用于系統(tǒng)編程和低級、與機器相關的編程。一般情況下,將整數(shù)定義為有符號整數(shù),通常是int型。3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——整型3.運算集合:可以進行基本的算術運算(加、減、乘、除、求余)和邏輯運算(關系運算、與、或、非等邏輯運算)。

例3.7假設整數(shù)用1個字節(jié)表示,計算68+61的值。解:68=+1000100[68]補=0100010061=+0111101[61]補=00111101

01000100[68]補

+

00111101[61]補

10000001[-127]補由于整型數(shù)據(jù)能夠表示的整數(shù)是有限的,如果運算的結(jié)果超過了系統(tǒng)能夠表示的整數(shù)范圍,這種錯誤現(xiàn)象稱為溢出。3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——整型

實型數(shù)據(jù)在計算機中一般采用浮點形式存儲,C語言提供了兩種浮點數(shù)格式:單精度(float)和雙精度(double)。1.存儲格式:浮點表示法,階碼&尾數(shù)。an…a1a0.

a-1…a-m尾數(shù)(有效數(shù)字)階碼(小數(shù)點位置)階符

尾符

假想小數(shù)點階碼

尾數(shù)存儲3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——實型(浮點型)例3.6假設某編譯系統(tǒng)的float型數(shù)據(jù)占32位二進制,其中24位表示尾數(shù),8位表示階碼,給出68.625在內(nèi)存中的存放形式。解:(68.625)10=(1000100.101)2=(0.1000100101×2111)第4字節(jié)

第3字節(jié)

第2字節(jié)

第1字節(jié)存儲00000111010001001010000000000000高地址低地址0

0000111

0

10001001010000000000000階符階碼111

尾符尾數(shù)0.1000100101

3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——實型(浮點型)2.取值范圍:根據(jù)IEEE標準,float型數(shù)據(jù)占32位,其中尾數(shù)占24位,階碼占8位,而double型數(shù)據(jù)占64位,其中尾數(shù)占52位,階碼占12位。類型名類型說明符二進制位數(shù)取值范圍精度單精度浮點型float323.4×10-38~3.4×10388位有效數(shù)字雙精度浮點型double641.79×10-308~1.79×1030816位有效數(shù)字3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——實型(浮點型)3.運算集合:基本的算術運算(加、減、乘、除),需要注意精度和溢出問題,要保證運算結(jié)果在系統(tǒng)能夠表示的實數(shù)范圍。實型數(shù)據(jù)一般不進行關系運算和邏輯運算。1.存儲格式:微型計算機一般采用ASCII碼。在C語言中,字符型的類型說明符是char,char型數(shù)據(jù)在內(nèi)存中需要一個字節(jié)。存儲01100001a的ASCII碼為972.取值范圍:由實現(xiàn)定義,大多數(shù)編譯系統(tǒng)將字符型數(shù)據(jù)作為無符號整數(shù),則char型數(shù)據(jù)的取值范圍是ASCII碼值為0~255對應的字符。3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——字符型3.運算集合:不同的程序設計語言為字符型數(shù)據(jù)提供的運算集合不同。在C語言中,由于字符存儲的是其ASCII碼,因此具有數(shù)值特征,可以像整數(shù)一樣參加數(shù)值運算,此時,相當于對字符的ASCII碼進行運算。但是,對兩個字符型數(shù)據(jù)執(zhí)行加、乘和除等算術運算沒有實際意義。幾個有用的運算:假設ch是小寫字母,則ch

-

32是對應的大寫字母;假設ch是大寫字母,則ch+32是對應的小寫字母;假設ch是數(shù)字字符,則ch–'0'是對應的數(shù)值;假設整型變量ch的值是0~9,則ch+'0'是對應的數(shù)字字符。3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——字符型1.存儲格式:不同的程序設計語言對邏輯型數(shù)據(jù)的表示有所不同,同一程序設計語言的不同編譯器對邏輯型數(shù)據(jù)的表示有所不同,甚至同一編譯器的不同版本對邏輯型數(shù)據(jù)的表示也有所不同。2.取值范圍:該類型的數(shù)據(jù)只有兩個可能的取值:真和假。3.運算集合:可以進行邏輯運算,C語言中將整型作為邏輯型,因此,邏輯型數(shù)據(jù)也可以進行算術運算。3.2

基本數(shù)據(jù)類型基本數(shù)據(jù)類型——邏輯型(布爾型)例如:

(5>3)+(3+7<5)的值是1。

常量:在程序的運行過程中其值不能被改變的量,即不接受程序修改的固定值,例如程序中的具體數(shù)字、字符等。程序設計語言中一般提供兩種類型的常量:1.字面常量:常量本身的字面意義就是它所代表的常量值。

2.符號常量:用標識符來代表常量,為字面常量起個名字。什么是常量?常數(shù)

數(shù)據(jù)處理中都有哪些常數(shù)呢?3.3常量整型常量(如123,默認為int型)實型常量(如3.14,默認為double型)為什么程序設計語言中的常量要區(qū)分數(shù)據(jù)類型?3.3常量字面常量常量數(shù)值型常量字符型常量字符常量(如'a')字符串常量(如"abc")1.整型常量。一般用來表示數(shù)學中的整數(shù)。示例進制合法的整型常量表示不合法的整型常量表示十進制123(十進制整數(shù)123)0123(不能有前導0)-123(十進制整數(shù)-123)12A(不能含有非十進制數(shù)碼)+123(十進制整數(shù)123)-123,456(不能含有逗號)3.3常量字面常量默認情況下,如果整型常量屬于int型的取值范圍,則編譯器將其作為基本整型來處理,否則作為長整型處理。為了強制編譯器把常量作為長整型處理,需要在常量后面加上字母L(或l),例如123L。

1.整型常量。一般用來表示數(shù)學中的整數(shù)。示例進制合法的整型常量表示不合法的整型常量表示八進制0123(十進制整數(shù)83)123(無前導0)-0123(十進制整數(shù)-83)087(不能含有非八進制數(shù)碼)+0123(十進制整數(shù)83)O123(前導不能是字母O或o)十六進制0x123(十進制整數(shù)291)0x9G7(不能含有非十六進制數(shù)碼)0x9F(十進制整數(shù)159)5A(無前導0x或0X)-0X1AF0(十進制整數(shù)-6896)OX12A(前導不能是字母O或o)為什么要表示八進制數(shù)和十六進制數(shù)?3.3常量字面常量十進制10八進制012十六進制0xA存儲0000000000001010高地址低地址符號

10的補碼

0000000000001010高字節(jié)

低字節(jié)補碼不同進制的表現(xiàn)形式對應的同一個二進制存儲。3.3常量字面常量1.整型常量。一般用來表示數(shù)學中的整數(shù)。2.

實型常量。一般采用十進制,有小數(shù)形式和指數(shù)形式。

示例形式合法的實型常量表示不合法的實型常量表示小數(shù)形式12.3,12.0,0.12.3(小數(shù)點前沒有數(shù)字)-12.0,-0.123.(小數(shù)點后沒有數(shù)字)指數(shù)形式1E2,12.3E5,12.3E-51.2E1.5(E之后是小數(shù))-12.3E5,-12.3E-5E5(E之前沒有數(shù)字)3.3常量字面常量

默認情況下,實型常量以雙精度double型存儲,為了強制編譯器以單精度float型存儲實型常量,需要在常量后面加上字母F(或f),例如0.12F。3.字符常量。通常指的是單個字符,在C語言中用單引號將單個字符括起來,例如'a'、'b'、'c'。'abc',''','"','王'×如何表示’、”、/

等特殊意義的符號?如何表示不可見字符(例如換行符)?3.3常量字面常量轉(zhuǎn)義字符:用于描述不可見字符或特殊字符,以反斜線“\”開頭,其含義是將反斜線后面的字符轉(zhuǎn)換成另外的含義。轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\a\b\f\n\r\t\v響鈴(BEL)退格換頁換行回車水平跳格(tab)垂直跳格\\\?\'\"\0\ddd\xhh反斜杠問號單引號雙引號空字符(NULL)1~3位八進制數(shù)所代表的字符1~2位十六進制數(shù)所代表的字符為什么八進制數(shù)是三位,而十六進制數(shù)是兩位?3.3常量字面常量4.字符串常量(簡稱串)。通常指的是字符序列,在C語言中用雙引號將字符序列括起來,如"abc"、"ghj"。

C語言對字符串的存儲方式為:串中的每個字符(轉(zhuǎn)義字符被看成是一個字符)以ASCII碼值的二進制形式連續(xù)存儲,并在最后一個字符的后面存放一個終結(jié)符'\0'(ASCII碼值為0)。

Thisisastring\001100001字符'a'的存儲方式:a的ASCII碼為97a的ASCII碼為97\0的ASCII碼為00110000100000000字符串"a"的存儲方式:3.3常量字面常量在C語言中,定義一個符號常量需要使用預處理指令#define?!菊Z法】用#define定義符號常量的一般形式為:

其中,#define是預處理指令,因此,行尾不能有分號;符號常量是一個標識符;常量值可以是一個字面常量,也可以是一個表達式?!菊Z義】將符號常量的值定義為常量值,在對程序進行預處理時,預處理器把每一個符號常量用其表示的常量值進行替換。#define符號常量常量值行尾沒有分號3.3常量符號常量3.3常量符號常量#definePI3.14area=PI*radius*radius;area=3.14*radius*radius;定義符號常量:程序中的語句:預處理后:#definePI3.14;area=PI*radius*radius;area=3.14;*radius*radius;定義符號常量:程序中的語句:預處理后:×預處理不進行語法檢查新的C標準提倡采用const定義符號常量?!菊Z法】用const定義符號常量的一般形式如下:

其中,類型名是任意合法的數(shù)據(jù)類型,包括基本數(shù)據(jù)類型和自定義數(shù)據(jù)類型;符號常量是一個標識符;常量值可以是一個字面常量,也可以是一個表達式,但是其值的數(shù)據(jù)類型必須與類型名兼容;const是一條語句,因此要以分號結(jié)尾?!菊Z義】定義一個符號常量并指定常量值。const類型名符號常量=常量值;以分號結(jié)尾3.3常量符號常量使用符號常量有如下好處:1.程序的可讀性好——見名知意。2.程序的可修改性好——改一處避免處處改。3.避免誤操作——采用統(tǒng)一值。3.3常量#definePI3.14constdoublePI=3.14;符號常量為什么要定義符號常量呢?

大多數(shù)程序在執(zhí)行時都需要從外界接收一些輸入,在得到結(jié)果之前往往需要執(zhí)行一系列運算,產(chǎn)生一些中間結(jié)果。因此,在程序的執(zhí)行過程中需要用存儲單元來存儲這些數(shù)據(jù),這類存儲單元就是變量。

變量代表內(nèi)存中存儲某類數(shù)據(jù)的存儲單元,對變量進行的運算處理,實質(zhì)上就是對該存儲單元中的數(shù)據(jù)進行運算處理。深刻理解變量是編寫程序的重要基礎!3.4變量變量的概念變量具有如下屬性:1.地址(起始地址):變量所在存儲單元的編號;2.變量名:變量所在存儲單元的助記符;3.變量值:存儲在相應存儲單元中的數(shù)據(jù),即該變量的值;4.類型:變量所屬的數(shù)據(jù)類型。地址變量名類型

變量所占存儲單元變量值F003F000radius10在程序中對變量進行存取操作,實際上是通過變量名找到相應的存儲地址,將數(shù)據(jù)存入該存儲單元,或從該存儲單元中讀取數(shù)據(jù)。3.4變量變量的概念【語法】變量定義的一般形式如下:

其中,類型說明符必須是有效的數(shù)據(jù)類型,包括基本數(shù)據(jù)類型和自定義數(shù)據(jù)類型;變量名列表是一個變量名或由逗號分隔的多個變量名;最后用分號表示結(jié)束變量定義?!菊Z義】將變量名列表的各個變量定義為類型說明符的類型,編譯器為各變量分配相應的存儲單元。類型說明符變量名列表;以分號結(jié)尾3.4變量變量的定義和初始化在變量定義中引進變量并規(guī)定該變量的屬性。定義變量后編譯器會給該變量分配一塊存儲空間,但是從程序開始執(zhí)行到給變量賦值之前,該變量沒有確定值,這時稱該變量為“值無定義的”,嚴格來說,該變量的值是一個隨機數(shù)。intradius,area;floatlength,width;radiusarealengthwidth隨機數(shù)隨機數(shù)隨機數(shù)隨機數(shù)3.4變量變量的定義和初始化本書中變量的命名方法?變量的初始化:在定義變量的同時為其賦初值,使該變量成為“值有定義的”?!菊Z法】變量初始化的一般形式如下:

其中,類

溫馨提示

  • 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

提交評論