c語言程序設(shè)計譚浩強ch2基本數(shù)據(jù)類型和表達式PPT學(xué)習教案_第1頁
c語言程序設(shè)計譚浩強ch2基本數(shù)據(jù)類型和表達式PPT學(xué)習教案_第2頁
c語言程序設(shè)計譚浩強ch2基本數(shù)據(jù)類型和表達式PPT學(xué)習教案_第3頁
c語言程序設(shè)計譚浩強ch2基本數(shù)據(jù)類型和表達式PPT學(xué)習教案_第4頁
c語言程序設(shè)計譚浩強ch2基本數(shù)據(jù)類型和表達式PPT學(xué)習教案_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、會計學(xué)1c語言程序設(shè)計譚浩強語言程序設(shè)計譚浩強ch2基本數(shù)據(jù)類型基本數(shù)據(jù)類型和表達式和表達式第1頁/共92頁2. 2.變量賦初值變量賦初值 2.7 2.7 各類數(shù)值型數(shù)據(jù)間的混合運算各類數(shù)值型數(shù)據(jù)間的混合運算 2.8 2.8 算術(shù)運算符和算術(shù)表達式算術(shù)運算符和算術(shù)表達式 2.9 2.9 賦值運算符和賦值表達式賦值運算符和賦值表達式 2.10 2.10 逗號運算符和逗號表達式逗號運算符和逗號表達式 第2頁/共92頁2021-9-264 數(shù)值的表示方法數(shù)值的表示方法原碼、反碼和補碼原碼、反碼和補碼 原碼:最高位為符號位,其余各位為數(shù)值原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值本身的絕對值 反

2、碼:反碼: 正數(shù):反碼與原碼相同正數(shù):反碼與原碼相同 負數(shù):符號位為負數(shù):符號位為1,其余位對原碼取反,其余位對原碼取反 補碼:補碼: 正數(shù):原碼、反碼、補碼相同正數(shù):原碼、反碼、補碼相同 負數(shù):最高位為負數(shù):最高位為1,其余位為原碼取反,其余位為原碼取反,再對整個數(shù)加,再對整個數(shù)加1第3頁/共92頁2021-9-265原碼反碼補碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍0111111111111111(-127+127

3、)0111111110000000(-127+127)0111111110000000(-128+127)(用一字節(jié)表示數(shù))(用一字節(jié)表示數(shù))純整數(shù)的補碼最小可以表示到純整數(shù)的補碼最小可以表示到2n 。這時在。這時在-2n中,符號位的中,符號位的1既表示符號既表示符號“”,也表示數(shù)值,也表示數(shù)值2n 。 若要一個負數(shù)變補碼若要一個負數(shù)變補碼,其方法是符號位置其方法是符號位置1,其余各位其余各位0變變1,1變變0,然然后在最末位上加后在最末位上加1 。負數(shù)補碼轉(zhuǎn)換成十進制數(shù):最高位不動,其余位取反加負數(shù)補碼轉(zhuǎn)換成十進制數(shù):最高位不動,其余位取反加1例例 補碼:補碼:11111001 取反:取反:

4、10000110 加加1: 10000111=-7第4頁/共92頁2021-9-266C語言提供了以下一些數(shù)據(jù)類型。 數(shù)據(jù)類型決定:1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù);2. 數(shù)據(jù)取值范圍;3. 其上可進行的操作第5頁/共92頁2021-9-2672.2.1 常量和符號常量常量和符號常量在程序運行過程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:整型 100,125,-100,0實型 3.14 , 0.125,-3.789字符型 a, b,2字符串 a, ab,1232直接常量第6頁/共92頁2021-9-268例例2.1 符號常量的使用符號常量的使用#define PRICE 30#include

