《程序設計基礎:C語言》4ppt課件_第1頁
《程序設計基礎:C語言》4ppt課件_第2頁
《程序設計基礎:C語言》4ppt課件_第3頁
《程序設計基礎:C語言》4ppt課件_第4頁
《程序設計基礎:C語言》4ppt課件_第5頁
已閱讀5頁,還剩56頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2021/20212021/2021第二學期第二學期C C言語課程組言語課程組上一章知識復習上一章知識復習v講述了實踐問題向計算機程序轉化的過程。講述了實踐問題向計算機程序轉化的過程。v講述了數據在計算機內部的存儲方式。講述了數據在計算機內部的存儲方式。v講述了數據類型的種類和區別。講述了數據類型的種類和區別。v講述了變量的聲明和命名規那么。講述了變量的聲明和命名規那么。v講述了常量和字面值的區別。重點了解字面值是講述了常量和字面值的區別。重點了解字面值是有類型的。有類型的。v講述了輸入及輸出函數的用法。講述了輸入及輸出函數的用法。本講教學目的本講教學目的v了解左值及右值。了解左值及右值。v掌

2、握運算符的種類、重點掌握運算符優先級。掌握運算符的種類、重點掌握運算符優先級。v熟習各種運算符的功能及相關表達式的求值方法。熟習各種運算符的功能及相關表達式的求值方法。v了解了解sizeof運算符。運算符。v了解表達式副作用。了解表達式副作用。v掌握顯式類型轉換的方法,了解隱式轉換。掌握顯式類型轉換的方法,了解隱式轉換。v掌握溢出的計算方法,了解在什么情況下能夠會掌握溢出的計算方法,了解在什么情況下能夠會呵斥溢出。呵斥溢出。本章授課內容本章授課內容內存溢出內存溢出類型轉換類型轉換運算符與表達式運算符與表達式左值和右值左值和右值C程序的語法程序的語法本章授課內容本章授課內容內存溢出內存溢出類型轉

3、換類型轉換運算符與表達式運算符與表達式左值和右值左值和右值C程序的語法程序的語法C言語的言語的“單詞單詞v規范定義了多種類型的單詞:規范定義了多種類型的單詞:v關鍵詞關鍵詞(keywords):return、for、void、v標識符標識符(identifiers):x、y、z、v字面值字面值(literal):3、4、“Hello World!、v注釋注釋(comment):/*This is a comment.*/、v操作符操作符(operator):+、-、*、/、v分隔符分隔符(separator):、vC言語的運算言語的運算23 + 34算式運算符號表達式運算符由單個或多個操作數、

4、運算符組成的符合C言語規那么的式子叫做表達式。表達式的值就是經過計算以后所得到的值。從語法的角度看源文件從語法的角度看源文件/*源文件:源文件:demo.c*/#include int main(void) int x = 23; int y = 34; int z = x + y; printf(“C籃子中的蘋果數量為籃子中的蘋果數量為%dn“,z); system(“PAUSE); return 0;對于運算的含義就是我們接下來要學習和掌握的。對于運算的含義就是我們接下來要學習和掌握的。本章授課內容本章授課內容內存溢出內存溢出類型轉換類型轉換運算符與表達式運算符與表達式左值和右值左值和右值

5、C程序的語法程序的語法左值和右值左值和右值左值:左值:指的是援用對象指的是援用對象的一種特殊表達的一種特殊表達式,該表達式可式,該表達式可以訪問或改動對以訪問或改動對象。象。操作符操作符右值右值非左值表達式。非左值表達式。區別左值和右值區別左值和右值v例例4-1 左值及右值舉例。左值及右值舉例。左值右值總結左值右值總結v可以作為左值的表達式方式有:變量名、可以作為左值的表達式方式有:變量名、ek、(e)、、e-name、*e。v有些運算符要求某個操作數必需為左值,這樣的有些運算符要求某個操作數必需為左值,這樣的運算符有:運算符有:v&:操作數應為左值或函數名。:操作數應為左

6、值或函數名。v+、-:操作數應為左值。:操作數應為左值。v=、+=、-=、*=、/=、%=、=、&=、=、|=:左操作數應為左值。:左操作數應為左值。總結:可以出如今等號左側的值都是左值總結:可以出如今等號左側的值都是左值. .本章授課內容本章授課內容內存溢出內存溢出類型轉換類型轉換運算符與表達式運算符與表達式左值和右值左值和右值C程序的語法程序的語法C C言語中的運算符言語中的運算符(I)(I)vC言語運算符可分為以下幾類:言語運算符可分為以下幾類:v算數運算符:加算數運算符:加(+)、減、減(-)、乘、乘(*)、除、除(/)、求余或稱模運算求余或稱模運算(%)、自增、自增(+)、自

