大學計算機C語言_第1頁
大學計算機C語言_第2頁
大學計算機C語言_第3頁
大學計算機C語言_第4頁
大學計算機C語言_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、-2-第第2 2章章 數據類型與表達式數據類型與表達式本本 章章 內內 容容 1. c語言的數據類型語言的數據類型 2. 常量和變量常量和變量 3. 整型數據整型數據 4. 實型數據實型數據 5. 字符型數據字符型數據 6. 系統函數系統函數 7. c運算符概述運算符概述 8. 算術運算符算術運算符 9. 關系運算符和邏輯運算符關系運算符和邏輯運算符 10. 位運算符與長度運算符位運算符與長度運算符11. 賦值運算符和賦值表達式賦值運算符和賦值表達式 12. 逗號運算符和逗號表達式逗號運算符和逗號表達式13. 運算符的優先級與表達式的分類運算符的優先級與表達式的分類 -3-第第2 2章章 數據

2、類型與表達式數據類型與表達式2.1 c語言的數據類型語言的數據類型 數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。 數據類型明顯或隱含地規定了在程序執行期間變量或表達式所有可能的取數據類型明顯或隱含地規定了在程序執行期間變量或表達式所有可能的取值范圍,以及在這些值上允許進行的操作。值范圍,以及在這些值上允許進行的操作。 c c語言的各種數據類型:語言的各種數據類型:基本類型基本類型數據類型數據類型字符型字符型整型整型實型實型雙精度實型雙精度實型枚舉類型枚舉類型構造類型構造類型指針類型指針類型空類型空類型數組類型數組類型結構體

3、類型結構體類型共用體類型共用體類型-4-第第2 2章章 數據類型與表達式數據類型與表達式2.2 常量和變量常量和變量 常量和符號常量常量和符號常量 1 1常量常量 在程序運行過程中,其值不能被改變的量稱為常量,又叫常數。在程序運行過程中,其值不能被改變的量稱為常量,又叫常數。 常量區分為不同的類型,如常量區分為不同的類型,如100100,0 0,-8-8為整型常量,為整型常量,25.3225.32,0.1420.142為實型常量,為實型常量,aa,bb是字符型常量。是字符型常量。 常量不需要事先定義,只在程序中需要的地方直接寫出即可。常量常量不需要事先定義,只在程序中需要的地方直接寫出即可。常

4、量的類型也不需要事先說明,它們的類型是由書寫方式自動默認的。的類型也不需要事先說明,它們的類型是由書寫方式自動默認的。 2 2符號常量符號常量 用一個符號(標識符)代表一個常量,例如:用一個符號(標識符)代表一個常量,例如: #define maxnum 1000#define maxnum 1000 #define true 1 #define true 1 #define false 0 #define false 0 符號常量的定義格式如下:符號常量的定義格式如下: #define #define 符號常量符號常量 常量常量 -5-第第2 2章章 數據類型與表達式數據類型與表達式2.2

5、常量和變量常量和變量 標識符與變量標識符與變量1 1標識符標識符 在在c c 語言中,標識符是對變量、符號常量、函數、數組、文件等用語言中,標識符是對變量、符號常量、函數、數組、文件等用戶定義對象的命名。戶定義對象的命名。 標識符可以是一個或多個字符。標識符的第一個字符必須是英文字標識符可以是一個或多個字符。標識符的第一個字符必須是英文字母或下畫線,隨后的字符必須是字母、數字或下畫線。不能以數字打母或下畫線,隨后的字符必須是字母、數字或下畫線。不能以數字打頭。頭。 下面是一些正確或錯誤標識符命名的示例。下面是一些正確或錯誤標識符命名的示例。 正確標識符正確標識符 錯誤標識符錯誤標識符 weig

6、ht 2xweight 2x length a|#b length a|#b color2 red!color color2 red!color save _$123 save _$123-6-第第2 2章章 數據類型與表達式數據類型與表達式2.2 常量和變量常量和變量 2 2變量變量 在程序運行過程中,其值可以改變的量稱為變量。在程序運行過程中,其值可以改變的量稱為變量。 在在c c語言中,要求對所有用到的變量語言中,要求對所有用到的變量 “ “先定義,后使用先定義,后使用”。 例如:例如:定義兩個整型變量定義兩個整型變量a a、b b和三個實型變量和三個實型變量x x、y y、z z。 i

7、ntint a,b; a,b; float x,y,z; float x,y,z;c c語言有五種基本數據類型:字符型、整型、實型、雙精度實型、語言有五種基本數據類型:字符型、整型、實型、雙精度實型、和空類型。定義這五種類型的變量時須使用的類型說明符分別為和空類型。定義這五種類型的變量時須使用的類型說明符分別為charchar、intint、floatfloat、doubledouble和和voidvoid。 -7-第第2 2章章 數據類型與表達式數據類型與表達式2.3 整型數據整型數據整型常量整型常量1 1不同進制數的使用不同進制數的使用 十進制整數的表示與通常在算術中的表示一樣,例如:十進

