C語言程序設(shè)計 第3章基本數(shù)據(jù)類型和表達式教程_第1頁
C語言程序設(shè)計 第3章基本數(shù)據(jù)類型和表達式教程_第2頁
C語言程序設(shè)計 第3章基本數(shù)據(jù)類型和表達式教程_第3頁
C語言程序設(shè)計 第3章基本數(shù)據(jù)類型和表達式教程_第4頁
C語言程序設(shè)計 第3章基本數(shù)據(jù)類型和表達式教程_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 基本數(shù)據(jù)類型和表達式 俞軍 上節(jié)回顧 ? 假設(shè)計算機能識別的指令有以下四條: ?Input X:輸入數(shù)據(jù)到存儲單元X中。 Add X Y Z:將X、Y相加并將結(jié)果存在Z中。 Inv X:將X求反后存回X。 Output X:輸出X的內(nèi)容。 ? 應用上述指令實現(xiàn):輸入3個數(shù)A、B和C,求A+2*(B-C)的結(jié)果。 上節(jié)回顧 ? C語言的基本語法元素 ?變量與常量 基本輸入輸出 算術(shù)運算 控制流 函數(shù) 數(shù)組 第3章 基本數(shù)據(jù)類型和表達式 在第二章中,我們從總體上介紹了一個C程序的基本結(jié)構(gòu),使讀者對C程序有了大概的了解。本章將詳細介紹C語言程序中使用的基本語法單位基本語法單位、數(shù)據(jù)類型數(shù)據(jù)類

2、型、運算符運算符和表表達式達式。 3.1 基本語法單位 任何一種語言都會根據(jù)自身的特點規(guī)定它自己特定的一套基本符號。例如,英語的基本符號是26個英文字母和一些標點符號。C語言作為一種程序設(shè)計語言,也有它的基本符號,程序就是由這些基本符號基本符號組成的。 3.1.1 基本符號 程序中要對各種變量和各種函數(shù)起名,這些變量名、函數(shù)名都是由語言的基本符號組成的。C的基本符號包括: (1)數(shù)字數(shù)字10個(09); (2)英文字母英文字母大小寫各26個(AZ, az); (3)特殊符號特殊符號,主要用來表示運算符,它通常是由12個特殊符號組成。包括: + - * / % = = = != & |

3、! & | = + + - ?: () , 等等。 3.1.2 關(guān)鍵字 關(guān)鍵字在語言中有特定的語法含義,用來說明某一固定含義的語法概念,程序員只能使用,而不能給它們賦以新的含義 。 表3.1中列出了ANSI C中的32個關(guān)鍵字,主要是C的語句名和數(shù)據(jù)類型名等。C語言中大寫字母和小寫字母是不同的,如else是關(guān)鍵字,而ELSE則不是。 表3.1 ANSI C中的32個關(guān)鍵字 auto break case char const double else enum extern float struct int long register unsigned sizeof static swi

4、tch typedef union continue default do for goto if return short signed void volatile while 注意:注意: 還有一些含有特定含義的標識符。它們主要用在C語言的預處理程序中。這些標識符不是關(guān)鍵字,但因具有特定含義,建議讀者不要在程序中把它們作為一般標識符隨意使用,以免造成混亂。 特定字有define、undef、 include、ifdef、ifndef、 endif、line等。 3.1.3 標識符 標識符用于給程序中不同的語法概念以不同的命名給程序中不同的語法概念以不同的命名 ,以便能區(qū)別它們。如用來表示常

5、量、變量、語句標號、用戶自定義的名稱等等。程序中的標識符應滿足 C語言的一些規(guī)定: (1)以英文字母或下劃線英文字母或下劃線“_”“_”(下劃線也起一個字母作用)開頭; (2)標識符的其它部分可以用字母、數(shù)字、下劃線組成; (3)長度一般不超過8 8個字符個字符。在不同的系統(tǒng)中有不同的規(guī)定; (4)大、小寫字母含義不一樣大、小寫字母含義不一樣,例如:MAX,max,Max均表示不同的標識符; (5)不能用關(guān)鍵字不能用關(guān)鍵字作標識符。 下面列出幾個正確和不正確的標識符: 正確正確 不正確不正確 smart 5smart decision bomb? key_board keyboard FLOA