7、減、自減(-)v關系運算符:包括大于關系運算符:包括大于()、小于、小于(=)、小于等于、小于等于(=,=)C C言語中的運算符言語中的運算符(II)(II) 條件運算符: (?:).這是獨一一個三目運算符。 位運算符:與(&)、位或(|)、位非()、位異或()、左移() 逗號運算符: (,) 指針運算符: (*)和 (&) 。 求字節數運算符: (sizeof)。 特殊運算符:括號(),下標,成員(,.)C C言語中運算符的優先級言語中運算符的優先級I IC C言語中運算符的優先級言語中運算符的優先級IIII算數運算符算數運算符v復習:加復習:加(+)、減、減(-)、乘、乘(

8、*)、除、除(/)、求余或、求余或稱模運算稱模運算(%)v加法運算符加法運算符“+為二元運算符,即應有兩個操為二元運算符,即應有兩個操作數參與加法運算,其相應的表達式方式為:作數參與加法運算,其相應的表達式方式為:操作數操作數1 + 操作數操作數2。v操作數操作數1 - 操作數操作數2v操作數操作數1 * 操作數操作數2v操作數操作數1 / 操作數操作數2v操作數操作數1 % 操作數操作數2例4-3 設有int x = 4, y; 請分析語句y = x*5+4;執行完后,y 的值是多少?例4-4 設有int x = 4, z = 5, y; 請分析語句y = z + x*(9 z) ;執行完后

9、,y 的值是多少?例4-7 設有int x = 4, y = 3, z; 請分析語句z = x%y;執行完后,z 的值是多少?例4-8 設有int x = 4, y = 3; double z1, z2;請分析語句z1 = x / y;,z2 = x % y;執行完后,z1 和z2 的值是多少?留意:對于留意:對于% %來說,結果的符號同被取余數一樣來說,結果的符號同被取余數一樣而且兩個操作數必需為整數而且兩個操作數必需為整數. .算數運算符算數運算符v自增運算符自增運算符(+):一元運算符,操作方式有兩種:一元運算符,操作方式有兩種:v+操作數操作數操作數提供計算值前,先使其值自動操作數提供

10、計算值前,先使其值自動加加1v操作數操作數+操作數提供計算值后,再使其值自動操作數提供計算值后,再使其值自動加加1v自減運算符自減運算符(-):一元運算符,操作方式有兩種:一元運算符,操作方式有兩種:v-操作數操作數操作數提供計算值前,先使其值自動操作數提供計算值前,先使其值自動減減1v操作數操作數-操作數提供計算值后,再使其值自動操作數提供計算值后,再使其值自動減減1例4-12 設有int x = 3, y;,請分析語句y = +x;執行后,x、y 的值?例4-13 設有int x = 3, y = 4, z;,請分析語句z = x+ + y;執行后,x、y、z 的值?例4-16 設有int

11、 x = 3, y = 4, z;,請分析語句z = x+ + -y;執行后,x、y、z 的值?算數運算符算數運算符v總結:總結:v+、-運算符的操作數必需是左值運算符的操作數必需是左值v+運算符和運算符運算符和運算符+的運用規范同理的運用規范同理-v+、-運算符的副作用運算符的副作用va=c+b+c+;a?vc=(i+)+(i+);c ?vprintf(“%dt%dn,i,i+);結果?結果?留意:留意:1.1.盡量分多行寫盡量分多行寫. .2.2.盡量運用多運用盡量運用多運用. .3.3.盡量不要再一行語句中對一個變量多次盡量不要再一行語句中對一個變量多次運用自增自減運用自增自減. .運算

12、符和表達式總結運算符和表達式總結v例例4-40,求代碼結果。,求代碼結果。/*源文件:demo4_4.c*/#include #include int main(void) int x = 3; int a; a = +x + +x + +x; printf(a = %d, a); system(PAUSE); return 0;運算符和表達式總結運算符和表達式總結v例例4-41,求代碼結果。,求代碼結果。/*源文件:demo4_5.c*/#include #include int main(void) int x = 3; int a; +x; +x; +x; a = x + x + x;

