版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PProgramming in rogramming in C C程序設(shè)計(jì)程序設(shè)計(jì) 華東師大計(jì)算機(jī)系 2013年3月第1頁(yè)/共33頁(yè) Ch2 數(shù)據(jù)類型 計(jì)算機(jī)是處理數(shù)據(jù)的, 但是如果僅僅將數(shù)據(jù)理解成數(shù)字, 就顯得意義和用途太狹窄了. 一般的編程語(yǔ)言的 基本數(shù)據(jù)類型 至少包含以下 3 類: 數(shù)值 整數(shù) 實(shí)數(shù) 用于計(jì)數(shù)和計(jì)算 字符/字符串 用于文字處理 邏輯數(shù)據(jù) 推理、分析、條件 很多語(yǔ)言還包括: 日期時(shí)間、貨幣等。 變體型:VB、C#、JavaScript 等 不同的語(yǔ)言規(guī)定不同,同一語(yǔ)言的不同版本也不同。 C語(yǔ)言用庫(kù)函數(shù)處理日期時(shí)間。第2頁(yè)/共33頁(yè) C 語(yǔ)言 的 基本數(shù)據(jù)類型: 數(shù)值 整數(shù)
2、實(shí)數(shù) 字符 邏輯數(shù)據(jù) C 整數(shù) 和 實(shí)數(shù) 分各種不同規(guī)格。/計(jì)算要求, 歷史淵源。 C 字符型 分 字符數(shù)據(jù) 和 字符串?dāng)?shù)據(jù) C 沒有邏輯型數(shù)據(jù),用0-1代替,1 = true, 0 = false. C 新增加的基本類型: 指針 對(duì)應(yīng) 內(nèi)存地址 空 什么也沒有。 用于函數(shù)參數(shù)傳遞,表示無數(shù)據(jù)或者無格式數(shù)據(jù)。第3頁(yè)/共33頁(yè) C 語(yǔ)言 的 聚合數(shù)據(jù)類型: 聚合類型的類型指聚合方式: 數(shù)組 = 多個(gè)同類型數(shù)據(jù),比如 整數(shù)數(shù)組。 結(jié)構(gòu)體 = 多個(gè)不同類型數(shù)據(jù),如 (學(xué)號(hào),姓名,性別,年齡,專業(yè)) 共用體 = 不同類型數(shù)據(jù) 共用 同一數(shù)據(jù)區(qū) 枚舉 =符號(hào)常量的集合, 表示有限值數(shù)據(jù),比如星期幾。 C
3、的數(shù)據(jù)類型小結(jié) / 見教材第4頁(yè)/共33頁(yè) 常量與變量 : 標(biāo)準(zhǔn)答案: 在程序運(yùn)行期間, 其值不變的量稱為常量, 其值可以改變的量稱為變量。不同的理解: 姓名. 常量是數(shù)據(jù)的具體值,獨(dú)立于計(jì)算機(jī)領(lǐng)域。 比如 123, -2.8, “張三”, 等. 變量是儲(chǔ)存數(shù)據(jù)的容器room. 變量應(yīng)該有一個(gè)名字(標(biāo)識(shí)符),在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,在該存儲(chǔ)單元中存放變量的值。 在賦值語(yǔ)句 i=j 中, 等號(hào)左邊代表變量的存儲(chǔ)單元, 右邊代表變量的值: 將 j 的值復(fù)制到 i 單元. 附: 存儲(chǔ)單元在內(nèi)存中的編號(hào)值, 作為變量的地址. 占據(jù)多個(gè)單元的, 以最小的編號(hào)值作為變量的地址(首地址). 第5頁(yè)/共3
4、3頁(yè)標(biāo)識(shí)符: 變量、常量、類型、過程、函數(shù)、對(duì)象的名字。 標(biāo)識(shí)符命名規(guī)則: 由字母、數(shù)字或下劃線組成,第一個(gè)字符必須是字母或下劃線。中文版似乎可用中文,但是最好不用。 不要與關(guān)鍵字同名. - 什么是關(guān)鍵字? 見下頁(yè) 正確或錯(cuò)誤標(biāo)識(shí)符命名的實(shí)例。/ 等級(jí)考試常考 正確形式: count _test23 high_balance for1 錯(cuò)誤形式: 2count hi! high.balance for ANSI標(biāo)準(zhǔn)規(guī)定,標(biāo)識(shí)符可以為任意長(zhǎng)度,但外部名必須至少能由前8個(gè)字符唯一地區(qū)分。/ 某些OS的限制第6頁(yè)/共33頁(yè)保留字|關(guān)鍵字: 編程時(shí),有些詞匯有規(guī)定的含義,不能用作其它用途。 比如 if
5、 用于條件語(yǔ)句,不能用于變量命名。 C語(yǔ)言有32個(gè)關(guān)鍵字:第7頁(yè)/共33頁(yè)標(biāo)識(shí)符能否與庫(kù)函數(shù)同名: 等級(jí)考試的坑爹題: 比如變量取名 int sin=5; 可否? 標(biāo)準(zhǔn)答案: 可以, 代價(jià)是 sin 失去原有意義, sin(x) 不再代表正弦函數(shù)了. 但是這違反軟件工程原則. 我們只能說, 編譯器不會(huì)認(rèn)為語(yǔ)法錯(cuò)誤. 也可以執(zhí)行. 但是如果作為一個(gè)大程序的一部分, 就有可能會(huì)導(dǎo)致問題. 而且會(huì)令閱讀程序的人產(chǎn)生困惑和混淆. 另, 常量也可以用標(biāo)識(shí)符表示,格式是:/非C語(yǔ)句! #define 標(biāo)識(shí)符 數(shù)值 例如 第8頁(yè)/共33頁(yè)標(biāo)識(shí)符: 推薦的命名規(guī)范: 簡(jiǎn)單程序可用 a,b,x0,y2,xx,p
6、x 等短名字。 實(shí)用程序最好能“見名知義”,例如: name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資) 長(zhǎng)名字的取名規(guī)則: Pascal 命名法:StudentName, StuNameNode 駝峰 命名法: studentName, stuNameNode 匈 牙 利 命 名 法 : s t r S t u d e n t N a m e , lpStuNameNode 注: Pascal命名法也稱大駝峰命名法(Upper Camel Case)第9頁(yè)/共33頁(yè) 整型常量 C 的整數(shù)采用三種進(jìn)制: 十進(jìn)制。如:123, -456。日常使用。 八進(jìn)
7、制數(shù). 以0開頭. 0-7. 如: 0123等于83。019 不合法. 16進(jìn)制數(shù). 以0 x 或0X 開頭. 0-9 A B C D E F. 大小寫均可 如: 0 xA2 等于十進(jìn)制數(shù) 162。 八進(jìn)制和16進(jìn)制用于討論機(jī)內(nèi)數(shù)據(jù), 所以無負(fù)數(shù).匯編語(yǔ)言用尾綴, 如 10110001B是2進(jìn)制, FFH是16進(jìn)制數(shù). 為顯示專業(yè)級(jí)水平, 可以使用尾綴型16進(jìn)制數(shù)討論內(nèi)存.第10頁(yè)/共33頁(yè) 整數(shù)的內(nèi)存形式: 計(jì)算機(jī)用高電位和低電位表示值, 高電位記 1, 低電位記 0. 所以一個(gè)儲(chǔ)存位可表示0或1兩個(gè)狀態(tài), 稱為1 比特bit. 比如: 十進(jìn)制的 1萬 = 機(jī)內(nèi) 0010 0111 0001
8、 0000 有點(diǎn)長(zhǎng), 所以要采用分割寫法. 大整數(shù)的分割寫法: 十進(jìn)制:thousands制,萬位制。 二進(jìn)制:八進(jìn)制,十六進(jìn)制。/i.e.是縮略式 例:10000D = 2710H =023420Q 0 010 011 1 00 010 000 “數(shù)據(jù)在內(nèi)存中以二進(jìn)制形式存放。” /Binary第11頁(yè)/共33頁(yè)附錄: 2 進(jìn)制與8、16進(jìn)制的轉(zhuǎn)換 28 000 0001 1010 2 011 3100 4 101 5110 6111 7 216 0000 00001 10010 2 0011 30100 4 0101 50110 60111 7 2161000 81001 91010 A
9、1011 B1100 C 1101 D1110 E1111 F第12頁(yè)/共33頁(yè) 整數(shù)的內(nèi)存形式: 若干數(shù)學(xué)關(guān)系 一個(gè)儲(chǔ)存位可表示0或1兩個(gè)狀態(tài), 稱為1 比特bit. 2個(gè)儲(chǔ)存位可表示00, 01, 10,11 四個(gè)狀態(tài), 3bits可表示000,001,010,011,100,101,110,111八個(gè)狀態(tài). 一般地, m bits 可表示 2m 個(gè)符號(hào)。 數(shù)據(jù)以 byte 字節(jié)為組織單位. 讀音bait 1 byte = 8 bits 一個(gè)變量占據(jù)幾個(gè)字節(jié)?1 byte 可表示 256個(gè)符號(hào)。 n bytes 可表示 256n 個(gè)符號(hào)。 如果用一個(gè)字節(jié)表示整數(shù), 只能表示256個(gè)數(shù), 也
10、太少了. 16位計(jì)算機(jī)用2 bytes表示整數(shù), 能表示65536個(gè)數(shù). 32位計(jì)算機(jī)用4 bytes表示整數(shù), 能表示 232 個(gè)數(shù).第13頁(yè)/共33頁(yè) 內(nèi)存形式的“解釋” 練習(xí): 4 bits 可表示 16個(gè)符號(hào)。你用來表示什么? 解答1: 整數(shù) 0, 16) 0000,0001,0010,0011,0100,0101,0110,0111 0 1 2 3 4 5 6 7 1000,1001,1010,1011,1100,1101,1110,1111 8 9 10 11 12 13 14 15 解答2: 整數(shù) -8, 8) 負(fù)數(shù)為什么用補(bǔ)碼?/鐘算術(shù)/反碼+1 0000,0001,0010,
11、0011,0100,0101,0110,0111 0 1 2 3 4 5 6 7 1000,1001,1010,1011,1100,1101,1110,1111 -8 -7 -6 -5 -4 -3 -2 -1 鐘算術(shù) = 解答1 和 解答2 幾何兼容. 其他解答當(dāng)然也可以.第14頁(yè)/共33頁(yè) 推廣上頁(yè): 內(nèi)存形式的“解釋” m bits 可表示 2m 個(gè)符號(hào)。你怎么對(duì)應(yīng)整數(shù) ? 解答1: 整數(shù) 0, 2m) / 不含 2m ! 解答1對(duì)應(yīng)無符號(hào)整數(shù). 解答2: 記 s=m-1 整數(shù) - 2s, 2s) 負(fù)數(shù)用補(bǔ)碼?/鐘算術(shù) 解答2對(duì)應(yīng)符號(hào)整數(shù). C 語(yǔ)言默認(rèn)為符號(hào)整數(shù). n bytes 可表示
12、 28n 個(gè)符號(hào)。稱為整數(shù)變量的規(guī)格. Turbo C 時(shí)代 16位計(jì)算機(jī) 默認(rèn) 2 字節(jié)整數(shù), VC+ 時(shí)代 32位計(jì)算機(jī) 默認(rèn) 4 字節(jié)整數(shù), 216 = 65536. 215 = 32768 練習(xí): 代入解答1和2.第15頁(yè)/共33頁(yè) 推廣上頁(yè): 內(nèi)存形式的“解釋” n bytes 可表示 28n 個(gè)符號(hào)。稱為整數(shù)變量的規(guī)格. C 語(yǔ)言為整數(shù)變量設(shè)置了 3 種規(guī)格: short, long, int(默認(rèn)規(guī)格). 但沒有指定具體大小. Turbo C 和 VC+: short = 2bytes, long = 4bytes int : Turbo C 默認(rèn)2 bytes, VC+ 默認(rèn)4
13、 bytes, 此外, char=1byte 也可以用于表示整數(shù). C99 允許 long long=8bytes, C 語(yǔ)言默認(rèn)為符號(hào)整數(shù). 最高位為符號(hào)位. 前綴unsigned 表示無符號(hào)數(shù). 全部是正整數(shù). 根據(jù)前面的公式, 練習(xí): 列出C的整型變量所有類型, 寫出表示的數(shù)值范圍.第16頁(yè)/共33頁(yè) 推廣上頁(yè): 內(nèi)存形式的“解釋” C語(yǔ)言的8種整型類型:可省略的修飾符 signed char -128, 128) unsigned char 0, 256) = 0, 255 signed int unsigned int signed short int -32768,32767 un
14、signed short int 0, 65536) signed long int unsigned long int 注: long long 型未必都支持, 不在C89標(biāo)準(zhǔn)內(nèi). 第17頁(yè)/共33頁(yè)例: 整型變量的定義, 賦值, 顯示 #include void main( ) int a= -11, c=3; unsigned char b= 2, d=6; printf(a+c=%d, b+d=%un,a+c,b+d); int a= -11, c=3; unsigned char b= 2, d=6; 也可以寫成 int a, c; unsigned char b, d; a= -1
15、1; c=3; b= 2, d=6; 前者是聲明的同時(shí)予以賦值, 這稱為初始化, 或者賦初值. 如果聲明后不賦值而直接打印值, 或參與運(yùn)算, 則不同語(yǔ)言和版本的規(guī)定是不同的: 當(dāng)前版本是 B+EA. 語(yǔ)法錯(cuò)誤 B.隨機(jī)值 C. 0 D.某個(gè)默認(rèn)值 E.運(yùn)行時(shí)報(bào)錯(cuò)第18頁(yè)/共33頁(yè)例: 整型變量的溢出 #include void main( ) short a,b; char c=400; / int 改short 演示。 a=32767; b=a+1; printf(%d, %d, %d n,a,b,c); 運(yùn)行結(jié)果: 32767,-32768, -112解釋結(jié)果:為什么? - 這個(gè)有點(diǎn)難!
16、如果 c=40000呢? / 定律: 相差整數(shù)倍, 落入范圍. 如果顯示格式不符, 則按照顯示格式溢出, 例如 char c=400; printf(“%u n”,c); 答案顯示: 4294967184第19頁(yè)/共33頁(yè)整型常量的類型 整數(shù)常量一般是不區(qū)分類型的。但是大數(shù)賦給小規(guī)格變量會(huì)導(dǎo)致溢出。 例:一個(gè)-32768+32767范圍內(nèi)的整數(shù),可賦給short或 long型變量。超過上述范圍的整數(shù),可以賦給long型變量。如果賦給short型變量,程序不會(huì)報(bào)錯(cuò),但是會(huì)丟失數(shù)據(jù)。同規(guī)格 unsigned 與 signed 之間互相賦值,不會(huì)丟失數(shù)據(jù)。但是可能影響計(jì)算結(jié)果。 整常量后面加后綴,可
17、強(qiáng)制表示數(shù)據(jù)類型,主要用于函數(shù)調(diào)用。如函數(shù)形參為 long 型,則要求實(shí)參也為 long 型。 后綴u 或 U表示 unsigned int 型,如12345u。 后綴 l 或 L 表示 long型。例:123l,432L,0L 等級(jí)考試考常量形式是否合法: 比如 0XABL, 123UL 等.第20頁(yè)/共33頁(yè) 實(shí)數(shù)型常量 實(shí)型常量的表示形式 (均為十進(jìn)制) 小數(shù)形式, 15.75, -0.0025, 指數(shù)形式 1575e-2, -2.5e-3, 25E-4(浮點(diǎn)制、科學(xué)記數(shù)法)表示1.58109。 / E或e之前必須有數(shù)字,E或e后面必須為整數(shù), 等級(jí)考試考常量形式是否合法: 比如 123
18、E2, 1.23e-2, 0., .0, 0.0, .0e0, 等. /經(jīng)檢驗(yàn)這些均合法. 機(jī)器內(nèi)存:二進(jìn)浮點(diǎn)制。略。第21頁(yè)/共33頁(yè) 實(shí)數(shù)型變量: 規(guī)格和解釋 實(shí)型變量的規(guī)格:?jiǎn)尉?、雙精度、長(zhǎng)雙精度 float, double, long double / sizeof = 4 8 8 float型數(shù)據(jù)4 byte= 32bits = 7位10進(jìn)制數(shù)字 double型數(shù)據(jù)8 byte=64bits = 15-16位 有效數(shù)字取值范圍以絕對(duì)值計(jì): float: 1.401298E-45 3.402823E+38 double: 4.94E-324 1.7977E+308 實(shí)型常量的后綴
19、f 或者 F 確保按照較短規(guī)格處理。 (實(shí)型常量默認(rèn)自動(dòng)保存為雙精度型) / 80bits double的運(yùn)算速度反而比單精度快. 也有相反說法.第22頁(yè)/共33頁(yè) 實(shí)數(shù)型變量: 規(guī)格和解釋 例: float x,y; double z; float型數(shù)據(jù)4 byte= 32bits = 7位10進(jìn)制數(shù)字 double型數(shù)據(jù)8 byte=64bits = 15-16位有效數(shù)字 float double printf(“%.25fn%.25f ”,x,y);結(jié)果: 又例: , y; y=x+20; 問: y 計(jì)算結(jié)果? 上機(jī)自行實(shí)驗(yàn). 預(yù)測(cè)結(jié)果: 加不上去, 因?yàn)橛行?shù)字不夠.第23頁(yè)/共33頁(yè)
20、 字符型數(shù)據(jù): 字符常量 用單引號(hào)括起一個(gè)字符。如a, 9, !, 字符串常量 用雙引號(hào)括起一串字符。如: “China”,“YES&NO”,“33312-2341”,“A” 等。 字符集: ASCII 碼 / 計(jì)算機(jī)可處理的字符 變量規(guī)格: 1 byte (8bits) 內(nèi)存解釋:按照ASCII 碼, 如 0100 0001 = A ASCII 碼的兩種表示法: A = 65 = 41H 0110 0001 = a = 97 = 61H 換言之, 字符在內(nèi)存中也是二進(jìn)制. 是解釋成整數(shù)還是字符依賴于上下文. C 的字符可與整數(shù)通用, 但漸受限制.第24頁(yè)/共33頁(yè) 字符型數(shù)據(jù): 字符
21、常量在內(nèi)存中占一個(gè)字節(jié)。 用單引號(hào)括起的字符,如a、?、B、5、和*等都是合法的字符常量。 它們的存儲(chǔ)形式如下所示字符常量字符常量存儲(chǔ)形式存儲(chǔ)形式十進(jìn)制表示十進(jìn)制表示A01 000 00165a01 100 00197?00 111 11163500 11010153第25頁(yè)/共33頁(yè) 轉(zhuǎn)義字符: 在ASCII碼表中有一些非印刷的控制字符, 例如回車、響鈴、退格等。為了能夠表示它們,C語(yǔ)言采用在反斜杠()字符后加其他字符的方法來解決。這稱為轉(zhuǎn)義字符。 例如,n 表示換行字符。 語(yǔ)言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來表示。 ddd 和xhh 正是為此而提出的。ddd 和hh 分別為八進(jìn)制和十
22、六進(jìn)制的ASCII 代碼。 如101 表示字母“A” ,102 表示字母“B”,134 表示反斜線,X0A 表示換行等。 第26頁(yè)/共33頁(yè) 轉(zhuǎn)義字符: 常用的一些轉(zhuǎn)義字符, 及其十進(jìn)制ASCII碼。第27頁(yè)/共33頁(yè)常用 字符常量 (10進(jìn)制ASCII值) A Z: 64+k, a z : 96+k, k=126. 0 9: 48+k, k=09. space = 32 在程序中可根據(jù)需要用不同形式來表示一個(gè)字符八進(jìn)制八進(jìn)制形式形式十六進(jìn)制十六進(jìn)制形式形式141x61053x2b047x27012xa十進(jìn)制十進(jìn)制形式形式97433910說明說明小寫字母小寫字母a加號(hào)字符加號(hào)字符+單引號(hào)單引號(hào)
23、換行換行字符字符字符字符常量常量a+n第28頁(yè)/共33頁(yè)字符變量 字符變量用于存放字符,在內(nèi)存中占一個(gè)字節(jié)的存儲(chǔ)單元。 字符變量的定義形式如下: char c1,c2; 可以把字符常量賦值給字符變量,例如: c1=a;c2=b; 字符型數(shù)據(jù)在內(nèi)存中的存放方式: 其實(shí)是存放該字符的ASCII碼 例如: char c1,c2;c1=a; c2=b;第29頁(yè)/共33頁(yè)字符變量的聲明、賦值、顯示void main( ) char c1 = a, c2 = b; /聲明 / 賦值 printf(“%c %c”,c1,c2); / 顯示 字符變量只能存放一個(gè)字符,并且不能夠放字符串。 這是錯(cuò)的:c1 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024暑假企業(yè)市場(chǎng)推廣活動(dòng)臨時(shí)促銷員合作協(xié)議3篇
- 2024新版餐飲服務(wù)人員勞動(dòng)協(xié)議樣本版
- 2024擠塑板材料采購(gòu)合同
- 2024校園垃圾處理與物業(yè)管理服務(wù)合同
- 2024打灰工程勞務(wù)分包協(xié)議范本一
- 2024年電力物資采購(gòu)供應(yīng)合同
- 2024年項(xiàng)目管理咨詢服務(wù)合同
- 2024年食堂承包及食品安全管理服務(wù)協(xié)議3篇
- 2024年酒店業(yè)標(biāo)準(zhǔn)采購(gòu)合同模板版B版
- O2O業(yè)務(wù)合作框架合同版B版
- 面包烘焙原料供應(yīng)采購(gòu)合同案例
- 工商企業(yè)管理畢業(yè)論文范文(篇一)
- 基于mRNA-LNP技術(shù)的(細(xì)胞)免疫治療產(chǎn)品開發(fā)指南
- 電動(dòng)叉車充電區(qū)安全規(guī)程
- 手術(shù)室中心吸引突然停止的應(yīng)急預(yù)案
- 選礦廠管理新規(guī)制度匯編
- G -B- 43630-2023 塔式和機(jī)架式服務(wù)器能效限定值及能效等級(jí)(正式版)
- 工作總結(jié)中的不足之處
- 湖南省部分地區(qū)高三下學(xué)期語(yǔ)文三模試題匯編:文學(xué)類文本閱讀
- 城市軌道交通安全防范系統(tǒng)技術(shù)要求
- 電科院:儲(chǔ)能構(gòu)網(wǎng)控制及并網(wǎng)測(cè)試
評(píng)論
0/150
提交評(píng)論