6、T float 注意:注意: 為了使程序易讀、易修改,標識符命名應該選擇恰當,盡量符合人們習慣,表示有意義的標識符。一般取用英文單詞、漢語拼音作為標識符。作為習慣,一般約定標識符常量使用大寫字母,其余均用小寫字母。 3.2 數(shù)據(jù)類型 整 型 基本類型 C數(shù)據(jù)類型 實型 短整型short 整型int 長整型long 單精度型float 雙精度型double 字符類型char 數(shù)組 結(jié)構(gòu)體struct 共用體union 枚舉類型enum 構(gòu)造類型 指針類型 空類型void 定義類型typedef 注意:注意: 對不同的C語言系統(tǒng),所支持的基本類型是不同的,而且取值范圍與機器硬件有關(guān),在使用時請參閱

7、有關(guān)手冊。 需要指出的是:C語言沒有提供布爾(邏輯)類型,在邏輯運算中,它是以非零表示真(TRUE),以數(shù)值0表示假(FALSE)。 3.3 常量與變量 3.3.1 常量 C語言中的常量是 不接受程序修改的固定值 ,常量可為任意 數(shù)據(jù)類型 。 1.整型常量整型常量 整形常量可分別以十進制、八進制、十六進制表示。C語言的整常數(shù)有以下四種形式: 1). 十進制整數(shù) 形式:n 其中n是數(shù)字09組成的序列,中間不允許出現(xiàn)逗號,規(guī)定最高位不能是0,當符號為正時可以省略符號“+”,“-”表示負數(shù)。 例例:123、-1000、-1都 表示十進制整數(shù)。 而而:1.234、10-2、10/3、0123是非法的十

8、進制整數(shù)。 2). 八進制整數(shù) 形式:士0n 其中0表示八進制數(shù)的引導符,不能省略,n是數(shù)字07組成的序列,當符號為正時可以省略“+” ,“-” 表示負數(shù)。特別要注意的是,八進制整數(shù)的引導符是數(shù)字0,而不是字母O。 例例:0123、01000、01都是表示八進制整數(shù)。 而而:012889、123、670是非法的八進制整數(shù)。 3). 十六進制整數(shù) 形式:士0 xn /*0是數(shù)字0,而不是字母O*/ 其中0 x表示十六進制數(shù)的引導符,不能省略。n是09、af或AF的數(shù)字、字母序列。當符號為正時可以省略“+” ;“-” 表示負數(shù)。一般前面的字母x小寫,后面的AF也應小寫,或者全部大寫。af或AF分別

9、表示數(shù)字1015。 例例:0 x12c、0 x100、0XFFFF都是表示十六進制整型數(shù)。 4). 長整型整數(shù) 前面幾種表示形式的整型是基本整型,但對于超過基本整型取值范圍的整數(shù),可以在數(shù)字后加字母L或l,表示長整型整數(shù)。從表3.2可以看到,長整型數(shù)據(jù)的表示范圍比基本整型的表示范圍大的多。 例例:123456L、07531246L、0XFFFFFFL分別表示十進制長整型整數(shù)、八進制長整型整數(shù)、十六進制長整型整數(shù)。 ? 下列哪些數(shù)是整型常量,如果是請說明是前面四種類型的哪種 1.2.3.4.5.6.7.O123 05678 -123f 057 05f -0 x089f 0057L 2.2.實型常

10、量實型常量 實型常量又稱浮點常量,是一個十進制表示的符號實數(shù)。符號實數(shù)的值包括整數(shù)部分整數(shù)部分、尾數(shù)部分尾數(shù)部分和指數(shù)部分指數(shù)部分。實型常量的形式如下: digits .digits E|e+|-digits ?digits是一位或多位十進制數(shù)字(從 09)。 ?1.575e9表示1.575109 注意:注意: 所有的實型常量均視為雙精度類型。實型常量的整數(shù)部分為0時可以省略,如下形式是允許的: .57,.0075e2,-.125,-.175E-2; 字母E或e之前必須有數(shù)字,且E或e后面指數(shù)必須為整數(shù): 如e3,2.1e3.5,. e3,e等都是不合法的指數(shù)形式。 下列哪些數(shù)是實型常量 1.