8、制整數的表示與通常在算術中的表示一樣,例如:321321,+321+321。 八進制整數必須以數字八進制整數必須以數字0 0開頭,例如:開頭,例如:01230123表示表示(123)(123)8 8。 十六進制整數必須以十六進制整數必須以0 x0 x開頭,例如開頭,例如0 x123 0 x123 表示表示(123)(123)1616。-8-第第2 2章章 數據類型與表達式數據類型與表達式2.3 整型數據整型數據 整型變量整型變量1 1整型數據在內存中的存放形式整型數據在內存中的存放形式 在計算機中,數是用二進制表示的,把一個數連同其符號在計算機在計算機中,數是用二進制表示的,把一個數連同其符號

9、在計算機中加以數值化,這樣的數稱為機器數,機器數可以用不同的碼制(原中加以數值化,這樣的數稱為機器數,機器數可以用不同的碼制(原碼、補碼)表示。碼、補碼)表示。2 2整型變量的分類整型變量的分類 根據數值的范圍將整型變量分為以下六種類型:根據數值的范圍將整型變量分為以下六種類型: 有符號基本整型:有符號基本整型:signed intsigned int。 有符號短整型:有符號短整型:signed short intsigned short int。 有符號長整型:有符號長整型:signed long intsigned long int。 無符號基本整型:無符號基本整型:unsigned in

10、tunsigned int。 無符號短整型:無符號短整型:unsigned short intunsigned short int。 無符號長整型:無符號長整型:unsigned long intunsigned long int。-9-第第2 2章章 數據類型與表達式數據類型與表達式2.3 整型數據整型數據類類 型型占占 字字 節節 數數取取 值值 范范 圍圍intint2 2字節字節-32768-327683276732767shortshort2 2字節字節-32768-327683276732767longlong4 4字節字節-2147483648-21474836482147483

11、6472147483647unsigned intunsigned int2 2字節字節0 06553565535unsigned shortunsigned short2 2字節字節0 06553565535unsigned longunsigned long4 4字節字節0 042949672954294967295ansi標準定義的整數類型標準定義的整數類型 -10-第第2 2章章 數據類型與表達式數據類型與表達式2.3 整型數據整型數據3.3.不同類型的整型常量賦值給整形變量不同類型的整型常量賦值給整形變量 整型變量可分為整型變量可分為intint、short intshort int

12、、long intlong int、unsigned intunsigned int、unsigned shortunsigned short、unsigned longunsigned long等類別,將整型常量賦值給上述類等類別,將整型常量賦值給上述類別的整型變量時如何做到類型匹配?別的整型變量時如何做到類型匹配? 一個整型常數,若值在一個整型常數,若值在-32768-32768+32767+32767范圍內,可將它賦值給范圍內,可將它賦值給intint型型和和long intlong int型變量。型變量。一個整型常數,若值在一個整型常數,若值在-2147483648-214748364

13、8+2147483647+2147483647范圍內,可以賦范圍內,可以賦值給一個值給一個long intlong int型變量。型變量。常量無常量無unsignedunsigned型。但一個非負值的整數可以賦值給型。但一個非負值的整數可以賦值給unsigned intunsigned int型變量,只要它的范圍在型變量,只要它的范圍在0 06553565535范圍內。范圍內。在一個整常數后面加一個小寫字母在一個整常數后面加一個小寫字母l l或大寫字母或大寫字母l l,則認為是,則認為是longlong型型常量。例如,常量。例如,-123l-123l、123l123l、0l0l、0775l07

14、75l、0 x9el0 x9el等。等。-11-第第2 2章章 數據類型與表達式數據類型與表達式2.3 整型數據整型數據 3. 3. 整型變量的定義整型變量的定義對變量的定義,一般是放在一個函數的開頭的聲明部分。對變量的定義,一般是放在一個函數的開頭的聲明部分。【例【例2-12-1】 main()main() int int a; a; unsigned int unsigned int b; b; long c; long c; unsigned long d; unsigned long d; a=-100; a=-100; b=60000; b=60000; c=-2123456789;

15、 c=-2123456789; d=4123456789; d=4123456789; printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d printf(a=%d,b=%u,c=%ld,d=%lu,a,b,c,d); ); 運行結果為運行結果為 a=-100,b=60000,c=-2123456789,d=4123456789a=-100,b=60000,c=-2123456789,d=4123456789-12-第第2 2章章 數據類型與表達式數據類型與表達式2.4 實型數據實型數據 實型常量的表示方法實型常量的表示方法 實型常數也稱為浮點數,在實型常數也稱為浮點數,在