13、printf(a = %dn, a); system(PAUSE); return 0;運算符和表達式總結補運算符和表達式總結補v對于一個表達式而言,能夠會產生副作用。所以對于一個表達式而言,能夠會產生副作用。所以表達式可分為無副作用的和有副作用的。表達式可分為無副作用的和有副作用的。v序列點被定義為程序執行過程中的這樣一個點:序列點被定義為程序執行過程中的這樣一個點:該點前的表達式的一切副作用,在程序執行到達該點前的表達式的一切副作用,在程序執行到達該點之前發生終了;該點后的表達式的一切副作該點之前發生終了;該點后的表達式的一切副作用,在程序執行到該點時髦未發生。用,在程序執行到該點時髦未發

14、生。v序列點出現的位置序列點出現的位置v完好表達式終了時完好表達式終了時v&、|、?:或逗號運算符的第一個操作數之后或逗號運算符的第一個操作數之后v函數調用中求值參數和函數表達式之后函數調用中求值參數和函數表達式之后運算符和表達式總結運算符和表達式總結留意:留意:1.1.盡量不要利用表達式的副作用盡量不要利用表達式的副作用. .2.2.盡量引入中間變量,避開副作用歧義盡量引入中間變量,避開副作用歧義. .3.3.盡量盡量不要出現晦澀難懂盡量盡量不要出現晦澀難懂. .也不知道系也不知道系統將怎樣執行的代碼統將怎樣執行的代碼. .賦值運算符賦值運算符v賦值運算符:賦值運算符:v簡單賦值簡單

