單片機C程序設計2_第1頁
單片機C程序設計2_第2頁
單片機C程序設計2_第3頁
單片機C程序設計2_第4頁
單片機C程序設計2_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機單片機C程序設計程序設計 (C Programming for MCU)第二章第二章 C語言基礎語言基礎2本章內(nèi)容n2.1 C語言字符集與標識符n2.2 常量與變量n2.3 基本數(shù)據(jù)類型n2.4 運算符與表達式n2.5 數(shù)據(jù)的輸入輸出2.1 C語言字符集與標識符3計算機語言的基本體系結構計算機語言的基本體系結構自然語言的基本體系結構自然語言的基本體系結構字符字符詞匯詞匯短語短語句子句子段落段落文章文章基本符號基本符號常量、變量、常量、變量、運算符等運算符等表達式表達式語句語句函數(shù)函數(shù)C C程序程序2.1.1 C語言字符集42626個個小寫字母小寫字母 abcdefghijklmnopqr

2、stuvwxyz 2626個個大寫字母大寫字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 1010個個阿拉伯數(shù)字阿拉伯數(shù)字 0 1 2 3 4 5 6 7 8 9 其他符號其他符號 + - * / = , . _ : ; ? | ! # % & () 空格空格 C語言語言基本字符基本字符2.1.2 C語言標識符5標識符標識符是一個字符序列,用來標識變量名、函數(shù)名是一個字符序列,用來標識變量名、函數(shù)名、數(shù)據(jù)類型等。、數(shù)據(jù)類型等。標識符分為三類:預定義標識符、關鍵字標識符和標識符分為三類:預定義標識符、關鍵字標識符和自定義標識符。自定義標識符。n預定預定義標識符:也叫保留標識符