16、c c語言中實型常數只使用十進制數表示,語言中實型常數只使用十進制數表示,它的書寫方式有兩種:它的書寫方式有兩種: 小數形式。小數形式。它是由整數、小數點、小數三部分組成,最多只能省略其它是由整數、小數點、小數三部分組成,最多只能省略其中的整數或小數部分,但不能二者都省略,也不能省略小數點。例如:中的整數或小數部分,但不能二者都省略,也不能省略小數點。例如:123.123.,-.123-.123,1.231.23,-1.23-1.23,12.012.0,0.0.,.0.0,0.00.0都是合法的十進制小都是合法的十進制小數形式。數形式。 指數形式。指數形式。它是由尾數、字母它是由尾數、字母e

17、e或或e e、指數三部分組成。尾數可以是一、指數三部分組成。尾數可以是一個十進制小數形式,也可以是一個整數形式,個十進制小數形式,也可以是一個整數形式, 如如123e-3123e-3或或123e-3123e-3都代表都代表12312310-310-3的值。的值。 注意:注意:字母字母e e(或(或e e)之前必須有數字,且后面指數必須為整數,如)之前必須有數字,且后面指數必須為整數,如- -0.32e-20.32e-2,2e42e4,-.23e-2-.23e-2,.0e3.0e3,0.e-50.e-5,0e00e0等都是合法的指數形式,等都是合法的指數形式,而而e-5e-5,.e2.e2,12

18、.3e5.412.3e5.4卻是非法的指數形式。卻是非法的指數形式。-13-第第2 2章章 數據類型與表達式數據類型與表達式2.4 實型數據實型數據 實型變量實型變量1 1實型數據在內存中的存放形式實型數據在內存中的存放形式 實型數據是按指數形式存儲的。系統把實型數據是按指數形式存儲的。系統把一個實型數據分成尾數部分和指數部分分別一個實型數據分成尾數部分和指數部分分別存放。實型數據在內存中小數點位置不是固存放。實型數據在內存中小數點位置不是固定的,或者說是浮動的,故這種表示法稱為定的,或者說是浮動的,故這種表示法稱為浮點表示法。浮點表示法。2 2實型變量的定義實型變量的定義 對每一個實型變量都

19、應在使用前加以定對每一個實型變量都應在使用前加以定義。如義。如 float x,y;float x,y;3 3實型數據的舍入誤差實型數據的舍入誤差 由于實型變量是由有限的存儲單元組成由于實型變量是由有限的存儲單元組成的,因此能提供的有效數字總是有限的。在的,因此能提供的有效數字總是有限的。在有效范圍以外的數字將被舍去。由此可能會有效范圍以外的數字將被舍去。由此可能會產生一些誤差。請分析下面的程序:產生一些誤差。請分析下面的程序:【例【例2-32-3】分析實型】分析實型數據的舍入誤差。數據的舍入誤差。main()main() float a; float a; a=12345.6789; a=1

20、2345.6789; printf(n%f,a printf(n%f,a);); printf(n%e,a printf(n%e,a);); 在在turbo cturbo c中程序運中程序運行結果為:行結果為:12345.67871112345.6787111.234568e+0021.234568e+002-14-第第2 2章章 數據類型與表達式數據類型與表達式2.4 實型數據實型數據 雙精度型數據雙精度型數據1 1雙精度常數雙精度常數 雙精度常數的書寫方式與實型常數的書寫方式相同,有十進制小數形雙精度常數的書寫方式與實型常數的書寫方式相同,有十進制小數形式和指數形式兩種式和指數形式兩種,

21、,比實型數據的范圍廣、精度高。比實型數據的范圍廣、精度高。2 2雙精度數據在內存中的表示形式雙精度數據在內存中的表示形式 ansiansi并未具體規定每種類型數據的長度、精度和數值范圍。并未具體規定每種類型數據的長度、精度和數值范圍。 微機上常用的微機上常用的c c編譯系統編譯系統( (如如turbo cturbo c、ms cms c、borland c)borland c)實型數據:實型數據:3 3雙精度變量的定義雙精度變量的定義 雙精度類型標識符雙精度類型標識符doubledouble前還可加修飾符前還可加修飾符longlong,long double long double 比比dou

22、bledouble型的精度更高,表示的數值范圍更大。型的精度更高,表示的數值范圍更大。類類 型型二進制位數二進制位數有有 效效 數數 字字數數 值值 范范 圍圍floatfloat32326 67 71010-37-3710103838doubledouble6464151516161010-307-3071010308308long doublelong double128128181819191010-4931-4931101049324932-15-第第2 2章章 數據類型與表達式數據類型與表達式2.5 字符型數據字符型數據 字符常量字符常量 字符常量是用單引號(字符常量是用單引號( )

23、括起來的單個字符。例如)括起來的單個字符。例如aa、!、#、aa、 * * 等。等。 除字符常量外,將除字符常量外,將“”開頭的特定字符串稱為開頭的特定字符串稱為“轉義字符轉義字符”,意,意思是將反斜杠后面的字符串轉換成另外的意義。思是將反斜杠后面的字符串轉換成另外的意義。 轉義字符轉義字符 含含 義義ascii代碼(十進制)代碼(十進制)n換行,將當前位置移到下一行開頭換行,將當前位置移到下一行開頭10t水平制表(跳到下一個水平制表(跳到下一個tab位置)位置)9b退格,將當前位置移到前一格退格,將當前位置移到前一格8r回車,將當前位置移到本行開頭回車,將當前位置移到本行開頭13反斜杠字符反

