C++語言程序設(shè)計:第2章 數(shù)據(jù)類型、運算符和表達式_第1頁
C++語言程序設(shè)計:第2章 數(shù)據(jù)類型、運算符和表達式_第2頁
C++語言程序設(shè)計:第2章 數(shù)據(jù)類型、運算符和表達式_第3頁
C++語言程序設(shè)計:第2章 數(shù)據(jù)類型、運算符和表達式_第4頁
C++語言程序設(shè)計:第2章 數(shù)據(jù)類型、運算符和表達式_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、P1第2章 數(shù)據(jù)類型、運算符和表達式2.1 數(shù)據(jù)類型2.2 常量和變量2.3 運算符和表達式2.4 位運算2.5 運算符的優(yōu)先級2.6 格式化輸入輸出函數(shù)的進一步討論2.7 常見問題分析P22.1 數(shù)據(jù)類型在C+語言中,數(shù)據(jù)類型可分為 :C/C+沒有字符串類型,用字符數(shù)組表示字符串2P32.2 常量和變量2.2.1 常量(準確的稱作文字量/字面量)1.整型文字量:即整常數(shù)65535;0177777(65535) 10;0XFFFF=(65535) 10; 整型文字量的后綴(L/、H/h):長整型數(shù)加后綴“L”或“l(fā)” 。如:12345678902.浮點型文字量 :也稱為實型3.14 、 .0、

2、0.、1.23e-4、.234e+12 十進制格式八進制格式 十六進制格式后綴的作用P43. 字符型文字量:用單引號括起來的一個字符 。如:a 、C、 =、 +、 ?字符文字量的值:ASCII碼值(對應一個整數(shù))。 轉(zhuǎn)義字符: 以反斜線.開頭的特殊表示方式。如:a,n,x30用途:可以表示所有符號,如: 101和x41表示字母A ,n表示回車操作。 4. 字符串文字量:由一對雙引號括起的字符序列。如:“C+”串的特點:每個串文字量均在最后隱藏了0(字符串結(jié)束的標志)(稱作: NULL符,空字符,vs. 空格字符)A = = 65字母A的多種表示方法字母A的多種表示方法字母A的多種表示方法2P5

3、常用的轉(zhuǎn)義字符如下表所示: 轉(zhuǎn)義字符轉(zhuǎn)義字符的意義ASCII代碼 n回車換行 10 t橫向跳到下一制表位置 9 b退格 8 r回車 13 f走紙換頁 12 反斜線符() 92 單引號符() 39 “ 雙引號符(“) 34 a鳴鈴 7 0空字符(=NULL) ddd13位八進制數(shù)所代表的字符 xhh12位十六進制數(shù)所代表的字符b含義不同于b。注意: ,0常用注意: ,0常用P65. 符號常量 (宏):用途:含義清楚;能做到“一改全改”。 符號常量在使用之前必須先定義,其一般形式為: #define 符號常量標識符 值如:#define PI 3.14/C 的常量形式,無類型C+的常量:const

4、 double PI 3.14; /C+,有類型預處理命令#define宏替換不是語句,無分號“;”C+ const量2P7例2.2 采用宏定義的方式定義符號常量#include #define PI 3.14159 /定義符號常量PI,值為3.14159void main( ) double radius = 10.0; double perimeter; double area; perimeter = 2 * PI * radius; /使用符號常量 area = PI * radius *radius; /使用符號常量 printf(radius=%lf,perimeter=%lf,a

5、rea=%6.2lfn, radius,perimeter,area);輸出結(jié)果為:radius=10.000000,perimeter=62.831800,area=314.16%.0f10const double PI=3.14159; /C+中用有類型的const常量替代C的宏2P82.2.2 變量在程序執(zhí)行過程中,值可以改變的量稱為變量。變量要先定義再使用變量定義格式為: 存儲類型 數(shù)據(jù)類型 變量名列表 = 初值; 例:auto int a,b,c; float f, g=3.0;另外,一些約定俗成的規(guī)則:盡量見名知意。用戶最好不要用下劃線來作為變量名的開頭。 符號常量(宏)用大寫字母