3、,是系統(tǒng)預先定義義標識符:也叫保留標識符,是系統(tǒng)預先定義好,主要有庫函數(shù)名好,主要有庫函數(shù)名 (如(如main,printf,scanfmain,printf,scanf, , sin,abssin,abs等)、預編譯命令(如等)、預編譯命令(如definedefine、includeinclude)62.1.2 C語言標識符int autogotoiffloatstaticreturnelsecharexternbreakwhileshortregistercontinueforlongdounsignedswitchdoublecasestructdefaultunionvoidenumt

4、ypedefsizeofconstsignedn關鍵字標識符關鍵字標識符: 2.1.2 C語言標識符7n自定義標識符:自定義標識符:標識符標識符可以由大寫字母、小寫字母、下劃線(可以由大寫字母、小寫字母、下劃線(_ _)和)和數(shù)字數(shù)字0 09 9組成,組成,但必須是以大寫字母、小寫字母或下但必須是以大寫字母、小寫字母或下劃線(劃線(_ _)開頭)開頭。大小寫敏感大小寫敏感,標識符的大小寫是有區(qū)別的。,標識符的大小寫是有區(qū)別的。標識符長度:不同編譯器都有自己的規(guī)定,標識符長度:不同編譯器都有自己的規(guī)定,Turbo CTurbo C規(guī)定為規(guī)定為3232個字符,個字符,VCVC編譯器為編譯器為409

5、54095個字符。個字符。自定義標識符自定義標識符不能不能與與關鍵字關鍵字標識符標識符同名同名。2.1.2 標識符命名示例判斷下面哪些是合法的標識符: MyFileSalary 94amountvoid94SalarySalary94$amountf3.5Num_of_Student82.2 變量與常量計算機高級語言中,數(shù)據(jù)有兩種表現(xiàn)形式:在程序執(zhí)行過程中可以改變的量。變量指在程序執(zhí)行中不變的量。常量92.2.1 變量變量的定義 定義變量是用下面的格式語句進行定義的: ; 說明:(1) 變量在使用前必須進行定義。 (2) 在同一個程序塊中,不能有兩個相同的變量名。 (3) 變量名必須符合命名規(guī)

6、則。 變量的初始化程序中常需要對一些變量預先設置初值,這一過程稱為初始化。可以在定義變量時同時使變量初始化,也可以在多個變量的定義語句中單獨對某個變量初始化。例:int len=320; double pos=1.25;注意:一個未初始化的變量不是沒有數(shù)值,而是取決于變量在系統(tǒng)中的存儲形式,它可能是系統(tǒng)的缺省值或無效值。 102.2.2 常量常量:指在程序執(zhí)行中不變的量。如25,-3.26,a,“hello”等整型常量 (1) 十進制整型常量:即十進制整數(shù),如34、128等。(2)八進制整型常量:以0開頭的數(shù),由0至7的數(shù)字組成,如04、012等。(3)十六進制整型常量:以0 x或0X開頭的數(shù)

7、,由0至9、A至F或a至f組成,如0 xFF,0 x16,0 x2C等。需要注意的是:n整型常量中的長整型(long)要以L或小寫字母l作為結尾,如10L,32L等n整型常量中的無符號型(unsigned)要以U或u作為結尾,如10U,32U等。 112.2.2 常量實型常量 實型常量即以文字形式出現(xiàn)的實數(shù),實數(shù)只允許使用十進制,它可以有兩種表示形式:(1) 一般形式:由正負號、數(shù)字和小數(shù)點組成,必須有一個且僅有一個小數(shù)點。如0.0 0.123 .123 -123.0 0.123等。 (2) 指數(shù)形式:采用科學表示法,能表示出很大或很小的浮點數(shù)。 如:32.5 可表示為325E-1、0.325

8、E2n若浮點型常量是以F(或f)結尾的,則表示單精度類型(float),以L(或小寫字母l)結尾的,表示長雙精度類型(long double)。如 0.123F -0.123L 等n若一個浮點型常量沒有任何說明,表示雙精度類型(double)。 如0.123 -0.123等尾數(shù)尾數(shù) e或或E 指數(shù)指數(shù) 1122.2.2 常量字符常量 字符常量是用單引號括起來的一個字符。Aa等n 換行換行 單引號單引號 ()r 回車回車 雙引號雙引號 ()t 水平水平tab 反斜杠反斜杠 ()v 垂直垂直tab0 空值空值b 退格退格ooo 三位八進制數(shù)三位八進制數(shù)f 進紙進紙xhh 兩兩位十六進制數(shù)位十六進制

9、數(shù)C C 轉義字符轉義字符132.2.2 常量h he el ll lo o00 因此,長度為n個字符的字符串常量,在內(nèi)存中占用n+1個字節(jié)。注意事項:字符字符與與字符串字符串不等價。例如:不等價。例如:“A”A”與與AA,前者由兩個字節(jié)組成,前者由兩個字節(jié)組成( (字符字符AA與字符與字符0)0),而后者只有一個字節(jié)。,而后者只有一個字節(jié)。最短的字符串是最短的字符串是空字符串空字符串(“”)(“”),它僅由一個結尾符,它僅由一個結尾符00組成。組成。C C中,沒有字符串類型,而是用中,沒有字符串類型,而是用字符數(shù)組字符數(shù)組來處理字符串。來處理字符串。字符串常量字符串常量 字符串常量是用雙引號

10、(定界符)括起來的一串字符,如“”、“A”、“12.42”、“hello”。C中字符串常量在內(nèi)存中存儲時用字符數(shù)組存放,系統(tǒng)將自動在其尾部追加一個0字符作為結束字符。142.2.2 常量布爾常量布爾常量 布爾型常量的取值只有兩個:false(假)、true(真)符號常量符號常量 用#define定義符號常量。 用const定義的變量代替符號常量,即常變量。例:#default PI 3.14159 const double PI = 3.14159; 152.3 數(shù)據(jù)類型 指針類型指針類型 type* 空類型空類型 void 枚舉類型枚舉類型 enum 結構類型結構類型 struct 聯(lián)合類型

11、聯(lián)合類型 union 函數(shù)類型函數(shù)類型 數(shù)據(jù)數(shù)據(jù)類型類型整型整型 int short long 字符型字符型 char(屬于屬于1字節(jié)的整型字節(jié)的整型) 單精度浮點型單精度浮點型float實型實型 雙精度浮點型雙精度浮點型double 長雙精度浮點型長雙精度浮點型 long double布爾邏輯型布爾邏輯型 bool基本數(shù)基本數(shù)據(jù)類型據(jù)類型非基本非基本數(shù)據(jù)類型數(shù)據(jù)類型16 2.3.1 基本數(shù)據(jù)類型整型(int):用來存放整數(shù),整數(shù)占用的字節(jié)數(shù)與機型有關,32位機上占用4個字節(jié)。字符型(char):用來保存字符,存儲的是該字符的ASCII碼,占用一個字節(jié)。例如字符A的ASCII碼為65,字符a的

12、ASCII碼為97。字符型數(shù)據(jù)從本質上說也是整數(shù),可以是任何一個8位二進制整數(shù)。實型:單精度(float)和雙精度型(double)都用來存放實數(shù),兩者表示的實數(shù)精度不同。 float類型是4字節(jié)的浮點數(shù)。double是8字節(jié)的浮點數(shù),double類型是浮點數(shù)的缺省類型。邏輯型(bool):也稱布爾型,其取值為true和false。布爾型在運算中可以和整型相互轉化,false對應為0,true對應為1或非0。17基本數(shù)據(jù)類型除上述基本數(shù)據(jù)類型外,還有一些類型修飾符,它用來改變基本類型的意義。n修飾符有short(短型符) 、1ong(長型符)、signed(有符號)和unsigned(無符號)

13、。 nshort:只修飾int,short int可省略為shortnlong:修飾int和double, long int可省略為long,一般表示4個字節(jié),修飾long double時,一般表示8字節(jié)。nunsigned和signed:能修飾char, short, int和long。18數(shù)據(jù)類型示例符符號號位位15個數(shù)據(jù)位個數(shù)據(jù)位2個字節(jié)個字節(jié)16個數(shù)據(jù)位個數(shù)據(jù)位2個字節(jié)個字節(jié)19C基本數(shù)據(jù)類型 類型名類型名type 說明說明長度長度 數(shù)據(jù)范圍數(shù)據(jù)范圍 bool布爾邏輯型布爾邏輯型 1 true (1) false(0) char字符型字符型 1 -128127 (0255) unsig

14、ned char無符號字符型無符號字符型 1 0255 signed char有符號字符型有符號字符型 1 -128127signed short int有符號短整型有符號短整型 2-3276832767unsigned short int無符號短整型無符號短整型 2065535signed int有符號整型有符號整型 4-21474836482147483647 unsigned int無符號整型無符號整型 4 04294967295 signed long int有符號長整型有符號長整型 4 -21474836482147483647 unsigned long int無符號長型型無符號長

15、型型 4 04294967295 float浮點型浮點型 4 -3.4*10e383.4*10e38 double雙精度型雙精度型 8 -1.7*10e3081.7*10e308long double長雙精度型長雙精度型8/ 10至少與至少與double類型范圍相同類型范圍相同212.3.2 類型轉換nC語言類型轉換通常是自動的語言類型轉換通常是自動的- 隱式隱式(自動自動)類型轉換類型轉換1)字符與整數(shù))字符與整數(shù)可以用整數(shù)的地方就可以用字符。可以用整數(shù)的地方就可以用字符。而整數(shù)轉換成字符時,超出而整數(shù)轉換成字符時,超出8位就將高位丟掉。位就將高位丟掉。2)浮點數(shù)與整數(shù))浮點數(shù)與整數(shù)3)無符

