版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第2章章 數(shù)據(jù)類型、運算符和表達式數(shù)據(jù)類型、運算符和表達式 ISBN 978-7-04-040404-3學習學習目標目標掌握掌握C語言的基本數(shù)據(jù)類型語言的基本數(shù)據(jù)類型掌握標識符、關鍵字、常量和變量的使用掌握標識符、關鍵字、常量和變量的使用掌握運算符、表達式以及數(shù)據(jù)類型之間的轉換等掌握運算符、表達式以及數(shù)據(jù)類型之間的轉換等掌握簡單數(shù)據(jù)的輸入輸出掌握簡單數(shù)據(jù)的輸入輸出 2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.1 數(shù)據(jù)類型概述數(shù)據(jù)類型概述2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.2 整數(shù)類型整數(shù)類型 整數(shù)類型簡稱整型,整型數(shù)據(jù)沒有小數(shù)部分。整數(shù)類型簡稱整型,整型數(shù)據(jù)沒有小數(shù)部分。 整型可分為:整型可分為:基本整型:
2、用基本整型:用int表示。表示。短整型:用短整型:用short int或或short表示。表示。長整型:用長整型:用long int或或long表示。表示。 2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.2 整數(shù)類型整數(shù)類型2.1.2 整數(shù)類型整數(shù)類型注意:注意:除了單個的除了單個的0是十進制常量外,其他以是十進制常量外,其他以0開始的都是八進制開始的都是八進制常量常量數(shù)據(jù)后加數(shù)據(jù)后加u或或U:表示是無符號類型,如:表示是無符號類型,如65535u、168U數(shù)據(jù)后加數(shù)據(jù)后加l或或L:表示是長整型,如:表示是長整型,如-1L八進制、十進制和十六進制只是整數(shù)的不同書寫形式,提八進制、十進制和十六進制只是整數(shù)的不
3、同書寫形式,提供多種寫法只是為了使用方便,我們可以根據(jù)需要選擇適供多種寫法只是為了使用方便,我們可以根據(jù)需要選擇適當?shù)臅鴮懛绞疆數(shù)臅鴮懛绞紺語言中不用二進制形式表示整數(shù)語言中不用二進制形式表示整數(shù)C語言中,八進制和十六進制數(shù)一般是無符號的語言中,八進制和十六進制數(shù)一般是無符號的整型常量整型常量十進制整型常量:同數(shù)學上的表示方法,如十進制整型常量:同數(shù)學上的表示方法,如168、-1、65535等。等。八進制整型常量:以八進制整型常量:以0開頭,由數(shù)字開頭,由數(shù)字07組成,如組成,如0101、-045等。等。十六進制整型常量:以十六進制整型常量:以0 x或或0X開頭的數(shù)字序列表示十六進開頭的數(shù)字序
4、列表示十六進制數(shù),如制數(shù),如0 x12, 整型常量整型常量以下是非法的整型常量:以下是非法的整型常量:09:0開頭應該是八進制,但開頭應該是八進制,但9不是合法的八進制數(shù)字。不是合法的八進制數(shù)字。0X6G:0X開頭應該是十六進制,但開頭應該是十六進制,但G不是合法的十六進不是合法的十六進制數(shù)字。制數(shù)字。以下是合法的整型常量:以下是合法的整型常量:00000101:八進制,相當于十進制的:八進制,相當于十進制的65。-012:八進制,相當于十進制的:八進制,相當于十進制的-10。65535LU:十進制,無符號長整型。:十進制,無符號長整型。0XFF:十六進制,相當于十進制的:十六進制,相當于十進
5、制的255。 整型常量整型常量注意注意:如要說明是無符號類型則在數(shù)據(jù)后加如要說明是無符號類型則在數(shù)據(jù)后加u或或U、如、如65535u、168U等。如果說明為長整型,則在數(shù)據(jù)后面加等。如果說明為長整型,則在數(shù)據(jù)后面加l或或L,如,如-1L。八進制、十進制和十六進制只是整數(shù)的不同書寫形式,提八進制、十進制和十六進制只是整數(shù)的不同書寫形式,提供多種寫法只是為了使用方便,我們可以根據(jù)需要選擇適供多種寫法只是為了使用方便,我們可以根據(jù)需要選擇適當?shù)臅鴮懛绞健.數(shù)臅鴮懛绞?。C語言中不用二進制形式表示整數(shù)。語言中不用二進制形式表示整數(shù)。C語言中,一般只使用無符號的八進制和十六進制數(shù),而語言中,一般只使用無符
6、號的八進制和十六進制數(shù),而不使用有符號的八進制和十六進制數(shù),因此沒有專門的無不使用有符號的八進制和十六進制數(shù),因此沒有專門的無符號八進制和十六進制標識符。符號八進制和十六進制標識符。2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.3 實型實型 實數(shù)類型簡稱實型,有時又稱浮點數(shù)據(jù)類型實數(shù)類型簡稱實型,有時又稱浮點數(shù)據(jù)類型 包括包括 :單精度浮點數(shù)類型:簡稱浮點類型,類型名為單精度浮點數(shù)類型:簡稱浮點類型,類型名為float。雙精度浮點數(shù)類型:簡稱雙精度類型,類型名為雙精度浮點數(shù)類型:簡稱雙精度類型,類型名為double。長雙精度類型:類型名為長雙精度類型:類型名為long double。 2.1 數(shù)據(jù)類型數(shù)據(jù)類
7、型2.1.3 實型實型實型常量實型常量實型常量只能用十進制形式表示實型常量只能用十進制形式表示 表示形式表示形式:小數(shù)形式。由數(shù)字序列和小數(shù)點組成,如小數(shù)形式。由數(shù)字序列和小數(shù)點組成,如3.1415926、-0.15、.15、2.等都是合法的實型常量。等都是合法的實型常量。指數(shù)形式。由十進制數(shù)加上階碼標志指數(shù)形式。由十進制數(shù)加上階碼標志“e”或或“E”及階碼及階碼組成,如組成,如3.14e-4或或3.14E-4表示表示3.1410-4。實型常量實型常量注意注意:字母字母e或或E之前的尾數(shù)部分必須有數(shù)字,例如之前的尾數(shù)部分必須有數(shù)字,例如E2是不合法的。是不合法的。e或或E后面的指數(shù)部分必須是整
8、數(shù),指數(shù)部分無整數(shù)或為小后面的指數(shù)部分必須是整數(shù),指數(shù)部分無整數(shù)或為小數(shù)均是錯誤的,例如數(shù)均是錯誤的,例如5e 和和5E-5.5均是不合法的表示。均是不合法的表示。C語言中,默認實型常量為語言中,默認實型常量為double類型,若有后綴類型,若有后綴“f”或或“F”,則為,則為float類型。類型。 有效數(shù)字有效數(shù)字【例例2-1】一個浮點數(shù)的精確度測試實驗一個浮點數(shù)的精確度測試實驗#include void main()float x=0.999969482421875;float y=0.99999999;printf(x=%.15fn,x); /* %.15f表示輸出表示輸出15小數(shù)小數(shù)
9、*/printf(y=%.8fn,y); 2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.4 字符型字符型字符類型的數(shù)據(jù)簡稱字符型數(shù)據(jù)字符類型的數(shù)據(jù)簡稱字符型數(shù)據(jù) C語言中用語言中用char表示,在內存中占一個字節(jié)。表示,在內存中占一個字節(jié)。 字符類型的數(shù)據(jù)包括計算機所用編碼字符集中的所有字符。字符類型的數(shù)據(jù)包括計算機所用編碼字符集中的所有字符。常用的常用的ASCII字符集,共字符集,共128個。擴展的個。擴展的ASCII字符集共字符集共256個字符。個字符。字符數(shù)據(jù)與整型數(shù)據(jù)是相似的字符數(shù)據(jù)與整型數(shù)據(jù)是相似的 (除了占用的存儲空間不(除了占用的存儲空間不同同 ) 2.1 數(shù)據(jù)類型數(shù)據(jù)類型2.1.4 字符型字
10、符型字符常量字符常量字符型常量是由一對單引號括起來的單個字符構成字符型常量是由一對單引號括起來的單個字符構成 例如例如A、b、8 字符字符AZ的的ASCII碼值是碼值是6590。 字符字符az的的ASCII碼值是碼值是97122。 字符字符09的的ASCII碼值是碼值是4857。 空格字符空格字符的的ASCII碼值是碼值是32。 轉義字符轉義字符字符串常量字符串常量字符串常量是由一對雙引號括起的字符序列,例如字符串常量是由一對雙引號括起的字符序列,例如“1234567”、“Hello World”等都是字符串常量。等都是字符串常量。123101共有共有5個字符占個字符占6個字節(jié),其中個字節(jié),其
11、中、101分別代表分別代表一個字符,輸出為一個字符,輸出為123A 2.2 標識符、符號常量與變量標識符、符號常量與變量 2.2.1 標識符標識符 所謂標識符是指程序中的變量、符號常量、數(shù)組、函數(shù)、所謂標識符是指程序中的變量、符號常量、數(shù)組、函數(shù)、類型、文件等對象的名字。類型、文件等對象的名字。 規(guī) 則說 明只能由下劃線、數(shù)字與字母構成,首個字符必須是字母或下劃線,而不能是數(shù)字或其他符號如:name、Name、score、_10注意C語言中對字母大小寫敏感不能使用系統(tǒng)的關鍵字(保留字)如:int、float、double等不建議使用系統(tǒng)預定義標識符如預編譯命令名(define、include)
12、、系統(tǒng)函數(shù)名(scanf、printf、getchar、putchar)盡量做到“見名知義”如:max、name等,而不用像abc、a1、a2等標識符避免使用易混字符如:1、l、i;0、o;2、z等2.2 標識符、符號常量與變量標識符、符號常量與變量關鍵字關鍵字 2.2 標識符、符號常量與變量標識符、符號常量與變量2.2.2 符號常量符號常量 【例例2-2】輸入圓的半徑,計算周長和面積輸入圓的半徑,計算周長和面積#define PI 3.14159void main() float r,c,s; scanf(%f,&r); c=2*PI*r; s=PI*r*r; printf(r=%f,c=%
13、f,s=%fn,r,c,s); 2.2 標識符、符號常量與變量標識符、符號常量與變量2.2.3 變量變量在程序運行過程中,其存儲的值可以被改變的量稱為在程序運行過程中,其存儲的值可以被改變的量稱為變量變量 變量變量必須通過必須通過標識符標識符進行說明,稱為進行說明,稱為變量名變量名。 變量名變量名和和內存單元內存單元地址存在映射關系,程序可以通過變量地址存在映射關系,程序可以通過變量名尋址,從而訪問其存儲的數(shù)據(jù)。名尋址,從而訪問其存儲的數(shù)據(jù)。 2.2 標識符、符號常量與變量標識符、符號常量與變量變量的定義和說明變量的定義和說明數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名1,變量名變量名2,變量名變量名n;
14、int i,j,k;float x;long a,b,c; 4個基本要素:名字、類型、初值和作用域個基本要素:名字、類型、初值和作用域 2.2 標識符、符號常量與變量標識符、符號常量與變量變量名變量名為標識符的一種。為標識符的一種。變量的變量的數(shù)據(jù)類型數(shù)據(jù)類型可以是基本數(shù)據(jù)類型,也可以是復雜數(shù)據(jù)類可以是基本數(shù)據(jù)類型,也可以是復雜數(shù)據(jù)類型。型。 變量的變量的作用域作用域是指變量在程序中有定義的范圍,即該變量名是指變量在程序中有定義的范圍,即該變量名在某段代碼區(qū)域是否有意義。在某段代碼區(qū)域是否有意義。 變量需要賦變量需要賦初值初值。沒有被賦值的變量其初值取決于存儲類型,。沒有被賦值的變量其初值取決
15、于存儲類型,靜態(tài)存儲的變量將自動為靜態(tài)存儲的變量將自動為0,否則被隨機初始化。,否則被隨機初始化。 2.2 標識符、符號常量與變量標識符、符號常量與變量變量賦初值的兩種方式變量賦初值的兩種方式 變量說明時直接賦初值,稱為變量的變量說明時直接賦初值,稱為變量的初始化初始化,如:,如:int a=10,b=9,c=6;float x=3.0,y=1.0,z=2.0;用賦值語句賦初值,如:用賦值語句賦初值,如:float x;x10.0;2.2 標識符、符號常量與變量標識符、符號常量與變量注意:注意:編譯系統(tǒng)將對每一個變量根據(jù)它被定義的類型分配相應的編譯系統(tǒng)將對每一個變量根據(jù)它被定義的類型分配相應的
16、存儲單元。變量存儲單元地址可用存儲單元。變量存儲單元地址可用“&變量名變量名”求得。求得??梢杂瞄L度運算符可以用長度運算符sizeof()求出任意類型變量存儲單元的字求出任意類型變量存儲單元的字節(jié)數(shù)。節(jié)數(shù)。編譯系統(tǒng)根據(jù)變量被定義的類型檢查該變量進行運算的合編譯系統(tǒng)根據(jù)變量被定義的類型檢查該變量進行運算的合法性。法性。如果沒有給變量賦初始值,普通變量將存儲如果沒有給變量賦初始值,普通變量將存儲隨機值隨機值,直到,直到給它賦值為止。給它賦值為止。 2.2 標識符、符號常量與變量標識符、符號常量與變量整型數(shù)據(jù)的存儲整型數(shù)據(jù)的存儲 C語言中的整型數(shù)據(jù)分為語言中的整型數(shù)據(jù)分為有符號有符號和和無符號無符號
17、兩大類兩大類 unsigned int a=65,b=65535; int a=65,b=32767,c=-1;2.2 標識符、符號常量與變量標識符、符號常量與變量補碼(補碼(complement)假設假設int型整數(shù)型整數(shù)a占占2字節(jié),字節(jié),16位二進制數(shù)位二進制數(shù) 2.2 標識符、符號常量與變量標識符、符號常量與變量2字節(jié)的字節(jié)的int型整數(shù)的補碼型整數(shù)的補碼2.2 標識符、符號常量與變量標識符、符號常量與變量負數(shù)的轉換步驟如下:負數(shù)的轉換步驟如下:32768取絕對值,如取絕對值,如|-32768| 等于等于32768216-|a|,如,如216-|-32768| 等于等于65536 32
18、768 等于等于 32768轉換成二進制,如轉換成二進制,如10000000 00000000(32768等于等于215) 2.2 標識符、符號常量與變量標識符、符號常量與變量補碼形式還原成十進制的步驟正好相反補碼形式還原成十進制的步驟正好相反 11111111 11111110轉換成十進制:轉換成十進制:65534216-65534 65536-65534 2加負號加負號 -22.2 標識符、符號常量與變量標識符、符號常量與變量實型數(shù)據(jù)的存儲實型數(shù)據(jù)的存儲 實型變量及實型數(shù)據(jù)的存儲實型變量及實型數(shù)據(jù)的存儲 為了擴大表示數(shù)的范圍,實型數(shù)據(jù)是按指數(shù)形式存儲的,存為了擴大表示數(shù)的范圍,實型數(shù)據(jù)是按
19、指數(shù)形式存儲的,存儲格式如下圖所示儲格式如下圖所示:字符數(shù)據(jù)的存儲與使用字符數(shù)據(jù)的存儲與使用01000001字符A的存儲【例例2-3】演示字符數(shù)據(jù)的存儲和引用演示字符數(shù)據(jù)的存儲和引用#include void main()char c;int i; c=A;i=c; printf(c =%d,c= %cn, c, c);printf(i =%d,i= %cn, i, i);c=c+32; printf(c=%cn,c);c=0 x80; printf(c=%c,c=%dn, c, c); 2.3 運算符與表達式運算符與表達式13類類45個運算符個運算符 優(yōu)先級運算符名稱結合方向1()括號,改變
20、優(yōu)先級從左至右 數(shù)組下標. 、-成員選擇運算符2+ 、-自增、自減運算符從右至左&取地址*取內容!邏輯求反按位求反+、正、負號(數(shù)據(jù)類型)強制轉換sizeof()計算數(shù)據(jù)類型長度2.3 運算符與表達式運算符與表達式3*、/、%乘法、除法、求余從左至右4+、-加、減5左移、右移6 、= 小于、小于等于、大于、大于等于7=、!=等于、不等于8&按位與9按位異或10|按位或11&邏輯與12|邏輯或13?:條件運算符從右至左14=、+=、-=、 *=、/=、%=、=、&=、=、|=賦值運算符從右至左15,逗號運算符從左至右學習運算符要注意以下幾方面問題學習運算符要注意以下幾方面問題運算符的功能運算符的
21、功能。運算符與操作對象即操作數(shù)運算符與操作對象即操作數(shù)(包括常量、變量、函數(shù)調用(包括常量、變量、函數(shù)調用等)等)的關系的關系:操作數(shù)的個數(shù)(單目、雙目、三目)。操作數(shù)的個數(shù)(單目、雙目、三目)。求操作數(shù)的類型(如求余運算符求操作數(shù)的類型(如求余運算符%要求操作數(shù)是整型)。要求操作數(shù)是整型)。結合方向結合方向運算符的優(yōu)先級運算符的優(yōu)先級。運算結果的數(shù)據(jù)類型運算結果的數(shù)據(jù)類型運算符連接操作數(shù)形成的式子叫運算符連接操作數(shù)形成的式子叫表達式表達式。2.3.1 算術運算符與算術表達式算術運算符與算術表達式1基本算術運算符基本算術運算符+(加)、(加)、-(減)、(減)、*(乘)、(乘)、/(除)、(除
22、)、%(取模,或(取模,或稱求余運算符)。稱求余運算符)。 雙目運算符,結合方向均為從左到右。雙目運算符,結合方向均為從左到右。%(取模)運算符僅用于整型變量或整型常量的運算,(取模)運算符僅用于整型變量或整型常量的運算,a%b結果為結果為a除以除以b的余數(shù),余數(shù)的符號與被除數(shù)相同,的余數(shù),余數(shù)的符號與被除數(shù)相同,如:如:7%3的值為的值為1;17%-3的結果為的結果為2;-19%4的結果為的結果為-3。+、-、*、/運算符的兩個操作數(shù)既可以是整數(shù),也可以運算符的兩個操作數(shù)既可以是整數(shù),也可以是實數(shù)。是實數(shù)。/(除法)運算符,當對兩個整型的數(shù)據(jù)相除時為整除操(除法)運算符,當對兩個整型的數(shù)據(jù)相
23、除時為整除操作作2基本算術表達式基本算術表達式2.3.1 算術運算符與算術表達式算術運算符與算術表達式3.自增自減運算符:自增自減運算符:+ 和和 單目運算符,右結合單目運算符,右結合作用對象必須是變量作用對象必須是變量 前綴運算前綴運算int i=5, j;j=+i; j等于等于6。 后綴運算后綴運算 int i=5, j;j=i+; j等于等于5。 2.3 運算符與表達式運算符與表達式【例例2-4】輸出下面程序中輸出下面程序中i、j的值。的值。#include void main()int i=5,j; j=+i + i+;printf(i=%d,j=%dn,i,j);i=5;j=(+i)
24、+(+i)+(i+); printf(i=%d,j=%dn,i,j);i=5; printf(i+=%d,i+=%dn,i+,i+); printf(i=%dn,i);i=5;printf(+i=%d,+i=%dn,+i,+i); printf(i=%dn,i);i=5;j=6;printf(i+j=%d,j+=%dn,i+j,j+);printf(i=%d,j=%dn,i,j);i=5;j=6; printf(i+j=%d,j+=%dn,i+j,+j);printf(i=%d,j=%dn,i,j);2.3 運算符與表達式運算符與表達式說明:說明:左邊是左邊是TC下的運行結果,右邊是下的運行結
25、果,右邊是VC下的運行結果。下的運行結果。二者不同之處在于二者不同之處在于printf函數(shù)輸出時,函數(shù)輸出時,VC下后面參數(shù)的后下后面參數(shù)的后綴綴j+、i+是在所有參數(shù)處理完畢后才起作用,而是在所有參數(shù)處理完畢后才起作用,而TC下,下,后綴的自增和自減將影響到該參數(shù)前面的參數(shù)處理。后綴的自增和自減將影響到該參數(shù)前面的參數(shù)處理。 2.3 運算符與表達式運算符與表達式2.3.2 算術表達式的書寫算術表達式的書寫 2bb4ac2a 2) 1( nnn*(n+1)/22+sqrt(1.0+a)*b+/22+sqrt(4.0)*b+/22+2.0*2/22+4.0/22+2.04.0 (-b+sqrt(
26、b*b-4*a*c) / (2*a) 2.3 運算符與表達式運算符與表達式2.3.3 賦值運算符與賦值表達式賦值運算符與賦值表達式 變量變量 = 表達式表達式 “=”是賦值運算符,不同于等號(等號是是賦值運算符,不同于等號(等號是=)。)。右結合右結合int a,b;a=b=100;連續(xù)賦值,只有最后一步有效。例如:連續(xù)賦值,只有最后一步有效。例如:int a;a=100;a=200;賦值運算符的優(yōu)先級較低(只高于逗號運算符),因此一般情況下賦值運算符的優(yōu)先級較低(只高于逗號運算符),因此一般情況下表達式無須加括號。例如:表達式無須加括號。例如:a=2+5/3 相當于:相當于:a=(2+5/3
27、)賦值運算可以構成一個表達式,其值可以再賦給其他變量。例如:賦值運算可以構成一個表達式,其值可以再賦給其他變量。例如:a=b=100;其實相當于:其實相當于: a=(b=100); 2.3 運算符與表達式運算符與表達式復合賦值運算符復合賦值運算符 +=、-=、*=、/=、%=、&=、= 、|=a+=100;等價于等價于a=a+100;a*=b;等價于等價于a=a*b;簡化程序,使程序精練;簡化程序,使程序精練;提高編譯效率,產生質量較高的目標代碼。提高編譯效率,產生質量較高的目標代碼。 2.3 運算符與表達式運算符與表達式2.3.4 逗號運算符與逗號表達式逗號運算符與逗號表達式 (表達式表達式
28、1),(表達式表達式2),(表達式表達式3),(表達式表達式n)表達式表達式n的值就是整個逗號表達式的值。的值就是整個逗號表達式的值?!纠纠?-5】演示逗號表達式。演示逗號表達式。#include void main()int a;printf(1+2+3+4+5 =%dn, (a=1,a=a+2,a=a+3,a=a+4,a=a+5) );printf(a=%dn,a); 2.3 運算符與表達式運算符與表達式2.3.5 強制類型轉換(顯式轉換)運算符:(類型)強制類型轉換(顯式轉換)運算符:(類型) 例如:例如:(double)a (int)(x+y) (float)5/3 表達式一定要加括
29、號(因強制類型轉換是單目運算,優(yōu)先表達式一定要加括號(因強制類型轉換是單目運算,優(yōu)先級高),例如上面最后一個表達式中只是將級高),例如上面最后一個表達式中只是將5轉變成轉變成float型,而不是將型,而不是將5/3轉變成轉變成float型。型。若對變量實型顯式轉換,將得到新類型的一個值,原變量若對變量實型顯式轉換,將得到新類型的一個值,原變量的類型及其存儲值均不變。的類型及其存儲值均不變。2.3 運算符與表達式運算符與表達式演示強制類型轉換。演示強制類型轉換。#include void main()int i;float f;f=3.1415926;printf(i=%d,f=%fn,i,f)
30、;i=(int) f; printf(i=%dn,i);f=5/3;printf(f=%fn,f);f=(float)5/3;printf(f=%fn,f);printf(f=%dn,f); /*實數(shù)按整型數(shù)方式輸出實數(shù)按整型數(shù)方式輸出*/printf(i=%fn,i); /*整型按實數(shù)方式輸出整型按實數(shù)方式輸出*/2.4 數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換2.4.1 類型轉換概述類型轉換概述 不同類型數(shù)據(jù)的存儲長度和存儲方式不同,一般不能直接不同類型數(shù)據(jù)的存儲長度和存儲方式不同,一般不能直接混合運算。為了提高編程效率,增加應用的靈活性,混合運算。為了提高編程效率,增加應用的靈活性,C語語言允許不同數(shù)據(jù)
31、類型相互轉換。言允許不同數(shù)據(jù)類型相互轉換。不同數(shù)據(jù)類型的差異不同數(shù)據(jù)類型的差異double比比float高級。高級。實數(shù)比整數(shù)高級。實數(shù)比整數(shù)高級。整數(shù)中長的比短的高級,如:整數(shù)中長的比短的高級,如:longintshortchar無符號(無符號(unsigned)比有符號()比有符號(signed)高級)高級2.4 數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換產生的效果數(shù)據(jù)類型轉換產生的效果 數(shù)據(jù)類型級別數(shù)據(jù)類型級別的提升與降低的提升與降低 符號位符號位擴展與零擴展擴展與零擴展 截去高位產生截去高位產生數(shù)值的變化數(shù)值的變化 丟失丟失精度精度 實數(shù)轉換成整數(shù)時,由于截去小數(shù)將丟失精度。實數(shù)轉換成整數(shù)時
32、,由于截去小數(shù)將丟失精度。double型轉換成型轉換成float型時,有效數(shù)字減少(四舍五入),型時,有效數(shù)字減少(四舍五入),精度丟失。精度丟失。long型轉換成型轉換成float型時,由原來可達型時,由原來可達10位整數(shù)變成只有位整數(shù)變成只有7位有效數(shù)字,精度丟失,但由于數(shù)的范圍擴大了,數(shù)據(jù)位有效數(shù)字,精度丟失,但由于數(shù)的范圍擴大了,數(shù)據(jù)類型從較低級提升到較高級類型從較低級提升到較高級 2.4 數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換 自動類型轉換自動類型轉換 float在運算時自動轉換成在運算時自動轉換成double。char和和short在運算時自動轉換成在運算時自動轉換成int。int和和unsig
33、ned混合運算時,將混合運算時,將int轉換成轉換成unsigned數(shù)據(jù)。數(shù)據(jù)。int或或unsigned與與long混合運算時,都轉換成混合運算時,都轉換成long數(shù)據(jù)。數(shù)據(jù)。int、unsigned、long與浮點型數(shù)據(jù)混合運算時,都轉換與浮點型數(shù)據(jù)混合運算時,都轉換成成double 自動類型轉換規(guī)則自動類型轉換規(guī)則2.4 數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換2.4.3 賦值類型轉換賦值類型轉換 賦值運算時,如果賦值運算符兩側的類型(指基本類型)賦值運算時,如果賦值運算符兩側的類型(指基本類型)不一致,系統(tǒng)自動將表達式的值轉換成變量的類型存到變不一致,系統(tǒng)自動將表達式的值轉換成變量的類型存到變量的存儲
34、單元中量的存儲單元中 整型整型數(shù)據(jù)賦給數(shù)據(jù)賦給實型實型變量時,數(shù)值上不發(fā)生任何變化。如:變量時,數(shù)值上不發(fā)生任何變化。如:float f; f=100;實型實型數(shù)據(jù)賦給數(shù)據(jù)賦給整型整型變量時,小數(shù)部分將被舍棄。如:變量時,小數(shù)部分將被舍棄。如:int a = 3.1415; /*內存中變量內存中變量a的值為的值為3*/短短的的有有符號整型數(shù)據(jù)賦給符號整型數(shù)據(jù)賦給長長整型變量時,需要進行整型變量時,需要進行符號位符號位擴展擴展。短短的的無無符號的整型數(shù)據(jù)賦給符號的整型數(shù)據(jù)賦給長長整型變量時,需要進行整型變量時,需要進行0擴擴展展。2.4 數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換2.4.3 賦值類型轉換賦值類型轉
35、換 長長整型數(shù)據(jù)賦給整型數(shù)據(jù)賦給短短的整型變量時,有可能溢出。如:的整型變量時,有可能溢出。如:char c= 321; 溢出后溢出后c的值為的值為A。同長度同長度有有符號整型數(shù)據(jù)賦給符號整型數(shù)據(jù)賦給無無符號整型變量時,數(shù)據(jù)將符號整型變量時,數(shù)據(jù)將失失去去符號位功能。如:符號位功能。如:unsigned char c = -1;則則c的值為的值為255。同長度同長度無無符號整型數(shù)據(jù)賦給符號整型數(shù)據(jù)賦給有有符號整型變量時,數(shù)據(jù)將符號整型變量時,數(shù)據(jù)將得得到到符號位功能。如對于符號位功能。如對于16位位int:int i=65535u;2.4 數(shù)據(jù)類型轉換數(shù)據(jù)類型轉換2.4.4 強制類型轉換強制類
36、型轉換 強制類型轉換的格式為:強制類型轉換的格式為:(類型名類型名) (表達式表達式)強制類型轉換用于不能自動轉換的情況。例如:強制類型轉換用于不能自動轉換的情況。例如:(int) 5.0%3 /*實型數(shù)據(jù)求余運算實型數(shù)據(jù)求余運算*/(int) (f+0.5) /*第一位小數(shù)的四舍五入算法第一位小數(shù)的四舍五入算法 */(int) (f*10+0.5) / 10.0 /*第二位小數(shù)的四舍五入算法第二位小數(shù)的四舍五入算法 */ 【例例2-6】演示強制類型轉換演示強制類型轉換#include void main()int i=5;float f; f=3.1415926;printf(i=%d,f=
37、%fn,i,f);i=(int) f; printf(i=%dn,i);f=5/3;printf(f=%fn,f);f=(float)5/3;printf(f=%fn,f);printf(f=%dn,f); /*實數(shù)按整型數(shù)方式輸出實數(shù)按整型數(shù)方式輸出*/printf(i=%fn,i); /*整型按實數(shù)方式輸出整型按實數(shù)方式輸出*/ 2.5 數(shù)據(jù)的溢出與誤差數(shù)據(jù)的溢出與誤差 2.5.1數(shù)據(jù)的溢出數(shù)據(jù)的溢出如圖,將如圖,將大杯的水倒入小杯,有兩種可能性:大杯的水倒入小杯,有兩種可能性:小杯沒倒?jié)M或剛好滿,水沒有溢出小杯沒倒?jié)M或剛好滿,水沒有溢出小杯滿了,其余的水溢出小杯滿了,其余的水溢出char
38、 c=127; c = c+1; 【例例2-7】演示數(shù)據(jù)的溢出演示數(shù)據(jù)的溢出#include void main()char c=127;long li=2147483647;unsigned uc;unsigned long uli;printf(c=%d, li=%ldn, c,li);c=c+1; li=li+1; printf(c=%d, li=%ldn, c,li);c=127+100;li=2147483647+100;printf(c=%d, li=%ldn, c,li);uc=127+100;uli=2147483647+100;printf(uc=%d, uli=%ldn,
39、uc,uli);printf(uc=%u, uli=%lun, uc,uli);2.5 數(shù)據(jù)的溢出與誤差數(shù)據(jù)的溢出與誤差2.5.2實型數(shù)據(jù)的誤差實型數(shù)據(jù)的誤差整數(shù)整數(shù)存儲除了溢出以外是沒有誤差的。存儲除了溢出以外是沒有誤差的。實型數(shù)據(jù)實型數(shù)據(jù)由于是用有限的存儲單元存儲較大范圍的實型數(shù),由于是用有限的存儲單元存儲較大范圍的實型數(shù),有效數(shù)字是有尾數(shù)限制的,在實際計算和引用中會有很多有效數(shù)字是有尾數(shù)限制的,在實際計算和引用中會有很多問題。問題。 【例例2-8】演示實型數(shù)據(jù)的誤差演示實型數(shù)據(jù)的誤差 #include void main()float x, y;x = 12345678900000000
40、00.0;y = x + 0.12345;/*大數(shù)加上一個小數(shù),小數(shù)被忽略大數(shù)加上一個小數(shù),小數(shù)被忽略*/printf(x=%f, y=%fn, x, y);x = 3.1415926;y = x - 0.0001;/*小數(shù)的有效位加小數(shù)的有效位加1有效有效*/printf(x=%.3f, y=%.3fn, x, y);y = x + 0.0000005;/*小數(shù)的無效位加小數(shù)的無效位加1也無效也無效*/printf(x=%.7f, y=%.7fn, x, y); 2.6 案例:一樣的案例:一樣的A,不一樣的輸出方式,不一樣的輸出方式 #include #define CA A/*定義一個符號
41、常量定義一個符號常量CA*/void main()char c=A;printf(%c,A);/*直接輸出字符直接輸出字符A*/printf(%c,c);/*輸出變量輸出變量c*/printf(%c,101);/*八進制轉義字符形式八進制轉義字符形式*/printf(%c,x41);/*十六進制轉義字符形式十六進制轉義字符形式*/printf(%c,0101);/*八進制整型數(shù)八進制整型數(shù)0101以字符形式輸出以字符形式輸出*/printf(%c,0 x41);/*十六進制整型數(shù)十六進制整型數(shù)0 x41以字符形式輸出以字符形式輸出*/printf(%c,0X41);/*十六進制整型數(shù)十六進制整
42、型數(shù)0X41以字符形式輸出以字符形式輸出*/printf(%c,65);/*十進制整型數(shù)十進制整型數(shù)65以字符形式輸出以字符形式輸出*/printf(%c,a-32);/*小寫字母小寫字母a轉換成大寫字母后輸出轉換成大寫字母后輸出*/printf(%c,CA);/*宏定義的符號常量宏定義的符號常量CA按字符方式輸出按字符方式輸出*/printf(n);/*輸出換行符輸出換行符n*/ 2.8 案例:時間的換算案例:時間的換算【例例2-11】以秒作為單位輸入時間,計算其相當于多少小時以秒作為單位輸入時間,計算其相當于多少小時多少分鐘多少秒?多少分鐘多少秒?#include void main()l
43、ong intTotalTime;int intHour,intMinute,intSecond;printf(Please input intTotalTime:);scanf(%d,&intTotalTime);intHour = intTotalTime /3600;intMinute =(intTotalTime - intHour*3600) /60;intSecond = intTotalTime - intHour*3600 - intMinute*60;printf(HH:MM:SS = %02d:%02d:%02dn,intHour,intMinute,intSecond);本章本章小結小結C語言的數(shù)據(jù)類型。語言的數(shù)據(jù)類型。C語言的數(shù)據(jù)類型有語言的數(shù)據(jù)類型有4類:基本類型、構造類型、指針類型和空類型。類:基本類型、構造類型、指針類型和空類型?;緮?shù)據(jù)類型包括整型、實型、字符型基本數(shù)據(jù)類型包括整型、實型、字符型3種。它們的表示方法、數(shù)據(jù)種。它們的表示方法、數(shù)據(jù)的取值范圍等各有特點。的取值范圍等各有特點。常量和變量。常量和變量。常量指在程序運行中其值不能被改變的量,包括整數(shù)、長整數(shù)、無符常量指在程序運行中其值不能被改變的量,包括整數(shù)、長整數(shù)、無符號整數(shù)、浮點數(shù)、字符、字符串、符號常量等。其中特別要注意字符號整數(shù)、浮點數(shù)、字符、字符串、符號
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年簡化版居家養(yǎng)老照護合同
- 2024甲方委托乙方可再生能源項目的建設與運營合同
- 2024年重點中學校長任用合同范本3篇
- 2025年度家禽養(yǎng)殖廢棄物處理設施運營管理買賣合同書3篇
- 2025年度財務會計軟件定制開發(fā)與授權使用合同3篇
- 2024年度商鋪租賃合同提前解除及清退協(xié)議3篇
- 2025年70米煙囪拆除工程風險評估與安全防護設計合同3篇
- 2024年經(jīng)銷商雙方合作協(xié)議版B版
- 2024年項目管理服務協(xié)議:工程監(jiān)理與咨詢服務
- 2024年財務風險評估與管理合同
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學院單招職業(yè)適應性測試題庫參考答案
- 中國農業(yè)銀行信用借款合同
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應用實踐指導材料之9:“5領導作用-5.3創(chuàng)新戰(zhàn)略”(雷澤佳編制-2025B0)
- 江蘇省連云港市2023-2024學年八年級上學期期末數(shù)學試題(原卷版)
- 初中英語聽力高頻詞
- 2025年生活飲用水監(jiān)督檢查工作計劃
- Unit 3 My School Section B 1a-1d 教學實錄 2024-2025學年人教版七年級上冊英語
- 2024年度知識產權許可合同:萬達商業(yè)廣場商標使用許可合同3篇
- 服務營銷課件-課件
- 一年級期末數(shù)學家長會課件
- 2024智能變電站新一代集控站設備監(jiān)控系統(tǒng)技術規(guī)范部分
評論
0/150
提交評論