15、賦值(=)v復合算術賦值復合算術賦值(+=,-=,*=,/=,%=)v復合位運算賦值復合位運算賦值(&=,|=,=,=,)、小于、小于(=)、小于等于、小于等于( y;執行后,z 的值?例4-19 設有int x = 3, y;,請分析y = 2 = 8;執行后,y 的值?例4-20 設有int x = 3, y = 3, z = 5;,請分析表達式:x = y、x !=y、y != z、x = 3、x !=4 的計算結果?例4-21 設有int x = 3, y = 3, z;,請分析語句z = x = y != 4;執行后,z 的值?問題:假設把不同類型的變量相互賦值會怎樣呢?邏輯

16、運算符邏輯運算符v邏輯運算符:與邏輯運算符:與(&)、或、或(|)、非、非(!)v非操作的普通方式:!操作數非操作的普通方式:!操作數1v對邏輯與,其簡單表達式的普通方式為:操作數對邏輯與,其簡單表達式的普通方式為:操作數1&操作數操作數2v對邏輯或,其簡單表達式的普通方式為:操作數對邏輯或,其簡單表達式的普通方式為:操作數1|操作數操作數2例4-22 設有int x = 3, y = 0, z;,請分析表達式x & y、x | y、!x、!y 的結果?例4-23 設有int a = 3, b = 2, c = 1, d = 5, e = 6, f;,請分析表達式f =

17、 a b | b c & c d| d b ? a : b;執行后,c 的值?位運算操作運算符位運算操作運算符v位運算符:位運算符:v與與(&)、位或、位或(|)、位非、位非()、位異或、位異或()、左移、左移()v運算符運算符v普通方式:普通方式:操作數操作數v作用:將操作數的二進制表示逐位取反。作用:將操作數的二進制表示逐位取反。v例例4-25 設有設有int x = 0 x0FA4, y;,請分析,請分析y = x;執行后,執行后,y 的值?的值?位運算操作運算符位運算操作運算符v&運算符普通方式:操作數運算符普通方式:操作數1&操作數操作數2v對操作數對

18、操作數1和操作數和操作數2的二進制數,進展按位求與的二進制數,進展按位求與v|運算符普通方式:操作數運算符普通方式:操作數1|操作數操作數2v對操作數對操作數1和操作數和操作數2的二進制數,進展按位求或的二進制數,進展按位求或v運算符普通方式:操作數運算符普通方式:操作數1操作數操作數2v對操作數對操作數1和操作數和操作數2的二進制數,進展按位求異的二進制數,進展按位求異或或例4-26 設有int x = 3, y = 4, z;,請分析語句z = x & y;執行后,z 的值?例4-27 設有int x = 0 xF4AB, y = 0 x1AFC, z;,請分析語句z = x |

19、y;執行后,z 的值?例4-28 設有int x = 0 xF4AB, y = 0 x1AFC, z;,請分析語句z = x y;執行后,z 的值?補充:原碼、補碼、反碼補充:原碼、補碼、反碼v概念:概念:v換算關系:換算關系:v反碼反碼=原碼原碼v補碼補碼=反碼反碼+1v原碼原碼=補碼補碼-1符號位不變符號位不變v例例4-35 求補碼求補碼(1111 1000)b 的原碼,最高的原碼,最高位為符號位。位為符號位。位運算操作運算符位運算操作運算符v運算符普通方式:操作數運算符普通方式:操作數1操作數操作數2v對操作數對操作數1的每一位都向左挪動操作數的每一位都向左挪動操作數2位位v留意:留意:

20、v以上操作的操作數以上操作的操作數1和操作數和操作數2應為整數類型;應為整數類型;v運算數的各二進位全部左移操作數運算數的各二進位全部左移操作數2指定值的位指定值的位數,移到邊境之外的位被丟棄,低位補數,移到邊境之外的位被丟棄,低位補0;v如操作數如操作數2是負數,那么移位運算符的結果是未是負數,那么移位運算符的結果是未定義的;定義的;v如操作數如操作數2的值大于或等于轉換后左操作數的值大于或等于轉換后左操作數1數值數值的位數,那么移位運算符的結果也是未定義的。的位數,那么移位運算符的結果也是未定義的。位運算操作運算符位運算操作運算符v例例4-29:設有:設有int x = 0 xE4AB,

21、y;,請分析,請分析語句語句y = x 3;執行后,執行后,x、y 的值?的值?位運算操作運算符位運算操作運算符v例例4-30 設有設有char x = a, y;,請分析語句,請分析語句y = x 4;執行后,執行后,y 的值?的值?v例例4-31 設有設有char x = a; int y;,請分,請分析語句析語句y = x 4;執行后,執行后,y 的值?的值?位運算操作運算符位運算操作運算符v例例4-34 設有設有int x = 0 xFAFF; char y;請請分析語句分析語句y = x 運算符普通方式:操作數運算符普通方式:操作數1操作數操作數2v對操作數對操作數1的每一位都向右挪

22、動操作數的每一位都向右挪動操作數2位位v留意:留意:v假設操作數假設操作數1為無符號整型數或帶符號的非負為無符號整型數或帶符號的非負數時,操作數數時,操作數1的各二進制位右移操作數的各二進制位右移操作數2指定指定的位數,高位補的位數,高位補0。如:將。如:將(0100 0110)b 右移右移兩位將得到兩位將得到(0001 0001)b。v假設操作數假設操作數1為帶符號的負數時,操作數為帶符號的負數時,操作數1的各二的各二進制位右移操作數進制位右移操作數2指定的位數:指定的位數:v有的在高位補有的在高位補0,此時將,此時將(1000 0110)(0010 0001)b。v有的將操作數有的將操作數

23、1移出的低位移入高位,此時將移出的低位移入高位,此時將(1000 0110)b (10100001)b。v含有對帶符號的負數進展右移的程序是不可移植含有對帶符號的負數進展右移的程序是不可移植的。的。位運算操作運算符位運算操作運算符 如操作數2是負數,那么移位運算符的結果是未定義的; 如操作數2的值大于或等于轉換后左操作數1數值的位數,那么移位運算符的結果也是未定義的。位運算操作運算符位運算操作運算符v例例4-35 設有設有unsigned int x = 0XFAFF, y;,請分析語句,請分析語句y = x 3;執行后,執行后,y的值。的值。逗號運算符逗號運算符v逗號表達式又稱順序表達式包括

24、逗號分開的逗號表達式又稱順序表達式包括逗號分開的兩個表達式。兩個表達式。v普通方式為:表達式普通方式為:表達式1,表達式表達式2v留意:留意:v逗號表達式的結合律是從左至右。表達式逗號表達式的結合律是從左至右。表達式2的值的值作為整個逗號表達式的值。作為整個逗號表達式的值。v表達式表達式1和表達式和表達式2也可以是逗號表達式。也可以是逗號表達式。v并不是有逗號出現的地方,就可以被以為是逗號并不是有逗號出現的地方,就可以被以為是逗號表達式。表達式。逗號運算符逗號運算符v例例4-36 設有設有int x = 3, y;,請分析語句,請分析語句y= x+3,4;執行后,執行后,y的值?的值?v例例4

25、-37 設有設有int x = 3, y;,請分析語句,請分析語句y=(x+3,4);執行后,執行后,y的值?的值?v例例4-38 設有設有int x = 3, y;,請分析語句,請分析語句y=(x+3,4,5),x+6);執行后,執行后,y的值?的值?運算符表達式總結運算符表達式總結vC C言語運算符可分為以下幾類:言語運算符可分為以下幾類:v算數運算符:算數運算符:+ +、- -、* *、/ /、% %、+、-v關系運算符:關系運算符: 、 =、=,=,=v條件運算符:條件運算符:?:?:v位運算符:位運算符:& &、| |、 、 、v逗號運算符:,逗號運算符:,v指針運算

