語言最基礎(chǔ)到指針、文件課件c02數(shù)據(jù)與運算_第1頁
語言最基礎(chǔ)到指針、文件課件c02數(shù)據(jù)與運算_第2頁
語言最基礎(chǔ)到指針、文件課件c02數(shù)據(jù)與運算_第3頁
語言最基礎(chǔ)到指針、文件課件c02數(shù)據(jù)與運算_第4頁
語言最基礎(chǔ)到指針、文件課件c02數(shù)據(jù)與運算_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言與程序設(shè)計數(shù)據(jù)與運算計算機如何存儲數(shù)據(jù)?C語言如何表示數(shù)據(jù)?如何命令計算機進行數(shù)值計算?22內(nèi)存(主存):存放正在/準備運行的程序和數(shù)據(jù),容量從幾百KB到幾百MB甚至幾GB,數(shù)據(jù)(及程序)通常被分塊存放CPU中的寄存器:每個寄存器能夠存放固定長度的數(shù)據(jù),寄存器數(shù)量很小,速度很快

外存(輔存):以文件的形式長期存放大量程序和數(shù)據(jù),外存上的程序和數(shù)據(jù)只有調(diào)進內(nèi)存后才能使用計算機中存儲數(shù)據(jù)的設(shè)備33不同的CPU中含有不同數(shù)量的寄存器,以二進制形式存放數(shù)據(jù)。每個寄存器有固定的名稱和容量(二進制位數(shù))在寄存器中存儲數(shù)據(jù)把二進制數(shù)10011110放到AL中10011110例如,intel公司的奔騰CPU中有一個8位寄存器ALAL你知道此時AL中的數(shù)據(jù)代表什么含義嗎?44如何組織內(nèi)存1、內(nèi)存以字節(jié)為基本單位2、內(nèi)存中有很多字節(jié)3、存在的問題:如何區(qū)分“這個字節(jié)”和“那個字節(jié)”?一個字節(jié)的容量很小,一字節(jié)放不下的數(shù)據(jù)如何處理? (解答見后)55內(nèi)存地址——內(nèi)存字節(jié)的編號每個字節(jié)確定一個編號,從0編起,依次安排。結(jié)構(gòu)上形成梯子狀的內(nèi)存圖。習慣上,畫內(nèi)存圖時各個字節(jié)右邊寫地址;0123456內(nèi)部填寫其中存放的數(shù)據(jù)值;00001011110001010101101101101110011000100000101100001011000010110010100000001011000010110000101100101000將來還可以給各個字節(jié)命名。c1c2abt66多字節(jié)聯(lián)合使用存放一個數(shù)據(jù)一個字節(jié)只能存放8位二進制數(shù)據(jù),為了存放16位二進制數(shù),可以把連續(xù)兩個字節(jié)聯(lián)合在一起捆綁使用。100010011002100310041005

地址為1001的高字節(jié)

地址為1000的低字節(jié)地址:1005100410031002類似地,可以把連續(xù)4個字節(jié)聯(lián)合使用。通常,把偶地址開始的連續(xù)兩個字節(jié)聯(lián)合使用,把地址是4的倍數(shù)起的連續(xù)4個字節(jié)聯(lián)合在一起。77內(nèi)存圖實用畫法如圖能夠表示以下含義1、在地址為1000的內(nèi)存字節(jié)中存放了一個數(shù)據(jù)35;2、地址1002和1003的兩個字節(jié)聯(lián)合使用存放數(shù)據(jù)1427;3、從地址1004開始的連續(xù)4個字節(jié)聯(lián)合使用存放數(shù)據(jù)2.71828。注意:為了“對齊”,一般不把地址為1001和1002的兩個字節(jié)聯(lián)合使用。寧可讓地址為1001的字節(jié)空閑。10001001100210043514272.7182888提問1、如果曾經(jīng)命令計算機“把地址1002和1003的兩個字節(jié)聯(lián)合使用并存放數(shù)據(jù)1427”,還可以再命令計算機“取地址1002字節(jié)的數(shù)據(jù)”嗎?——即能否在某一時刻聯(lián)合使用,另一時刻分別使用?10001001100210043514272.718282、這時如果命令計算機把數(shù)據(jù)28放到地址為1003的內(nèi)存字節(jié),會產(chǎn)生什么樣的效果?3、計算機怎么知道1002起的兩個字節(jié)放的是整數(shù),而1004起的4個字節(jié)放的是實數(shù)?991、普通十進制寫法