24、斜杠字符“”92單引號字符單引號字符39雙引號字符雙引號字符34ddd一到三位八進制數一到三位八進制數ddd代表的字符代表的字符ddd (八進制)(八進制)xhh一到兩位十六進制數一到兩位十六進制數hh代表的字符代表的字符hh(十六進制)(十六進制)-16-第第2 2章章 數據類型與表達式數據類型與表達式ascii碼碼鍵盤鍵盤ascii 碼碼鍵盤鍵盤ascii 碼碼鍵盤鍵盤ascii 碼碼鍵盤鍵盤27esc32space33!3435#36$37%38&3940(41)42*43+4445-46.47/48049150251352453554655756857958:59;6063?6

25、465a66b67c68d69e70f71g72h73i74j75k76l77m78n79o80p81q82r83s84t85u86v87w88x89y90z9192939495_9697a98b99c100d101e102f103g104h105i106j107k108l109m110n111o112p113q114r115s116t117u118v119w120 x121y122z123124|125126-17-第第2 2章章 數據類型與表達式數據類型與表達式2.5 字符型數據字符型數據【例【例2-42-4】下面程序中使用了幾種轉義字符。下面程序中使用了幾種轉義字符。 main()mai

26、n() printf(abxbcdtefghtijkln printf(abxbcdtefghtijkln); ); printf(xxxxxxxxrmnoptqrst printf(xxxxxxxxrmnoptqrst uvwxnuvwxn); ); 程序運行時在顯示屏上得到以下結果:程序運行時在顯示屏上得到以下結果:abcd abcd efgh efgh ijklijklmnopmnopqrst qrst uvwxuvwx-18-第第2 2章章 數據類型與表達式數據類型與表達式2.5 字符型數據字符型數據 字符變量字符變量 字符變量用來存放字符常量,一字符變量用來存放字符常量,一個字符變量

27、只能放一個字符。個字符變量只能放一個字符。 字符變量的定義形式:字符變量的定義形式: char char 變量名表列;變量名表列; 例如:例如: char c1,c2;char c1,c2; c1=a; c1=a; c2=b; c2=b; c c語言編譯系統規定用一個字節語言編譯系統規定用一個字節來存放一個字符,將一個字符常量來存放一個字符,將一個字符常量賦值給一個變量,實際上是將該字賦值給一個變量,實際上是將該字符的符的asciiascii代碼放到存儲單元中。代碼放到存儲單元中。 【例【例2-52-5】將字符數據以不同的方式將字符數據以不同的方式輸出。輸出。 main()main() cha

28、r c1,c2; char c1,c2; c1=a; c1=a; c2=b; c2=b; printf(%c,%cn,c1,c2); printf(%c,%cn,c1,c2); printf(%d,%d,c1,c2); printf(%d,%d,c1,c2); a,b 65,66【例【例2-62-6】大小寫字母的轉換。大小寫字母的轉換。 main()main() char c1,c2,c3,c4; char c1,c2,c3,c4; c1=a; c1=a; c2=b; c2=b; c3=c1+32; c3=c1+32; c4=c2+32; c4=c2+32; printf(%c,%c,c3,c

29、4); printf(%c,%c,c3,c4); a,b-19-第第2 2章章 數據類型與表達式數據類型與表達式2.5 字符型數據字符型數據 字符串常量字符串常量 定義:字符串就是用兩個雙引號(定義:字符串就是用兩個雙引號(“)括起來的若干個字符。)括起來的若干個字符。 例如,例如,chinachina、8838387288383872、aj200 aj200 存儲:存儲:每個字符串尾自動加一個每個字符串尾自動加一個 0 0 作為字符串結束標志作為字符串結束標志 例如:例如:字字 符串符串“china”china”在內存中在內存中 字符串的長度:字符串中所有字符的個數,其中每個轉義字符當字符串

30、的長度:字符串中所有字符的個數,其中每個轉義字符當作一個字符。作一個字符。 例如,字符串例如,字符串“china”china”,、,、abcdabcd、“101102x43x44”101102x43x44”的長度分別為的長度分別為5 5、4 4、6 6、4 4。 字符常量與字符串常量不同字符常量與字符串常量不同沒有字符串變量,用字符數組存放沒有字符串變量,用字符數組存放c h i n a 0a a a 0 a 0例例 a a“a”“a”例例: char ch; ch=a; -20-第第2 2章章 數據類型與表達式數據類型與表達式2.6 系統函數系統函數 簡例簡例【例【例2-72-7】假設根據自

