




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、教學(xué)內(nèi)容: C的數(shù)據(jù)類型,常量與變量,整型數(shù)據(jù),實型數(shù)據(jù)和字符型數(shù)據(jù),變的數(shù)據(jù)類型,常量與變量,整型數(shù)據(jù),實型數(shù)據(jù)和字符型數(shù)據(jù),變量賦初值,各類數(shù)值型數(shù)據(jù)間的混合運算,算術(shù)運算符和算術(shù)表達量賦初值,各類數(shù)值型數(shù)據(jù)間的混合運算,算術(shù)運算符和算術(shù)表達式,賦值運算符和賦值表達式,逗號運算符逗號表達式。式,賦值運算符和賦值表達式,逗號運算符逗號表達式。 教學(xué)目的: 本章是本章是C語言的基本概念開篇,所介紹的概念是學(xué)習(xí)語言的基本概念開篇,所介紹的概念是學(xué)習(xí)C語言的基礎(chǔ);語言的基礎(chǔ);要求學(xué)生熟練掌握數(shù)據(jù)類型、運算符與表達式。要求掌握:要求學(xué)生熟練掌握數(shù)據(jù)類型、運算符與表達式。要求掌握: 常量、變量的概念常
2、量、變量的概念 各種常量的表示方法:整數(shù)、實數(shù)、字符、字符串的書寫方法。各種常量的表示方法:整數(shù)、實數(shù)、字符、字符串的書寫方法。 整型變量、實型變量、字符型變量的定義方法和選擇原則。整型變量、實型變量、字符型變量的定義方法和選擇原則。 類型修飾符類型修飾符long的用法、常用轉(zhuǎn)義字符的含義及原則;的用法、常用轉(zhuǎn)義字符的含義及原則; 各類數(shù)值型數(shù)據(jù)間混合運算的規(guī)則;各類數(shù)值型數(shù)據(jù)間混合運算的規(guī)則; 正確書寫表達式,注意幾個特殊算符的結(jié)合性和優(yōu)先級。能正確理正確書寫表達式,注意幾個特殊算符的結(jié)合性和優(yōu)先級。能正確理解和使用自增、自減、復(fù)合賦值算符和逗號運算符等。解和使用自增、自減、復(fù)合賦值算符和逗
3、號運算符等。第第3章章 數(shù)據(jù)類型、運算符與表達式數(shù)據(jù)類型、運算符與表達式教學(xué)重點: C語言數(shù)據(jù)類型定義的方法和分類。語言數(shù)據(jù)類型定義的方法和分類。 C語言運算符、表達式的使用以及它語言運算符、表達式的使用以及它們的主要特點。們的主要特點。教學(xué)難點: 自增、自減運算符、賦值運算符、逗號自增、自減運算符、賦值運算符、逗號運算符及它們的混合使用運算符及它們的混合使用學(xué)時安排: 4 4學(xué)時學(xué)時第第3章章 數(shù)據(jù)類型、運算符與表達式數(shù)據(jù)類型、運算符與表達式練練 習(xí):習(xí):1.請將下面各數(shù)用八進制和十六進制數(shù)表示:請將下面各數(shù)用八進制和十六進制數(shù)表示:(1)10 (2)32 (3)75 (4)617(5)-1
4、11 (6)2483 (7)-28654 (8)210032.字符常量與字符串常量有什么區(qū)別?字符常量與字符串常量有什么區(qū)別?3.寫出程序運行結(jié)果。寫出程序運行結(jié)果。main()int i,j,m,n;int i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%d,ij,m,n);第第3章章 數(shù)據(jù)類型、運算符與表達式數(shù)據(jù)類型、運算符與表達式3.1 C的數(shù)據(jù)類型的數(shù)據(jù)類型3.2 常量與變量常量與變量3.3 整型數(shù)據(jù)整型數(shù)據(jù)3.4 實型數(shù)據(jù)實型數(shù)據(jù)3.5 字符型數(shù)據(jù)字符型數(shù)據(jù)3.6 變量賦初值變量賦初值第第3章章 數(shù)據(jù)類型、運算符與表達式數(shù)據(jù)類型、運算符與表達式3.7 各類數(shù)值
5、型數(shù)據(jù)間的混合運算各類數(shù)值型數(shù)據(jù)間的混合運算3.8 算術(shù)運算符和算術(shù)表達式算術(shù)運算符和算術(shù)表達式3.9 賦值運算符和賦值表達式賦值運算符和賦值表達式3.10 逗號運算符和逗號表達式逗號運算符和逗號表達式習(xí)題習(xí)題3.1 C的數(shù)據(jù)類型的數(shù)據(jù)類型一個程序應(yīng)包括以下兩方面內(nèi)容:一個程序應(yīng)包括以下兩方面內(nèi)容:(1) 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure)。(2) 對操作的描述。即操作步驟,也就是算法對操作的描述。即操作步驟,也就是算法(algorithm)。 數(shù)據(jù)是操作的對象,操
6、作的目的是對數(shù)據(jù)進行加數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進行加工處理,以得到期望的結(jié)果。打個比方,廚師做菜肴,工處理,以得到期望的結(jié)果。打個比方,廚師做菜肴,需要有菜譜。菜譜上一般應(yīng)包括:需要有菜譜。菜譜上一般應(yīng)包括: 配料,指出應(yīng)使用哪些原料;配料,指出應(yīng)使用哪些原料; 操作步驟,指出如操作步驟,指出如何使用這些原料按規(guī)定的步驟加工成所需的菜肴。面何使用這些原料按規(guī)定的步驟加工成所需的菜肴。面對同一些原料可以加工出不同風(fēng)味的菜肴。對同一些原料可以加工出不同風(fēng)味的菜肴。 作為程序設(shè)計人員,必須認真考慮和設(shè)計數(shù)據(jù)結(jié)構(gòu)和操作為程序設(shè)計人員,必須認真考慮和設(shè)計數(shù)據(jù)結(jié)構(gòu)和操作步驟作步驟(即算法即算法
7、)。因此,著名計算機科學(xué)家沃思。因此,著名計算機科學(xué)家沃思(nikiklaus Wirth)提出一個公式提出一個公式 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+算法算法=程序程序 實際上,一個程序除了以上兩個主要要素之外,還應(yīng)當(dāng)實際上,一個程序除了以上兩個主要要素之外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法進行程序設(shè)計,并且用某一種計算采用結(jié)構(gòu)化程序設(shè)計方法進行程序設(shè)計,并且用某一種計算機語言表示。因此,可以這樣表示:機語言表示。因此,可以這樣表示: 程序程序=算法算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法程序設(shè)計方法+語言工具和環(huán)境語言工具和環(huán)境 也就是說,以上也就是說,以上4個方面是一個程序設(shè)計人員個方面是一個程序設(shè)計人員所應(yīng)具
8、備的知識。在設(shè)計一個程序時要綜合運用這所應(yīng)具備的知識。在設(shè)計一個程序時要綜合運用這幾方面的知識。在本書中不可能全面介紹這些內(nèi)容,幾方面的知識。在本書中不可能全面介紹這些內(nèi)容,它們都屬于有關(guān)的專門課程范疇。在這它們都屬于有關(guān)的專門課程范疇。在這4個方面中,個方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,語言是工具,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,語言是工具,編程需要采用合適的方法編程需要采用合適的方法。算法是解決。算法是解決“做什么做什么”和和“怎么做怎么做”的問題。程序中的操作語句,實際上的問題。程序中的操作語句,實際上就是算法的體現(xiàn)。算法處理的對象是數(shù)據(jù),而數(shù)據(jù)就是算法的體現(xiàn)。算法處理的對象是數(shù)據(jù)
9、,而數(shù)據(jù)是以某種特定的形式存在的是以某種特定的形式存在的(例如整數(shù)、實數(shù)、字例如整數(shù)、實數(shù)、字符等形式符等形式)。不同的數(shù)據(jù)之間往往還存在某些聯(lián)系。不同的數(shù)據(jù)之間往往還存在某些聯(lián)系(例如由若干個整數(shù)組成一個整數(shù)數(shù)組例如由若干個整數(shù)組成一個整數(shù)數(shù)組)。所謂數(shù)據(jù)。所謂數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)的組織形式。例如,數(shù)組就是一種結(jié)構(gòu)指的是數(shù)據(jù)的組織形式。例如,數(shù)組就是一種數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)。 不同的計算機語言所允許定義和使用的數(shù)據(jù)結(jié)不同的計算機語言所允許定義和使用的數(shù)據(jù)結(jié)構(gòu)是不同的。構(gòu)是不同的。 例如,例如,c語言提供了語言提供了“結(jié)構(gòu)體結(jié)構(gòu)體”這樣一種數(shù)據(jù)結(jié)這樣一種數(shù)據(jù)結(jié)構(gòu),而構(gòu),而fortran語言就不提供
10、這種數(shù)據(jù)結(jié)構(gòu)。語言就不提供這種數(shù)據(jù)結(jié)構(gòu)。 處理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會不同。處理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會不同。 例如,對例如,對10個整數(shù)排序和對由個整數(shù)排序和對由10個整數(shù)構(gòu)成的個整數(shù)構(gòu)成的數(shù)組排序的算法是不同的。因此,數(shù)組排序的算法是不同的。因此,在在考慮算法時,考慮算法時,必須注意數(shù)據(jù)結(jié)構(gòu)。實際上,必須注意數(shù)據(jù)結(jié)構(gòu)。實際上,應(yīng)當(dāng)綜合考慮算法和應(yīng)當(dāng)綜合考慮算法和數(shù)據(jù)結(jié)構(gòu),選擇最佳的數(shù)據(jù)結(jié)構(gòu)和算法數(shù)據(jù)結(jié)構(gòu),選擇最佳的數(shù)據(jù)結(jié)構(gòu)和算法。 C語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型形式出現(xiàn)的。語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型形式出現(xiàn)的。 c的數(shù)據(jù)類型如下的數(shù)據(jù)類型如下(1):數(shù)據(jù)類型數(shù)據(jù)類
11、型基本類型基本類型整型整型字符型字符型實型實型(浮點型浮點型)單精度型單精度型雙精度型雙精度型枚舉類型枚舉類型構(gòu)造類型構(gòu)造類型數(shù)組類型數(shù)組類型結(jié)構(gòu)體類型結(jié)構(gòu)體類型共用體類型共用體類型指針類型指針類型空類型空類型c的數(shù)據(jù)類型如下的數(shù)據(jù)類型如下(2): C語言中數(shù)據(jù)有語言中數(shù)據(jù)有常量與變量常量與變量之分,它們分別屬于以上這些之分,它們分別屬于以上這些類型。由以上這些數(shù)據(jù)類型還可以構(gòu)成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。類型。由以上這些數(shù)據(jù)類型還可以構(gòu)成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如利用指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復(fù)雜的例如利用指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。在程序中對用到的所有數(shù)據(jù)都必須指定其數(shù)
12、據(jù)數(shù)據(jù)結(jié)構(gòu)。在程序中對用到的所有數(shù)據(jù)都必須指定其數(shù)據(jù)類型。類型。在本章中主要介紹基本數(shù)據(jù)類型在本章中主要介紹基本數(shù)據(jù)類型.3.2 常量與變量常量與變量3.2.1 常量和符號常量常量和符號常量 在程序運行過程中,其值不能被改變的量在程序運行過程中,其值不能被改變的量稱為常量稱為常量。常量區(qū)分為不同的類型常量區(qū)分為不同的類型,如,如12,0,-3為整型常量,為整型常量,4.6、-1.23為實型常量,為實型常量,a,d為字符常量。為字符常量。常量一般從其字面形式即可常量一般從其字面形式即可判別。這種常量稱為字面常量或直接常量。判別。這種常量稱為字面常量或直接常量。也可以用一個標(biāo)識符代表一個常量,也可
13、以用一個標(biāo)識符代表一個常量,如如:例例2.1符號常量的使用。符號常量的使用。 #define price 30 main ( ) int num, total; num=10; total=num * price; printf(total=%d,total); 程序中用程序中用#define命令行定義命令行定義price代表常量代表常量30,此后凡在本文件中出現(xiàn)的,此后凡在本文件中出現(xiàn)的price都代表都代表30,可,可以和常量一樣進行運算,程序運行結(jié)果為以和常量一樣進行運算,程序運行結(jié)果為 total=300有關(guān)有關(guān)#define命令行的詳細用法參見第命令行的詳細用法參見第8章。章。 這種
14、用一個標(biāo)識符代表一個常量的,稱為這種用一個標(biāo)識符代表一個常量的,稱為符號符號常量常量,即標(biāo)識符形式的常量。,即標(biāo)識符形式的常量。請注意符號常量不同請注意符號常量不同于變量,它的值在其作用域于變量,它的值在其作用域(在本例中為主函數(shù)在本例中為主函數(shù))內(nèi)內(nèi)不能改變,也不能再被賦值。不能改變,也不能再被賦值。如再用以下賦值語句如再用以下賦值語句給給price賦值是錯誤的。賦值是錯誤的。 price=40; 習(xí)慣上,習(xí)慣上,符號常量名用大寫,變量用小寫符號常量名用大寫,變量用小寫,以,以示區(qū)別。示區(qū)別。 使用符號常量的好處是:使用符號常量的好處是:(1) 含義清楚含義清楚。如上面的程序中,看程序時從。
15、如上面的程序中,看程序時從price就就可知道它代表價格。因此定義符號常量名時應(yīng)考慮可知道它代表價格。因此定義符號常量名時應(yīng)考慮“見名知意見名知意”。 在一個規(guī)范的程序中不提倡使用很在一個規(guī)范的程序中不提倡使用很多的常數(shù)多的常數(shù),如:,如:sum= 15 * 30 * 23.5 * 43。在檢查程。在檢查程序時搞不清各個常數(shù)究竟代表什么。應(yīng)盡量使用序時搞不清各個常數(shù)究竟代表什么。應(yīng)盡量使用“見名知意見名知意”的變量名和符號常量。的變量名和符號常量。 (2) 在需要改變一個常量時能做到在需要改變一個常量時能做到“一改全改一改全改”。 例如在程序中多處用到某物品的價格,如果價格例如在程序中多處用到
16、某物品的價格,如果價格用常數(shù)表示,則在價格調(diào)整時,就需要在程序中用常數(shù)表示,則在價格調(diào)整時,就需要在程序中作多處修改,若用符號常量作多處修改,若用符號常量price代表價格,只需代表價格,只需改動一處即可。如:改動一處即可。如:#define price 35 在程序中所有以在程序中所有以price代表的價格就會一律自動改代表的價格就會一律自動改為為35。3.2.2 變量變量 其值可以改變的量稱為變量其值可以改變的量稱為變量。一個變一個變量應(yīng)該有一個名字,在內(nèi)存中占據(jù)一定量應(yīng)該有一個名字,在內(nèi)存中占據(jù)一定的存儲單元。在該存儲單元中存放變量的存儲單元。在該存儲單元中存放變量的值。的值。請注意區(qū)分
17、變量名和變量值這兩請注意區(qū)分變量名和變量值這兩個不同的概念個不同的概念,見圖,見圖2.1。變量名實際上。變量名實際上是一個是一個符號地址符號地址,在對程序編譯連接時,在對程序編譯連接時由系統(tǒng)給每一個變量名分配一個內(nèi)存地由系統(tǒng)給每一個變量名分配一個內(nèi)存地址。在址。在程序中從變量中取值,實際上是程序中從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址通過變量名找到相應(yīng)的內(nèi)存地址,從其,從其存儲單元中讀取數(shù)據(jù)。和其他高級語言存儲單元中讀取數(shù)據(jù)。和其他高級語言一樣,用來標(biāo)識變量名、符號常量名、一樣,用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有函數(shù)名、數(shù)組名、類型名、文件名的有效字符序
18、列稱為效字符序列稱為標(biāo)識符標(biāo)識符(identifier)。圖圖2.12.1簡單地說,簡單地說,標(biāo)識符就是一個名字。標(biāo)識符就是一個名字。 C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下線三種字符組成,且第一個字符必須為字母或下劃線。劃線。下面列出的是合法的標(biāo)識符,也是合法的變量名:下面列出的是合法的標(biāo)識符,也是合法的變量名:sum,average, -total, class, day, month, student-name,tan,lotus-1-2-3,basic, li-ling下面是不合法的標(biāo)識符和變量名:下面是不合
19、法的標(biāo)識符和變量名:dohn,y 123,33,3d64,ab 注意,注意,大寫字母和小寫字母被認為是兩個不同的字大寫字母和小寫字母被認為是兩個不同的字符。符。因此,因此,sum和和suM,class和和class是兩個不同的是兩個不同的變量名。一般,變量名。一般,變量名用小寫字母表示變量名用小寫字母表示,與人們,與人們?nèi)粘A?xí)慣一致,以增加可讀性。日常習(xí)慣一致,以增加可讀性。 ANSI C標(biāo)準(zhǔn)沒有規(guī)定標(biāo)識符的長度標(biāo)準(zhǔn)沒有規(guī)定標(biāo)識符的長度(字符個數(shù)字符個數(shù)),但各個但各個c編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)(如如ib PC的的s C)取取8個字符,假如程序中出現(xiàn)的變
20、量個字符,假如程序中出現(xiàn)的變量名長度大于名長度大于8個字符,則只有前面?zhèn)€字符,則只有前面8個字符有效,個字符有效,后面的不被識別。例如,有兩個變量:后面的不被識別。例如,有兩個變量:student_name和和student_number,由于二者的前,由于二者的前8個字符相同,系統(tǒng)認為這兩個變量是一回事而不個字符相同,系統(tǒng)認為這兩個變量是一回事而不加區(qū)別。可以將它們改為加區(qū)別。可以將它們改為stud_name和和stud_num,以使之區(qū)別。以使之區(qū)別。Turbo C則允許則允許32個字符個字符。因此,在寫程序時應(yīng)。因此,在寫程序時應(yīng)了解所用系統(tǒng)對標(biāo)識符長度的規(guī)定,以免出現(xiàn)上了解所用系統(tǒng)對標(biāo)
21、識符長度的規(guī)定,以免出現(xiàn)上面的混淆。這種錯誤并不反映在編譯過程中面的混淆。這種錯誤并不反映在編譯過程中(即即語法無錯誤語法無錯誤) ,但運行結(jié)果顯然不對。為了程序,但運行結(jié)果顯然不對。為了程序的可移植性的可移植性(即在甲機器上運行的程序可以基本即在甲機器上運行的程序可以基本上不加修改,就能移到乙機器上運行上不加修改,就能移到乙機器上運行)以及閱讀以及閱讀程序的方便,程序的方便,建議變量名的長度不要超過建議變量名的長度不要超過8個字個字符符。 如前所述,在選擇變量名和其他標(biāo)識符時,如前所述,在選擇變量名和其他標(biāo)識符時,應(yīng)注意做到應(yīng)注意做到“見名知意見名知意”,即選有含意的英文單,即選有含意的英文
22、單詞詞(或其縮寫或其縮寫)作標(biāo)識符,如作標(biāo)識符,如count、name、day、month、total、country等,除了數(shù)值計算程序外,等,除了數(shù)值計算程序外,一般不要用代數(shù)符號一般不要用代數(shù)符號(如如a、b、c、x1、y1等等)作變作變量名,以增加程序的可讀性。這是結(jié)構(gòu)化程序的量名,以增加程序的可讀性。這是結(jié)構(gòu)化程序的一個特征。一個特征。 本書在一些簡單的舉例中,為方便起見,仍本書在一些簡單的舉例中,為方便起見,仍用單字符的變量用單字符的變量?如如a、b、c等等),請讀者注意不,請讀者注意不要在其他所有程序中都如此。要在其他所有程序中都如此。 在在c語言中語言中,要求對所有用到的變量作
23、強制,要求對所有用到的變量作強制定義,也就是定義,也就是“先定義,后使用先定義,后使用”,如例,如例12、例例13那樣。這樣做的目的是:那樣。這樣做的目的是:(1) 凡未被事先定義的,不作為變量名凡未被事先定義的,不作為變量名,這就能保,這就能保證程序中變量名使用得正確。例如,如果在定義證程序中變量名使用得正確。例如,如果在定義部分寫了部分寫了int student;而在執(zhí)行語句中錯寫成而在執(zhí)行語句中錯寫成staent。如:。如:staent=30; 在編譯時檢查出在編譯時檢查出statent未經(jīng)定義,不作為變未經(jīng)定義,不作為變量名。因此輸出量名。因此輸出“變量變量statent未經(jīng)聲明未經(jīng)聲
24、明”的信息,的信息,便于用戶發(fā)現(xiàn)錯誤,避免變量名使用時出錯。便于用戶發(fā)現(xiàn)錯誤,避免變量名使用時出錯。(2) 每一個變量被指定為一確定類型,在編譯時就每一個變量被指定為一確定類型,在編譯時就能為其分配相應(yīng)的存儲單元。能為其分配相應(yīng)的存儲單元。如指定如指定a、b為為int型,型,turbo c編譯系統(tǒng)為編譯系統(tǒng)為a和和b各分配兩個字節(jié),并按整各分配兩個字節(jié),并按整數(shù)方式存儲數(shù)據(jù)。數(shù)方式存儲數(shù)據(jù)。(3) 指定每一變量屬于一個類型,指定每一變量屬于一個類型,這就便于在編譯這就便于在編譯時,據(jù)此檢查該變量所進行的運算是否合法。例時,據(jù)此檢查該變量所進行的運算是否合法。例如,整型變量如,整型變量a和和b,
25、可以進行求余運算:,可以進行求余運算:a%b %是是“求余求余”(見見2.8節(jié)節(jié)),得到,得到a/b的余數(shù)。如的余數(shù)。如果將果將a、b指定為實型變量,則不允許進行指定為實型變量,則不允許進行“求余求余”運算,在編譯時會給出有關(guān)運算,在編譯時會給出有關(guān)“出錯信息出錯信息”。 下面各節(jié)分別介紹整型、實型下面各節(jié)分別介紹整型、實型(浮點型浮點型)、字、字符型數(shù)據(jù)。符型數(shù)據(jù)。3.3 整型數(shù)據(jù)整型數(shù)據(jù)2.3.1 2.3.1 整型常量的表示方法整型常量的表示方法 整型常量即整常數(shù)。整型常量即整常數(shù)。c c整常數(shù)可用以下三種形式整常數(shù)可用以下三種形式表示:表示: (1) (1) 十進制整數(shù)。如十進制整數(shù)。如
26、123123, -456-456, 0 0。 (2) (2) 八進制整數(shù)。以八進制整數(shù)。以0 0開頭的數(shù)是八進制數(shù)。如開頭的數(shù)是八進制數(shù)。如01230123表示八進制數(shù)表示八進制數(shù)123123,即,即(123)(123)8 8,其值為:,其值為:1 18 82 2+2+28 81 1+3+38 80 0,等于十進制數(shù),等于十進制數(shù)8 38 3。-011-011表表示八進制數(shù)示八進制數(shù)-11-11,即十進制數(shù),即十進制數(shù)-9-9。 (3) (3) 十六進制整數(shù)。以十六進制整數(shù)。以0 x0 x開頭的數(shù)是十六進制數(shù)。開頭的數(shù)是十六進制數(shù)。如如0 x1230 x123,代表十六進制數(shù),代表十六進制數(shù)1
27、23123,即,即(123)16=1(123)16=116162 2+2+216161 1+3+316160 0=256+32+3=291=256+32+3=291。-0 x12-0 x12等于十進制數(shù)等于十進制數(shù)-18-18。3.3.2 整型變量整型變量1. 整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進制形式存放的。以二進制形式存放的。如果定義了一個整型變量如果定義了一個整型變量i:int i; /* 定義為整型變量定義為整型變量 */i=10; /* 給給i賦以整數(shù)賦以整數(shù)10 */ 十進制數(shù)十進制數(shù)10的二進制形式為的二進制形式為1010,在微機
28、上使用的,在微機上使用的c編譯系統(tǒng)編譯系統(tǒng),每一個整型變量在內(nèi)存中占,每一個整型變量在內(nèi)存中占2個字節(jié)。個字節(jié)。圖圖2.2(a)是數(shù)據(jù)存放的示意圖。圖是數(shù)據(jù)存放的示意圖。圖2.2(b)是數(shù)據(jù)在是數(shù)據(jù)在內(nèi)存中實際存放的情況。內(nèi)存中實際存放的情況。圖圖2.2 實際上,數(shù)值是以補碼實際上,數(shù)值是以補碼(complement) 表示的。表示的。一個正數(shù)的補碼和其原碼的形式相同。圖一個正數(shù)的補碼和其原碼的形式相同。圖2.2(b) 就是用補碼形式表示的。如果數(shù)值是負的,在內(nèi)就是用補碼形式表示的。如果數(shù)值是負的,在內(nèi)存中如何用補碼形式表示呢存中如何用補碼形式表示呢?求負數(shù)的補碼的方求負數(shù)的補碼的方法是:將該
29、數(shù)的絕對值的二進制形式,按位取反法是:將該數(shù)的絕對值的二進制形式,按位取反再加再加1。例如求。例如求-10的補碼:的補碼:取取-10的絕對值的絕對值10;10的絕對值的二進制形式為的絕對值的二進制形式為1010;對對1010取取反得反得1111111111110101(一個整數(shù)占一個整數(shù)占16位位);再加再加1得得1111111111110110,見圖,見圖2.3。 圖圖2.3 可知整數(shù)的可知整數(shù)的16位中,最左面的一位是表示符位中,最左面的一位是表示符號的,該位為號的,該位為0,表示數(shù)值為正;為,表示數(shù)值為正;為1則數(shù)值為負。則數(shù)值為負。 關(guān)于補碼的知識不屬于本書的范圍,關(guān)于補碼的知識不屬于
30、本書的范圍,但學(xué)習(xí)但學(xué)習(xí)c語言的讀者應(yīng)該比學(xué)習(xí)其他高級語言的讀者對語言的讀者應(yīng)該比學(xué)習(xí)其他高級語言的讀者對數(shù)據(jù)在內(nèi)存中的表示形式有更多的了解。這樣才數(shù)據(jù)在內(nèi)存中的表示形式有更多的了解。這樣才能理解不同類型數(shù)據(jù)間轉(zhuǎn)換的規(guī)律。能理解不同類型數(shù)據(jù)間轉(zhuǎn)換的規(guī)律。在本章稍后在本章稍后的敘述中還要接觸到這方面的問題。的敘述中還要接觸到這方面的問題。2. 整型變量的分類整型變量的分類 整型變量的基本類型符為整型變量的基本類型符為int。可以根據(jù)數(shù)值。可以根據(jù)數(shù)值的范圍將變量定義為基本整型、短整型或長整型。的范圍將變量定義為基本整型、短整型或長整型。在在int 之前可以根據(jù)需要分別加上修飾符之前可以根據(jù)需要分
31、別加上修飾符(modifier):short(短型短型)或或long(長型長型)。因此有以下。因此有以下三種整型變量:三種整型變量:(1) 基本整型,以基本整型,以int表示。表示。(2) 短整型,短整型, 以以short int表示,或以表示,或以short表示。表示。(3) 長整型,長整型, 以以long int表示,或以表示,或以long表示。表示。在在turbo c中一個中一個int型的變量的值范圍為型的變量的值范圍為-215(215-1) ,即即-3276832767。在實際應(yīng)用中,變量的值常常。在實際應(yīng)用中,變量的值常常是正的是正的(如學(xué)號、庫存量、年齡、存款額等如學(xué)號、庫存量、年
32、齡、存款額等)。 為了充分利用變量的表數(shù)范圍,此時可以為了充分利用變量的表數(shù)范圍,此時可以將變量定義為將變量定義為“無符號無符號”類型。對以上三種都可類型。對以上三種都可以加上修飾符以加上修飾符unsigned,以指定是,以指定是“無符號數(shù)無符號數(shù)” 。如果加上修飾符如果加上修飾符signed,則指定是,則指定是“有符號數(shù)有符號數(shù)”。 如果既不指定為如果既不指定為signed,也不指定為,也不指定為unsigned,則隱含為有符號則隱含為有符號(signed)。實際上。實際上signed是完全可是完全可以不寫的。歸納起來,可以用以下以不寫的。歸納起來,可以用以下6種整型變量。種整型變量。即:即
33、:有符號基本整型有符號基本整型 signed int 無符號基本整型無符號基本整型 unsigned int有符號短整型有符號短整型 signed short int無符號短整型無符號短整型 unsigned short int有符號長整型有符號長整型 signed long int無符號長整型無符號長整型 unsigned long int 如果不指定如果不指定unsigned或指定或指定signed,則存儲單元,則存儲單元中最高位代表符號中最高位代表符號(0為正,為正,1為負為負)。如果指定。如果指定unsigned,為無符號型,存儲單元中全部二進位,為無符號型,存儲單元中全部二進位(bi
34、t)用作存放數(shù)本身,而不包括符號。無符號型變量只用作存放數(shù)本身,而不包括符號。無符號型變量只能存放不帶符號的整數(shù),如能存放不帶符號的整數(shù),如123、4687等,而不能存等,而不能存放負數(shù),如放負數(shù),如-123、-3。一個無符號整型變量中可以存。一個無符號整型變量中可以存放的正數(shù)的范圍比一般整型變量中正數(shù)的范圍擴大放的正數(shù)的范圍比一般整型變量中正數(shù)的范圍擴大一倍。如果在程序中定義一倍。如果在程序中定義a和和b兩個變量兩個變量:int a;unsigned int b;則變量則變量a的數(shù)值范圍為的數(shù)值范圍為-3276832767。而變量。而變量b的的數(shù)值范圍為數(shù)值范圍為065535。圖圖2.4(a
35、) 表示有符號整型變量表示有符號整型變量a的最大值的最大值(32767)。圖圖2.4(b) 表示無符號整型變量表示無符號整型變量b的最大值的最大值(65535)。圖圖2.42.4 C標(biāo)準(zhǔn)沒有具體規(guī)定以上各類數(shù)據(jù)所占內(nèi)存字標(biāo)準(zhǔn)沒有具體規(guī)定以上各類數(shù)據(jù)所占內(nèi)存字節(jié)數(shù),只要求節(jié)數(shù),只要求long型數(shù)據(jù)長度不短于型數(shù)據(jù)長度不短于int型,型,short型不長于型不長于int型。型。具體如何實現(xiàn),由各計算機系統(tǒng)具體如何實現(xiàn),由各計算機系統(tǒng)自行決定。如在微機上,自行決定。如在微機上,int和和short都是都是16位位,而,而long是是32位。位。在在Vax 750 上,上,short是是16位,而位,
36、而int和和long都是都是32位,一般以一個機器字位,一般以一個機器字(word)存數(shù)據(jù)。存數(shù)據(jù)。前一階段,微機的字長一般為前一階段,微機的字長一般為16位,故以位,故以16位存放位存放一個整數(shù),但整數(shù)的范圍太小,往往不夠用,故將一個整數(shù),但整數(shù)的范圍太小,往往不夠用,故將long型定為型定為32位。而位。而Vax的字長為的字長為32位,以位,以32位存位存放一個整數(shù),范圍可達正負放一個整數(shù),范圍可達正負21億,已足夠用了,不億,已足夠用了,不必再將必再將long型定為型定為64位。所以將位。所以將int和和long都定為都定為32位。通常的做法是:把位。通常的做法是:把long定為定為32
37、位,把位,把short定為定為16位,而位,而int可以是可以是16位,也可以是位,也可以是32位。這主要位。這主要取決于機器字長。取決于機器字長。 在微機上用在微機上用long型可以得到大范圍的整數(shù),型可以得到大范圍的整數(shù),但同時會降低運算速度,因此除非不得已,不要但同時會降低運算速度,因此除非不得已,不要隨便使用隨便使用long型。型。 方括弧內(nèi)的部分是可以省寫的。方括弧內(nèi)的部分是可以省寫的。例如例如signed short int與與 short等價,尤其是等價,尤其是signed是完全多余是完全多余的,一般都不寫的,一般都不寫signed。一個整數(shù)。一個整數(shù)(以以13為例為例)在在存儲
38、單元中的存儲情況,見圖存儲單元中的存儲情況,見圖2.5所示所示(假設(shè)使用假設(shè)使用的是微機上的的是微機上的c編譯系統(tǒng),如編譯系統(tǒng),如turbo 、 Ms )。圖圖2.53. 整型變量的定義整型變量的定義 前面已提到,前面已提到,c規(guī)定在程序中所有用到的變規(guī)定在程序中所有用到的變量都必須在程序中定義,即量都必須在程序中定義,即“強制類型定義強制類型定義”。這是和這是和basic、fortran不同的,而和不同的,而和pascal相類似。相類似。例如:例如:int a,b;(指定變量指定變量a、b為整型為整型)unsigned short c,d;(指定變量指定變量c、d為無符號為無符號短整型短整型
39、) long e,f; (指定變量指定變量e、f為長整型為長整型)對對變量的定義,一般是放在一個函數(shù)的開頭部分的變量的定義,一般是放在一個函數(shù)的開頭部分的聲明部分聲明部分(也可以放在函數(shù)中某一分程序內(nèi),但也可以放在函數(shù)中某一分程序內(nèi),但作用域只限它所在的分程序,作用域只限它所在的分程序,這將在第這將在第6章介紹章介紹)。例例2.2整型變量的定義與使用。整型變量的定義與使用。main()int a,b,c,d; /*指定指定a、b、c、d為整型變量為整型變量*/ unsigned u; /*指定指定u為無符號整型變量為無符號整型變量*/ a=12;b=-24;u=10; c=a+u;d=b+u;
40、 printf(a+u=%d,b+u=%dn,c,d); 運行結(jié)果為運行結(jié)果為a+u=22,b+u=-14 可以看到不同種類的整型數(shù)據(jù)可以進行算術(shù)可以看到不同種類的整型數(shù)據(jù)可以進行算術(shù)運算。在本例中是運算。在本例中是int型數(shù)據(jù)與型數(shù)據(jù)與unsigned int型數(shù)型數(shù)據(jù)進行相加相減運算據(jù)進行相加相減運算(有關(guān)運算的規(guī)則在本章有關(guān)運算的規(guī)則在本章2.7節(jié)中介紹節(jié)中介紹)。4. 整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出在在turbo c中一個中一個int型變量的最大允許值為型變量的最大允許值為32767,如果再加如果再加1,會出現(xiàn)什么情況,會出現(xiàn)什么情況?例例2.3整型數(shù)據(jù)的溢出。整型數(shù)據(jù)的溢出。main(
41、)int a,b; a=32767; b=a+1; printf(%d,%d,a,b);運行結(jié)果為運行結(jié)果為32767,-32768圖圖2.6 從圖從圖2.6可以看到:變量可以看到:變量a的最高位為的最高位為0,后,后15位全為位全為1。加。加1后變成第后變成第1位為位為1, 后面后面15位全為位全為0。而它是而它是-32768的補碼形式,所以輸出變量的補碼形式,所以輸出變量b的值的值為為-32768。 請注意:一個整型變量只能容納請注意:一個整型變量只能容納-3276832767范圍內(nèi)的數(shù),無法表示大于范圍內(nèi)的數(shù),無法表示大于32767的數(shù)。遇的數(shù)。遇此情況就發(fā)生此情況就發(fā)生“溢出溢出”,
42、但運行時并不報錯。但運行時并不報錯。它好像汽車的里程表一樣,達到最大值以后,又它好像汽車的里程表一樣,達到最大值以后,又從最小值開始計數(shù)。所以,從最小值開始計數(shù)。所以,32767加加1得不到得不到32768,而得到,而得到-32768,這可能與程序編制者的,這可能與程序編制者的原意不同。從這里可以看到:原意不同。從這里可以看到:c的用法比較靈活,的用法比較靈活,往往出現(xiàn)副作用,而系統(tǒng)又不給出往往出現(xiàn)副作用,而系統(tǒng)又不給出“出錯信息出錯信息”,要靠程序員的細心和經(jīng)驗來保證結(jié)果的正確要靠程序員的細心和經(jīng)驗來保證結(jié)果的正確。將。將變量變量b改成改成long型就可得到預(yù)期的結(jié)果型就可得到預(yù)期的結(jié)果32
43、768。3.3.3 整型常量的類型整型常量的類型 我們已知整型變量可分為我們已知整型變量可分為int、short int、long int和和unsigned int、unsigned short、unsigned long等類別。那么常量是否也有這些類等類別。那么常量是否也有這些類別別?在將一個整型常量賦值給上述幾種類別的整在將一個整型常量賦值給上述幾種類別的整型變量時如何做到類型匹配型變量時如何做到類型匹配?請注意以下幾點:請注意以下幾點:(1) 一個整數(shù),如果其值在一個整數(shù),如果其值在-32768+32767范圍內(nèi),范圍內(nèi),認為它是認為它是int型,它可以賦值給型,它可以賦值給int型和
44、型和long int型型變量。變量。(2) 一個整數(shù),如果其值超過了上述范圍,而在一個整數(shù),如果其值超過了上述范圍,而在-2147483648+2147483647范圍內(nèi),則認為它是范圍內(nèi),則認為它是長整型,可以將它賦值給一個長整型,可以將它賦值給一個long int型變量。型變量。(3) 如果某一計算機系統(tǒng)的如果某一計算機系統(tǒng)的c版本版本(例如例如turbo c)確定確定short int與與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與則它的表數(shù)范圍與int型相同。因此,一個型相同。因此,一個int型型的常量也同時是一個的常量也同時是一個short in
45、t型常量,可以賦給型常量,可以賦給int型或型或short int型變量。型變量。(4) 一個整常量后面加一個字母一個整常量后面加一個字母u,認為是,認為是unsigned int型,型,如如12345u,在內(nèi)存中按,在內(nèi)存中按unsigned int規(guī)定規(guī)定的方式存放的方式存放(存儲單元中最高位不作為符號位,存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù),見圖而用來存儲數(shù)據(jù),見圖2.4(b)。如果寫成。如果寫成-12345u,則先將則先將-12345轉(zhuǎn)換成其補碼轉(zhuǎn)換成其補碼53191,然后按無符,然后按無符號數(shù)存儲。號數(shù)存儲。(5) 在一個整常量后面加一個字母在一個整常量后面加一個字母l或或l
46、,則認為是,則認為是long int型常量。型常量。 例如例如123l、432l、0l等,這往往用于函數(shù)調(diào)用等,這往往用于函數(shù)調(diào)用中。如果函數(shù)的形參為中。如果函數(shù)的形參為long int型,則要求實參也型,則要求實參也為為long int型,此時用型,此時用123作實參不行,而要用作實參不行,而要用123l作實參。作實參。3.4 實型數(shù)據(jù)實型數(shù)據(jù) 3.4.1 實型常量的表示方法實型常量的表示方法實數(shù)實數(shù)(real number)又稱浮點數(shù)又稱浮點數(shù)(floating-point number)。實數(shù)有兩種表示形式:。實數(shù)有兩種表示形式:(1) 十進制小數(shù)形式十進制小數(shù)形式。它由數(shù)字和小數(shù)點組成
47、。它由數(shù)字和小數(shù)點組成(注意注意必須有小數(shù)點必須有小數(shù)點)。 .123、 123.、 123.0、 0.0都是都是十進制小數(shù)形式。十進制小數(shù)形式。(2) 指數(shù)形式指數(shù)形式。如。如123e3或或123e3都代表都代表123103。但。但注意字母注意字母e(或或e)之前必須有數(shù)字,且之前必須有數(shù)字,且e后面的指數(shù)后面的指數(shù)必須為整數(shù),如必須為整數(shù),如e3、2.1e3.5、e3、 e等都不是等都不是合法的指數(shù)形式。合法的指數(shù)形式。 一個實數(shù)可以有多種指數(shù)表示形式。一個實數(shù)可以有多種指數(shù)表示形式。例如例如123.456可以表示為可以表示為123.456e0, 12.3456e1、 1.23456e2、
48、 0.123456e3、 0.0123456e4、 0.00123456e5等。把其中的等。把其中的1.23456e2稱為稱為“規(guī)范規(guī)范化的指數(shù)形式化的指數(shù)形式”, 即即在字母在字母e(或或e)之前的小數(shù)部之前的小數(shù)部分中,小數(shù)點左邊應(yīng)有一位分中,小數(shù)點左邊應(yīng)有一位(且只能有一位且只能有一位)非零非零的數(shù)字。的數(shù)字。例如例如2.3478e2、 3.0999e5、 6.46832e12都屬于規(guī)范化的指數(shù)形式,而都屬于規(guī)范化的指數(shù)形式,而12.908e10、 0.4578e3、 756e0則不屬于規(guī)范化的指數(shù)形式則不屬于規(guī)范化的指數(shù)形式。一個實數(shù)在用指數(shù)形式輸出時,是按規(guī)范化的指一個實數(shù)在用指數(shù)形
49、式輸出時,是按規(guī)范化的指數(shù)形式輸出的數(shù)形式輸出的。例如,指定將實數(shù)。例如,指定將實數(shù)5689.65按指數(shù)按指數(shù)形式輸出,必然輸出形式輸出,必然輸出5.68965e+003, 而不會是而不會是0.568965e+004或或56.8965e+002。1. 實型數(shù)據(jù)在內(nèi)存中的存放實型數(shù)據(jù)在內(nèi)存中的存放形式形式 在常用的微機系統(tǒng)中,一個實在常用的微機系統(tǒng)中,一個實型數(shù)據(jù)在內(nèi)存中占型數(shù)據(jù)在內(nèi)存中占4個字節(jié)個字節(jié)(32位位)。與整型數(shù)據(jù)的存圖。與整型數(shù)據(jù)的存圖2.7儲儲方式不同,實型數(shù)據(jù)是按照指方式不同,實型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個實數(shù)形式存儲的。系統(tǒng)把一個實型數(shù)據(jù)分成小數(shù)部分和指數(shù)部型數(shù)據(jù)分
50、成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。實數(shù)規(guī)范化的指數(shù)形式。實數(shù) 3.14159 在內(nèi)存中的存放形式在內(nèi)存中的存放形式可以用圖可以用圖2.7示意。示意。3.4.2 實型變量實型變量圖圖2.7 圖中是用十進制數(shù)來示意的,實際上在計算機中圖中是用十進制數(shù)來示意的,實際上在計算機中是用二進制數(shù)來表示小數(shù)部分以及用是用二進制數(shù)來表示小數(shù)部分以及用2的冪次來表示的冪次來表示指數(shù)部分的。在指數(shù)部分的。在4個字節(jié)個字節(jié)(32位位)中,究竟用多少位來中,究竟用多少位來表示小數(shù)部分,多少位來表示指數(shù)部分,標(biāo)準(zhǔn)表示小數(shù)部分,多少位來表示指數(shù)部分,標(biāo)準(zhǔn)C并無并無具體
51、規(guī)定,由各具體規(guī)定,由各C編譯系統(tǒng)自定。不少編譯系統(tǒng)自定。不少c編譯系統(tǒng)以編譯系統(tǒng)以24位表示小數(shù)部分位表示小數(shù)部分(包括符號包括符號),以,以8位表示指數(shù)部分位表示指數(shù)部分(包括指數(shù)的符號包括指數(shù)的符號)。小數(shù)部分占的位。小數(shù)部分占的位(bit)數(shù)愈多,數(shù)數(shù)愈多,數(shù)的有效數(shù)字愈多,精度愈高。指數(shù)部分占的位數(shù)愈的有效數(shù)字愈多,精度愈高。指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大。多,則能表示的數(shù)值范圍愈大。2. 實型變量的分類實型變量的分類C實型變量分為單精度實型變量分為單精度(float型型)、雙精度、雙精度(double型型)和和長雙精度型長雙精度型(long double)三類。三類。
52、 ANSI C 并未具體規(guī)定每種類型數(shù)據(jù)的長度、并未具體規(guī)定每種類型數(shù)據(jù)的長度、精度和數(shù)值范圍。有的系統(tǒng)將精度和數(shù)值范圍。有的系統(tǒng)將double型所增加的型所增加的32位全用于存放小數(shù)部分,這樣可以增加數(shù)值的位全用于存放小數(shù)部分,這樣可以增加數(shù)值的有效位數(shù),減少舍入誤差。有的系統(tǒng)則將所增加有效位數(shù),減少舍入誤差。有的系統(tǒng)則將所增加的位的位(bit)用于存放指數(shù)部分,這樣可以擴大數(shù)值用于存放指數(shù)部分,這樣可以擴大數(shù)值的范圍。表的范圍。表2.2列出的是微機上常用的列出的是微機上常用的c編譯系統(tǒng)編譯系統(tǒng)(如如turbo c, Ms c, borland c )的情況。應(yīng)當(dāng)了的情況。應(yīng)當(dāng)了解,不同的系
53、統(tǒng)會有差異。解,不同的系統(tǒng)會有差異。對每一個實型變量都應(yīng)在使用前加以定義對每一個實型變量都應(yīng)在使用前加以定義。如。如: floatx,y,(指定指定x、y為單精度實數(shù)為單精度實數(shù)) double z; (指定指定z為雙精度實數(shù)為雙精度實數(shù)) long double t; (指定指定t為長雙精度實數(shù)為長雙精度實數(shù)) 在初學(xué)階段,對在初學(xué)階段,對long double型用得較少,因此我型用得較少,因此我們不準(zhǔn)備作詳細介紹。讀者只要知道有此類型即們不準(zhǔn)備作詳細介紹。讀者只要知道有此類型即可。可。 3. 實型數(shù)據(jù)的舍入誤差實型數(shù)據(jù)的舍入誤差由于實型變量是由有限的存儲單元組成的,因此由于實型變量是由有限
54、的存儲單元組成的,因此能提供的有效數(shù)字總是有限的,在有效位以外的能提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去。由此可能會產(chǎn)生一些誤差。例如,數(shù)字將被舍去。由此可能會產(chǎn)生一些誤差。例如,a 加加 20的結(jié)果顯然應(yīng)該比的結(jié)果顯然應(yīng)該比a大。請分析下面的程序:大。請分析下面的程序:例例2.4實型數(shù)據(jù)的舍入誤差。實型數(shù)據(jù)的舍入誤差。 main()float a,b; a = 123456,789e5; b = a + 20 ; printf(%f,b); 程序內(nèi)程序內(nèi)printf函數(shù)中的函數(shù)中的“%f” 是輸出一個實是輸出一個實數(shù)時的格式符。程序運行時,輸出數(shù)時的格式符。程序運行時,輸出b的
55、值與的值與a相等。相等。原因是:原因是:a的值比的值比20大很多,大很多,a+20的理論值應(yīng)是的理論值應(yīng)是12345678920,而,而一個實型變量只能保證的有效一個實型變量只能保證的有效數(shù)字是數(shù)字是7位有效數(shù)字位有效數(shù)字,后面的數(shù)字是無意義的,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。并不準(zhǔn)確地表示該數(shù)。 運行程序得到的運行程序得到的a和和b的值是的值是12345678848.000000,可以看到,可以看到,?位是準(zhǔn)確的,后幾位是不準(zhǔn)確的,位是準(zhǔn)確的,后幾位是不準(zhǔn)確的,把把20加在后幾位上,是無意義的。應(yīng)當(dāng)避免將一加在后幾位上,是無意義的。應(yīng)當(dāng)避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減
56、,否個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會則就會“丟失丟失”小的數(shù)。與此類似,用程序計算小的數(shù)。與此類似,用程序計算1.0/3*3的結(jié)果并不等于的結(jié)果并不等于1。2.4.3 實型常量的類型實型常量的類型 C編譯系統(tǒng)將實型常量作為雙精度來處理。編譯系統(tǒng)將實型常量作為雙精度來處理。例如已定義一個實型變量例如已定義一個實型變量f,有如下語句:,有如下語句: f = 2.45678 * 4523.65 系統(tǒng)將系統(tǒng)將2.45678和和4523.65按雙精度數(shù)據(jù)存儲按雙精度數(shù)據(jù)存儲(占占64位位)和運算,得到一個雙精度的乘積,然后取前和運算,得到一個雙精度的乘積,然后取前7位賦位賦給實型變量給實
57、型變量f。這樣做可以保證計算結(jié)果更精確,但。這樣做可以保證計算結(jié)果更精確,但是運算速度降低了。可以在數(shù)的后面加字母是運算速度降低了。可以在數(shù)的后面加字母f或或f(如如1.65f, 654.87f),這樣編譯系統(tǒng)就會按單精度,這樣編譯系統(tǒng)就會按單精度(32位位)處理。一個實型常量可以賦給一個處理。一個實型常量可以賦給一個float型、型、double型型或或long double變量。根據(jù)變量的類型截取實型常量變量。根據(jù)變量的類型截取實型常量中相應(yīng)的有效位數(shù)字。假如中相應(yīng)的有效位數(shù)字。假如a已指定為單精度實型變已指定為單精度實型變量:量: float a; a=111111111; 由于由于fl
58、oat型變量只能接收型變量只能接收7位有效數(shù)字位有效數(shù)字,因此最,因此最后兩位小數(shù)不起作用。如果后兩位小數(shù)不起作用。如果a改為改為double型,則能全型,則能全部接收上述部接收上述9位數(shù)字并存儲在變量位數(shù)字并存儲在變量a中。中。3.5 字符型數(shù)據(jù)字符型數(shù)據(jù)3.5.1 字符常量字符常量 C的字符常量是用單引號的字符常量是用單引號(即撇號即撇號)括起來的一括起來的一個字符個字符。如。如a,x,d,?,等都是等都是字符常量。注意,字符常量。注意,a和和a是不同的字符常量。是不同的字符常量。 除了以上形式的字符常量外,除了以上形式的字符常量外,C還允許用一還允許用一種特殊形式的字符常量,就是種特殊形
59、式的字符常量,就是以一個以一個“”開頭的開頭的字符序列字符序列。例如,前面已經(jīng)遇到過的,在。例如,前面已經(jīng)遇到過的,在printf函函數(shù)中的數(shù)中的n,它代表一個,它代表一個“換行換行”符。這是一種符。這是一種“控制字符控制字符”,在屏幕上是不能顯示的。在程序,在屏幕上是不能顯示的。在程序中也無法用一個一般形式的字符表示,只能采用中也無法用一個一般形式的字符表示,只能采用特殊形式來表示。特殊形式來表示。例例2.5轉(zhuǎn)義字符的使用。轉(zhuǎn)義字符的使用。 ain() printf( ab ct derftgn); printf(htibbj k); 程序中沒有設(shè)字符變量,用程序中沒有設(shè)字符變量,用prin
60、tf函數(shù)直接輸出函數(shù)直接輸出雙引號內(nèi)的各個字符。雙引號內(nèi)的各個字符。 請注意其中的請注意其中的“轉(zhuǎn)義字符轉(zhuǎn)義字符”。第一個。第一個printf函數(shù)函數(shù)先在第一行左端開始輸出先在第一行左端開始輸出“ ab c”,然后遇到,然后遇到“t”,它的作用是,它的作用是“跳格跳格”,即跳到下一個,即跳到下一個“制制表位置表位置”,在我們所用系統(tǒng)中一個,在我們所用系統(tǒng)中一個“制表區(qū)制表區(qū)”占占8列。列。“下一制表位置下一制表位置”從第從第9列開始,故在第列開始,故在第911列上輸出列上輸出“de”。下面遇到下面遇到“r”,它代表,它代表“回車回車”(不換行不換行),返回到,返回到本行最左端本行最左端(第第1
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石化關(guān)聯(lián)單位管理制度
- 研發(fā)人員培訓(xùn)管理制度
- 藝人直播運營管理制度
- 空調(diào)清潔消毒管理制度
- 管理物料倉庫管理制度
- 空調(diào)系統(tǒng)節(jié)能管理制度
- 綠城物業(yè)設(shè)備管理制度
- 工廠油品庫管理制度
- 用電電器設(shè)備管理制度
- 職教基礎(chǔ)資料管理制度
- 2025寫字樓租賃定金合同的范本
- 浙江省杭州市北斗聯(lián)盟2024-2025學(xué)年高一下學(xué)期4月期中聯(lián)考地理試卷(含答案)
- 核醫(yī)學(xué)講課比賽技巧與策略
- 2025年貴州六盤水市燃氣集團六盤水燃氣有限公司招聘筆試參考題庫含答案解析
- 妊娠期子宮蛻膜息肉診治中國專家共識(2024年版)解讀課件
- 病毒性心肌炎病例分析與治療
- 幼兒園教育懲戒的邊界與藝術(shù)
- 交通安全與一氧化碳安全教育
- 2025年出版:全球市場工程機械多路換向閥總體規(guī)模、主要生產(chǎn)商、主要地區(qū)、產(chǎn)品和應(yīng)用細分調(diào)研報告
- 桶裝飲用水質(zhì)量檢查報告
- 寵物托運協(xié)議合同書
評論
0/150
提交評論