6、,變量標識符可大小寫結(jié)合。變量定義的目的:通知編譯器在哪一塊內(nèi)存區(qū)分配多少字節(jié)內(nèi)存單元給變量變量要先定義再使用變量名的大小寫敏感case-sensitiveauto自動存儲類型2P91整型變量 在C+語言中,整型用int表示。根據(jù)整型數(shù)在存儲器中占用的字節(jié)數(shù),又可細分:short unsigned shortintunsigned longunsigned long 占內(nèi)存字節(jié)數(shù)滿足: unsigned short =unsigned int= unsigned long short = int = long 2.浮點型變量 float 單精度型4字節(jié) double 雙精度型8字節(jié) long

7、double 長雙精度型10字節(jié)3. 字符變量char unsigned char 字符變量就是一個字節(jié)的整型變量,二者兼容char ch=a ;可寫成char ch=97;int i=97;可寫成int i=a;2字節(jié):BC34字節(jié):VC6P102.3 運算符和表達式2.3.1 表達式2.3.2 算術(shù)運算符與算術(shù)表達式2.3.3 關(guān)系運算符與關(guān)系表達式2.3.4 邏輯運算符與邏輯表達式2.3.5 自增和自減運算 2.3.6 賦值運算符與賦值表達式2.3.7 條件運算符與條件表達式2.3.8 逗號運算符與逗號表達式P11“運算符”就是記述各種不同運算過程的符號。按運算對象的數(shù)目: 單目、雙目和

8、三目運算符;按照其功能: 算術(shù)、賦值、關(guān)系、邏輯、位運算符、+/- 條件運算、逗號等運算符2.3.1 表達式表達式是由運算符和運算量所組成運算量可以是變量、常量、有返回值的函數(shù)調(diào)用等。變量常量有返回值的函數(shù)調(diào)用P122.3.2 算術(shù)運算符與算術(shù)表達式C+語言中,算術(shù)運算符有5個,它們的具體含義見下表 :運算符使用形式含義 +單目或雙目運算符單目運算表示正號,雙目運算表示加法運算 -單目或雙目運算符單目運算表示求負,雙目運算表示減法運算 *雙目運算符乘法運算 /雙目運算符除法運算 %雙目運算符取模運算(求余數(shù))P13關(guān)于算術(shù)運算符的使用有以下規(guī)則:+、-、*、/運算符的運算量可為任何整型、字符型

9、或浮點型的量 在x/y中,運算量y的取值不能為0。(3) %運算符要求運算量必須是整型,且%后面的運算量不能為0。例如:3 % 5 結(jié)果為3-17 % 5 結(jié)果為-220 % 10 結(jié)果為0P14(4) 當雙目運算符的兩個運算量的類型相同時,它們的運算結(jié)果的類型與運算量類型相同。例如:17.5 + 2.5 結(jié)果為浮點型20.016 / 7 結(jié)果為整型2,小數(shù)部分被省去,稱為整除(5) 兩個運算量的類型不同時,運算前遵循類型的一般轉(zhuǎn)換規(guī)則將運算量自動轉(zhuǎn)換成相同的類型,運算結(jié)果的類型與轉(zhuǎn)換后的運算量的類型相同【例】: 15.5 + 5 操作數(shù)15.5的類型為實型,運算前將整型數(shù)5轉(zhuǎn)換成實型數(shù)5.0

10、,然后進行運算,結(jié)果為20.5【例】:16 / 5.0 結(jié)果為浮點型3.2 ,此為精確除2P15【說明】:在數(shù)學中恒等的表達式,在C+語言表達式中不一定恒等,如: 6/4*56*5/ 4。建議:在“/”運算符兩邊采用float、double數(shù)據(jù)(精確除) 下面的表達式隱含了危險,因為被0除: 18/(3/6) 18/((double)3/6) 或者:“/”兩邊的整數(shù)有一個在數(shù)尾加小數(shù)點,如:18/(3./6)為了減少計算誤差,常把乘法運算放在除法運算前面完成P16 在C+語言中,字符型、整型和浮點型數(shù)據(jù)可以在同一表達式中混合使用,C+語言編譯系統(tǒng)通過類型轉(zhuǎn)換實現(xiàn)類型統(tǒng)一。自動類型轉(zhuǎn)換應用的三種