35,-78,24649等 2、十六進制寫法(通常不用負數(shù)) 0x8A,0X35,0xABC,-0XAA等3、八進制寫法(通常不用負數(shù)) 025,0123,077,-033等注意!

25與025不等值C語言程序中的整數(shù)寫法1010如何把105存放到如上的1字節(jié)存儲器中?最簡單的方法:用二進制直接存放

105對應(yīng)的二進制——01101001問題:能夠存放的最大/最小數(shù)是多少?如何存放負數(shù)?有沒有其它存放方法?用1字節(jié)存放整數(shù)01101001補碼——現(xiàn)在最常用的數(shù)據(jù)存儲形式。如上的存放形式稱為無符號數(shù),補碼用于存儲帶符號數(shù)1111如何把-105存放到如上的1字節(jié)存儲器中?補碼存儲規(guī)則:確定位數(shù)——8位確定正負——非負整數(shù)直接存儲,0~127負數(shù)的處理: 取絕對值,寫成二進制: 01101001

所有位取反: 10010110

最末位加1: 10010111問題:1字節(jié)、補碼,能夠存放的最小數(shù)是多少?用1字節(jié)、補碼存放整數(shù)100101111212如上的1字節(jié)存儲器中存放了一個二進制整數(shù),對應(yīng)的十進制是多少?二進制對應(yīng)的整數(shù)是多少?11011011規(guī)則:判斷正負——正數(shù)簡單,略;負數(shù),先寫下“-”所有位取反: 00100100最末位加1: 00100101二轉(zhuǎn)十得結(jié)果: -37問題:你是如何知道存放形式是補碼?1313VC支持的整數(shù)存儲形式單字節(jié)、無符號 0~255單字節(jié)、帶符號 -128~+127雙字節(jié)、無符號 0~65535雙字節(jié)、帶符號 -32768~4字節(jié)、無符號 0~232-14字節(jié)、帶符號 -231~+231-1問題:如何區(qū)分一個數(shù)據(jù)是用哪種存儲形式?如何命令計算機:“準備一個雙字節(jié)、帶符號存儲容器”——答案見“常量與變量”1414如圖是把內(nèi)存中兩字節(jié)聯(lián)合使用存放整數(shù)的例子,此時仍然有兩種存放形式:1、存放非負整數(shù)2、存放帶符號數(shù)由于例子中存放的是正數(shù),存放形式相同雙字節(jié)聯(lián)合使用存放整數(shù)0110110110110011260031515IEEE754標準中關(guān)于以4字節(jié)和8字節(jié)存儲單元存儲實數(shù)的存儲方式被廣泛應(yīng)用于計算機中。數(shù)符(1位):表示整個實數(shù)的正負,0正1負階碼(8位):整數(shù),記作E,表示“尾數(shù)×2E”尾數(shù)(23位):是“1.****”的小數(shù)部分4字節(jié)存儲實數(shù)31241680數(shù)符階碼尾數(shù)161611000001,11110011,00000000,00000000數(shù)符為1,表示負數(shù)階碼為10000011,對應(yīng)十進制的131,減127后得到4,即階碼為4尾數(shù)為1.111001100……(注意“1.”并不存儲)由于階碼是4,這表示把尾數(shù)乘以24,可以通過把尾數(shù)中的小數(shù)點向右移動4位實現(xiàn),從而得到二進制的11110.0,相應(yīng)的十進制數(shù)是30.375,由于數(shù)符位上是1,則這4個字節(jié)存儲的實數(shù)是-30.375浮點數(shù):實數(shù)的存儲形式1717以4字節(jié)存儲實數(shù)0.00625,各個二進制位如何?0.00625>0,所以數(shù)符位為0;0.00625對應(yīng)的二進制數(shù)是一個循環(huán)小數(shù),值為0.0000000110011001100……。把小數(shù)點向右移動8位后得1.0……,使得整數(shù)部分是1,“1.”不存儲,故尾數(shù)是01101;(四舍五入)對尾數(shù)的小數(shù)點向右移動了8位,階碼部分的值為(-8)+127=119,對應(yīng)的二進制是01110111;所以,全部的32位二進制是: 00111011,11001100,11001100,11001101浮點數(shù):實數(shù)的存儲形式1818數(shù)據(jù)類型——某個數(shù)據(jù)集合中各元素的共有特征。數(shù)據(jù)類型決定:存儲一個該類型的數(shù)據(jù)需要幾個字節(jié)數(shù)據(jù)的存儲形式:各二進制位的含義如何數(shù)據(jù)能夠進行哪些計算/處理C語言中有若干寫法表示數(shù)據(jù)類型,見下頁。什么是數(shù)據(jù)類型1919類型寫法 字節(jié)數(shù) 含義[signed]char 1 帶符號整數(shù)unsignedchar 1 無符號整數(shù)[signed]short[int] 2 帶符號整數(shù)unsignedshort[int] 2 無符號整數(shù)[signed]int 4 帶符號整數(shù)[signed]long[int] 4 帶符號長整數(shù)unsigned[int] 4 無符號整數(shù)unsignedlong[int] 4 無符號長整數(shù)float 4 單精度實數(shù)double 8 雙精度實數(shù)注:VC++6.0版本適用有關(guān)數(shù)值的數(shù)據(jù)類型(部分)2020保留字——具有特定含義/功能的字母組合標準C語言共有32個保留字,如下:C語言的保留字auto break case charconst continue default dodouble else enum externfor float goto ifint long register returnshort signed sizeof staticstruct switch typedef union unsigned volatile void while2121定義:常量----程序中所寫的數(shù)據(jù)