11、2.3.4.5.6.7.4.56 .87 .23e-2 0.56E07 0.234e0.2 234 e2 e356 3.字符常量字符常量 ? 字符常量是指用一對單引號括起來的單個字符。如a, 9, !。 ? 字符常量中的單引號只起定界作用并不表示字符本身。單引號中的字符不能是單引號()和反斜杠( ),它們特有的表示法在轉(zhuǎn)義字符中介紹。 ? 在C語言中,字符是按其所對應的ASCII碼值來存儲的,一個字符占一個字節(jié)。 注意:注意: ? 注意字符 9 和數(shù)字9的區(qū)別,前者是字符常量,后者是整型常量,它們的含義和在計算機中的存儲方式都截然不同。 ? 由于C語言中字符常量是按整數(shù)(short型)存儲的,

12、所以字符常量可以像整數(shù)一樣在程序中參與相關(guān)的運算。例如: 9 9; /* 執(zhí)行結(jié)果57-9 = 48 * / 4.字符串常量字符串常量 ? 字符串常量是指用一對雙引號括起來的一串字符。如“I love you” ? 雙引號只起定界作用,雙引號括起的字符串中不能是雙引號( )和反斜杠(),它們特有的表示法在轉(zhuǎn)義字符中介紹。 注意:注意: C語言中,字符串常量在內(nèi)存中存儲時,系統(tǒng)自動在字符串的末尾加一個“串結(jié)束標志”,即ASCII碼值為0的字符NULL,常用 0表示。因此在程序中,長度為n個字符的字符串常量,在內(nèi)存中占有n + 1個字節(jié)的存儲空間。例如,字符串China其存儲形式為: C H I

13、N A NULL 要特別注意字符串與字符串常量的區(qū)別,除了表示形式不同外,其存儲性質(zhì)也不相同,字符A只占1個字節(jié),而字符串常量A占2個字節(jié)。 5.轉(zhuǎn)義字符轉(zhuǎn)義字符 轉(zhuǎn)義字符是C語言中表示字符的一種特殊形式。通常使用轉(zhuǎn)義字符表示ASCII碼字符集中 不可打印的控制字符和特定功能的字符。 轉(zhuǎn)義字符 a b f n r t v ? 0 d d d x h h 意義 響鈴( B E L ) 退格( B S ) 換頁( F F ) 換行( L F ) 回車( C R ) 水平制表( H T ) 垂直制表( V T ) 反斜杠 問號字符 單引號字符 雙引號字符 空字符( N U L L ) 任意字符 任意

14、字符 A S C I I碼值(十進制) 0 0 7 0 0 8 0 1 2 0 1 0 0 1 3 0 0 9 0 11 0 9 2 0 6 3 0 3 9 0 3 4 0 0 0 三位八進制 二位十六進制 注意:注意: ? 轉(zhuǎn)義字符中只能使用小寫字母,每個轉(zhuǎn)義字符只能看作一個字符。 ? v 垂直制表和f 換頁符對屏幕沒有任何影響,但會影響打印機執(zhí)行相應操作。 ? 在C程序中,使用不可打印字符時,通常用轉(zhuǎn)義字符表示。 6.符號常量符號常量 C語言允許將程序中的常量定義為一個標識符,稱為符號常量。符號常量一般使用大寫英文字母表示,以區(qū)別于一般用小寫字母表示的變量。符號常量在使用前必須先定義,定義

15、的形式是: #define 例如: #define PI 3.1415926 # define是C語言的編譯預處理命令,它表示經(jīng)定義的符號常量在程序運行前將由其對應的常量替換。 3.3.2 變量 ? 其值可以改變的量稱為變量。 ? 變量有三個屬性 ?變量名:標識符 ?變量地址:變量存放在內(nèi)存當中的地址 ?變量值:變量所在內(nèi)存存放的變量的值 ? 定義變量的一般形式是: type variable_list; ?這里的type必須是有效的C數(shù)據(jù)類型, ?variable_list(變量表)可以由一個或多個由逗號分隔的多個標識符名構(gòu)成。例如: int i, j, l; /定義三個整型變量i,j,l

16、1.整型變量整型變量 #include void main(void) int a,b,c,d; / *定義a , b , c , d 為整型變量* / unsigned u; / *定義u為無符號整型變量* / a=22; b=-11; u=5; c=a+u; d=b+u; printf(a+u=%d, b+u=%dn ” ,c,d); 運行結(jié)果為: a+u=27, b+u=6 可以看到不同類型的整型數(shù)據(jù)可以進行算術(shù)運算。在本例中是int 型數(shù)據(jù)與unsingned int型數(shù)據(jù)進行相加減運算。 2.實型變量實型變量 實型變量分為單精度(float型)和雙精度(double型)。如: flo

17、at x,y; / *定義x , y為單精度實數(shù)* / double z; / *定義z為雙精度實數(shù)* / ?一個float型數(shù)據(jù)在內(nèi)存中占4個字節(jié)(32位),提供7位有效數(shù)字 ?一個double型數(shù)據(jù)占8個字節(jié)(64位),雙精度提供15 16位有效數(shù)字 ?值得注意的是,實型常量是double型,當把一個實型常量賦給一個float型變量時,系統(tǒng)會截取相應的有效位數(shù)。 3.字符變量字符變量 字符變量用來存放字符變量,注意只能存放一個字符,不要以為在一個字符變量中可以放字符串。字符變量的定義形式如下: char c1, c2; 它表示c 1和c 2為字符變量,各放一個字符。 因此可以用下面語句對c

18、 1、c 2賦值: c1 = a; c2 = b; ? 字符變量可以當整數(shù)來進行運算,所對應的值為其ASCII碼值 #include void main(void) char c1,c2; / *定義c1,c2為字符變量* / int sum; / *定義sum為整型變量* / c1=a;c2=b; sum=c1+c2; printf(“sum=%d”,sum); 3.3.3 變量的初始化 變量的初始化是指在定義變量的同時,給變量賦以初值,使某些變量在程序開始執(zhí)行時就具有確定的值。 其形式為: = ; 例如: char c=A, ky = K ; /* 字符型變量 c、ky初值分別為 A 、

19、K */ int j, i = 1; /* 整型變量 i 初值為1, j沒有賦初值 */ float sum = 3.56; /* 單精度變量 sum 初值為3.56 */ 如果對幾個變量賦以相同的初值,不能寫成: int a = b = c = 3; 而應寫成: int a=3, b=3, c=3; 3.4 表達式和運算符 表達式是由操作數(shù)和運算符組成,運算結(jié)果產(chǎn)生一個確定的值。操作數(shù)可以是常量、變量、函數(shù)和表達式,每個操作數(shù)都具有一種數(shù)據(jù)類型,通過運算得到的結(jié)果也具有一種數(shù)據(jù)類型,結(jié)果的數(shù)據(jù)類型與操作數(shù)的數(shù)據(jù)類型可能相同,也可能不相同。運算符指出了表達式中的操作數(shù)如何運算。 C語言中,共有