11、場合:當雙目運算符的兩個運算量的類型不相同且進行算術(shù)運算時;(2) 當一個值賦予一個不同類型的變量時;(3) 函數(shù)調(diào)用,實參與形參類型不同時。在本節(jié)中僅介紹前兩種轉(zhuǎn)換,函數(shù)調(diào)用轉(zhuǎn)換將在本書的后面部分介紹。 2P171.算術(shù)運算時的自動類型轉(zhuǎn)換 它的基本規(guī)則可描述為:雙目運算符的兩個運算量中,值域較窄的類型向值域較寬的類型轉(zhuǎn)換。“值域”就是類型所能表示的值的最大范圍。算術(shù)轉(zhuǎn)換遵循的轉(zhuǎn)換方向如下圖所示:2P18下面兩點為必然轉(zhuǎn)換:表達式中的有符號和無符號字符以及短整型一律被轉(zhuǎn)換為整型int類型(2) 當算術(shù)運算中出現(xiàn)float類型時,首先將float轉(zhuǎn)成double類型。double ss = f

12、 * n + k / 2; float f = 3.6;int n = 6;long k = 21;doubleintdoubledoubledoublelonglongdouble*、/、%優(yōu)先級相同+、-優(yōu)先級相同前者優(yōu)先于后者3P192. 賦值運算時的自動類型轉(zhuǎn)換賦值運算格式: 左值變量 = 右值表達式賦值轉(zhuǎn)換將右值表達式結(jié)果的類型轉(zhuǎn)成左值表達式的數(shù)據(jù)類型,再將轉(zhuǎn)換后的結(jié)果寫入左值變量的內(nèi)存空間中;它不受算術(shù)轉(zhuǎn)換規(guī)則的約束,轉(zhuǎn)換結(jié)果的類型完全由左值變量的類型決定。例如:int i,j;float m;i = (m * j);類型轉(zhuǎn)換過程為:賦值運算符右側(cè)的表達式的值類型為double,經(jīng)

13、過賦值轉(zhuǎn)換變成int類型。其值也跟著改變以適應新類型。注意:表達式的值與其類型匹配,故值受限于類型;右值表達式類型轉(zhuǎn)換后,其結(jié)果也跟著變換。2P203 . 強制類型轉(zhuǎn)換(顯式) 強制類型轉(zhuǎn)換是用強制類型轉(zhuǎn)換運算符來實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的,因此強制類型轉(zhuǎn)換也叫做顯式轉(zhuǎn)換 。 強制類型轉(zhuǎn)換表達式形式為: (新類型) (表達式A)作用是將表達式A的值參與運算得到運算值,運算值類型為新類型。整體也是表達式,類型為新類型,值為轉(zhuǎn)換后的值2P21例如:float m,n(int)m 取出m的值參與(int)運算,得到中間結(jié)果值,該值的類型為int類型。注意:變量m本身類型和值都不變(int)m+n 表達式的結(jié)

14、果為double類型 需要注意的是,無論是自動類型轉(zhuǎn)換還是強制類型轉(zhuǎn)換,都只是看作運算符而已。參與運算的變量或常量的類型和值都不改變,改變的就是運算后的中間結(jié)果。 2P22 C語言中的關(guān)系運算符包括: (小于) =(大于或等于) (大于) != (不等于) 2.3.3 關(guān)系運算符與關(guān)系表達式關(guān)系表達式格式: 運算量 關(guān)系運算符 運算量運算量可以是任意表達式關(guān)系成立:值為整數(shù)1關(guān)系不成立:值為整數(shù)0P23 優(yōu)先級 、 = = 、 ! = 關(guān)系運算符與算術(shù)運算符和賦值運算符比較優(yōu)先級算術(shù)運算符關(guān)系運算符高低高低關(guān)系運算符的結(jié)合性左結(jié)合性 【例】 a=3,b=2,c=1;求:a b c 的值 第一步