16、號整數(shù))無符號整數(shù)一般整數(shù)(一般整數(shù)(int)和無符號整數(shù)()和無符號整數(shù)(unsigned)混合使用,)混合使用,則簡單整數(shù)轉換成無符號整數(shù)。則簡單整數(shù)轉換成無符號整數(shù)。222.3.2 類型轉換4)算術轉換)算術轉換如果一個運算符,有不同類型的運算對象,那么如果一個運算符,有不同類型的運算對象,那么“較低較低”類型會自動轉換成類型會自動轉換成“較高較高”類型。類型。此外,賦值號右邊表達式的類型會自動轉換為賦值號左邊此外,賦值號右邊表達式的類型會自動轉換為賦值號左邊變量類型變量類型。如,n+1.5結果將為double類型232.3.2 類型轉換n強制類型轉換(強制類型轉換(cast)- 顯式類

17、型轉換顯式類型轉換()如:x = sqrt(double) n ); a=(int)b;2.4 運算符和表達式 1 算術運算符 算術運算符如下所示:+(正號運算符,如+4,+1.23等)-(負號運算符,如-4,-1.23等)*(乘法運算符,如6*8,1.4*3.56等)(除法運算符,如6/8,1.4/3.56等)%(模運算符或求余運算符,如40%11等)+(加法運算符,如6+8,1.4+3.56等)-(減法運算符,如6-8,1.4-3.56等) +(增1,如i+)-(減1,如i-) 2442.4 運算符和表達式 (1) 除法運算 兩個整數(shù)相除,結果為整數(shù),如7/5的結果為1,它是將小數(shù)部分去掉