5、void main ( ) int num, total; num=10; total=num * PRICE; printf(total=%dn,total); 用一個標識符代表一個常量。符號常量的值在其作用域內(nèi)不能改變,也不能再被賦值。 運行結(jié)果:運行結(jié)果: total=300total=300 程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進行運算如再用賦值語句給PRICE賦值是錯的 PRICE=40;/* 錯誤,不能給符號常量賦值第7頁/共92頁2021-9-2692.2.2變量變量 變量代表內(nèi)存中具有特定屬性的一個存

6、儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運行期間,這些值是可以改變的。 變量名實際上是一個以一個名字對應(yīng)代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。第8頁/共92頁2021-9-2610 變量命名的規(guī)定:語言規(guī)定標識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。 例:例:sum,_total, month, Student_name, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab 第9頁/共92頁2021

7、-9-2611 編譯系統(tǒng)將大寫字母和小寫字母認為是兩個不同的字符。 建議變量名的長度最好不要超過8個字符。 在選擇變量名和其它標識符時,應(yīng)注意做到“見名知意”,即選有含意的英文單詞 (或其縮寫)作標識符。 要求對所有用到的變量作強制定義,也就是“先定義,后使用” 。第10頁/共92頁2021-9-26122.3.1整型常量的表示方法整型常量的表示方法 整型常量即整常數(shù)。在語言中,整常數(shù)可用以下三種形式表示:(1)十進制整數(shù)。 如:如:123, -456, 4。(2)八進制整數(shù)。以0開頭的數(shù)是八進制數(shù)。 如:如:0123表示八進制數(shù)123,等于十進制數(shù)83,-011表示八進制數(shù)-11,即十進制數(shù)

8、-9。第11頁/共92頁2021-9-2613(3)十六進制整數(shù)。以0 x開頭的數(shù)是16進制數(shù)。 如:如:0 x123,代表16進制數(shù)123,等于十進制數(shù) 291。 -0 x12等于十進制數(shù)10。 2.3.2 整型變量整型變量 (1)(1)整型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進制形式存放的。 如如: : int i; /* 定義為整型變量 */ i=10; /* 給i賦以整數(shù)10 */ 第12頁/共92頁2021-9-2614 十進制數(shù)10的二進制形式為1010,Turbo C 2.0和Turbo C+ 3.0為一個整型變量在內(nèi)存中分配2個字節(jié)的存儲單元(不

9、同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC+ 6.0則分配4個字節(jié))。 數(shù)值是以補碼(complement) 表示的。 第13頁/共92頁2021-9-2615(2)(2)整型變量的分類整型變量的分類共六種共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int) 注意:注意:括號表示其中的內(nèi)容是可選的.第14頁/共92頁2021-9-2616 整數(shù)類型的有關(guān)數(shù)

10、據(jù):第15頁/共92頁2021-9-2617例如:整數(shù)13在內(nèi)存中實際存放的情況:第16頁/共92頁2021-9-2618(3)(3)整型變量的定義整型變量的定義: : 規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強制類型定義”。 例如例如: : int a,bint a,b(指定變量、為整型) unsigned short c,d;unsigned short c,d;(指定變量、為無符號短整型) long e,f;long e,f;(指定變量、為長整型)第17頁/共92頁2021-9-2619例例2.2 整型變量的定義與使用整型變量的定義與使用#include void main()