15、:32關(guān)系成立,結(jié)果為1;第二步:11關(guān)系不成立,結(jié)果為0。同優(yōu)先級時考慮結(jié)合性2P24C語言中的邏輯運算符包括: &(邏輯與) | (邏輯或) ! (邏輯非)其中,邏輯與和邏輯或是雙目運算符,邏輯非是單目運算符。邏輯運算符及運算量按一定規(guī)則所構(gòu)成的表達式稱為邏輯表達式。 2.3.4 邏輯運算符與邏輯表達式P25C+的語法將參與邏輯運算的兩個運算分量解釋為邏輯量,但通常邏輯運算符兩邊的運算分量可以是普通表達式。因此,就需先將這些表達式的結(jié)果數(shù)值轉(zhuǎn)換為邏輯值“真”或“假”,再來進行邏輯運算。 邏輯運算分量對應的表達式轉(zhuǎn)換為邏輯量的規(guī)則:若運算分量的值為非0的任意數(shù),則為邏輯“真”;若運算分量的值

16、為0,則為邏輯“假”;邏輯運算的結(jié)果為整數(shù)值0或1: 邏輯“真”結(jié)果用1表示 邏輯“假”結(jié)果用0表示P26邏輯運算符的運算規(guī)則見下表 : 表達式X表達式Y(jié) !X !Y X&Y X|Y非0非0 0 0 11非00 0 1 01 0 非0 1 0 0100 1 1 00P27高低算術(shù)運算符關(guān)系運算符賦值運算符&|! + - -邏輯運算符的結(jié)合性:!右結(jié)合性&、|左結(jié)合性邏輯運算符與其它運算符比較優(yōu)先級:優(yōu)先級和結(jié)合性 ! & |高 低P28例2.6 邏輯運算符&的使用#include int main( ) int a , b , c , max; a = 10; b = 20; max = b;

17、 c = ( a b ) & ( max = a ) ; printf(a = %d , b = %d , c = %d , max = %dn,a,b,c,max); return 0; 運行結(jié)果為:a = 10 , b = 20 , c = 0 , max = 20 換成“=”,結(jié)果如何?a = 10 , b = 20 , c = 1 , max = 10=2P29 在數(shù)學中經(jīng)常有右邊的表達式:1=x=1 & x=9直接寫成1=x=9,結(jié)果如何?對C/C+來說是符合語法的,因為它是一個關(guān)系表達式,按左結(jié)合求解1=x,若x取值滿足條件則表達式結(jié)果為1,然后19時前面的關(guān)系表達式結(jié)果也為 “真