20、44種運算符,根據(jù)各運算符在表達式中的作用,表達式大致可以分成:算術(shù)表達式、關(guān)系表達式、邏輯表達式、條件表達式、賦值表達式和逗號表達式等。 3.4.1 算術(shù)運算符 表3.4 算術(shù)運算符 運算符 作用 減法,也是一元減法 運算符 % - - 作用 模運算 自減(減1) + 加法 / * 乘法 除法 + + 自增(增1) 下面是算術(shù)運算符的優(yōu)先級: 最高+ +、- - -(單目運算符取負號) *、/、% 最低+、- 注:注: ? 當“/” 被用于整數(shù)或字符時,結(jié)果取整。 ? 模運算取整數(shù)除法的余數(shù),所以“%” 不能用于float和double類型。 ? 自增或自減運算符在操作數(shù)之前(+x,x+x,

21、x-),C語言在引用操作數(shù)之前就先執(zhí)行加1或減1操作;運算符在操作數(shù)之后(x+,x-),C語言就先引用操作數(shù)的值,而后再進行加1或減1操作。 ? 編譯程序?qū)ν夁\算符按從左到右的順序進行計算。而 + +和-的結(jié)合方向是“自右向左”。如 - i + + ,它相當于: -( i + +)。 3.4.2 賦值運算符 賦值運算符分簡單的賦值運算符和復合的賦值運算兩種。 簡單的賦值運算的一般形式是: = 其中,“=”號是賦值運算符。其作用是將一個表達式的值賦給一個變量,同時該值作為賦值表達式的結(jié)果。 例如: a = b = c = d = 0;相當于:a =( b =( c =(d=0 ); float

22、 f;f = 23; /* 先將23轉(zhuǎn)換成23.00000,再存儲在f中 */ int i;i = 3.56; /* 變量i的值為3 */ ?在簡單賦值運算符“=”之前加上其他運算符,就構(gòu)成了復合賦值運算符。 ?復合運算符相當于兩個運算符的結(jié)合。例如:a+=b相當于a=a+b,但并不等價。 在復合賦值運算中,對于賦值號右邊是復雜的表達式時,例如: x * = y + 10 z相當于 x = x * ( y + 10 z ) 而不是x = x * y +10 z , 即將右端表達式看作一個整體和x進行有關(guān)運算。 ?用賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。 ?它的一般形

23、式為: ? 賦值表達式也可以包含復合的賦值運算符。 int a,b,c; a=(b=10)/(c=2); int a=8; a+=a-=a*a 3.4.3 關(guān)系運算符 關(guān)系運算是邏輯運算中比較簡單的一種。所謂“關(guān)系運算”實際上是“比較運算”。將兩個值進行比較,判斷比較的結(jié)果是否符合給定的條件。例如,a3是一個關(guān)系表達式,大于號“” 是一個關(guān)系運算符,如果a的值為5,則滿足給定的條件“a3” ,因此該表達式的值為“真”(即“條件滿足”);如果a的值為2,不滿足“a3” 條件,則稱關(guān)系表達式的值為“假”。 C語言提供6種關(guān)系運算符,見表3.5。 3.4.3 關(guān)系運算符 表3.5 關(guān)系運算符 優(yōu)先級

24、 運算符 意義 例 結(jié)果 小于 AB 真 6 = 小于等于 12.5 大于 AB 假 = 大于等于 A+2=B 真 7 = = 等于 A= =B 假 != 不等 A!=B 真 說明: 參加比較的數(shù)據(jù)可以是字符型、整型和浮點型數(shù)據(jù)。 前4種關(guān)系運算符( 、= )的優(yōu)先級相同,后兩種優(yōu)先級相同。前四種高于后兩種。例如:“”優(yōu)先于“= =”。而“”與“b & xy ? 0 ? a=b|x=y ? 0 ? !a|ab&(x=y+4) x? ? x=3 3.4.5 位運算符 位運算是指按二進制進行的運算。在系統(tǒng)軟件中,常常需要處理二進制位的問題。C語言提供了6個位操作運算符。這些運算符只

25、能用于整型操作數(shù),即只能用于帶符號或無符號的char,short,int與long類型。表3.8為C語言提供的位運算符列表: 表3.8 位運算符表 運算符 含義 描述 & | 按位與 如果兩個相應的二進制位都為 1,則該位的結(jié)果值為 1,否則為0 按位或 兩個相應的二進制位中只要有一個為 1,該位的結(jié)果值為 1 按位異或 若參加運算的兩個二進制位值相同則為 0,否則為1 取反 左移 右移 是一元運算符,用來對一個二進制數(shù)按位取反,即將0變1,將1變0 用來將一個數(shù)的各二進制位全部左移 N位,右補0 將一個數(shù)的各二進制位右移 N位,移到右端的低位被舍棄,對于無符號數(shù),高位補 0 3.4.6 逗號運算符 C語言提供一種特殊的運算符一逗號運算符。用逗號將若干個表達式連接起來。如:3 + 5, ,6 + 8,稱為逗號表達式。逗號表達式的一般形式為: , , , 逗號表達式的求解過程是:先求解表達式1,再求解表達式2,直到求解完表達式n,最后一個逗號表達式的值是整個逗號表達式的值。逗號運算符又稱為“順序求解運算符”。 3.4.

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論