18、,而不是四舍五入;若除數(shù)和被除數(shù)中有一個是浮點數(shù),則進行浮點數(shù)除法,結果是浮點型。如7/5.0、7.0/5、7.0/5.0的結果都是1.4。(2) 求余運算 求余運算要求參與運算的兩個操作數(shù)都是整型,結果是兩個數(shù)相除的余數(shù)。例如40%5的結果是0,40%11的結果是7。要理解負值的求余運算,例如40%-11結果是7,-40%11結果是-7, -40%-11結果也是-7。 2552.4 運算符和表達式 (3) 優(yōu)先級算術運算符算術運算符運算運算優(yōu)先級別優(yōu)先級別()()改變正常優(yōu)先級1-,+,-負號、增1、減1 (單目運算符單目運算符)2*, /, %乘法、除法、求余(雙目運算符雙目運算符)3+,

19、 -加、減法(雙目運算符雙目運算符)4單目運算符只有一個操作數(shù),雙目運算符有兩個操作數(shù)。如:i+; /1個操作數(shù)i a+b;/有a和b兩個操作數(shù)2662.4 運算符和表達式 2 賦值運算符 = 例:a=a+1;n符合賦值運算符:+=(加賦值), -=(減賦值), *=(乘賦值), /=(除賦值), %=(取余賦值),&=(按位與賦值), =(按位異或賦值), |=(按位或賦值), =(按位右移賦值)。 例:a+=1; 等價于 a=a+1;n多個變量同時賦初值: 例:int a=3, b=3, c=3; 表示a,b,c都賦初值3,不能寫成: int a=b=c=3; 2772.4運算符和

20、表達式3 數(shù)據(jù)類型轉換n自動轉換(隱式轉換) 將數(shù)據(jù)類型從低到高進行轉換。 例如:2*1.25 2*1.25的運算,將2和1.25都轉換成double型,結果為double型的2.5。n強制轉換(顯示轉換) 強制類型有下列兩種格式:()整型整型(int)無符號整型無符號整型(unsigned)長整型長整型(long)無符號長整無符號長整型型(unsigned long)雙精度浮點雙精度浮點型型(double)短整型短整型,字符字符型型(short, char)單精度浮點單精度浮點型型(float)類型類型轉換的順序轉換的順序2882.3運算符和表達式4 關系運算符 n是比較兩個操作數(shù)是否符合給

21、定的條件。若符合條件,則關系表達式的值為“真”,否則為“假”。n由于關系運算需要兩個操作數(shù),所以關系運算符都是雙目運算符。n提供了6種關系運算符:(小于),(大于),=(大于等于),= =(相等于), ! =(不等于)其中,前4種的優(yōu)先級相同且高于后面的兩種。例如:a = b c 等效于 a = ( b c )2992.3運算符和表達式5 邏輯運算符 n提供了3種邏輯運算符: &邏輯與(雙目):指兩個操作數(shù)都是“真”時,結果為“真”,否則為“假”。 |邏輯或(雙目):指兩個操作數(shù)中有一個是“真”時,結果為“真”,只有它們都為“假”時,結果才為“假”。 ! 邏輯非(單目):指將“真”變“

22、假”,“假”變“真”。n“邏輯非”、“邏輯與”和“邏輯或”的優(yōu)先級依次從高到低,且“邏輯非”的優(yōu)先級還比算術運算符和關系運算符高,而“邏輯與”和“邏輯或”的優(yōu)先級卻比關系運算符要低。n例如: 0 | 8 4 - !0表達式的運算過程是這樣的:(1) 進行“!0”的運算,結果為1(“真”)。(2) 進行“8 4-1”的運算,即“8 3”,結果為0(“假”)。(3) 進行“0|0” 的運算,結果為0(“假”)。表達式的值為0。 302.3運算符和表達式6 位運算符 是對操作數(shù)按其在計算機內(nèi)表示的二制數(shù)逐位地進行邏輯運算或移位運算,參與運算的操作數(shù)只能是整型常量或變量。提供了六種位運算符: (按位求

23、反,單目運算符):將一個二進制數(shù)的每一位求反,即0變成1,1變成0。 (右移,雙目運算符):將左操作數(shù)的二進制值向右移動指定的位數(shù),右移后,移出的低位舍棄。無符號數(shù)高位補0;有符號數(shù)高位補符號位。& (按位與,雙目運算符):將兩個操作數(shù)對應的二進制位進行邏輯與操作。 (按位異或,雙目運算符):將兩個操作數(shù)對應的二進制位進行異或操作。 | (按位或,雙目運算符):將兩個操作數(shù)對應的二進制位進行邏輯或操作。312.3運算符和表達式7 三目運算符 C中唯一的三目運算符是條件運算符,其格式如下: ? :“條件表達式”是C中可以產(chǎn)生“真”和“假”結果的任何表達式,如果條件表達式的結果為“真”,則