18、”。顯然,這種書寫方式不能起到對應的條件限制作用。2P30例: 判斷某個字符型變量c 的值是否數(shù)字字符,正確的寫法:if (c=0 & c=9) 若寫成:if ( 0=c= 0 & c= 9 0和0的區(qū)別整數(shù)和字符的區(qū)別P31【經(jīng)典示例】 d !=0 & n /d 0 (假設(shè)初始值:d=0)由于d !=0 關(guān)系不成立,邏輯量為“假”,因為邏輯“與”運算等效于乘法,即只要兩個運算分量中有一個為邏輯“假” ,則整個邏輯“與”運算就為“假”。 故而,本例中n/d -(a+)2.3.5 自增和自減運算P33前置運算:先變后用;用新值參與計算例如:x = 0 ; y = - x + x; 結(jié)果為x=-1

19、,y=-2 (2) 后置運算:先用后變;用舊值參與計算例如:x = 0 ; y = x- + x;結(jié)果為x = -1 , y =0;(3) 自增自減運算符只能作用于變量,不能用于常量和表達式以及函數(shù)調(diào)用。 p()P34void main ( ) int a , b , c ; a = b = c =1 ; printf (“ (1) %d n ” , +a | | + b &+c ) ; printf (“ (2) %d t %d t %d n ” , a , b , c ) ; printf (“ (3) %d n ” , +a & + b | |+c ) ; printf (“ (4) %

20、d t %d t %d n ” , a , b , c ) ; printf (“ (5) %d n ” , a | | b | | c ) ; printf (“ (6) %d t %d t %d n ” , a , b , c ) ; printf (“ (7) %d n ” , a & b & c ) ; printf (“ (8) %d t %d t %d n ” , a , b , c ) ; printf (“ (9) %d n ” , a | | b & c ) ; printf (“ (10) %d t %d t %d n ” , a , b , c ) ;結(jié)果輸出:1211(

21、)()()1321122101100000誤區(qū):優(yōu)先級高的運算符先運算4P351. 基本賦值運算“” 左值 = 右值表達式賦值表達式的值 等于表達式左值變量的值int i,jchar m,nfloat x,ydouble d2.3.6 賦值運算符與賦值表達式i = m nm n的結(jié)果為整型,無需轉(zhuǎn)換,直接將值賦給ii = j = 10 (考慮結(jié)合性-右結(jié)合)相當于i=(j=10),先將10賦給j,而括號中的賦值表達式(j=10)的值就是賦值后的 j 的值,再將其賦給i(考慮類型轉(zhuǎn)換)(考慮優(yōu)先級)d = m2P362. 復合賦值運算在賦值運算符“=”前加上其他運算符,便構(gòu)成了復合賦值運算符。C

22、語言中的復合賦值運算符共有10種:+=、-=、*=、/=、%=、&=、|=、=、=復合賦值表達式的形式為:左值op = 右值表達式等價于:左值=左值op右值表達式例如:i += j 等價于 i = i + jx *= y - 5 等價于 x = x * (y-5)m = 2 等價于 m = m b ) ? a : b) ; 將a , b中最大的數(shù)賦值給變量 maxmin = ( a b) ? a :(c d) ? c :d(a b) ? a :(c d)? c :d)若:a =1 , b = 2 , c = 3 , d = 4 ,則表達式值 = 4。條件表達式值的類型抉擇:xy?1:1.5,若

23、xy關(guān)系成立,則表達式結(jié)果?【規(guī)則】:表達式2和表達式3可以不同類型,此時條件表達式的值的類型為二者中較高的類型,上述表達式結(jié)果類型為 double類型2結(jié)果為1. 0P41附:在C+中有下面一條語法規(guī)則:在一個條件運算符的表達式中,如果后面兩個表達式的值類型相同,而且均可以作為左值,則該條件運算符的值是一個左值表達式。如: int x=5;long a , b;(x? a: b) =1;/ 注:若x為真,則a變量的值將被賦值為1(x? x: b) =2;/ x和 b 不是相同類型,條件運算符將作自動轉(zhuǎn)換,經(jīng)過轉(zhuǎn)換類型的表達式不能再作為左值。(x? a: 6.6) =3;/ 6.6不是左值第一

24、表達式可以為非左值的表達式,如:(x= =0?a:b) = 8;3P42逗號運算符構(gòu)成逗號表達式,結(jié)構(gòu)為: 表達式1 , 表達式2 , 表達式3, , 表達式n 運算過程為:先求表達式1的值,然后再求表達式2的值,依次計算下去,最后表達式n的值也就是該逗號表達式的值。例如:int b,a=10;/分隔符 b = a+ , a % 3 /逗號運算符 (順序計算運算符) 先求表達式1的值,結(jié)果為10,同時對a計算后綴+ ,此時a的值為11;然后求表達式2(a%3)的值,由于在計算表達式2之前,變量a的自增運算已經(jīng)完成,因而表達式2的值為2。這樣整個逗號表達式的值為2。2.3.8 逗號運算符與逗號表