26、符:指針運算符:* *、& &v求字節數運算符:求字節數運算符:sizeofsizeofv特殊運算符:括號特殊運算符:括號()(),下標,下標,成員,成員(,.).)問題:假設把不同類型的變量相互運算會怎樣呢?不同類型的變量進展運算不同類型的變量進展運算vint x = 5;float y = 4.6;vfloat z=x+y;vdouble z=x+y;vint z=x+y;問題:為什么會這樣?什么時候結果正常,什么時候不正常呢?本章授課內容本章授課內容內存溢出內存溢出類型轉換類型轉換運算符與表達式運算符與表達式左值和右值左值和右值C程序的語法程序的語法類型轉換類型轉換v類型

27、轉換分為隱式類型轉換和顯示類型轉換。類型轉換分為隱式類型轉換和顯示類型轉換。int x = 0 x89898; /*等價于 int x = 0 x00089898;*/short y;y = x;隱式類型轉換隱式類型轉換v在表達式中假設有不同類型的變量或字面值參與在表達式中假設有不同類型的變量或字面值參與同一運算時,編譯器將在編譯時自動按照規定的同一運算時,編譯器將在編譯時自動按照規定的規那么將其轉換為一樣的數據類型,這種由編譯規那么將其轉換為一樣的數據類型,這種由編譯自動完成的轉換即是隱式轉換。自動完成的轉換即是隱式轉換。v整數轉換級別:整數轉換級別:隱式類型轉換隱式類型轉換v對于對于 操作

28、數操作數1=操作數操作數2,操作數,操作數1的類型為的類型為T1,操作數操作數2的類型為的類型為T2,實踐的運算過程為:實踐的運算過程為:v計算操作數計算操作數2的值,設得的值,設得v2v把把v2轉換為轉換為T1類型類型v計算操作數計算操作數1的值的值v用轉換后的用轉換后的v2的值更新操作數的值更新操作數1代表的對象值。代表的對象值。vint x=3,y=2;vfloat z = x/y;隱式類型轉換隱式類型轉換問題:隱式類型轉換自動進展,我干嘛還要掌握規那么呢?隱式類型轉換隱式類型轉換v例例4-45 設有設有int x = 0 x00110000;short y; y = x; v例例4-4

29、6 設有設有short s = 0 xFFFF; unsigned int i; i = s;v例例4-47 設有設有int i; unsigned int u = 0 xFFFFFFFF; i = u;v例例4-48 設有設有unsigned int x = -1;int y = x;v例例4-49 設有設有unsigned int u = 3; float f = 3.14; short s = 5; int x; x = f + u * s;求求x。隱式類型轉換隱式類型轉換/*源文件:demo4_7.c*/#include #include int main(void) int i; u

30、nsigned int u; int y; printf(請輸入i 值:); scanf(%d, &i); printf(請輸入u 值:); scanf(%d, &u); y = i u? i : u; printf(i=%d、u=%d 中大的數是%dn, i, u, y); system(PAUSE); return 0;留意:留意: 在一個表達式中盡在一個表達式中盡量防止帶符號和無符量防止帶符號和無符號的數同時出現號的數同時出現. .隱式類型轉換隱式類型轉換留意:留意:1.1.隱式類型轉換是編譯器自動進展的隱式類型轉換是編譯器自動進展的. .2.2.隱式類型轉換普通是向較大的類型轉變隱式類型轉換普通是向較大的類型轉變. .顯示類型轉換顯示類型轉換v顯式轉換表達式的普通方式為:顯式轉換表達式的普通方式為:v(希望轉換的類型希望轉換的類型) 操作數操作數顯示類型轉換顯示類型轉換v例例4-49 設有設有int x = 3, y = 0 xFFFFFFFF; double f;,請分析以下語句執行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論