




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、12.1 2.1 數據類型數據類型2.2 2.2 常量與變量常量與變量2.3 2.3 運算符與表達式運算符與表達式2.4 2.4 標準輸入標準輸入/ /輸出輸出2.5 2.5 數學函數數學函數2.6 2.6 隨機數發生器函數隨機數發生器函數2.7 2.7 案例應用案例應用2u計算機內部的信息都是用二進制二進制表示u計算機存儲器是用半導體集成電路構成的u有兩種穩定的工作狀態:“導” 與“截止”,即電脈沖的“有”與“無”u分別用“1 1”和“0 0”表示一、數據在計算機中是以二進制形式存儲的3u若相鄰的8個二極管元件中第1,3,5,7個元件處于“導通”狀態,第2,4,6,8個元件處于“截止”狀態,
2、用“10101010”表示。導通導通 截止截止 導通導通 截止截止 導通導通 截止截止 導通導通 截止截止 1 0 1 0 1 0 1 0 4十進制數十進制數二進制數0 001 112 2103 3114 41005 5101十進制數十進制數二進制數6 61107 71118 810009 910011010101001232021202110105u位位(bit) ,又稱“比特” 。每一個二極管元件稱為一個“二進制位”,是存儲信息的最存儲信息的最小單位小單位。它的值是“1”或“0”。u字節字節(byte) ,又稱“拜特” 。一般將8個“二進制位”組織成一組,稱為“字節”。這是人們最常用的存儲
3、單位最常用的存儲單位。二、位、字節和地址6二、位、字節和地址200120022003200420052006 地址:地址:計算機的存儲器包含許多存儲單元,操作系統把所有存儲單元以字節為單位編號。3457897枚舉類型(枚舉類型(enumenum)基本類型基本類型數據類型數據類型構造類型構造類型指針類型指針類型空類型(空類型(voidvoid)整型(整型(intint)實型(浮點型)實型(浮點型)字符型(字符型(charchar)結構體(結構體(structstruct)共用體(共用體(unionunion)單精度實型(單精度實型(floatfloat)雙精度實型(雙精度實型(doubledou
4、ble)數組數組8類型名稱類型名稱類型說明符類型說明符所占所占字節數字節數取值范圍取值范圍有符號基本整型有符號基本整型signed int4-21474836482147483647-232-1232-1-1有符號短整型有符號短整型signed short int2-3276832767-216-1216-1-1有符號長整型有符號長整型signed long int4-21474836482147483647-232-1232-1-1無符號基本整型無符號基本整型unsigned int4042949672950232-1無符號短整型無符號短整型unsigned short int2065535
5、0216-1-1無符號長整型無符號長整型unsigned long int4042949672950232-19 數據存儲時在內存中所占字節數與具體的機器及系統有關。如int類型,在32位系統中Visual C+下所占4個字節,但是在Turbo C下int只占2個字節,表示范圍就是:-3276832767。 編程時,可以用運算符sizeof()求出所使用環境中int類型究竟占用幾個字節。 整數類型是以二進制數據形式存儲的,確整數類型是以二進制數據形式存儲的,確切地說是以二進制補碼形式。切地說是以二進制補碼形式。10u整數的存儲方式u一個十進制整數,先轉換為二進制形式u如整數15,以二進制形式表
6、示是11110 0 0 0 1 1 1 10 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1用一個字節存放用一個字節存放用兩字節存放用兩字節存放負數負數按按補碼補碼形式形式存放存放請問:請問:-15-15又是如何存儲的呢?又是如何存儲的呢?11uC語言中實型也稱為浮點型浮點型,包括單精度單精度實型和雙雙精度精度實型。u實型與整型的區別實型與整型的區別在于是否包含小數部分,比如6是整數類型,6.00是實數類型。類型名稱類型說明符所占字節數有效數字取值范圍(絕對值)單精度實型float4約67位3.410-383.41038雙精度實型double8約1516位1.710-3081.71
7、030812u實數的存儲形式u實型數據按指數形式存儲,分為小數部分(尾數)和指數部分(階碼)分別存放。 u123.456標準化指數形式為0.123456103+.12345+3數符 數值部分指數符號指數13u類型說明符為char。字符型數據只占字符型數據只占1 1個字節個字節,只能存放1個字符,無法存放多個字符組成的字符串,字符串的概念將在后面章節中介紹。u為了處理字符,計算機使用一種數字編碼,用特定的整數表示特定的字符。應用最廣泛的是編碼是ASCIIASCII碼(America Standard Cord for Information Interchange,美國信息交換標準碼) 大寫字母
8、大寫字母A A的的ASCIIASCII碼為碼為6565,小寫字母,小寫字母a a的的ASCIIASCII碼為碼為9797,字符,字符00為為4848。14u字符的存儲方式u對于字符,按ASCII代碼存放uA的ASCII代碼是65(1000001)01000001用一個字節存放用一個字節存放 由于這種與整型數據類似的存儲方式,在由于這種與整型數據類似的存儲方式,在1 1個字節個字節(0 0255255)范圍內,字符型數據和整形數據可以)范圍內,字符型數據和整形數據可以通用。通用。15 如果一個數據對象只有幾種可能的取值,可以將這些值一一列舉出來,即定義為枚舉類型枚舉類型。定義的格式為:定義的格式
9、為: enum 枚舉類型名枚舉類型名 枚舉常量枚舉常量1,枚舉常量,枚舉常量2,.,枚舉常量,枚舉常量n;16 C語言的基本數據類型并不能滿足實際應用中的所有需求,用戶可以利用整型、實型、字符型這些基本數據類型構造滿足需要的數據類型,即構造構造類型。類型。數組類型數組類型構造類型構造類型結構體類型結構體類型共用體類型共用體類型17u指針類型。 指針指針是一種特殊的數據類型,也是很重要的一種數據類型,指針的值指的是內存中的地址值。u空類型 C語言中空類型用void表示,一般用于描述指針以及作為不返回值的函數的返回值類型。 18 在程序所處理的各種數據中,有些數據在程序所處理的各種數據中,有些數據
10、的值在程序使用前可以預先設定并在程序運的值在程序使用前可以預先設定并在程序運行過程中不會發生變化,稱為行過程中不會發生變化,稱為常量常量。有的數。有的數據在程序運行過程中可能會變化,稱為據在程序運行過程中可能會變化,稱為變量變量。 兩者的區別兩者的區別在于數據在程序運行過程中在于數據在程序運行過程中其值是否變化。其值是否變化。19u在程序運行過程中,其值不變的量稱為常量常量。u常量區分為不同的類型:整型常量 100,125,-100,0實型常量 3.14 , 0.125,-3.789字符型常量 a, b,2字符串常量 “a”, “ab”,”1232”u以上四種稱為字面常量字面常量。u還有一種叫
11、符號常量符號常量。20 整型常量即整常數。在語言中,整常數可用以下三種形式表示:u十進制整數:十進制整數:用10個數字09表示,如369, 9652。u八進制整數:八進制整數:以數字0開頭,用8個數字07表示。 如:如:0123表示八進制數123,等于十進制數83,-011表示八進制數-11,即十進制數-9。u十六進制整數:十六進制整數:以0X或0 x開頭(注意是數字0加字母X或x),用10個數字09和6個字母AF(或af)表示。 如:如:0 x123,代表16進制數123,等于十進制數 291。 -0 x12等于十進制數10。 注意:注意:正整數前面的正整數前面的“+”+”號可以省略號可以省
12、略。21常量的后綴表示列舉如下:常量類型常量類型十進制數十進制數 八進制八進制 十六進制十六進制十進制的值十進制的值 長整型長整型 12L 014L 0XCL 12無符號整型無符號整型 15u 017u 0 xfu 15注意:注意:C把大多數整數常量識別為int類型,如果整數特別大,將會有不同的處理。比如,在程序中使用254時,通常會識別為int類型。當使用的整數超出了int類型的范圍時,則識別為long類型。 22實型常量的表示形式:十進制形式:十進制形式:由數字由數字0 09 9和小數點組成(必須有小數點)。和小數點組成(必須有小數點)。 如:如:0.123 指數形式:由尾數、指數形式:由
13、尾數、E E(或(或e e)和整數指數(階碼)組成。)和整數指數(階碼)組成。 如:如:3e-3注意注意: :u整數或小數部分的數字可以省略,但二者不能同時省略并且小數點不能省略。 u字母e(或E)之前必須有數字,且e后面的指數必須為整數。23u在實型常量中不能有空格。u默認狀態下,實型常量被識別為雙精度(double)類型。可以使用后綴F或f表示單精度(float)類型,后綴L或l表示長雙精度(long double)類型。比如123.56是double類型,123.56f是float類型,1.2356E2L是long double類型。 24(1)用單引號括起來的一個字符是字符型常量。字符
14、型常量。(2)只能包含一個字符。注意:注意:使用字符常量時要注意數字字符和數使用字符常量時要注意數字字符和數字的區別,例如,寫法字的區別,例如,寫法55表示符號表示符號5 5,而,而不是數值不是數值5 5,字符,字符5 5的的ASCIIASCII碼值是碼值是5353。a,Aa,A, 1, 1abcabc、“a”a”25 有些以有些以“”開頭的特殊字符稱為開頭的特殊字符稱為轉義字符轉義字符。n 換行t 橫向跳格r 回車 反斜杠ddd ddd表示1到3位八進制數字xhh hh表示1到2位十六進制數字u0 0 與與00是有區別的是有區別的u字符類型的數據也可參與四則運算字符類型的數據也可參與四則運算
15、26字符串常量是一對雙撇號括起來的字符序列.合法的字符串常量合法的字符串常量: :How do you do.How do you do., , CHINACHINA, a a, $123.45$123.45可以輸出一個字符串,如printf(How do you do.);注意:注意:a表示的是一個字符串常量表示的是一個字符串常量 a表示的是一個字符常量表示的是一個字符常量27字符串常量與字符常量的區別:字符串常量與字符常量的區別:(1)(1)字符常量是由單引號括起來,而字符串常量則是由雙引號字符常量是由單引號括起來,而字符串常量則是由雙引號括起來。括起來。(2)(2)字符常量只能表示一個字
16、符,而字符串常量則可以包含字符常量只能表示一個字符,而字符串常量則可以包含1 1個或多個字符。個或多個字符。(3)(3)可以將可以將1 1個字符常量賦值給一個字符變量,但不能將個字符常量賦值給一個字符變量,但不能將1 1個字個字符串常量賦予一個字符變量。符串常量賦予一個字符變量。 (4)(4)字符常量在存儲中只占一個字節,字符串常量占用的存儲字符常量在存儲中只占一個字節,字符串常量占用的存儲空間的字節數等于雙引號中所包含字符個數加空間的字節數等于雙引號中所包含字符個數加1(1(結束符結束符0 )0 )。 28字符串常量與字符常量的區別:字符串常量與字符常量的區別:(5)(5)字符串中可以有轉義
17、字符。字符串中可以有轉義字符。(6)(6)單引號和雙引號只是字符和字符串的定界符,如果字符單引號和雙引號只是字符和字符串的定界符,如果字符常量本身是單引號,則要用轉義字符,如常量本身是單引號,則要用轉義字符,如 。空字符作為字符串常量的結束空字符作為字符串常量的結束aa是一個字符常量是一個字符常量aa是一個字符串常量是一個字符串常量aa029 用一個標識符來代表一個常量,稱為符號常量符號常量。 符號常量在使用前必須先定義,用宏定義的形式,其一般定義格式為定義格式為: #define#define 標識符標識符 常量常量例:例: #define a 20#define a 20定義符號常量名時應
18、盡量做到定義符號常量名時應盡量做到“見名知意見名知意” , #define PRICE 20#define PRICE 2030#include#define PRICE 10 /定義價格符號常量定義價格符號常量PRICEPRICE為為1010void main() int num,total; scanf(“%d”,&num);/輸入購買數量輸入購買數量 total=num*PRICE;/計算總金額計算總金額 printf(“total=%d”,total); 31符號常量的性質和使用方法符號常量的性質和使用方法: :1 1、#define#define不是不是C C語句,該行的末尾
19、沒有分號。它是一個語句,該行的末尾沒有分號。它是一個“預預編譯命令編譯命令”。2 2、不要把符號常量與變量混淆、不要把符號常量與變量混淆, , 符號常量只是一個符號,不符號常量只是一個符號,不占存儲單元。它只是簡單地進行字符置換占存儲單元。它只是簡單地進行字符置換( (如把字符如把字符PRICEPRICE置換為字符置換為字符10)10)。不論置換的字符是否有含義都進行置換。不論置換的字符是否有含義都進行置換。 3 3、習慣上、習慣上, ,符號常量名用大寫符號常量名用大寫, ,變量名用小寫變量名用小寫, ,以示區別。以示區別。 4 4、使用符號常量的好處、使用符號常量的好處 u含義清楚含義清楚
20、u在需要改變一個常量時能做到在需要改變一個常量時能做到“一改全改一改全改”。 32u變量變量是指在程序運行過程中其值可以變化的量。是指在程序運行過程中其值可以變化的量。u語言要求在使用變量之前必須語言要求在使用變量之前必須先進行聲明先進行聲明。u給變量指定一個標識符,這個標識符稱為給變量指定一個標識符,這個標識符稱為變量名變量名;u變量名(標識符)的命名規則:變量名(標識符)的命名規則: 只能由字母、數字或下劃線組成;只能由字母、數字或下劃線組成; 第一個字符必須是字母或下劃線。第一個字符必須是字母或下劃線。33聲明一個變量包括聲明一個變量包括: :u指定該變量的數據類型,該類型決定了變量值的
21、指定該變量的數據類型,該類型決定了變量值的類型、表現形式和占用內存空間,以及對該變量能類型、表現形式和占用內存空間,以及對該變量能執行的運算;執行的運算;u指定變量的存儲類型和變量的作用域。指定變量的存儲類型和變量的作用域。變量聲明的一般形式:變量聲明的一般形式: 存儲類型說明符存儲類型說明符 數據類型說明符數據類型說明符 變量名變量名1 1 , ,變量名變量名2, 2, 變量名變量名3 3, 34變量名必須是一個合法的標識符,還應考慮變量名必須是一個合法的標識符,還應考慮“見名知意見名知意”的原則。的原則。 類型說明符后聲明多個相同類型的變量,各變量之間用類型說明符后聲明多個相同類型的變量,
22、各變量之間用逗號分隔逗號分隔。 變量聲明必須放在變量使用之前,即變量聲明必須放在變量使用之前,即先聲明,后使用先聲明,后使用。/變量聲明示例變量聲明示例#includevoid main() int a,b; /聲明兩個整型變量聲明兩個整型變量a a和和b b char c; /聲明一個字符變量聲明一個字符變量c c float f1,f2; /聲明兩個浮點型變量聲明兩個浮點型變量f1f1,f2f2數據類型說明符數據類型說明符35u聲明變量,只是給變量分配內存空間,存儲空間聲明變量,只是給變量分配內存空間,存儲空間中存放的值是隨機的,變量值不確定的。中存放的值是隨機的,變量值不確定的。uC C
23、語言允許在聲明變量的同時給變量賦值即初始語言允許在聲明變量的同時給變量賦值即初始化變量,這個值為變量的初值。化變量,這個值為變量的初值。 在變量聲明中初始化賦值的一般格式為:在變量聲明中初始化賦值的一般格式為: 存儲類型說明符存儲類型說明符 數據類型說明符數據類型說明符 變量名變量名1=1=值值1 1 , ,變量名變量名2=2=值值2, 2, ; ; 多個變量初始化賦值必須將其分別賦值,即多個變量初始化賦值必須將其分別賦值,即使所賦的值相同也是如此。使所賦的值相同也是如此。 int i=j=20;(錯誤)(錯誤) 應寫成:應寫成: int i=20,j=20;36/變量聲明及初始化變量聲明及初
24、始化#includevoid main() char c1=a,c2=b; / /* *聲明聲明c1c1和和c2c2為字符類型變量,為字符類型變量, c1c1初始化值分別為字符初始化值分別為字符aa、bb* */ / int i=20,j=20,k; / /* *聲明聲明i i,j j和和k k為基本整型變量,為基本整型變量, i i和和j j初始化值為初始化值為2020* */ /float f1=3.6,f2; / /* *聲明聲明f1f1和和f2f2為單精度類型變量,為單精度類型變量, f1f1初始化值為初始化值為3.63.6* */ / 37要注意區別要注意區別變量名變量名和和變量值變
25、量值: int k=26;26k3000存儲單元存儲單元變量名變量名變量地址變量地址變量值變量值38(1)(1)整型變量整型變量 有基本整型、短整型、長整型、無符號基本有基本整型、短整型、長整型、無符號基本整型、無符號短整型、無符號長整型整型、無符號短整型、無符號長整型6 6種。種。 在程序中使用變量,要考慮程序運行的環境和在程序中使用變量,要考慮程序運行的環境和變量的取值范圍,當變量的取值超出變量類型所規變量的取值范圍,當變量的取值超出變量類型所規定的范圍時,會出現錯誤的運算結果。定的范圍時,會出現錯誤的運算結果。/整型變量的定義與使用整型變量的定義與使用#includevoid main(
26、) int a=-10,b=20,c; /聲明基本整型變量聲明基本整型變量a a、b b、c c, /并對并對a,ba,b初始化初始化 unsigned k; /聲明無符號基本整型變量聲明無符號基本整型變量k k scanf(%u,&k); /用用scanfscanf()函數給()函數給k k輸入一個值輸入一個值 c=a+b; /將將a a、b b的和賦值給的和賦值給c c printf(c=%d,k=%un,c,k); /用用printfprintf()函數輸出()函數輸出c c、k k的值的值 39 使用整型變量時要注意它獲取的值不要超過變使用整型變量時要注意它獲取的值不要超過變量
27、的取值范圍,否則會發生量的取值范圍,否則會發生“溢出溢出”。/整型數據的溢出整型數據的溢出#includevoid main() short x=32767,y; y=x+1; printf(x=%d,y=%dn,x,y); 因為一個短整型變量所能表示數因為一個短整型變量所能表示數的范圍是的范圍是-32768-32767-32768-32767,將無法表,將無法表示大于示大于3276732767的數,這種情況叫溢出。的數,這種情況叫溢出。而程序在運行過程中并沒有報錯。而程序在運行過程中并沒有報錯。40(1)(1)實型變量實型變量 分為單精度實型和雙精度實型,兩者的區分為單精度實型和雙精度實型,
28、兩者的區別在于精度即有效數字位數。別在于精度即有效數字位數。/實型變量的有效位數實型變量的有效位數#includevoid main() floata=33.3333333333; double b=12.123456789012345678; printf(a=%21.18fn,a); /格式符格式符%21.18f%21.18f,輸出,輸出a a時總長度時總長度2121位,小數位數占位,小數位數占1818位位 printf(b=%21.18fn,b); float類型的數據只接收類型的數據只接收7 7位有效數字位有效數字 double類型的數據接收類型的數據接收1616位有效數字位有效數字
29、41在使用實型變量時應該注意以下兩種情況:在使用實型變量時應該注意以下兩種情況:實型常量沒有加后綴實型常量沒有加后綴F F(或(或f f)時,系統默認為)時,系統默認為doubledouble類型類型進行處理,具有較高精度,把該實型常量賦值給一個進行處理,具有較高精度,把該實型常量賦值給一個floatfloat類型的變量時,系統會截取相應的有效位數進行賦值。類型的變量時,系統會截取相應的有效位數進行賦值。應避免將很大的數和一個很小的數進行加減運算,否則會應避免將很大的數和一個很小的數進行加減運算,否則會丟失丟失“較小較小”的數。的數。/實型數據的舍入誤差。實型數據的舍入誤差。#includev
30、oid main() float a=123456789.0,b; b=a+1; printf(a=%fn,a); printf(b=%fn,b); 只能保證前只能保證前7 7位是準確的,位是準確的,后面幾位是無效數字,后面幾位是無效數字,把把1 1加在無效數字上,加在無效數字上,是無意義的。是無意義的。 42(1)(1)字符型變量字符型變量u每個字符變量每個字符變量占占一個字節的內存空間,存放一個字符,即一個字節的內存空間,存放一個字符,即字符變量的取值是一個字符常量。字符變量的取值是一個字符常量。u可以把字符型數據作為整型數據進行處理。允許對整型變可以把字符型數據作為整型數據進行處理。允許
31、對整型變量賦以字符值,也允許對字符變量賦以整型值。量賦以字符值,也允許對字符變量賦以整型值。u在輸出時,允許把字符變量按整型形式輸出,也允許把整在輸出時,允許把字符變量按整型形式輸出,也允許把整型數據按字符形式輸出。型數據按字符形式輸出。u注意,整型為注意,整型為4 4個字節,字符為個字節,字符為1 1個字節,當整型按字符型個字節,當整型按字符型量處理時,只有低八位參與處理。量處理時,只有低八位參與處理。/字符型變量示例字符型變量示例#includevoid main() char a,b; a=x; b=y; a=a-32; b=b-32; printf(%c,%cn%d,%dn,a,b,a
32、,b); 432.3.1 2.3.1 運算符運算符2.3.2 2.3.2 表達式表達式2.3.3 2.3.3 類型轉換類型轉換44語言語言的運算符有以下幾類:的運算符有以下幾類:算術運算符算術運算符 (+ - + - * * / % / %)關系運算符關系運算符 ( ! !)邏輯運算符邏輯運算符 (!(!|)位運算符位運算符 ( | |)賦值運算符賦值運算符 (及其擴展賦值運算符)(及其擴展賦值運算符)條件運算符條件運算符 (?:)(?:)逗號運算符逗號運算符 ( (,),)(8)(8)指針運算符指針運算符 (* *和)和)(9)(9)求字節數運算符()求字節數運算符()(10)(10)強制類
33、型轉換運算符(強制類型轉換運算符( ( (類型)類型) ) )(11)(11)分量運算符(分量運算符(-)(12)(12)下標運算符()下標運算符()(13)(13)其他其他 (如函數調用運算符()(如函數調用運算符()45使用運算符需要注意以下幾點:使用運算符需要注意以下幾點:運算符的功能運算符的功能對操作數(即運算對象)的要求對操作數(即運算對象)的要求u操作數的個數;操作數的個數;u操作數的數據類型。操作數的數據類型。運算符的優先級別運算符的優先級別運算符的結合方向運算符的結合方向運算結果運算結果參見附錄參見附錄B B46u (加法運算符,或正值運算符。如(加法運算符,或正值運算符。如:
34、 :、)、)u (減法運算符,或負值運算符。如(減法運算符,或負值運算符。如: :、)、)u* * (乘法運算符。如(乘法運算符。如: :* *)u (除法運算符。兩個整數相除的結果為整數,(除法運算符。兩個整數相除的結果為整數, 如如: :結果為)結果為)u (模運算符,或稱求余運算符,兩側均應為整型數(模運算符,或稱求余運算符,兩側均應為整型數據,如據,如: :的值為)。的值為)。注:注:1 1、/:/:如果兩個整數相除,結果為整數(整除),結果如果兩個整數相除,結果為整數(整除),結果“向零取向零取整整”。 例:例:8/5=18/5=1,8/-5=-18/-5=-1,-8/5=-1-8/
35、5=-1,8.0/5=1.68.0/5=1.6。 2 2、%:%:結果的符號與被除數符號相同。結果的符號與被除數符號相同。 例:例:8%5=38%5=3,-8%5=-3-8%5=-3,8%-5=38%-5=3。47u作用是使變量的值增或減作用是使變量的值增或減u+i+i,-i-i:在使用:在使用i i之前,先使之前,先使i i的值加(減)的值加(減)1 1ui+i+,i-i-:在使用:在使用i i之后,使之后,使i i的值加(減)的值加(減)1 1 注:注:由于自增和自減可以改變操作數自身的值,因此其由于自增和自減可以改變操作數自身的值,因此其運算對象只能是一個變量運算對象只能是一個變量。整型
36、、實型、字符型、。整型、實型、字符型、指針類型變量均可作為其運算對象。指針類型變量均可作為其運算對象。變量x初值表達式運算后x的值運算后表達式的值2+x332x+322-x112x-1248/自增自減綜合應用自增自減綜合應用#includevoid main() int i=8; printf(“%dn”,+i); printf(%dn,-i); printf(“%dn”,i+); printf(“%dn”,i-); printf(%dn,-i+); printf(“%dn”,-i-); printf(%dn,i); /輸出輸出9 9/輸出輸出8/輸出輸出8 8,但,但i i的值為的值為9 9
37、/輸出輸出9,但,但i的值為的值為8/輸出輸出-8-8,但,但i i的值為的值為9 9/輸出輸出-9,相當于,相當于-(i-)/此時輸出多少呢?此時輸出多少呢?49u “”是賦值運算符是賦值運算符u作用是將一個數據賦給一個變量作用是將一個數據賦給一個變量u也可以將一個表達式的值賦給一個變量也可以將一個表達式的值賦給一個變量 例:例:a=20a=20;的作用是;的作用是“將值將值2020賦給變量賦給變量a”a”。 賦值表達式一般形式為:賦值表達式一般形式為: 變量變量 賦值運算符賦值運算符 表達式表達式對賦值表達式對賦值表達式求解的過程求解的過程:求賦值運算符右側的求賦值運算符右側的“表達式表達
38、式”的值的值賦給賦值運算符左側的變量賦給賦值運算符左側的變量50賦值運算符左側的標識符稱為賦值運算符左側的標識符稱為“左值左值” 出現在賦值運算符右側的表達式稱為出現在賦值運算符右側的表達式稱為“右值右值” ” 注意:注意:并不是任何對象都可以作為左值的,表達式和常變量并不是任何對象都可以作為左值的,表達式和常變量就不能作為左值。任何左值都可做右值。就不能作為左值。任何左值都可做右值。賦值表達式賦值表達式“a=3a=3* *5”5”的值為的值為1515,對表達式求解后,對表達式求解后,變量變量a a的值和表達式的值都是的值和表達式的值都是1515“a=(b=5)”a=(b=5)”和和“a=b=
39、5”a=b=5”等價等價“a=b”a=b”和和“b=a”b=a”含義不同含義不同51u兩側類型一致時,直接賦值兩側類型一致時,直接賦值u兩側類型不一致,但都是兩側類型不一致,但都是數值型或字符型數值型或字符型,自動,自動將右側的類型轉換為左側類型后賦值將右側的類型轉換為左側類型后賦值u定義變量時要防止數據溢出定義變量時要防止數據溢出實型實型整型整型:直接取整,舍棄小數部分。直接取整,舍棄小數部分。整型整型實型實型:數值不變,但要補足相應的有效位數。數值不變,但要補足相應的有效位數。字符型字符型整型整型:將將ASCIIASCII碼值賦給最低的碼值賦給最低的8 8位。位。整型整型字符型字符型:只截
40、取最低的只截取最低的8 8位賦給字符型變量。位賦給字符型變量。 52復合的賦值運算符復合的賦值運算符 在賦值符在賦值符“”之前加上其他運算符,可以構之前加上其他運算符,可以構成復合的運算符成復合的運算符 等價于等價于 復合賦值運算符使用一般形式為:復合賦值運算符使用一般形式為: = 等價于:等價于: = /例如:例如:n+=1等價于n=n+1x*=y+1等價于x=x*(y+1)k%=i+k 等價于k=k%(i+k)要加括號要加括號53賦值表達式也可以包含復合的賦值運算符。賦值表達式也可以包含復合的賦值運算符。 例:例: 求解步驟如下求解步驟如下: 先進行先進行“-=-=* *”的運算,的運算,
41、 它相當于它相當于: : * *,a a的值為的值為1212144144132132。 再進行再進行“132”132”的運算,相當于的運算,相當于: : =a+(-132)=a+(-132),a a的值為的值為132-132132-132-264-264。如果變成:如果變成:54關系運算符及其優先次序關系運算符及其優先次序1. (小于)2. (大于)4. = (大于或等于)5. = (等于)6. != (不等于)優先級相同(高)優先級相同(高)優先級相同(低)優先級相同(低)說明:說明:關系運算符的優先級低于算術運算符關系運算符的優先級高于賦值運算符55關系表達式關系表達式 用關系運算符將兩個
42、表達式起來的式子,稱關系表達式。例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值為“真”,表達式的值為1。C C語言中沒有專用語言中沒有專用的邏輯值,的邏輯值,1 1代表代表真,真,0 0代表假代表假56#includevoid main() int a=1,b=2,c=3,d=4; / /* *聲明變量聲明變量a a,b b,c c,d d并初始化并初始化* */ / printf(“%dn”,a+bc+d); printf(“%dn”,a=2*b); printf(“%dn”,ad); printf(“%dn”,a!=(c=d); /結果為假,輸出結果為假,輸出0 0/結果
43、為真,輸出結果為真,輸出1 1/結果為真,輸出結果為真,輸出1 1/結果為真,輸出結果為真,輸出1 1printf(“%dn”,ab&()-&(與與)-|()-|(或或) )邏輯運算符中的邏輯運算符中的“&”&”和和“|”|”低于關系運算符,低于關系運算符,“!”!”高于算高于算 術運算符術運算符58/邏輯運算示例邏輯運算示例#includevoid main() char ch; printf(“input a letter:”); scanf(“%c”,&ch); /*輸入一個字母輸入一個字母*/ if(!(ch=A&ch=a&ch=
44、z) printf(“input error!n”); /*如果輸入的不是字母則提示錯誤如果輸入的不是字母則提示錯誤*/ 不能改成:不能改成:A=ch3&84-!0 自左向右運算自左向右運算 1&01&0邏輯值為邏輯值為0 0838353邏輯值為邏輯值為1 1表達式值為表達式值為0 061邏輯運算的邏輯運算的“短路短路”特性:特性:(1)(1)a&b&c 只有只有a a為真時,才需要判斷為真時,才需要判斷b b的值,的值, 只有只有a a和和b b都為真時,才需要判斷都為真時,才需要判斷c c的值。的值。(2)(2)a|b|c 只要只要a a為真,就不必
45、判斷為真,就不必判斷b b和和c c的值,的值, 只有只有a a為假,才判斷為假,才判斷b b。a a和和b b都為假才判斷都為假才判斷c c。例例: :(m=ab)&(n=cd)當當a=1,b=2,c=3,d=4,ma=1,b=2,c=3,d=4,m和和n n的原值為的原值為1 1時,由于時,由于“ab”ab”的值為的值為0 0,因此,因此m=0m=0,而,而“n=cd”n=cd”不被執行,因此不被執行,因此n n的值不是的值不是0 0而仍保持原值而仍保持原值1 1。62逗號運算符逗號運算符: :將兩個表達式連接起來將兩個表達式連接起來, ,又稱為又稱為“順序求順序求值運算符值運算符
46、”。 如:如:5 5, 一般形式一般形式: : 表達式,表達式表達式,表達式 ,表達式,表達式n n求解過程:求解過程: 先求解表達式,再求解表達式,依次。整個先求解表達式,再求解表達式,依次。整個逗號表達式的值是表達式逗號表達式的值是表達式n n的值。的值。 63例:例:逗號表達式逗號表達式 x=a=2*3,a*4,a+5; 分析分析: :賦值運算符優先級高于逗號運算符,先計算子表達賦值運算符優先級高于逗號運算符,先計算子表達式式x=a=2x=a=2* *3 3,a a和和x x被賦值為被賦值為6 6,再計算子表達式,再計算子表達式a a* *4 4,值為值為2424,最后計算子表達式,最后
47、計算子表達式a+5a+5,值為,值為1111,整個表達,整個表達式的結果取子表達式式的結果取子表達式a+5a+5的值,即的值,即1111。 例:例:逗號表達式逗號表達式 x=(a=2*3,a*4,a+5); 分析分析: :先計算括號中的逗號表達式先計算括號中的逗號表達式a=2a=2* *3,a3,a* *4,a+54,a+5,其中先,其中先計算子表達式計算子表達式a=2a=2* *3 3,a a被賦值為被賦值為6 6,再計算子表達式,再計算子表達式a a* *4 4,值為,值為2424,最后計算子表達式,最后計算子表達式a+5a+5,值為,值為1111,整個,整個逗號表達式的結果取子表達式逗號
48、表達式的結果取子表達式a+5a+5的值的值1111,再賦給,再賦給x x。 64條件運算符條件運算符是三目運算符,由兩個符號是三目運算符,由兩個符號“?:?:”組成,組成,需要需要3 3個運算對象。個運算對象。 一般形式一般形式: :表達式表達式1 1?表達式?表達式2 2:表達式:表達式3 3求解過程:求解過程: 若表達式若表達式1 1的值為真(非的值為真(非0 0),則執行表達式),則執行表達式2 2,其結果作為整個條件表達式的值,否則執行表達其結果作為整個條件表達式的值,否則執行表達式式3 3,其結果作為整個條件表達式的值。,其結果作為整個條件表達式的值。65說明:說明:(1).3(1)
49、.3個操作數可以是任意類型表達式。個操作數可以是任意類型表達式。 (2).(2).條件運算符優先級高于賦值運算符條件運算符優先級高于賦值運算符 ,低于關系運算符,低于關系運算符 和算術運算符,位于第和算術運算符,位于第1313優先級。優先級。 (3).(3).條件運算符的結合方向為條件運算符的結合方向為“自右至左自右至左”。 (4).“(4).“表達式表達式2”2”和和“表達式表達式3”3”不僅可以是數值表達式,不僅可以是數值表達式,還可以是賦值表達式或函數表達式。還可以是賦值表達式或函數表達式。(5).(5).如果表達式如果表達式1 1為真,只計算表達式為真,只計算表達式2 2,否則只計算表
50、達,否則只計算表達式式3 3。66/輸入兩個數,求其中較大的數和較小的數。輸入兩個數,求其中較大的數和較小的數。#includevoid main()int a,b,max,min; printf(“input a=”); scanf(“%d”,&a); /*輸入變量輸入變量a*/ printf(“input b=”); scanf(“%d”,&b); /*輸入變量輸入變量b*/ max=ab?a:b; min=ab?a: bc?b:c ; ()67 由于由于C C語言可直接對硬件編程,在系統軟件設計中要語言可直接對硬件編程,在系統軟件設計中要求能對位進行運算,因此,求能對位進
51、行運算,因此,C C語言提供了語言提供了6 6種位運算種位運算符,支持位運算等匯編操作。符,支持位運算等匯編操作。運算符運算符功能功能運算對象個數運算對象個數優先級優先級結合方向結合方向 按位取反按位取反單目單目2 2從右至左從右至左右移位右移位雙目雙目5 5從左至右從左至右& &按位與按位與雙目雙目8 8從左至右從左至右 按位異或按位異或雙目雙目9 9從左至右從左至右| |按位或按位或雙目雙目1010從左至右從左至右68 位邏輯運算符是以數據的二進制數位進行運算,位位邏輯運算符是以數據的二進制數位進行運算,位移動運算是按二進制位數進行左移和右移。移動運算是按二進制位數進行左移
52、和右移。(1)(1)位邏輯運算位邏輯運算ab a a(按(按位取反)位取反)a&ba&b(按(按位與)位與)a|ba|b(按(按位或)位或)abab(按(按位異或)位異或)110110100011011011001000691)1)按位取反按位取反u按位取反,運算符為按位取反,運算符為“”。把該運算對象的。把該運算對象的每個二進制位取反。每個二進制位取反。u例如,例如,5,運算如下(只列出了最低的,運算如下(只列出了最低的8個個二進制位):二進制位):0000010111111010702)2)按位與按位與u按位與,運算符為按位與,運算符為“&”。兩個運算對象中對。兩個
53、運算對象中對應的二進制位都是應的二進制位都是1,則該位結果為,則該位結果為1;否則,;否則,結果為結果為0。按位與運算通常用來對某些二進制。按位與運算通常用來對某些二進制位清位清0或保留某些二進制位。在需要清或保留某些二進制位。在需要清0的位的位置上,將與它進行與運算的運算對象的對應置上,將與它進行與運算的運算對象的對應的二進制位置的二進制位置0,需要保留原值的位置,則將,需要保留原值的位置,則將對應的二進制位置對應的二進制位置1。u例如,要保留例如,要保留155的最低的最低3位不變,其余置位不變,其余置0,可用可用155&7來實現,運算如下(只列出了最來實現,運算如下(只列出了最低的
54、低的8個二進制位):個二進制位):1 0 0 1 1 0 1 1(155的二進制形式)的二進制形式)&0 0 0 0 0 1 1 1 (7的二進制形式)的二進制形式)0 0 0 0 0 0 1 1(結果為(結果為3)713)3)按位或按位或u運算符為運算符為“|”。兩個運算對象中對應的二進。兩個運算對象中對應的二進制位有一個是制位有一個是1,則該位結果為,則該位結果為1;否則,結;否則,結果為果為0。按位或運算通常用來對某些二進制位。按位或運算通常用來對某些二進制位置置1或保留某些二進制位。在需要置或保留某些二進制位。在需要置1的位置的位置上,將與它進行或運算的運算對象的對應的上,將與
55、它進行或運算的運算對象的對應的二進制位置二進制位置1,需要保留原值的位置,則將對,需要保留原值的位置,則將對應的二進制位置應的二進制位置0。u例如,要保留例如,要保留129的最低的最低3位不變,其余置位不變,其余置1,可用可用129|248來實現,運算如下(只列出了來實現,運算如下(只列出了最低的最低的8個二進制位):個二進制位):1 0 0 0 0 0 0 1(129的二進制形式)的二進制形式)|1 1 1 1 1 0 0 0(248的二進制形式)的二進制形式)1 1 1 1 1 0 0 1(結果為(結果為249)724)4)按位異或按位異或u按位異或,運算符為按位異或,運算符為“”。兩個運
56、算對象中。兩個運算對象中對應的二進制位相同(都是對應的二進制位相同(都是1或都是或都是0),則),則該位結果為該位結果為0;不相同則結果為;不相同則結果為1。u例如,例如,155129,運算如下(只列出了最低,運算如下(只列出了最低的的8個二進制位):個二進制位):1 0 0 1 1 0 1 1 (155的二進制形式)的二進制形式)1 0 0 0 0 0 0 1 (129的二進制形式)的二進制形式)0 0 0 1 1 0 1 0(結果為(結果為26)73(2)(2)位移動運算位移動運算位移動運算表達式的位移動運算表達式的語法格式語法格式: 運算數據運算數據 位移動運算符位移動運算符 移動位數移
57、動位數左移位左移位,運算符為,運算符為“”。把左邊的運算數據。把左邊的運算數據的全部向左移指定的位數,高位丟棄,低位的全部向左移指定的位數,高位丟棄,低位補補0。例如,例如,a的值為的值為5,a”。把左邊的運算數據。把左邊的運算數據的全部向右移指定的位數,低位丟棄,對于的全部向右移指定的位數,低位丟棄,對于正數,高位補正數,高位補0,負數的符號位為,負數的符號位為1,最高位,最高位補補1還是補還是補0取決于編譯器,多數情況是補取決于編譯器,多數情況是補1。例如,例如,a的值為的值為15,a2則是把則是把a的二進制位全的二進制位全部向右移動部向右移動2位,即位,即15的二進制的二進制000011
58、11右移右移2位后為位后為00000011(十進制數為(十進制數為3),),相當于相當于a除以除以22取整。取整。75 sizeof()sizeof()運算符運算符,單目運算,第,單目運算,第2 2優先級,優先級,結合方向是從右至左。結合方向是從右至左。一般形式:一般形式: sizeofsizeof(變量名(變量名| |數據類型標識符數據類型標識符| |表達式)表達式) 功能:功能:計算該數據類型變量所占的字節數。計算該數據類型變量所占的字節數。例:例: int a=5;float x=3.2,y=6.4; sizeof(a) 值為:值為:4(4(在在TURBO CTURBO C中為中為2)2
59、) sizeof(char) 值為:值為:1 1 sizeof(x+y) 值為:值為:4 4 sizeof(double) 值為:值為:8 8 76u表達式:表達式:用運算符和括號將運算對象用運算符和括號將運算對象( (也稱操作數)也稱操作數)連接起來的、符合語法規則的式子,稱為表達連接起來的、符合語法規則的式子,稱為表達式。運算對象包括常量、變量、函數等。其中,單式。運算對象包括常量、變量、函數等。其中,單個的常量、變量、函數也稱為表達式。個的常量、變量、函數也稱為表達式。u表達式運算后只會產生一個結果,該結果是具有某表達式運算后只會產生一個結果,該結果是具有某種數據類型的數值。種數據類型的
60、數值。 uC C語言中,運算是自左向右的,運算符執行順序通語言中,運算是自左向右的,運算符執行順序通常由運算符的優先級和結合方向控制。常由運算符的優先級和結合方向控制。 u優先級較高的運算符先于優先級較低的執行,如生優先級較高的運算符先于優先級較低的執行,如生活中常說的先乘除后加減。活中常說的先乘除后加減。 u結合方向則控制具有相同優先級的多個運算符的執結合方向則控制具有相同優先級的多個運算符的執行順序。行順序。77C C語言提供了語言提供了3 3種類型轉換方式:種類型轉換方式: 自動轉換、強制轉換和賦值轉換。自動轉換、強制轉換和賦值轉換。 1 1、自動轉換、自動轉換( (也稱隱式類型轉換也稱隱式類型轉換) )說明:說明: 這種類型轉換是由系統自這種類型轉換是由系統自動進行的。動進行的。必定的轉換必定的轉換轉換的方向轉換的方向78例如,設例如,設folatfola
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 口腔科技能培訓課件
- 小學生科學故事課件
- 2025年初中科學課程標準考試測試卷及參考答案
- 針對2025年鹽湖提鋰的成本優化與產能擴張技術創新報告
- 2025年基因檢測在遺傳性遺傳性骨骼發育不良診斷中的準確性研究報告
- 井下用電安全管理辦法
- 企業員工理發管理辦法
- 鄉鎮稅收分層管理辦法
- 住戶登記制度管理辦法
- 烏海寵物配偶管理辦法
- 煤炭工業礦井建設巖土工程勘察規范
- 2024慢性、重大疾病、肢體傷殘疾病中醫康復方案
- 微生物檢驗潛在風險試題及答案討論
- 法務外包服務協議書
- 中學生零食消費情況調查與分析
- DB63T 2399.2-2025 公路工程施工危險源辨識指南 第2部分:路基工程
- 吉林省吉勤服務集團有限責任公司社會化招聘筆試真題2024
- GB 45189-2025氰化物安全生產管理規范
- TWAA 011-2024 WLAN工業終端性能技術要求
- 新科粵版九年級上冊初中化學全冊課前預習單
- 2025-2030年中國船員服務行業運營現狀及投資前景規劃研究報告
評論
0/150
提交評論