變量----程序運行過程中存儲數(shù)據(jù)的 存儲單元問題:1.如何區(qū)分常量的類型?2.如何命令計算機準備一個變量?3.能不能用1個字節(jié)(或者3個字節(jié)、4個字節(jié))存放整數(shù)?4.變量有什么作用?5.如何對變量進行操作?(見后頁)常量與變量2222定義:常量----程序中所寫的數(shù)據(jù)整數(shù)可以用三種數(shù)制,實數(shù)則只用十進制數(shù)值常量的末尾可以加上字母表示類型,但通常不加字母,而是由計算機自動處理實數(shù)除了常規(guī)寫法外,還有科學記數(shù)法:比如1光年大約是9.46×1015米,一個氫原子的質(zhì)量是1.673×10-24克,其中的數(shù)據(jù)在C語言中分別寫作:

9.46e15 和 1.673E-24 即:a×10b在C語言中寫作aEb。

1、“E”可以大寫也可以小寫;

2、a可正可負,可以是小數(shù)形式;

3、b可以是正數(shù)也可以是負數(shù),但必須是整數(shù)。數(shù)值常量通常不需要指明類型2323如何命令計算機準備一個變量?——稱為“變量定義”、“變量聲明” 變量定義格式A:數(shù)據(jù)類型變量名;例:

intvx;含義/功能:命令計算機準備一個名為vx的變量,用于(其中可以)存放一個帶符號整數(shù)。這是“signedintvx”的省略形式。變量(variable)24241、可以用作變量名的符號:字母、數(shù)字、下劃線“_”;2、數(shù)字不能開頭;3、長度有一定限制(根據(jù)不同的系統(tǒng)而定);4、大寫字母和小寫字母是不同的符號,“A12”和“a12”是不同的兩個名字;5、“保留字”不能用作變量名。簡化后的規(guī)定:“字母開頭的字母數(shù)字串”。適用于其它需要命名的地方。變量(標識符)命名規(guī)則25251.變量是存放數(shù)據(jù)的“容器”,該“容器”的大?。ㄕ紦?jù)字節(jié)數(shù))和其中如何存放數(shù)據(jù)由定義變量時的“數(shù)據(jù)類型”確定。2.用格式A定義變量僅僅是通知計算機準備“容器”,而沒有說明是否要求計算機在“容器”中存放內(nèi)容。對此計算機按兩種情況處理,一是保持該“容器”中原有的內(nèi)容不變,二是在其中各個二進制位填0。3.使用變量之前必須準備容器——定義變量,“先定義后使用”是基本規(guī)則。4.定義變量時使用的類型可以是如同int的C語言固有數(shù)據(jù)類型,也可以是自定義類型。注意:可以說“變量中存放的數(shù)據(jù)”、“變量占若干字節(jié)”、“存儲某個類型的數(shù)據(jù)需要幾字節(jié)”,而不要說“某類型占幾字節(jié)”關(guān)于變量定義的說明2626實型變量用于存放實數(shù)。C語言中表示“實數(shù)類型”的保留字是“float”和“double”例如,

floatv1; doublev2;float類型的變量v1以連續(xù)4個字節(jié)存放實數(shù),能夠存放約-1038~1038的數(shù)據(jù),支持6~7個十進制有效數(shù)字。double類型的變量v2用連續(xù)8個字節(jié)存放實數(shù),能夠存放約-10308~10308的數(shù)據(jù),支持14~15個有效數(shù)字。如果需要更大的范圍和更多的有效數(shù)字,C語言還有l(wèi)ongdouble類型,以16個字節(jié)存放實數(shù)。用float或double定義實型變量2727定義多個變量在程序中需要使用多個變量時可以多次使用格式A,例如:

doubleva;

doublevb;doublevc;定義多個同類型的變量時,可以使用下面的格式:變量定義格式B:數(shù)據(jù)類型變量名1,變量名2,…,變量名n;例如上面定義三個變量的寫法可以寫作:

doubleva,vb,vc;2828變量的初值定義變量就是準備“容器”。在準備“容器”的同時可以命令計算機把一個數(shù)據(jù)存放在“容器”當中作為變量的初值。這時需要使用格式C

變量定義格式C:數(shù)據(jù)類型變量名=初值;例如:

doublepi=3.14159;定義變量的幾種形式經(jīng)常會混合使用,例如:

doublevx,pi=3.14159,vy,e=2.71828;2929關(guān)于變量初值的規(guī)定在TC2.0/TC3.0中,定義變量的初值必須是常量或常量構(gòu)成的計算式。例如:

intva=1;doublevb=3.14*4;

以下是錯誤的寫法:

doubleva=1.9,vb=va*3.14;注意:在高版本的C語言系統(tǒng),如VC++,已經(jīng)取消了“初值必須是常量”的限制。即如上定義變量vb的寫法在TC是是錯誤的,在VC中是對的。3030變量定義與內(nèi)存分配對于變量定義,計算機在運行程序時會相應(yīng)地安排一個或幾個字節(jié)的內(nèi)存作為該變量對應(yīng)的存儲空間。例如:

intva=1,vb;floatvx=3.14;1、每個程序在運行時有相應(yīng)的內(nèi)存區(qū)域;2、初始狀態(tài)下內(nèi)存區(qū)域的數(shù)據(jù)區(qū)中并沒有安排變量,這時數(shù)據(jù)區(qū)各個字節(jié)中的數(shù)據(jù)是計算機隨意安排的;3、對于每個變量定義,計算機在數(shù)據(jù)區(qū)中依次分配對應(yīng)的內(nèi)存單元。程序可用的的內(nèi)存區(qū)域XXXXXXXXXXXXXXXXXXXXXXXXXXXXva1vbvx3.143131對于前述問題的解答變量有什么作用?