25、達式2P43sizeof運算符1、格式:sizeof (類型名)2、含義:求某種數(shù)據(jù)類型的變量存儲空間的長度(以字節(jié)為單位)。該運算符是在編譯時執(zhí)行,而不是在程序執(zhí)行時進行運算。3、應用 類型名可以是C+語言的基本數(shù)據(jù)類型或者構(gòu)造數(shù)據(jù)類型(如:數(shù)組、指針、結(jié)構(gòu)、class類型等),如: sizeof ( struct student )int array7; sizeof(int 7) sizeof ( array ) sizeof ( int ); sizeof ( int * )sizeof(類型名)sizeof(變量名)P442.4 位運算2.4.1 按位與運算符“&”2.4.2 按位或

26、運算符“|”2.4.3 按位異或運算符“” 2.4.4 二進制左移運算符“”2.4.6 按位取反運算符“”P452.4.1 按位與運算符“&”按位與運算是對兩個操作數(shù)逐位求與,當它們都為1時,結(jié)果為1,否則為0。與運算符的定義如下表所示: 位1 位2 位1&位2 0 0 0 0 1 0 1 0 0 1 1 1例如:int a=0 x0096,b=0 x0080,則a&b的結(jié)果為0 x0080P46運算過程為:P472.4.2 按位或運算符“|”按位或運算是對兩個操作數(shù)逐位相或。當它們都是0的時候,結(jié)果為0,否則為1。下表為位邏輯或操作的“真值表” 位1 位2 位1|位2 0 0 0 0 1 1

27、 1 0 1 1 1 1P48運算過程為:例如:int a=0 x0036,b=0 x0055,則a | b的結(jié)果為0 x0077P492.4.3 按位異或運算符“”按位異或運算是將兩個操作數(shù)逐位相異或,當它們相異則結(jié)果為1,否則為0。下表為 位邏輯異或操作的“真值表” 位1 位2 位1位2 0 0 0 0 1 1 1 0 1 1 1 0P50運算過程為:從所得的結(jié)果看,某位要保持不變就和0異或,某位要取反就和1異或。 舉例關(guān)于兩個整型變量互相交換值3P512.4.4 二進制左移運算符“”二進制左移運算符把數(shù)據(jù)向左移動若干位,移出左邊界的所有位都將丟失,右側(cè)移入0。例如:int a = 4 ,

28、 a ”二進制右移運算符把數(shù)據(jù)向右移動若干位,移出右邊界的所有位都將丟失,左側(cè)的新位的補充遵循下面的規(guī)則:【例】變量a是無符號數(shù),a=8,其二進制表示為00001000,右移1位且左側(cè)新位補0后結(jié)果為00000100,所以a1的結(jié)果為4.由例子可知,向右移動一位相當于整除以一個21。 a4的結(jié)果為0(1) 對于無符號數(shù),右移時左側(cè)的新位一律補0,稱為“邏輯右移”(2) 對于有符號數(shù),若符號位是0,則左側(cè)新位一律補0;若符號位是1,則左側(cè)新位一律補1,稱為“算術(shù)右移” 又叫“符號位擴展”3P53【例】變量a是有符號數(shù),a=1,其二進制表示為:111111111右移1位且左側(cè)新位補1后結(jié)果為111

29、111111,所以a1的結(jié)果為1. ?a2的結(jié)果仍為1 (unsigned)a1的結(jié)果為2147483647(vc6)或32767(BC3)?P542.4.6 按位取反運算符“”按位取反運算符是將操作數(shù)進行逐位“取反”。例如:變量int a=0 x006a,二進制表示為00000000 01101010,按位取反后為11111111 10010101,所以a的結(jié)果為0 xff95。 注意運算量的位數(shù)!P552.5 運算符的優(yōu)先級和結(jié)合性小結(jié)一、優(yōu)先級當某個運算分量的兩邊均有運算符時,此時該運算分量將參與哪邊運算符的運算就要考慮運算符的優(yōu)先級,如: b+c * d中的c將和d一起參與乘法運算,然