11、 int a,b,c,d; /*指定、為整型變量* unsigned ; *指定為無符號整型變量* 12;-24;10; ; printf(,); 可以看到不同種類的整型數(shù)據(jù)可以進行算術(shù)運算 運行結(jié)果:運行結(jié)果: , 第18頁/共92頁2021-9-2620例例2.3 整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出#include void main()int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b);數(shù)值是以補碼表示的。一個整型變量只能容納-3276832767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。運行結(jié)果:運行結(jié)果: 32

12、767,-3276832767,-32768第19頁/共92頁2021-9-2621 在C中,用高位置1來表示負數(shù),int型占兩個字節(jié)共16位,32768的二進制是10000000,00000000,高位為1,系統(tǒng)會認為是負數(shù),所以32768需要用長型表示,占四個字節(jié)。最高位就不是1了。(00000000,00000000,10000000,00000000) -32768在內(nèi)存中的表示是10000000,00000000。過程是:先讀入正值32768(10000000,00000000),再取反(01111111,11111111),再加1(10000000,00000000) 第20頁/共

13、92頁2021-9-2622第21頁/共92頁2021-9-2623第22頁/共92頁2021-9-26242.3.3 整型常量的類型整型常量的類型 (1)一個整數(shù),如果其值在-32768+32767范圍內(nèi),認為它是int型,它可以賦值給int型和long int型變量。 (2) 一個整數(shù),如果其值超過了上述范圍,而在-2147483637+2147483647范圍內(nèi),則認為它是為長整型??梢詫⑺x值給一個long int型變量。 第23頁/共92頁2021-9-2625(3) 如果所用的C版本(如Turbo C)分配給short int與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與i

14、nt型相同。因此一個int型的常量同時也是一個short int型常量,可以賦給int型或short int型變量。第24頁/共92頁2021-9-2626(4) 一個整常量后面加一個字母u或U,認為是unsigned int型,如12345u,在內(nèi)存中按unsigned int規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補碼53191,然后按無符號數(shù)存儲。第25頁/共92頁2021-9-2627Unsigned int 占2個字節(jié)(16位)。12345二進制-12345二進制(補碼)原:補:Unsigned:=53191第

15、26頁/共92頁2021-9-2628(5) 在一個整常量后面加一個字母l或L,則認為是long int型常量。 例如: 123l.432L.0L 用于函數(shù)調(diào)用中。 如果函數(shù)的形參為long int型,則要求實參也為long int型。第27頁/共92頁2021-9-26292.4.12.4.1浮點型常量的表示方法浮點型常量的表示方法兩種表兩種表示形式示形式小數(shù)小數(shù)指數(shù)指數(shù)0.1230.1233 3e-3e-3注意注意: :字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù) 第28頁/共92頁2021-9-2630規(guī)范化的指數(shù)形式:規(guī)范化的指數(shù)形式: 在字母e(或E)之前的小數(shù)部分中,小數(shù)

16、點左邊應(yīng)有一位(且只能有一位)非零的數(shù)字. 例如例如: : 123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e 其中的1.23456e21.23456e2稱為“規(guī)范化的指數(shù)形式”。第29頁/共92頁2021-9-26312.4.2 浮點型變量浮點型變量(1)(1)浮點型數(shù)據(jù)在內(nèi)存中的存放形式浮點型數(shù)據(jù)在內(nèi)存中的存放形式 一個浮點型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指

17、數(shù)部分采用規(guī)范化的指數(shù)形式。第30頁/共92頁2021-9-2632(2) (2) 浮點型變量的分類浮點型變量的分類 浮點型變量分為單精度(float型)、雙精度(double型)和長雙精度型(long double)三類形式。第31頁/共92頁2021-9-2633例例2.4 浮點型數(shù)據(jù)的舍入誤差浮點型數(shù)據(jù)的舍入誤差#include void main() float a,b; a = 123456.789e5; b = a + 20 ; printf(“%fn”,b); 一個浮點型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準確地表示該數(shù)。應(yīng)當避免將一個很大的數(shù)和一個很

18、小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)運行結(jié)果:運行結(jié)果: 123456.789e5123456.789e5第32頁/共92頁2021-9-26342.4.3 浮點型常量的類型浮點型常量的類型 C編譯系統(tǒng)將浮點型常量作為雙精度來處理。 例如例如:f = 2.45678 * 4523.65 系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進行相乘的運算,得到的乘也是一個雙精度數(shù)。最后取其前7位賦給浮點型變量f。如是在數(shù)的后面加字母f或F(如1.65f, 654.87F),這樣編譯系統(tǒng)就會把它們按單精度(32位)處理。第33頁/共92頁2021-9-26352.5.1 字符常量字符常

19、量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符a a, ,A A, , 1 1abcabc、“a a”第34頁/共92頁2021-9-2636 有些以有些以“ ”開頭的特殊字符稱為轉(zhuǎn)義字符開頭的特殊字符稱為轉(zhuǎn)義字符n 換行t 橫向跳格r 回車 反斜杠ddd ddd表示1到3位八進制數(shù)字xhh hh表示1到2位十六進制數(shù)字第35頁/共92頁2021-9-2637例例2.5 轉(zhuǎn)義字符的使用轉(zhuǎn)義字符的使用 打印機上的顯示結(jié)果:打印機上的顯示結(jié)果: fab c gde h jik第36頁/共92頁2021-9-26382.5.2字符變量字符變量 字符型變量用來存放字符常量,注意只能放

20、一個字符。 字符變量的定義形式如下:char c1,c2; 在本函數(shù)中可以用下面語句對c1,c2賦值: c1a;c2 b ; 一個字符變量在內(nèi)存中占一個字節(jié)。 第37頁/共92頁2021-9-26392.5.3 字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意: 一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。第38頁/共92頁2021-9-2640例例2.6 向字符變量賦以整數(shù)。向字符變量賦

21、以整數(shù)。#include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 在第和第4行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當于以下兩個賦值語句:c1;c2; 因為a和b的ASCII碼為97和98 運行結(jié)果:運行結(jié)果: 97 9897 98第39頁/共92頁2021-9-2641例例2.7 大小寫字母的轉(zhuǎn)換大小寫字母的轉(zhuǎn)換#include void main() char c1,c2; c1=a; c2=b;c1=c1-32;c2=c2-32; printf(

22、“c c,c1,c2); 程序的作用是將兩個小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從代碼表中可以看到每一個小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。語言允許字符數(shù)據(jù)與整數(shù)直接進行算術(shù)運算。 運行結(jié)果:運行結(jié)果: 第40頁/共92頁2021-9-2642 有些系統(tǒng)(如Turbo C)將字符變量定義為signed char型。其存儲單元中的最高位作為符號位,它的取值范圍是-128127。如果在字符變量中存放一個ASCII碼為0127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時,輸出的是一個正整數(shù)。如果在字符變量中存放一個ASCII碼為128255間的字符,由于在字節(jié)中最高位為1,用

23、%d格式符輸出時,就會得到一個負整數(shù)。 第41頁/共92頁2021-9-26432.5.4字符串常量字符串常量 字符串常量是一對雙撇號括起來的字符序列. 合法的字符串常量:“How do you do.”, “CHINA”, “a” , “$123.45” 可以輸出一個字符串,如printf(“How do you do.”);第42頁/共92頁2021-9-2644 是字符常量,”是字符串常量,二者不同。 如:如:假設(shè)被指定為字符變量 :char c c=a; ”a”;c”CHINA”; 結(jié)論:結(jié)論:不能把一個字符串常量賦給一個字符變量。第43頁/共92頁2021-9-2645規(guī)定:在每一個

24、字符串常量的結(jié)尾加一個 “字符串結(jié)束標志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。規(guī)定以字符作為字符串結(jié)束標志。 如:如:如果有一個字符串常量” ,實際上在內(nèi)存中是:CHINA0 它占內(nèi)存單元不是個字符,而是個字符,最后一個字符為。但在輸出時不輸出。第44頁/共92頁2021-9-2646字符串常量(1)語言允許在定義變量的同時使變量初始化如如: : int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點型變量,初值為.56 char c= a; / 指定為字符變量,初值為a 第45頁/共92頁2021-9-2647(2)可以使被定義的變量的一部分賦初值。 如如:

25、: int a,b,c=5; 表示指定、為整型變量,但只對初始化,c的初值為(3)如果對幾個變量賦以同一個初值, 應(yīng)寫成:int a=3,b=3,c=3; 表示、的初值都是。 不能寫成 int a=b=c=3; 注意:注意:初始化不是在編譯階段完成的而是在程序運行時執(zhí)行本函數(shù)時賦初值的,相當于有一個賦值語句。 第46頁/共92頁2021-9-2648混合運算:整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進行運算.說明: 這種類型轉(zhuǎn)換是由系統(tǒng)自動進行的。第47頁/共92頁2021-9-26492

26、.8.1 運算符簡介運算符簡介 的運算符有以下幾類:的運算符有以下幾類:(1)算術(shù)運算符 (+ - * / %)(2)關(guān)系運算符 (!)(3)邏輯運算符 (!|)(4)位運算符 ( |)(5)賦值運算符 (及其擴展賦值運算符)(6)條件運算符 (?:)(7)逗號運算符 (,)(8)指針運算符 (*和)(9)求字節(jié)數(shù)運算符()(10)強制類型轉(zhuǎn)換運算符( (類型) )(11)分量運算符(-)(12)下標運算符()(13)其他 (如函數(shù)調(diào)用運算符()第48頁/共92頁2021-9-26502.8.2 算術(shù)運算符和算術(shù)表達式算術(shù)運算符和算術(shù)表達式 (1)(1)基本的算術(shù)運算符基本的算術(shù)運算符: :

27、(加法運算符,或正值運算符。如:、) (減法運算符,或負值運算符。如:、)* * (乘法運算符。如:*) (除法運算符。如:) (模運算符,或稱求余運算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如:的值為)。第49頁/共92頁2021-9-2651(2) (2) 算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性基算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性基本的算術(shù)運算符本的算術(shù)運算符: : 用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達式。運算對象包括常量、變量、函數(shù)等。 例如例如: : *.5a 是一個合法的表達式第50頁/共92頁2021-9-2652 語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。

28、在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。 規(guī)定了各種運算符的結(jié)合方向(結(jié)合性) 算術(shù)運算符的結(jié)合方向為“自左至右”,即先左后右 。第51頁/共92頁2021-9-2653(3)(3)強制類型轉(zhuǎn)換運算符強制類型轉(zhuǎn)換運算符 可以利用強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需類型。 一般形式:(類型名)(表達式)例如:例如:(double) 將轉(zhuǎn)換成double類型(int)(x+y) 將x+y的值轉(zhuǎn)換成整型(float)(5%3) 將5%3的值轉(zhuǎn)換成float型第52頁/共92頁2021-9-2654例例2.8 強制類型轉(zhuǎn)換。強制類型轉(zhuǎn)換。#include void()

29、; ; ; (); printf(x=%f, i=%dn,x,i); 有兩種類型轉(zhuǎn)換,一種是在運算時不必用戶指定,系統(tǒng)自動進行的類型轉(zhuǎn)換,如3+6.5。第二種是強制類型轉(zhuǎn)換。當自動類型轉(zhuǎn)換不能實現(xiàn)目的時,可以用強制類型轉(zhuǎn)換。 運行結(jié)果:運行結(jié)果: x3.600000, i=3第53頁/共92頁2021-9-2655(4)(4) 自增、自減運算符自增、自減運算符 作用是使變量的值增或減如如: ,(在使用之前,先使的值加 (減),(在使用之后,使的值加( 減) 第54頁/共92頁2021-9-2656i+i+與與+i+i的區(qū)別:的區(qū)別: 是先執(zhí)行后,再使用的值; 是先使用的值后,再執(zhí)行。例如:例如

30、: ; i的值先變成4, 再賦給,j的值均為 ; 先將 i的值3賦給,的值為,然后變?yōu)榈?5頁/共92頁2021-9-2657注意:注意: (1)自增運算符(),自減運算符(),只能用于變量,而不能用于常量或表達式, (2)和的結(jié)合方向是“自右至左”。 自增(減)運算符常用于循環(huán)語句中使循環(huán)變量自動加。也用于指針變量,使指針指向下一個地址 第56頁/共92頁2021-9-2658(5) (5) 有關(guān)表達式使用中的問題說明有關(guān)表達式使用中的問題說明 ANSI C并沒有具體規(guī)定表達式中的子表達式的求值順序,允許各編譯系統(tǒng)自己安排。 例如:對表達式 a = f1( )+f2( ) 并不是所有的編譯系

31、統(tǒng)都先調(diào)用f1( ), 然后調(diào)用f2( )。在有的情況下結(jié)果可能不同。有時會出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹慎。 第57頁/共92頁2021-9-2659語言中有的運算符為一個字符,有的運算符由兩個字符組成 ,為避免誤解,最好采取大家都能理解的寫法。 例如:不要寫成i+j的形式,而應(yīng)寫成 (i+)+j的形式 第58頁/共92頁2021-9-2660在調(diào)用函數(shù)時,實參數(shù)的求值順序,標準并無統(tǒng)一規(guī)定。例如:例如:的初值為,如果有下面的函數(shù)調(diào)用: printf(,i+) 在有的系統(tǒng)中,從左至右求值,輸出“,”。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左,函數(shù)輸出的是“,”。以上這種寫法不

32、宜提倡, 最好改寫成 j = i+;j = i+; printf(%d printf(%d, %d%d, j j,i)i)不要寫出別人看不懂的也不知道系統(tǒng)會怎樣執(zhí)行程序第59頁/共92頁2021-9-2661(1)(1)賦值運算符賦值運算符 賦值符號“”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“”的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常量賦給變量。也可以將一個表達式的值賦給一個變量. 第60頁/共92頁2021-9-2662 (2) (2)類型轉(zhuǎn)換類型轉(zhuǎn)換 如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進行類型轉(zhuǎn)換。將浮點型數(shù)據(jù)(包括單、雙精度)賦給整型變

33、量時,舍棄浮點數(shù)的小數(shù)部分。如如: :為整型變量,執(zhí)行“i=3.56”的結(jié)果是使的值為,以整數(shù)形式存儲在整型變量中.第61頁/共92頁2021-9-2663 將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中 如如: : 將23賦給float變量,即執(zhí)行23,先將23轉(zhuǎn)換成2300000,再存儲在中。 將23賦給double型變量,即執(zhí)行23,系統(tǒng)將23補足有效位數(shù)字為2300000000000000,然后以雙精度浮點數(shù)形式存儲到變量中。 第62頁/共92頁2021-9-2664將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單

34、元(4個字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。 如如: :float f;double d=123.456789e100; f=d; 就出現(xiàn)溢出的錯誤。 如果將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,有效位數(shù)擴展到16位,在內(nèi)存中以8個字節(jié)存儲第63頁/共92頁2021-9-2665字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為個字節(jié),因此將字符數(shù)據(jù)(個二進位)放到整型變量存儲單元的低位中。第64頁/共92頁2021-9-2666第一種情況:低位對應(yīng)、高位補零低位對應(yīng)、高位補零 若所用系統(tǒng)將字符處理為無符號字符類型,或程序已將字符變量定義為unsigned char型

35、,則將字符的位放到整型變量低位,高位補零。例如:例如:將字符將字符376賦給賦給int型變量型變量第二種情況:符號擴展符號擴展 若所用系統(tǒng)(如Turbo C+)將字符處理為帶符號(signed char)時,若字符最高位為,則整型變量高位補;若字符最高位為,則高位全補。這稱為“符號擴展”,這樣做的目的是使數(shù)值保持不變,如變量(字符376)以整數(shù)形式輸出為,的值也是。第65頁/共92頁2021-9-2667將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。例如:例如:int i=289;char c=a;c=i;c的值為33,如

36、果用“%c”輸出c,將得到字符“!” !的ASCII碼為33。 賦值情況賦值情況 :第66頁/共92頁2021-9-2668 將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時,要進行符號擴展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號位為),則long型變量的高16位補;如果int型變量為負值(符號位為),則long型變量的高16位補,以保持數(shù)值不改變。 反之,若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截斷)。 第67頁/共92頁2021-9-2669例如:例如:int a;long b;a=b 賦值如賦值如

37、 :如果65536,則賦值后值為。第68頁/共92頁2021-9-2670將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴展問題,只需將高位補即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsigned int -int,unsigned long-long,unsigned short-short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。第69頁/共92頁2021-9-2671例如:例如:unsigned int 65535; int b

38、;;將整個送到中,由于是int,第位是符號位,因此b成了負數(shù)。根據(jù)補碼知識可知,的值為-1,可以用printf(%d,b);來驗證。 將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(符號位也作為數(shù)值一起傳送)。第70頁/共92頁2021-9-2672例例2.9 有符號數(shù)據(jù)傳送給無符號變量。有符號數(shù)據(jù)傳送給無符號變量。 #include void main() unsigned ; int ; ; print(n,); “%u”是輸出無符號數(shù)時所用的格式符。如果為正值,且在32767之間,則賦值后數(shù)值不變。運行結(jié)果:運行結(jié)果: 第71頁/共92頁2021-9-267

39、3 (3) (3) 復(fù)合的賦值運算符復(fù)合的賦值運算符 在賦值符“”之前加上其他運算符,可以構(gòu)成復(fù)合的運算符。例如例如: 等價于 * 等價于 *() 等價于 第72頁/共92頁2021-9-2674為便于記憶,可以這樣理解:為便于記憶,可以這樣理解: a += b (其中a為變量,b為表達式) a += b(將有下劃線的“a+”移到“=”右側(cè)) |_ a = a + b (在“=”左側(cè)補上變量名a) 注意注意: :如果是包含若干項的表達式,則相當于它有如果是包含若干項的表達式,則相當于它有 括號。括號。如:如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要錯寫成x

40、=x%y+3) 凡是二元(二目)運算符,都可以與賦值符一起組合成復(fù)合賦值符。 語言規(guī)定可以使用種復(fù)合賦值運算符:語言規(guī)定可以使用種復(fù)合賦值運算符:,* *,| | 第73頁/共92頁2021-9-2675(4) (4) 賦值表達式賦值表達式 由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。一般形式為一般形式為: 例如例如: “5”是一個賦值表達式 第74頁/共92頁2021-9-2676對賦值表達式求解的過程是:對賦值表達式求解的過程是: 求賦值運算符右側(cè)的“表達式”的值; 賦給賦值運算符左側(cè)的變量。例如例如: 賦值表達式“=3*5”的值為15,執(zhí)行表達式后,變量a的值也是

41、15。 注意注意: 一個表達式應(yīng)該有一個值一個表達式應(yīng)該有一個值 第75頁/共92頁2021-9-2677左值左值 (lvalue)(lvalue) : 賦值運算符左側(cè)的標識符變量可以作為左值;而表達式就不能作為左值(如a+b);賦值表達式可以;常變量也不能作為左值, 右值右值 (lvalue)(lvalue) :出現(xiàn)在賦值運算符右側(cè)的表達式 左值也可以出現(xiàn)在賦值運算符右側(cè),因而左值 都可以作為右值。第76頁/共92頁2021-9-2678 賦值表達式中的“表達式”,又可以是一個賦值表達式。例如例如: : a=(b=5) 分析分析: :括弧內(nèi)的“b=5”是一個賦值表達式,它的值等于5。執(zhí)行表達

42、式“a=(b=5)”相當于執(zhí)行“b=5”和“ab”兩個賦值表達式。 賦值運算符按照“自右而左”的結(jié)合順序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價。第77頁/共92頁2021-9-2679請分析下面的賦值表達式(a=3*5)=4*3分析分析: :先執(zhí)行括弧內(nèi)的運算,將15賦給a,然后執(zhí)行4*3的運算,得12,再把12賦給a。最后a的值為12,整個表達式的值為12。可以看到(a=3*5)出現(xiàn)在賦值運算符的左側(cè),因此賦值表達式(a=3*5)是左值 注意注意: :在對賦值表達式(a=3*5)求解后,變量a得到值15執(zhí)行(a=3*5)=4*3時,實際上是將4*3的

43、積12賦給變量a,而不是賦給3*5。不能寫成:a=3*5=4*3第78頁/共92頁2021-9-2680賦值表達式也可以包含復(fù)合的賦值運算符。 如:如:a+=a-=a*a;a初值為12分析分析: :此賦值表達式的求解步驟如下 先進行“*”的運算, 它相當于*,a的值為144132。再進行“”的運算,相當于=a+(-132),a的值為 132-132-264。第79頁/共92頁2021-9-2681 將賦值表達式作為表達式的一種,使賦值操將賦值表達式作為表達式的一種,使賦值操作作不僅不僅可以出現(xiàn)在賦值語句中,可以出現(xiàn)在賦值語句中,而且而且可以以可以以表達式形式出現(xiàn)在其他語句(如輸出語句、表達式形

44、式出現(xiàn)在其他語句(如輸出語句、循環(huán)語句等)中。循環(huán)語句等)中。 如:如:printf(%d,a=b); 分析分析: :如果b的值為3, 則輸出a的值(也是表達式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。第80頁/共92頁2021-9-2682逗號運算符逗號運算符: :將兩個表達式連接起來,又稱為“順序求值運算符” 如:如:5, 一般形式一般形式: : 表達式,表達式表達式,表達式求解過程:求解過程: 先求解表達式,再求解表達式。整個逗號表達式的值是表達式的值。 逗號表達式 的值為14第81頁/共92頁2021-9-2683例:例:逗號表達式*5,* 分析分析: :賦值運算符的優(yōu)先級別高于逗號運算符, 因此應(yīng)先求解*5。的值為5,然后求解*,得。整個逗號表達式的值為。 一個逗號表達式又可以與另一個表達式組成一一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式個新的逗號表達式 如如: :(*,*),a+5 先計算出的值等于,再進行*的運算得60(但值未變,仍為15),再進行得,即整個表達式的值為。第82頁/共92頁202

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論