31、變量假設根據自變量x x不同的值求下式的值:不同的值求下式的值: x x7 7+sinx-log+sinx-log1010(x+3)(x+3) 在在c c語言中可使用以下程序:語言中可使用以下程序: #include#include main() main() float x,y; float x,y; scanf(%f,&x scanf(%f,&x);); y=pow(x,7)+sin(x)-log10(x+3); y=pow(x,7)+sin(x)-log10(x+3); printf(%f,y printf(%f,y);); -21-第第2 2章章 數據類型與表達式數據類

32、型與表達式2.6 系統函數系統函數 函數:函數:是可以被調用的一段程序。是可以被調用的一段程序。 庫函數:庫函數:軟件開發商編寫了很多標準函數,作為運算符的補充,供用戶軟件開發商編寫了很多標準函數,作為運算符的補充,供用戶調用,稱之為庫函數或系統函數。調用,稱之為庫函數或系統函數。 庫函數存儲在擴展名為庫函數存儲在擴展名為.lib.lib的文件中。的文件中。 按庫函數類劃分為:數學函數、字符函數、字符串函數、輸入輸出函按庫函數類劃分為:數學函數、字符函數、字符串函數、輸入輸出函數、動態存儲分配函數等。其聲明分別包含在數、動態存儲分配函數等。其聲明分別包含在math.hmath.h、ctype.

33、hctype.h、string.hstring.h、stdio.hstdio.h和和stdlib.hstdlib.h等文件中。如果程序需要調用這些庫函等文件中。如果程序需要調用這些庫函數,就要在源程序文件中使用文件包含命令:數,就要在源程序文件中使用文件包含命令: #include#include 或或 #include#include文件名文件名 輸入輸出函數輸入輸出函數scanf()scanf()和和printfprintf()()也是庫函數,稱為標準輸入輸出函也是庫函數,稱為標準輸入輸出函數,它們的聲明包含在文件數,它們的聲明包含在文件stdio.hstdio.h中。由于中。由于turb

34、o cturbo c允許使用標準輸允許使用標準輸入輸出函數的時候省略頭文件,所以上述例子中我們未使用入輸出函數的時候省略頭文件,所以上述例子中我們未使用#includestdio.h#include 。-22-第第2 2章章 數據類型與表達式數據類型與表達式求求tgtg x x的值的值doubledoubledoubledoubletan(x)tan(x)tantan求求x x的平方根,的平方根,x x00doubledoubledoubledoublesqrt(xsqrt(x) )sqrtsqrt求求sin sin x x的值的值doubledoubledoubledoublesin(x)s

35、in(x)sinsin產生產生90903276732767的隨機整數的隨機整數intintrand()rand()randrand求求x xy y的值的值doubledoubledoubledoublepow(x,ypow(x,y) )powpow求求loglog1010 x x的值,的值,x x00doubledoubledoubledoublelog10(x)log10(x)log10log10求求lnln x x的值,的值,x x00doubledoubledoubledoublelog(x)log(x)loglog求求e ex x的值的值doubledoubledoubledouble

36、exp(x)exp(x)expexp求求coscos x x的值,的值,x x的單位為弧度的單位為弧度doubledoubledoubledoublecos(xcos(x) )coscos求求x x的反正切的反正切doubledoubledoubledoubleatan(xatan(x) )atanatan求求x x的反正弦,的反正弦,-1-1x x11doubledoubledoubledoubleasin(xasin(x) )asinasin求求x x的反余弦,的反余弦,-1-1x x11doubledoubledoubledoubleacos(xacos(x) )acosacos求求x