程序需要使用和處理的數(shù)據(jù)很多,因而需要定義一些變量,用于臨時存儲數(shù)據(jù),以供在需要的時候取出使用。如何對變量進行操作?

①賦值---把數(shù)據(jù)送入變量中保存 ②取值---從變量中取出數(shù)據(jù)使用變量/訪問變量3232對變量賦值是C語言最基本的命令之一。 賦值語句格式:變量名=表達式;含義/功能:把表達式(即計算式,一定有計算結(jié)果)的計算結(jié)果送到變量所對應(yīng)的內(nèi)存中(簡述為“把計算結(jié)果送到變量中”)。例如:

intva; va=27*4-56;賦值33331、語句——C語言中一條完整的命令稱為一條語句;賦值語句是C語言中最常用的語句。2、賦值號“=”具有方向性,把右邊的數(shù)據(jù)送到左邊指定的存儲單元。賦值語句不是方程。方程中的“=”表示左右相等,不具有方向性,因此方程左右兩邊可以交換位置。3、賦值語句中所使用的變量必須是已經(jīng)定義的變量,即“先定義后使用”。4、對變量再次賦值時,“以新代舊”原則,并且不需要“倒空”操作。賦值語句3434程序中任何需要使用數(shù)據(jù)的地方如果不直接寫數(shù)據(jù),而是寫變量名,則是從指定變量中取出數(shù)據(jù)。對變量的任何使用都必須遵守“先定義后使用”的基本原則。例如,有如下一組操作:

inta=12,b=7,t; doublex,y; t=a+b–2; x=a+1; y=x/4.0;畫內(nèi)存圖,說明操作過程,強調(diào)先后次序。從變量中取值3535概念:變量是程序運行過程中存儲數(shù)據(jù)的存儲單元。變量是存放數(shù)據(jù)的“容器”屬性:1.變量名,編寫程序時用以區(qū)分各個變量2.變量在計算機中的位置,目前只討論內(nèi)存中的變量3.變量的類型,決定字節(jié)數(shù)和存儲方式,以及能夠進行什么樣的計算/處理4.變量的當前值規(guī)則: 先定義后使用 取值不改變其中存儲的數(shù)據(jù) 可以多次賦值關(guān)于變量的小結(jié)3636關(guān)于整數(shù)的運算符及運算規(guī)則:

+ - * / %關(guān)于實數(shù)的運算符:

+ - * /運算符優(yōu)先級---通俗地說,“先乘除后加減”改變運算次序的方法---()數(shù)值數(shù)據(jù)的基本運算示例: inta=6,b=4,c,d; c=a+b/3; d=(a+b)/3; d=d+2;執(zhí)行了三條賦值語句之后,變量c、d的值各是多少?同類型數(shù)據(jù)運算3737對于+、-、*、/等算術(shù)運算符:

兩邊的數(shù)據(jù)類型不同時,“短長”、“整實”、“floatdouble”;對于賦值號:變量對應(yīng)字節(jié)數(shù)多,而右邊表達式計算結(jié)果的數(shù)據(jù)類型對應(yīng)字節(jié)數(shù)少,則把計算結(jié)果進行等值轉(zhuǎn)換后再送到變量中;反之,采取“截斷”處理方式。自動類型轉(zhuǎn)換示例:inta=8,b=4,t,k; floatx; doubley; t=x*7/5+b%3; k=7/5*x+b%5; x=a/5.0; y=x*x; 計算機只做double型的實數(shù)運算3838當賦值號左側(cè)的變量占據(jù)字節(jié)數(shù)多而右側(cè)計算結(jié)果對應(yīng)字節(jié)數(shù)少時,先進行等值轉(zhuǎn)換,再把結(jié)果存放到賦值號左側(cè)的變量。設(shè)有下列變量定義:

chardt1;

shortintdt2;把字符數(shù)據(jù)送到整型變量中,例如

dt2=dt1;賦值語句中的轉(zhuǎn)換:短長65dt1dt20100,0001650100,00010000,0000Q:符號擴

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論