30、后中間結(jié)果與b一起參與加法運算。下面給出一些解釋,它有助于掌握C 的運算符優(yōu)先原則:P563、基本運算符優(yōu)先級最高,在任何情況下“()”最優(yōu)先。1、所有運算符歸納為8層:基本運算符單目運算符 算術(shù)運算符關(guān)系運算符邏輯運算符 條件運算符賦值運算符逗號運算符;2、位運算符優(yōu)先級容易混淆,通常使用括號。除了移位運算符外,其它位運算符與邏輯運算符相鄰,但比邏輯運算符優(yōu)先級高,又比關(guān)系運算符低。4、單目運算符比二目、三目運算符優(yōu)先級高。5、算術(shù)運算符優(yōu)先級比關(guān)系運算符高。6、關(guān)系運算符優(yōu)先級比邏輯運算符高。移位運算符位邏輯運算符位反運算符3P577、條件運算符優(yōu)先級高于賦值運算符。8、賦值運算符優(yōu)先級低

31、于除逗號運算符以外的所有運算符。9、逗號運算符優(yōu)先級最低?;具\算符:( ) . 單目運算符:! + - - + (類型) * & sizeof( )算術(shù)運算符: * / % + 移位運算符:關(guān)系運算符: = = !=位運算符 :& |邏輯運算符:& | |條件運算符:?:賦值運算符:= += = *= /= %= = &= = |=逗號運算符,高低P58二、結(jié)合性 當運算分量兩邊的運算符是同優(yōu)先級時,這時就要考慮處于同優(yōu)先級的兩個運算符的結(jié)合性了,即運算分量將同哪一邊的運算符結(jié)合。 C 語言中同優(yōu)先級的運算符結(jié)合性不外乎兩種:左結(jié)合性、右結(jié)合性。絕大部分運算符是左結(jié)合性,只有賦值運算符、條件

32、運算符和單目運算符為右結(jié)合性。如:x=y=0; z += -x+ +y ;z += (-(x+) +y) ;+怎么解釋P592.6 格式化輸入輸出函數(shù)的進一步討論格式字符說明d以帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)o以八進制無符號形式輸出整數(shù)x,X以十六進制無符號形式輸出整數(shù),用x則輸出十六進制數(shù)的a-f時以小寫形式輸出.用X時,則以大寫字母輸出u以無符號十進制形式輸出整數(shù)c以字符形式輸出,只輸出一個字符s輸出字符串f以小數(shù)形式輸出單雙精度數(shù),隱含輸出6位小數(shù)e,E以指數(shù)形式輸出實數(shù),如用E,則輸出時,指數(shù)以大寫E表示(如1.2E+02)2.6.1.格式化輸出函數(shù)printf()回顧P

33、60在格式說明中,在%和上述格式字符間可以插入以下幾種附加符號(又稱修飾符)見下表: 字符 說明 字母(h)m.nm(代表一個正整數(shù))n(代表一個正整數(shù)) -3用于長(短)整型整數(shù),可加在格式符d,o,x,u前面L()用于實型數(shù)據(jù),float型(%f)double型(f) long double(%Lf) 最小輸出寬度(輸出顯示區(qū)域至少有m字符位,不足時常用空格補充)對實型數(shù)據(jù),表示輸出小數(shù)點后n位;對字符串,表示只顯示前面n個字符輸出的數(shù)字或字符在域內(nèi)向左靠;無-時,在域內(nèi)向右靠P61(1).整數(shù) %d, %md適用于int型printf(%3d,%3d,x,y);若x=12,y=12345

34、,則輸出結(jié)果為 12,12345 %d, %md適用于long型long int x=256790;printf(“%d”,x);/正確如將上面printf函數(shù)中的“%d”改為“%8d”,則輸出為: 256790printf(“%d”,x);/錯誤%uunsigned long%huunsigned short%hdshort%uunsigned int%xint(16進制表示)2P62(2) 字符串s格式符,用來輸出一個字符串。有幾種用法: %s,例如:printf(%s,CHINA);輸出“CHINA”字符串(屏幕顯示時沒有雙引號)。 %ms,%-ms,若串長小于m,則%ms在m列范圍內(nèi),