24、執(zhí)行表達式1,否則執(zhí)行表達式2。 例如:num = (a b) ? 10 : 8;注意:只有在表達式2后面才能出現(xiàn)分號結束符,“表達式1”和“表達式2”中都不能有分號。 322.3運算符和表達式8 逗號運算符 逗號運算符是優(yōu)先級最低的運算符,它可以使多個表達式放在一行上,從而大大簡化了程序。在計算時,C將從左至右逐個計算每個表達式,最終整個表達式的結果是最后計算的那個表達式的類型和值。例如:j = ( i = 12 , i + 8); /J=20d = (a = 1, b = a + 2, c = b + 3);/d=6332.3運算符和表達式9 sizeof 運算符 sizeof:是返回操作

25、數(shù)所占的內(nèi)存空間大小(字節(jié)數(shù)),具有兩種格式:sizeof()sizeof()例如:sizeof(“Hello”)/ 計算字符串常量“Hello”的實際長度(字符個數(shù)),結果為6sizeof(int)/ 計算整型int所占內(nèi)存的字節(jié)數(shù)說明:由于同一類型的操作數(shù)在不同的計算機中占用的存儲字節(jié)數(shù)可能不同,因此sizeof的結果有可能不一樣。例如sizeof(int)的值可能是4,也可能是2。 34352.3運算符和表達式增(減)量運算符:+,-n依據(jù)運算符與運算對象間的位置,分為前置和后置運算l前置運算是先進行增減量,再取其值。l后置運算是先取其值,再進行增減量運算。如:n = 5;n = 5;x

26、 = +n;x = n+;結果: ? 結果:?x: 6, n: 6x: 5, n: 6像像+,-這類只要求一個運算對象的運算符又稱為單目運算符(這類只要求一個運算對象的運算符又稱為單目運算符(unary operators)。)。+,-運算符在有些書中稱為自增(減)運算符。運算符在有些書中稱為自增(減)運算符。例1_1給出下列程序的輸出結果#include main( )int a, b, c;a = b = c = 0;a = +b + +c;printf(“%d %d %dn”,a, b, c);a = b+ + c+;printf(“%d %d %dn”,a, b, c);a = +b

27、+ c+;printf(“%d %d %dn”,a, b, c);a = b- + -c;printf(“%d %d %dn”,a, b, c);a = +c + c;printf(“%d %d %dn”,a, b, c); /* 2 1 1 */* 2 2 2 */* 5 3 3 */* 5 2 2 */* 不確定,取決于機器實現(xiàn)不確定,取決于機器實現(xiàn) */2.3運算符和表達式3637運算符優(yōu)先級及結合律優(yōu)先級 運算符 結合律 初等量運算符 初等量運算符 1 ( ) . - 單目運算符 2 - ! + - * ( 類型名) sizeof 右結合 單目運算符 雙目運算符 3 * / % 算術運算符 4 + - 5 移位運算符 6 = 關系運算符 7 = != 8 & 按位運算符 9 10 | 11 & 邏輯運算符 12 | 三目運算符 13 ? : 右結合 賦值運算符 14 *= /= %= += -= = &= = |= 右結合 逗號運算符 15 , 38運算符優(yōu)先級及結合律(續(xù))n可以使用()運算符來改變表達式中運算符的計算次序。如:(x+y) / 12if( (x = n) 0)while( (c = getchar() ) != EOF)392.3運算符和表達式n在

溫馨提示

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

最新文檔

評論

0/150

提交評論