37、x的絕對值的絕對值intintintintabs(x)abs(x)absabs功功 能能 說說 明明函數值類型函數值類型自變量類型自變量類型調用形式調用形式函函 數數 名名 常用數學函數常用數學函數-23-第第2 2章章 數據類型與表達式數據類型與表達式2.7 c運算符概述運算符概述c的運算符有以下幾種:的運算符有以下幾種: 算術運算符:(算術運算符:(+ +、- -、* *、/ /、% %),自加自減運算符(),自加自減運算符(+、-)。)。 類型轉換運算符(類型轉換運算符(( (類型符類型符) ))。)。 關系運算符(關系運算符( 、= 、=、=、!=!=)。)。 邏輯運算符(邏輯運算符(

38、! !、&、|)。)。 條件運算符(條件運算符(? :? :)。)。 位運算符:移位運算符(位運算符:移位運算符(),位邏輯運算符(),位邏輯運算符( 、& &、| |、 )。)。 求字節數運算符(求字節數運算符(sizeofsizeof)。)。 賦值運算符:基本賦值運算符(賦值運算符:基本賦值運算符(= =),算術自反賦值運算符(),算術自反賦值運算符(+=+=、-=-=、* *= =、/=/=、%=%=),位自反賦值運算符(),位自反賦值運算符(=、&=&=、|=|=、=)。)。 逗號運算符(逗號運算符(, ,)。)。 指針運算符(指針運算符(* *

39、、& &)。)。 下標運算符(下標運算符( )。)。 分量運算符(分量運算符(. .、-)。)。-24-第第2 2章章 數據類型與表達式數據類型與表達式2.8 算術運算符算術運算符 算術表達式和運算符的優先級與結合性算術表達式和運算符的優先級與結合性算術表達式:算術表達式:用算術運算符和括號將運算對象連起來的、符合用算術運算符和括號將運算對象連起來的、符合c c語言規則語言規則的式子。的式子。例如:例如:合法的算術表達式:合法的算術表達式:a+ba+b* *(y/(-3)+x(y/(-3)+x* *x-pow(c,3)+15%6 x-pow(c,3)+15%6 不合法的算術表達

40、式:不合法的算術表達式:a a* */5+3/5+3,x(y+4)x(y+4),a/b%3.5a/b%3.5運算符的優先級和結合性:運算符的優先級和結合性:先按運算符的優先級別高低次序執行。如果優先按運算符的優先級別高低次序執行。如果優先級別相同,則按規定的先級別相同,則按規定的“結合方向結合方向”處理。處理。各種運算符的結合方向:各種運算符的結合方向: 算術運算符中的二元運算的結合方向為算術運算符中的二元運算的結合方向為“自左至右自左至右”。 例如:例如:9/29/2* *3%73%7:先執行:先執行“/”/”,再執行,再執行“* *”,最后執行,最后執行“%”%”。 算術運算符中的單目運算

41、符算術運算符中的單目運算符+ +、- -的結合方向為的結合方向為“自右至左自右至左” ” 。 例如:例如:-+-5-+-5等價于等價于-(+(-5)-(+(-5)。可以適當使用小括號可以適當使用小括號“()”()”來改變表達式的優先級和結合性。來改變表達式的優先級和結合性。-25-第第2 2章章 數據類型與表達式數據類型與表達式2.8 算術運算符算術運算符 自加、自減運算符自加、自減運算符使變量的值加一或減一。使變量的值加一或減一。前綴形式:前綴形式:+i+i, -i-i 先改變先改變i i的值,再使用的值,再使用i i的值。的值。后綴形式:后綴形式:i+i+,i-i- 先使用先使用i i的值

42、,再改變的值,再改變i i的值。的值。 相當于:相當于:i = i + 1i = i + 1 i = i 1 i = i 1例如:例如: intint i=3,j,k; i=3,j,k; j=i+; j=i+; k=+i; k=+i; printf(%d,%d,%d,i,j,k printf(%d,%d,%d,i,j,k);); -26-第第2 2章章 數據類型與表達式數據類型與表達式2.8 算術運算符算術運算符 說明:說明:+和和-運算符只能用于變量,不能用于常量或表達式。運算符只能用于變量,不能用于常量或表達式。 分析:分析:(a + b)+ ?(a + b)+ ?+和和-的結合方向是的結

43、合方向是 自右至左自右至左 。 例如:例如:-x+ -x+ 相當于相當于-(x+)-(x+)-27-第第2 2章章 數據類型與表達式數據類型與表達式2.8 算術運算符算術運算符 類型轉換運算符及類型轉換類型轉換運算符及類型轉換 類型轉換運算符類型轉換運算符l 一般形式:一般形式:(類型名類型名)()(表達式表達式) 例例 (int)(x+y(int)(x+y) ) (int)x+y (int)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 l 說明:強制轉換得到所需類型的中間變量,原變量類型不變說明:強制轉換得到所需類型的中間變量,原變量類型

44、不變-28-第第2 2章章 數據類型與表達式數據類型與表達式2.8 算術運算符算術運算符類型轉換類型轉換當表達式中出現不同類型的操作數時,要按一定的規則將其轉換為相當表達式中出現不同類型的操作數時,要按一定的規則將其轉換為相同的類型。遵循以下轉換規則:同的類型。遵循以下轉換規則:【例【例2-82-8】設設a a是整型變量,其值為是整型變量,其值為2 2,c c是字符變量,其值為是字符變量,其值為aa,x x是實是實型變量,其值為型變量,其值為1.51.5,則表達式:,則表達式: x+cx+c* *a/10-3/2a/10-3/2高高 double float double float long

45、longunsignedunsigned低低 int char, shortint char, short 橫向朝左的箭頭表示必定的轉換。橫向朝左的箭頭表示必定的轉換。 縱向箭頭表示當運算對象為不同類縱向箭頭表示當運算對象為不同類型時轉換的方向。低級類型轉換為型時轉換的方向。低級類型轉換為高級類型。高級類型。 轉換是由系統自動進行。轉換是由系統自動進行。-29-第第2 2章章 數據類型與表達式數據類型與表達式2.9 關系運算符和邏輯運算符關系運算符和邏輯運算符 關系運算符關系運算符115+4!=20-2不等于不等于!=0a=c等于等于=1w=k大于等于大于等于=0ab大于大于07*2=5小于等

46、于小于等于=11520小于小于結結 果果實實 例例含含 義義運運 算算 符符-30-第第2 2章章 數據類型與表達式數據類型與表達式2.9 關系運算符和邏輯運算符關系運算符和邏輯運算符 在比較時注意以下規則:在比較時注意以下規則: 如果兩個操作數是數值型,則按其大小比較。如果兩個操作數是數值型,則按其大小比較。 如果兩個操作數是字符型,則按字符的如果兩個操作數是字符型,則按字符的asciiascii碼值進行比較,碼值進行比較,即即asciiascii碼值大的字符大。碼值大的字符大。 表中前四種運算符優先級相同,后兩種優先級相同。前四種的表中前四種運算符優先級相同,后兩種優先級相同。前四種的優先

47、級高于后兩種。關系運算符具有自左至右的結合性。優先級高于后兩種。關系運算符具有自左至右的結合性。 關系運算符的優先級低于算術運算符。關系運算符的優先級低于算術運算符。 例例 當當a a的值為的值為2 2時,一個表達式的運算次序及結果如圖時,一個表達式的運算次序及結果如圖2-22-2所示。所示。 11 6 19 1301 a = 7+a* *3圖圖2-2 2-2 運算順序運算順序-31-第第2 2章章 數據類型與表達式數據類型與表達式2.9 關系運算符和邏輯運算符關系運算符和邏輯運算符 邏輯運算符邏輯運算符c c語言中提供了三種邏輯運算符:語言中提供了三種邏輯運算符: 單目邏輯運算符:單目邏輯運

48、算符:! !(邏輯(邏輯“非非”)。)。 雙目邏輯運算符:雙目邏輯運算符:&(邏輯(邏輯“與與”)。)。 雙目邏輯運算符:雙目邏輯運算符:|(邏輯(邏輯“或或”)。)。a ab b! a! a! b! ba & ba & ba | ba | b非非0 0非非0 00 00 01 11 1非非0 00 00 01 10 01 10 0非非0 01 10 00 01 10 00 01 11 10 00 0表表2-7 2-7 邏輯運算的真值表邏輯運算的真值表-32-第第2 2章章 數據類型與表達式數據類型與表達式2.9 關系運算符和邏輯運算符關系運算符和邏輯運算符例例 a=4

49、.5a=4.5,b=5.0b=5.0,c=2.5c=2.5,d=3.0d=3.0圖圖2-3 2-3 運算順序運算順序 1 7.0 8.0 a = 1.0 & a+c b+d | !5 00 0 0-33-第第2 2章章 數據類型與表達式數據類型與表達式2.9 關系運算符和邏輯運算符關系運算符和邏輯運算符 條件運算符條件運算符 條件運算符是條件運算符是c c語言中唯一的三目運算符,一般格式為語言中唯一的三目運算符,一般格式為 表達式表達式1? 1? 表達式表達式2 2 :表達式:表達式3 3 【例【例2-92-9】將大寫字母轉換為小寫字母,可編如下程序實現。將大寫字母轉換為小寫字母,可編

50、如下程序實現。 main()main() char ch char ch; ; scanf(%c,&ch scanf(%c,&ch); /); /* * 輸入一個字符,賦給變量輸入一個字符,賦給變量chch* */ / ch=(ch=a& ch=a& ch=a&chch=(ch=a&ch=z)?(ch+32):ch; =z)?(ch+32):ch; * */ / printf(%c,ch printf(%c,ch);); -34-第第2 2章章 數據類型與表達式數據類型與表達式2.10 位運算符與長度運算符位運算符與長度運算符 原碼、反碼和補碼原

51、碼、反碼和補碼 當真值當真值 x=+xn-2xn-3x=+xn-2xn-3x0 x0時,它的原碼、反碼和補碼完全相同,時,它的原碼、反碼和補碼完全相同, xx原原=x=x反反=x=x補補=0 x=0 xn-2n-2x xn-3n-3x x0 0 當真值當真值x=-xn-2xn-3x=-xn-2xn-3x0 x0時,它的原碼、反碼和補碼與時,它的原碼、反碼和補碼與x x的關系:的關系: 其中其中 表示表示x xi i取反,即取反,即 n n位位032.x1xxxnn原012.1xxxxnn反1.1012xxxxnn補ix01xi1x0 xii當當-35-第第2 2章章 數據類型與表達式數據類型與

52、表達式2.10 位運算符與長度運算符位運算符與長度運算符【例【例2-102-10】假設某計算機的字長為假設某計算機的字長為1616位,試寫出二進制數位,試寫出二進制數+100010+100010和和- -100010100010的原碼、反碼和補碼。的原碼、反碼和補碼。解:解:x=+000000000100010 x=+000000000100010 y=-000000000100010 y=-000000000100010 x x對應的機器數如下:對應的機器數如下:xx原原=x=x反反=x=x補補=0000000000100010=0000000000100010 真值真值y y為負,則有為負

53、,則有 yy原原=1000000000100010=1000000000100010 y y反反=1111111111011101=1111111111011101 y y補補=1111111111011110=1111111111011110【例【例2-112-11】已知】已知xx補補=1111111111110010=1111111111110010,求真值,求真值x x。解:由解:由xx補補求出求出xx反反,則得,則得 xx反反=1111111111110010-1=1111111111110001=1111111111110010-1=1111111111110001 x x原原=10

54、00000000001110=1000000000001110 x x原原對應的符號位為對應的符號位為1 1,故其對應的真值為負,且數值位與原碼各,故其對應的真值為負,且數值位與原碼各位相同,即有位相同,即有 x=(- -000000000001110)2=14-36-第第2 2章章 數據類型與表達式數據類型與表達式2.10 位運算符與長度運算符位運算符與長度運算符 移位運算移位運算符符1 1左移位運算符左移位運算符 e1ne1n例如例如: : x=-32767 x=-32767,手工計算,手工計算x2x2的步驟如下:的步驟如下:第一步:第一步:xx原原=1111111111111111=11

55、11111111111111第二步:第二步:xx反反=1000000000000000=1000000000000000第三步:第三步:xx補補=1000000000000001=1000000000000001第四步:將第四步:將xx補補左移位兩次得左移位兩次得 00000000000001000000000000000100第五步:將上式看作結果數所對應的補碼,求原碼。由于符號位為第五步:將上式看作結果數所對應的補碼,求原碼。由于符號位為0 0,其,其原碼還等于補碼。原碼還等于補碼。第六步:由原碼得到真值為第六步:由原碼得到真值為4 4,這正是,這正是x2x2的運算結果。的運算結果。一般來

56、說,一個整數左移一位,其結果相當于這個整數乘以一般來說,一個整數左移一位,其結果相當于這個整數乘以2 2(數值溢出(數值溢出時例外)。時例外)。例如:例如: -21 -2 e1ne1n注意注意: : 對無符號數,右移時,左邊高位移入對無符號數,右移時,左邊高位移入0 0。 對于有符號的值,如果原來符號位為對于有符號的值,如果原來符號位為0 0(該數為正),則左邊也是移(該數為正),則左邊也是移入入0 0;如果符號位原來為;如果符號位原來為1 1(該數為負),則左邊移入(該數為負),則左邊移入0 0還是還是1 1,要取決,要取決于所用的計算機系統。有的系統移入于所用的計算機系統。有的系統移入0

57、0,有的系統移入,有的系統移入1 1。turbo cturbo c及多及多數數c c編譯系統是移入編譯系統是移入1 1,即保持數的正負性不變。,即保持數的正負性不變。一般來說,一個整數右移一般來說,一個整數右移1 1位,其結果相當于這個整數除以位,其結果相當于這個整數除以2 2。例如:例如: 142142,相當于,相當于1414連續兩次除以連續兩次除以2 2并取整,即其值為并取整,即其值為3 3。-38-第第2 2章章 數據類型與表達式數據類型與表達式2.10 位運算符與長度運算符位運算符與長度運算符 位邏輯運算符位邏輯運算符1 1按位取反運算符按位取反運算符 以以intint型數據為例,若型

58、數據為例,若a a的值為的值為2 2,則,則 aa補補=0000000000000010=0000000000000010按位取反得按位取反得 11111111111111011111111111111101上式對應的原碼為上式對應的原碼為 10000000000000111000000000000011從而知從而知(a)(a)的值為的值為-3-3。2 2按位與運算符按位與運算符& &按位與運算符按位與運算符& &的作用是對兩個操作數按位求邏輯與。的作用是對兩個操作數按位求邏輯與。 0010100000000000 0010100000000000(&)

59、0010110000000000-39-第第2 2章章 數據類型與表達式數據類型與表達式2.10 位運算符與長度運算符位運算符與長度運算符 3 3按位或運算符按位或運算符| | 按位或運算符按位或運算符| |的作用是對兩個操作數按位求邏輯或。的作用是對兩個操作數按位求邏輯或。 4 4按位異或運算符按位異或運算符 按位異或運算符使參加運算的兩個數按位求異或,即當兩個二進位相按位異或運算符使參加運算的兩個數按位求異或,即當兩個二進位相異則結果為異則結果為1 1,相同則結果為,相同則結果為0 0。 0010110000000000 0010100000000000(|)0010110000000000 0000010000000000 0010100

溫馨提示

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

評論

0/150

提交評論