35、字符串向左靠,右補空格,%-ms左補空格。 %m.ns, %-m.ns,輸出字符串中左端n個字符【例】printf(%3s,%7.2s,%.4s,%- 5.3sn, HUST,HUST,HUST,HUST);輸出:HUST, HU,HUST,HUS P63(3) 浮點數(shù) %f,要求輸出小數(shù)點后6位小數(shù),不足6位常用0填充,等價于%.6f。 %m.nf,m含義同前面,要求顯示n位小數(shù)。 %-m.nf,與%m.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。 并非全部數(shù)字都是有效數(shù)字P64例 輸出實數(shù)時指定小數(shù)位數(shù)。#include void main( ) float x=357.987;

36、printf(%f ,%10f,%10.2f, %.2f %-10.2fn, x , x , x , x , x );輸出結(jié)果如下:357.987000,357.987000, 357.99,357.99 , 357.99 2P65 scanf格式字符表: 格式字符 說明 d要求輸入有符號的十進制整數(shù)沒有u o要求輸入無符號的八進制整數(shù) x, X要求輸入無符號的十六進制整數(shù)(大小寫作用相同) c要求輸入單個字符 s要求輸入字符串,在輸入時以空白字符開始,以一個空白字符結(jié)束。 f要求輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入2P66 scanf的附加格式說明字符表: 字符 說明 l用于輸入長整型數(shù)據(jù)

37、(可用%ld,%lo,%lx)以及double型數(shù)據(jù)(可用lf)longdouble(%Lf) h用于輸入短整型數(shù)據(jù)(可用%hd,%ho,%hx) 域?qū)抦(無.n)指定輸入數(shù)據(jù)所占寬度(列數(shù)),域?qū)拺獮檎麛?shù) *表示本輸入項在讀入后不賦給相應變量2 %c格式輸入時需要注意清除鍵盤緩沖區(qū)中剩下沒用的數(shù)據(jù),比如回車符如:scanf(“%d”,&i); scanf(“%c”,&ch);輸入8回車A回車,ch得不到字母A的ascii碼值改:scanf(“%d”,&i); fflush(stdin);/清空鍵盤 scanf(“%c”,%ch);P672.7 常見問題分析1. 數(shù)據(jù)的溢出問題數(shù)據(jù)有其固定的

38、表示范圍,因此當數(shù)據(jù)的值超出了其范圍時,將出現(xiàn)溢出問題。例2.9 整型數(shù)溢出 (BC+3.0)#include int main( ) int a,b; a=0 x7fff;/VC6平臺則取0 x7fffffff b = a + 1; printf(%d,%dn,a,b); return 0;在上面這段程序中,變量a的值為32767,它在內(nèi)存中的表示為:a:0111 1111 1111 1111當a加上1后,內(nèi)存中的表示為:1000 0000 0000 0000它的實際十進制值為 -32768,與我們希望的32768的值不符,這就是因為溢出問題而產(chǎn)生的錯誤,在程序編寫過程中需要注意避免。2P6

39、82. 無符號整數(shù)與有符號整數(shù)的混合運算問題例2.10 無符號整型數(shù)與有符號整型數(shù)混合運算出錯#include void main( ) int x = 1; unsigned int y = 2; printf(x - y = %d , (x - y)/2 = %d n,x - y , (x - y)/2);輸出結(jié)果為:x y = -1 , (x - y)/2 = 32767按照常理,我們認為(1 - 2)/2結(jié)果應該為-0.5,截去小數(shù)后,結(jié)果應為 -1,但事實上并非如此,而是得到結(jié)果32767。分析如下:P69變量x,y的值分別為1和2,它在內(nèi)存中的表示為:x: 0000 0000 0000 0001y

溫馨提示

  • 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

提交評論