




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三部分單片機(jī)C語(yǔ)言基礎(chǔ)前言
單片機(jī)C語(yǔ)言是人與計(jì)算機(jī)交流的工具,其具有語(yǔ)言簡(jiǎn)潔、結(jié)構(gòu)清晰、語(yǔ)法簡(jiǎn)練、功能強(qiáng)大、可移植性好、表達(dá)和運(yùn)算能力強(qiáng)等。由于C語(yǔ)言的這些優(yōu)點(diǎn),使C語(yǔ)言應(yīng)用面很廣。本章對(duì)單片機(jī)的C語(yǔ)言做一個(gè)簡(jiǎn)單的介紹,主要是針對(duì)單片機(jī)C語(yǔ)言中常用的知識(shí)塊介紹,如C51語(yǔ)言的基礎(chǔ)、運(yùn)算符和表達(dá)式、分支語(yǔ)句、循環(huán)語(yǔ)句、函數(shù)等。3.1C語(yǔ)言基礎(chǔ)3.1.1標(biāo)識(shí)符在編程語(yǔ)言中,標(biāo)識(shí)符是用戶編程時(shí)使用的名字,對(duì)于變量、常量、函數(shù)、語(yǔ)句塊也有名字;我們統(tǒng)統(tǒng)稱之為標(biāo)識(shí)符。簡(jiǎn)單的說(shuō),標(biāo)識(shí)符就是一個(gè)名字。在C語(yǔ)言編程里面標(biāo)識(shí)符由字母(A-Z,a-z)、數(shù)字(0-9)、下劃線“_”組成,并且首字符不能是數(shù)字,但可以是字母或者下劃線。例如正確的標(biāo)識(shí)符:abcd,num1,prj_ts,DSP。C語(yǔ)言中把標(biāo)識(shí)符分為三類:關(guān)鍵字,預(yù)定義標(biāo)識(shí)符,用戶自定義標(biāo)識(shí)符。1、關(guān)鍵字關(guān)鍵字是單片機(jī)C語(yǔ)言編譯系統(tǒng)中已經(jīng)被使用的一批標(biāo)識(shí)符,其有固定的代表意義,不能另作它用。C51語(yǔ)言除了支持ANSI標(biāo)準(zhǔn)C語(yǔ)言中的關(guān)鍵字,還根據(jù)單片機(jī)的結(jié)構(gòu)特點(diǎn)擴(kuò)展了部分關(guān)鍵字(如表3.1.1所示)。3.1C語(yǔ)言基礎(chǔ)表3.1.1C51語(yǔ)言中的關(guān)鍵字。關(guān)鍵字用途說(shuō)明auto存儲(chǔ)種類說(shuō)明用以說(shuō)明局部變量,缺省值為此break程序語(yǔ)句
退出當(dāng)前所在循環(huán)體case程序語(yǔ)句switch語(yǔ)句中的選擇項(xiàng)char數(shù)據(jù)類型說(shuō)明單字節(jié)整型數(shù)或字符型數(shù)據(jù)const存儲(chǔ)類型說(shuō)明在程序執(zhí)行過(guò)程中不可更改的常量值continue程序語(yǔ)句
轉(zhuǎn)向下一次循環(huán)default程序語(yǔ)句switch語(yǔ)句中的失敗選擇項(xiàng)do程序語(yǔ)句構(gòu)成do?while循環(huán)結(jié)構(gòu)double數(shù)據(jù)類型說(shuō)明雙精度浮點(diǎn)數(shù)else程序語(yǔ)句
構(gòu)成if?else選擇結(jié)構(gòu)enum數(shù)據(jù)類型說(shuō)明枚舉extern存儲(chǔ)種類說(shuō)明在其他程序模塊中說(shuō)明了的全局變量float
數(shù)據(jù)類型說(shuō)明單精度浮點(diǎn)數(shù)for程序語(yǔ)句構(gòu)成for循環(huán)結(jié)構(gòu)goto程序語(yǔ)句
構(gòu)成goto轉(zhuǎn)移結(jié)構(gòu)if程序語(yǔ)句構(gòu)成if?else選擇結(jié)構(gòu)3.1C語(yǔ)言基礎(chǔ)表3.1.1C51語(yǔ)言中的關(guān)鍵字。關(guān)鍵字用途說(shuō)明int數(shù)據(jù)類型說(shuō)明基本整型數(shù)long數(shù)據(jù)類型說(shuō)明長(zhǎng)整型數(shù)register存儲(chǔ)種類說(shuō)明使用CPU內(nèi)部寄存的變量return程序語(yǔ)句函數(shù)返回short
數(shù)據(jù)類型說(shuō)明短整型數(shù)signed數(shù)據(jù)類型說(shuō)明有符號(hào)數(shù),二進(jìn)制數(shù)據(jù)的最高位為符號(hào)位sizeof運(yùn)算符計(jì)算表達(dá)式或數(shù)據(jù)類型的字節(jié)數(shù)static存儲(chǔ)種類說(shuō)明靜態(tài)變量struct數(shù)據(jù)類型說(shuō)明
結(jié)構(gòu)類型數(shù)據(jù)switch程序語(yǔ)句構(gòu)成switch選擇結(jié)構(gòu)typedef數(shù)據(jù)類型說(shuō)明重新進(jìn)行數(shù)據(jù)類型定義union數(shù)據(jù)類型說(shuō)明聯(lián)合類型數(shù)據(jù)unsigned數(shù)據(jù)類型說(shuō)明無(wú)符號(hào)數(shù)據(jù)void數(shù)據(jù)類型說(shuō)明
無(wú)類型數(shù)據(jù)volatile數(shù)據(jù)類型說(shuō)明該變量在程序執(zhí)行中可被隱含地改變while程序語(yǔ)句構(gòu)成while和do?while循環(huán)結(jié)構(gòu)bit位標(biāo)量聲明
聲明一個(gè)位標(biāo)量或位類型的函數(shù)sbit位變量聲明聲明一個(gè)可位尋址變量sfr特殊功能寄存器聲明聲明一個(gè)特殊功能寄存器(8位)3.1C語(yǔ)言基礎(chǔ)表3.1.1C51語(yǔ)言中的關(guān)鍵字。sfr16特殊功能寄存器聲明
聲明一個(gè)16位的特殊功能寄存器data存儲(chǔ)器類型說(shuō)明直接尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器bdata存儲(chǔ)器類型說(shuō)明可位尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器idata存儲(chǔ)器類型說(shuō)明
間接尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器pdata存儲(chǔ)器類型說(shuō)明“分頁(yè)”尋址的8051外部數(shù)據(jù)存儲(chǔ)器xdata存儲(chǔ)器類型說(shuō)明8051外部數(shù)據(jù)存儲(chǔ)器code存儲(chǔ)器類型說(shuō)明8051程序存儲(chǔ)器interrupt中斷函數(shù)聲明定義一個(gè)中斷函數(shù)reetrant再入函數(shù)聲明定義一個(gè)再入函數(shù)using寄存器組定義定義8051的工作寄存器組3.1C語(yǔ)言基礎(chǔ)2、預(yù)定義標(biāo)識(shí)符預(yù)定義標(biāo)識(shí)符是指C51語(yǔ)言提供的系統(tǒng)函數(shù)的名字(printf、scanf)和預(yù)編譯處理命令(define、include)。所有的預(yù)處理命令均已#號(hào)開(kāi)頭。例如:#defineN10//宏定義用字符N來(lái)代替數(shù)字10,注意后面不需要加分號(hào)3、用戶自定義標(biāo)識(shí)符當(dāng)用戶在給變量、函數(shù)、數(shù)組和文件等命名時(shí),需要注意一下幾點(diǎn):(1)不能把C語(yǔ)言關(guān)鍵字作為用戶標(biāo)識(shí)符,例如if,for,while,int等。(2)標(biāo)識(shí)符長(zhǎng)度是由機(jī)器上的編譯系統(tǒng)決定的,C51編譯器規(guī)定標(biāo)識(shí)符最長(zhǎng)可達(dá)255個(gè)字符,但只有前面32個(gè)字符在編譯時(shí)有效,因此在編寫源程序時(shí)標(biāo)識(shí)符的長(zhǎng)度不要超過(guò)32個(gè)字符,這對(duì)于一般應(yīng)用程序來(lái)說(shuō)已經(jīng)足夠了。如果要定義一個(gè)名為“顯示”的標(biāo)識(shí)符,可以寫作“dis”或者“DIS”表示。(3)標(biāo)識(shí)符對(duì)大小寫敏感,即嚴(yán)格區(qū)分大小寫。即:“ABC”與“abc”是兩個(gè)不一樣的標(biāo)識(shí)符。(4)標(biāo)識(shí)符命名應(yīng)做到“見(jiàn)名知意”,例如,長(zhǎng)度(length),求和、總計(jì)(sum),圓周率(pi)。3.1C語(yǔ)言基礎(chǔ)3.1.2常量與變量1、常量在程序運(yùn)行過(guò)程中其值始終不變的量稱為常量??梢苑譃檎统A俊?shí)型常量、字符型常量。(1)整數(shù)常量是指直接使用的整型常數(shù),又稱整型常數(shù)或者整數(shù),例如,1,-9等。整數(shù)常量可以是長(zhǎng)整型、短整型、符號(hào)整型和無(wú)符號(hào)整型。C51中常用的有十進(jìn)制數(shù)、十六進(jìn)制。A、十進(jìn)制:十進(jìn)制數(shù)是不需要在其面前加前綴的。十進(jìn)制數(shù)中包含的數(shù)字0—9組成。如45、-5等。B、十六進(jìn)制:常量前面使用數(shù)字0和字母X或x作為前綴,表示該常量是用十六進(jìn)制表示。十六進(jìn)制中所包含的數(shù)字由0—9以及字母A—F組成(十六進(jìn)制數(shù)中的字母可以使用A—F大寫形式,也可以使用a—f小寫形式。如0x3a,0XAF等。)(2)實(shí)型常量又稱實(shí)數(shù),由整數(shù)和小數(shù)部分組成,其中用十進(jìn)制的小數(shù)點(diǎn)隔開(kāi)。表示實(shí)數(shù)的方式由科學(xué)計(jì)數(shù)和指數(shù)方式兩種。A、科學(xué)計(jì)數(shù)方式:使用十進(jìn)制的小數(shù)方法進(jìn)行描述實(shí)型,如0.45、99.123。B、指數(shù)方式:若實(shí)數(shù)非常大或非常小,使用科學(xué)計(jì)數(shù)方式則不利于觀察,此時(shí)可以使用指數(shù)方法顯示實(shí)型變量。使用字母e或者E進(jìn)行指數(shù)顯示,如23e2表示2300,而23e-2表示的是0.23。3.1C語(yǔ)言基礎(chǔ)(3)字符型常量可以分為字符常量和字符串常量。A、字符常量是使用單撇號(hào)括起一個(gè)字符。字符常量分為一般字符常量(例如’a’、’3’、’#’)。和轉(zhuǎn)義字符常量(C語(yǔ)言中表示字符的一種特殊形式,其含義是將反斜杠后面的字符轉(zhuǎn)換成另外的意義,如’\n’表示回車換行)。注意:字符常量’0’的ASCII值是48,大寫字母’A’的ASCII值是65,小寫字母’a’的ASCII值是97。B、字符串常量是用一對(duì)雙撇號(hào)括起來(lái)的字符序列。例如:”Howdoyoudo”、”a”。C語(yǔ)言規(guī)定在每一個(gè)字符串常量的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)根據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符’\0’作為字符串結(jié)束標(biāo)志?!痋0’是一個(gè)ASCII碼為0的字符,是一個(gè)空操作字符,也是一個(gè)不可顯示的字符,稱為空字符。因此,字符串”Howdoyoudo”總共有14個(gè)字符,分別是:(’H’、’o’、’w’、空格、’d’、’o’、空格、’y’、’o’、’u’、空格、’d’、’o’、’\0’)。注意,在寫字符串的時(shí)候不用自己加上’\0’,’\0’字符是系統(tǒng)自動(dòng)加上的。字符串”a”實(shí)際上包含了2個(gè)字符:’\a’和’\0’。3.1C語(yǔ)言基礎(chǔ)2、變量變量是一段特定的計(jì)算機(jī)內(nèi)存,由一個(gè)或者多個(gè)連續(xù)的字節(jié)構(gòu)成。每一個(gè)變量有一個(gè)名字,可以用變量名引用這段內(nèi)存,讀取變量里面的數(shù)據(jù),或者往變量里面寫入一個(gè)數(shù)據(jù)。變量在程序運(yùn)行過(guò)程中其值是可以改變的量。(1)變量的三個(gè)要素包括變量名、變量的地址、變量的類型。變量名:即變量的名字,使用變量名需要注意一下幾點(diǎn)。必須以字母或者是下劃線“_”開(kāi)頭,變量名字只能包含字母、數(shù)字和下劃線;并且C語(yǔ)言中變量名字是區(qū)分大小寫;變量名不能與關(guān)鍵字同名;在相同的作用范圍里面不能有兩個(gè)相同的名字。變量的地址:即變量在計(jì)算機(jī)中的物理地址,通常在變量名字前面加“&”符號(hào)表示取變量的地址。如:&a表示取變量a的地址。變量的類型:表明變量的數(shù)據(jù)類型。每一種類型都用于存儲(chǔ)一種特定的數(shù)據(jù)。如:inta;表明變量a是整型的數(shù)據(jù)類型,所以變量a只能存儲(chǔ)整型的數(shù)據(jù)。3.1C語(yǔ)言基礎(chǔ)(2)變量的定義與初始化變量的定義格式為:數(shù)據(jù)類型變量名表;數(shù)據(jù)類型必須是C語(yǔ)言關(guān)鍵中中規(guī)定的有效數(shù)據(jù)類型,如int、float、char等;變量名表可由一個(gè)或者多個(gè)變量名組成,當(dāng)有多個(gè)變量名組成時(shí),每個(gè)變量名之間使用逗號(hào)隔開(kāi),最后語(yǔ)句以分號(hào)結(jié)束。變量的初始化:定義變量的同時(shí),系統(tǒng)根據(jù)變量的數(shù)據(jù)類型為變量分配存儲(chǔ)的空間,該空間的值有可能是0,也可能是一個(gè)隨機(jī)數(shù),因此在定義了變量后,應(yīng)給變量初始化,通常給變量初始化為0,初始化的方法有以下2種。方法一:先定義再賦值inta,b;a=100;b=50;方法二:定義的同時(shí)初始化inta=100,b=50;注意:變量的定義也稱變量的聲明,C語(yǔ)言中中沒(méi)有字符串型變量,變量的定義要集中放在函數(shù)的開(kāi)始,不要將定義語(yǔ)句與執(zhí)行語(yǔ)句混放。如下面錯(cuò)誤例子:voidmain(){inta;a=10;intb;b=20;ints;s=a+b;}3.1C語(yǔ)言基礎(chǔ)(3)變量的分類
從變量作用域的角度,變量可分為局部變量與全局變量。變量的作用域是指的變量的使用范圍,即變量在程序的哪些部分是可用的。局部變量:在函數(shù)或者復(fù)合語(yǔ)句內(nèi)部定義的變量。局部變量只在本函數(shù)或者復(fù)合語(yǔ)句里面有效。全局變量:在函數(shù)體外面定義的變量。全局變量在定義行開(kāi)始到整個(gè)程序的結(jié)束有效。注意:如果全局變量的作用域與同名局部變量的作用域重疊,那么在重疊的范圍內(nèi),該全局變量無(wú)效。3.1C語(yǔ)言基礎(chǔ)3.1.3數(shù)據(jù)類型數(shù)據(jù)類型是指變量在內(nèi)存的存儲(chǔ)方式,即存儲(chǔ)變量所需的字節(jié)數(shù)以及變量的取值范圍。不同的編譯環(huán)境下數(shù)據(jù)類型的字節(jié)數(shù)不一樣,在C51語(yǔ)言中基本數(shù)據(jù)類型見(jiàn)下表3.1.3。數(shù)據(jù)類型占用的字節(jié)數(shù)取值范圍unsignedchar單字節(jié)0~255char單字節(jié)-128~+127unsignedint雙字節(jié)0~65535int雙字節(jié)-32768~+32767
unsignedlong四字節(jié)
0~4294967295long四字節(jié)
-2147483648~+212147483647float四字節(jié)
±1.175494E-38~±3.402823E+38bit1位
0或1sbit1位
0或1sfr單字節(jié)
0~255sfr16雙字節(jié)字節(jié)0~65535
表3.1.3C51語(yǔ)言中基本數(shù)據(jù)類型3.1C語(yǔ)言基礎(chǔ)1、數(shù)據(jù)類型轉(zhuǎn)換當(dāng)在一個(gè)表達(dá)式中出現(xiàn)不同數(shù)據(jù)類型的變量時(shí),必須進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。C51語(yǔ)言中數(shù)據(jù)類型的轉(zhuǎn)換有兩種方式:自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。(1)自動(dòng)類型轉(zhuǎn)換。不同數(shù)據(jù)類型的變量在運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)將它們轉(zhuǎn)換成同一數(shù)據(jù)類型,再進(jìn)行運(yùn)算。自動(dòng)轉(zhuǎn)換規(guī)則如下:bit→char→int→long→floatsigned→unsigned即參加運(yùn)算的各個(gè)變量都會(huì)轉(zhuǎn)換為它們之中數(shù)據(jù)最長(zhǎng)的數(shù)據(jù)類型。當(dāng)賦值運(yùn)算符左右兩側(cè)類型不一致時(shí),編譯系統(tǒng)會(huì)按上述規(guī)則,自動(dòng)把右側(cè)表達(dá)式的類型轉(zhuǎn)換成左側(cè)變量的類型,再賦值。例如:ints;charb=10;floata=5.5;s=a+b;即運(yùn)算a+b時(shí),先將b的數(shù)據(jù)類型轉(zhuǎn)換為float,a+b等于15.5,然后將15.5賦值給整型的變量s,賦值的時(shí)候,會(huì)先將15.5轉(zhuǎn)換為整型,即得到15,最終s得到的值為15。3.1C語(yǔ)言基礎(chǔ)(2)強(qiáng)制類型轉(zhuǎn)換。根據(jù)程序設(shè)計(jì)的需要,可以進(jìn)行強(qiáng)制類型轉(zhuǎn)換。強(qiáng)制類型轉(zhuǎn)換是利用強(qiáng)制類型轉(zhuǎn)換符將一個(gè)表達(dá)式強(qiáng)制轉(zhuǎn)換成所需要的類型。其格式如下:例如:floata=7.5; (int)a;其中(int)a的值為7。注意:a的值還是7.5,強(qiáng)制類型轉(zhuǎn)換不會(huì)改變變量本身的數(shù)據(jù)類型和值。3.1C語(yǔ)言基礎(chǔ)2、C51中常用的新增數(shù)據(jù)類型有bit和sbitbit位標(biāo)量bit位標(biāo)量是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個(gè)二進(jìn)制位,不是0就是1。bit和int、char等的使用方法差不多,只不過(guò)char是8位二進(jìn)制數(shù)據(jù),bit是1位二進(jìn)制數(shù)而已,都是變量。如:bita=1;定義了一個(gè)位變量a并賦值1,此變量a的值只能為1或者是0;sbit特殊功能寄存器位定義sbit為定義特殊功能寄存器的某一個(gè)位用的,利用它可以訪問(wèn)芯片內(nèi)部的RAM中的可尋址位或特殊功能寄存器中的可尋址位。在單片機(jī)中,常用sbit定義單片機(jī)某一個(gè)引腳。格式:sbit(位變量名)=SFR地址值(或變量名)^位變量地址值如:sbitP1_1=P1^1;//P1_1為P1中的P1.1引腳相當(dāng)于我們?yōu)镻1^1引腳另外取了一個(gè)名字叫做P1_1,這樣我們?cè)谝院蟮某绦蛘Z(yǔ)句中就可以用P1_1來(lái)對(duì)P1.1引腳進(jìn)行讀寫操作了。3.1C語(yǔ)言基礎(chǔ)3.1.4C語(yǔ)言基礎(chǔ)小結(jié)自定義標(biāo)識(shí)符由字母、數(shù)字、下劃線組成,首字符必須是字母或者是下劃線。定義變量的時(shí)候必須注意數(shù)據(jù)類型的使用范圍,常用的數(shù)據(jù)類型有:unsignedchar(0-255),unsignedint(0-65535)。變量有分為局部變量和全局變量,局部變量的使用范圍是在函數(shù)里面或者是復(fù)合語(yǔ)句里面使用,全局變量的使用范圍是從定義開(kāi)始到整個(gè)程序結(jié)束。強(qiáng)制類型轉(zhuǎn)換的格式為:(數(shù)據(jù)類型)表達(dá)式,強(qiáng)制類型并不會(huì)改變表達(dá)式原本的數(shù)據(jù)類型,它只是對(duì)表達(dá)式的數(shù)值做強(qiáng)制類型轉(zhuǎn)換。區(qū)分bit和sbit的使用,bit是定義一個(gè)位變量使用,而sbit可以簡(jiǎn)單的認(rèn)為是定義單片機(jī)的引腳用。3.2運(yùn)算符與表達(dá)式在C51語(yǔ)言中,對(duì)常量或者是變量的處理是通過(guò)運(yùn)算符來(lái)實(shí)現(xiàn),表達(dá)式是由運(yùn)算符和運(yùn)算對(duì)象組成,它是語(yǔ)句的一個(gè)重要的組成因素。C51語(yǔ)言提供的運(yùn)算符很多,構(gòu)成表達(dá)式的種類也很多,下表中列出了部分常用的運(yùn)算符。運(yùn)算符類型中的“目”是指運(yùn)算的對(duì)象。如運(yùn)算的對(duì)象只有一個(gè)的時(shí)候,稱為單目運(yùn)算符;運(yùn)算的對(duì)象有兩個(gè)的時(shí)候,稱為雙目運(yùn)算符;運(yùn)算的對(duì)象有三個(gè)的時(shí)候,稱為三目運(yùn)算符。如: 乘以(*),加號(hào)(+)等屬于雙目運(yùn)算符當(dāng)一個(gè)表達(dá)式中出現(xiàn)了多個(gè)不同的運(yùn)算符或者相同的運(yùn)算符時(shí),運(yùn)算的先后順序先按照運(yùn)算符的優(yōu)先級(jí)分,如果級(jí)別一樣的運(yùn)算符,再按照運(yùn)算符的結(jié)合性分。(1)優(yōu)先級(jí):運(yùn)算符的優(yōu)先級(jí)共有15個(gè)級(jí)別,見(jiàn)表3.2.1
當(dāng)運(yùn)算符級(jí)別不一樣時(shí),優(yōu)先級(jí)別高的運(yùn)算符先運(yùn)算,級(jí)別1為最高。當(dāng)運(yùn)算符級(jí)別一樣時(shí),按照運(yùn)算符的結(jié)合性決定運(yùn)算的先后。(2)結(jié)合性:分為從左至右,從右至左兩種。3.2運(yùn)算符與表達(dá)式3.2運(yùn)算符與表達(dá)式在C51語(yǔ)言中,對(duì)常量或者是變量的處理是通過(guò)運(yùn)算符來(lái)實(shí)現(xiàn),表達(dá)式是由運(yùn)算符和運(yùn)算對(duì)象組成,它是語(yǔ)句的一個(gè)重要的組成因素。C51語(yǔ)言提供的運(yùn)算符很多,構(gòu)成表達(dá)式的種類也很多,下表中列出了部分常用的運(yùn)算符。運(yùn)算符類型中的“目”是指運(yùn)算的對(duì)象。如運(yùn)算的對(duì)象只有一個(gè)的時(shí)候,稱為單目運(yùn)算符;運(yùn)算的對(duì)象有兩個(gè)的時(shí)候,稱為雙目運(yùn)算符;運(yùn)算的對(duì)象有三個(gè)的時(shí)候,稱為三目運(yùn)算符。如: 乘以(*),加號(hào)(+)等屬于雙目運(yùn)算符當(dāng)一個(gè)表達(dá)式中出現(xiàn)了多個(gè)不同的運(yùn)算符或者相同的運(yùn)算符時(shí),運(yùn)算的先后順序先按照運(yùn)算符的優(yōu)先級(jí)分,如果級(jí)別一樣的運(yùn)算符,再按照運(yùn)算符的結(jié)合性分。(1)優(yōu)先級(jí):運(yùn)算符的優(yōu)先級(jí)共有15個(gè)級(jí)別,見(jiàn)表3.2.1當(dāng)運(yùn)算符級(jí)別不一樣時(shí),優(yōu)先級(jí)別高的運(yùn)算符先運(yùn)算,級(jí)別1為最高。當(dāng)運(yùn)算符級(jí)別一樣時(shí),按照運(yùn)算符的結(jié)合性決定運(yùn)算的先后。(2)結(jié)合性:分為從左至右,從右至左兩種。3.2運(yùn)算符與表達(dá)式表3.2.1運(yùn)算符的優(yōu)先級(jí)別與結(jié)合性優(yōu)先級(jí)別運(yùn)算符功能結(jié)合性1()[]圓括號(hào)、函數(shù)參數(shù)表數(shù)組元素下標(biāo)從左至右2!~++、--+-*&(類型名)sizeof邏輯非按位取反自增1、自減1求正求負(fù)間接運(yùn)算符求地址運(yùn)算符強(qiáng)制類型轉(zhuǎn)換求所占字節(jié)數(shù)從右至左3*、/、%乘、除、整數(shù)求余從左至右4+、-加、減5<<、>>向左移位、向右移位6<、<=、>、>=小于、小于等于、大于、大于等于7==、!=恒等于、不等于8&按位與9^按位異或10|按位或11&&邏輯與12||邏輯或13?:條件運(yùn)算從右至左14=
、+=、-=、*=、/=、%=、&=、|=簡(jiǎn)單賦值復(fù)合賦值15,逗號(hào)運(yùn)算符從左至右3.2運(yùn)算符與表達(dá)式3.2.1算術(shù)運(yùn)算算術(shù)運(yùn)算符共有8個(gè),分別是:+、-、*、/、%、++、--、-(取負(fù)數(shù))。其中前五個(gè)是雙目算術(shù)運(yùn)算符,后三個(gè)是單目算術(shù)運(yùn)算符。1、雙目算術(shù)運(yùn)算符(+、-、*、/、%)在使用*,/,%的時(shí)候需要注意以下幾點(diǎn)。(1)在乘法運(yùn)算的時(shí)候“*”不能省,也不能寫成“.”和“×”。(2)除法運(yùn)算符號(hào)為“/”,不能寫成“\”。當(dāng)運(yùn)算對(duì)象都為整數(shù)時(shí),結(jié)果也為整數(shù);當(dāng)運(yùn)算對(duì)象中有一個(gè)是小數(shù)時(shí),運(yùn)算結(jié)果也為小數(shù)。(3)求余運(yùn)算符“%”的操作數(shù)必須為整型或者字符型數(shù)據(jù)。求余運(yùn)算符的結(jié)果符號(hào)與被除數(shù)相同。例如:7%5//結(jié)果為2(-7)%5//結(jié)果為-27%(-5)//結(jié)果為23.2運(yùn)算符與表達(dá)式2、單目算術(shù)運(yùn)算符(++、--)單目算術(shù)運(yùn)算符“++”、“--”為自加一自減一運(yùn)算符,“-”為取負(fù)運(yùn)算符。++、--運(yùn)算的對(duì)象可以是整型、實(shí)型變量,不能是常量或者是表達(dá)式。++、--可用作前綴運(yùn)算符,也可用作后綴運(yùn)算符。運(yùn)算符放于操作數(shù)前面表示先自加一自減一后引用,運(yùn)算符放于操作數(shù)后面表示先引用后自加一自減一。例如:if(i++){a=-a;}//后綴,先判斷i的值為真為假,后將i的值自加1if(++i){a=-a;}//前綴,先將i的值自加1,后判斷i的值為真為假建議:不要在一個(gè)表達(dá)式中對(duì)同一個(gè)變量進(jìn)行多次自加一或自減一運(yùn)算,免得出錯(cuò)。例如:(++i)*(i++)*(--i)*(i--)這種表達(dá)式可讀性差,容易出錯(cuò),且在不同的編譯環(huán)境下,運(yùn)算的結(jié)果也有可能不一樣,所以不建議這種編程格式的書(shū)寫。3.2運(yùn)算符與表達(dá)式3.2.2賦值語(yǔ)句賦值運(yùn)算符有兩種:賦值運(yùn)算符(=)和復(fù)合賦值運(yùn)算符(+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=)。結(jié)合性都是從右至左。1、賦值運(yùn)算符在C51語(yǔ)言中,符號(hào)“=”稱為賦值運(yùn)算符。該運(yùn)算符的功能是是將“=”右邊表達(dá)式的值賦值給左邊的變量,其一般形式:變量=表達(dá)式例如:a=5;//將5賦值給變量aa=b+c;//將b加c的結(jié)果賦值給變量a使用賦值運(yùn)算符的時(shí)候應(yīng)注意一下幾點(diǎn):(1)“=”右邊只能是一個(gè)變量,不能是常量和表達(dá)式。例如:5=a//錯(cuò)誤a+b=c//錯(cuò)誤(1)賦值表達(dá)式的值等于“=”左邊變量的值。例如:a=b=6+1;//等同于a=(b=(6+1)),表達(dá)式b=(6+1)的值等于b//的值,也就是7,所以a的值也等于73.2運(yùn)算符與表達(dá)式2、復(fù)合運(yùn)算符其他運(yùn)算符如+、-*、/、%、&、|、^等和賦值運(yùn)算符“=”結(jié)合起來(lái),形成復(fù)合賦值運(yùn)算符。如+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=等,注意,兩個(gè)符號(hào)之間不允許有空格。復(fù)合賦值運(yùn)算符的作用是先將復(fù)合運(yùn)算符右邊表達(dá)式的結(jié)果與左邊的變量進(jìn)行運(yùn)算,然后再將最終結(jié)果賦予左邊的變量。例如:a+=3+1;//等價(jià)于a=a+(3+1)a-=3+1;//等價(jià)于a=a-(3+1)a*=3+1;//等價(jià)于a=a*(3+1)a%=3+1;//等價(jià)于a=a%(3+1)需注意:(1)復(fù)合運(yùn)算符左邊必須是變量。(2)復(fù)合運(yùn)算符右邊的表達(dá)式計(jì)算完成后才參與復(fù)合賦值運(yùn)算。(3)復(fù)合賦值運(yùn)算的優(yōu)先級(jí)符合C語(yǔ)言運(yùn)算符的優(yōu)先級(jí)表,結(jié)合方向?yàn)閺挠业阶蟆?/p>
3、賦值中的數(shù)據(jù)類型轉(zhuǎn)換如果賦值號(hào)兩邊的數(shù)據(jù)類型不一樣,系統(tǒng)會(huì)自動(dòng)將等號(hào)后邊表達(dá)式的值的類型轉(zhuǎn)換為左邊變量的類型,然后再賦值。例如:inta;floatb=5.5;a=b;//a是一個(gè)整型變量,系統(tǒng)會(huì)自動(dòng)將5.5的小數(shù)部分去掉,再賦值給a,a得到53.2運(yùn)算符與表達(dá)式3.2.3關(guān)系運(yùn)算符與邏輯運(yùn)算符關(guān)系運(yùn)算符是判斷兩個(gè)運(yùn)算對(duì)象的關(guān)系是否成立,成立就為真,不成立就為假。邏輯運(yùn)算符是判斷兩個(gè)運(yùn)算對(duì)象的邏輯是對(duì)的還是錯(cuò)的,如果對(duì)的就為真,錯(cuò)的就為假。在C51中規(guī)定,邏輯為真,值就為1;邏輯為假,值就為0。當(dāng)表達(dá)式的值為零,則表達(dá)式為假;表達(dá)式的值為非零,則表達(dá)式為真。1、關(guān)系運(yùn)算符關(guān)系運(yùn)算符有6種關(guān)系,分別為小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等于(==)、不等于(!=)。注意:有兩個(gè)符號(hào)連接起來(lái)的運(yùn)算符,兩個(gè)符號(hào)之間不能有空格。用關(guān)系運(yùn)算符連接起來(lái)的兩個(gè)表達(dá)式稱為關(guān)系表達(dá)式,其一般的形式為:表達(dá)式1關(guān)系運(yùn)算符表達(dá)式2如:若a=1,b=2,c=2,則a>b//關(guān)系不成立,則為假,a>b的值等于0b<=c//關(guān)系成立,則為真,b<=c的等于1b!=c//關(guān)系不成立,則為假,b!=c的值等于03.2運(yùn)算符與表達(dá)式2、邏輯運(yùn)算符邏輯運(yùn)算符有3個(gè),分別是邏輯與(&&)、邏輯或(||)、邏輯非(!)。用邏輯運(yùn)算符連接的表達(dá)式稱為稱為邏輯表達(dá)式。邏輯表達(dá)式的結(jié)果只有真或者假,真就等于1,假就等于0。&&、||都是先計(jì)算左邊表達(dá)式的值,當(dāng)左邊表達(dá)式的值能確定整個(gè)表達(dá)式的值時(shí),就不再計(jì)算右邊表達(dá)式的值。如:a=0&&b;//&&運(yùn)算符的左邊位0,則右邊表達(dá)式b就不再判斷。a=1||b;//||運(yùn)算符的左邊位1,則右邊表達(dá)式b就不再判斷。注意:數(shù)學(xué)中的表達(dá)式a≥x≥b,用C51語(yǔ)言描述應(yīng)該是x大于或者等于b,而且x小魚(yú)或者等于a。正確寫法:x>=b&&x<=a錯(cuò)誤寫法:a>=x>=b例:如果要判斷一個(gè)整型變量是不大于20的偶數(shù),則該表達(dá)式該如何寫?3.2運(yùn)算符與表達(dá)式3.2.4條件運(yùn)算符條件運(yùn)算符“?:”是C51語(yǔ)言中唯一的一個(gè)三目運(yùn)算符,有三個(gè)運(yùn)算對(duì)象,由條件運(yùn)算符組成的式子稱為條件表達(dá)式,其一般的形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3條件表達(dá)式的執(zhí)行過(guò)程為:先計(jì)算表達(dá)式1的值,如果表達(dá)式1的值為非零(即真),則整個(gè)條件表達(dá)式的值等于表達(dá)式2的值,否則,為表達(dá)式3的值。如:a=2,b=3則max=a>b?a:b;//a>b不成立,則條件表達(dá)式的值等于b,所以max得到3注意:條件運(yùn)算符是一對(duì)運(yùn)算符,不能分開(kāi)單獨(dú)使用。3.2運(yùn)算符與表達(dá)式3.2.5表達(dá)式小結(jié)++、--做為前綴,為先執(zhí)行自加自減后引用值;++、--做為后綴,為先引用值后執(zhí)行自加自減。整數(shù)除以整數(shù),結(jié)果還是整數(shù)。賦值運(yùn)算是級(jí)別很低的運(yùn)算符,所以先求賦值運(yùn)算符后邊的表達(dá)式的值,再賦值給左邊的變量,賦值運(yùn)算符左邊不能是常量、表達(dá)式。邏輯表達(dá)式中邏輯與(&&)先計(jì)算運(yùn)算符左邊表達(dá)式的值,如果為假則右邊的表達(dá)式的值不需要再計(jì)算,整個(gè)表達(dá)式為假;邏輯或(||)的先計(jì)算運(yùn)算符左邊表達(dá)式的值,如果為真則右邊的表達(dá)式的值不需要再計(jì)算,整個(gè)表達(dá)式為真。3.3C51語(yǔ)言流程控制語(yǔ)句C51里面提供了豐富的、靈活的控制流程語(yǔ)句,程序主要的控制結(jié)構(gòu)有:順序、選擇、循環(huán)三種基本結(jié)構(gòu)。3.3.1順序結(jié)構(gòu)順序結(jié)構(gòu)是程序中最常見(jiàn)的語(yǔ)句,主要包括了一下幾種語(yǔ)句。1、賦值語(yǔ)句在一條合法的賦值表達(dá)式后面加上一個(gè)分號(hào)(;),這條表達(dá)式就變成了一個(gè)賦值語(yǔ)句。賦值語(yǔ)句的格式:變量=表達(dá)式;例如:a=a++;//將a自加一,然后賦值給a賦值語(yǔ)句可以出現(xiàn)在程序中任意一個(gè)可以放合法語(yǔ)句的地方。2、函數(shù)調(diào)用語(yǔ)句C51語(yǔ)句中,函數(shù)調(diào)用也算是一條合法的語(yǔ)句,函數(shù)調(diào)用的時(shí)候需要將函數(shù)的頭部全部寫,括號(hào)里面寫上實(shí)際參數(shù)值,然后在括號(hào)后面加上一個(gè)分號(hào),作為這條語(yǔ)句的結(jié)束的標(biāo)志。其一般的形式為:函數(shù)名(實(shí)際參數(shù));如:Delay(10);Display(8,5);注:函數(shù)的實(shí)際參數(shù)如果有多個(gè),參數(shù)之間用逗號(hào)隔開(kāi)。3.3C51語(yǔ)言流程控制語(yǔ)句3、復(fù)合語(yǔ)句C51語(yǔ)言中,把多條語(yǔ)句用一對(duì)大括號(hào)括起來(lái)組成的語(yǔ)句稱為復(fù)合語(yǔ)句。其一般的形式為:{語(yǔ)句1;語(yǔ)句2;…;語(yǔ)句n;}如:
{a=1;a++;b=a;}復(fù)合語(yǔ)句雖然后多條語(yǔ)句組成,單仍把復(fù)合語(yǔ)句當(dāng)成一條語(yǔ)句來(lái)看。在任何一個(gè)可以寫一條語(yǔ)句的地方都可以使用復(fù)合語(yǔ)句。在復(fù)合語(yǔ)句里面定義的變量,只能在復(fù)合語(yǔ)句里面使用。注意:復(fù)合語(yǔ)句后面不需要寫分號(hào)。
4、空語(yǔ)句一條語(yǔ)句結(jié)束的結(jié)束符“;”也是一條語(yǔ)句,稱作空語(yǔ)句;空語(yǔ)句在執(zhí)行的時(shí)候不產(chǎn)生任何的動(dòng)作,經(jīng)常用空語(yǔ)句去消耗CPU的執(zhí)行時(shí)間,什么事情都不做,從而達(dá)到延時(shí)的作用。執(zhí)行一條空語(yǔ)句需要一個(gè)機(jī)器周期。3.3C51語(yǔ)言流程控制語(yǔ)句3.3.2分支語(yǔ)句C51語(yǔ)言中的分支語(yǔ)句主要有if語(yǔ)句、if-else語(yǔ)句、switch語(yǔ)句。1、if語(yǔ)句if語(yǔ)句主要有兩種形式:if單分支、if-else雙分支(1)if單分支if語(yǔ)句的一般形式:if(表達(dá)式)語(yǔ)句;if語(yǔ)句的執(zhí)行過(guò)程為:先計(jì)算表達(dá)式的值,如果表達(dá)式的值為真,則執(zhí)行if后面的語(yǔ)句;如果表達(dá)式的值為假,則不執(zhí)行if后面的語(yǔ)句。if語(yǔ)句的執(zhí)行流程圖如圖3.3.1所示:如:if(a>10)a=10;//如果a大于10,則執(zhí)行a=10,如果a不大于1,//則不執(zhí)行a=10圖3.3.13.3C51語(yǔ)言流程控制語(yǔ)句(2)if-else雙分支if-else語(yǔ)句的一般形式:if(表達(dá)式)語(yǔ)句1else語(yǔ)句2if-else語(yǔ)句的執(zhí)行過(guò)程:先計(jì)算表達(dá)式的值,如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,然后if-else語(yǔ)句結(jié)束。如果表達(dá)式的值為假,則執(zhí)行語(yǔ)句2,然后if-else語(yǔ)句結(jié)束。if-else語(yǔ)句的執(zhí)行流程圖如下圖3.3.2所示:例如:if(a>10)b=1;//如果表達(dá)式a>10為真,則執(zhí)行b=1elseb=2;//如果表達(dá)式a>10為假,則執(zhí)行b=2圖3.3.23.3C51語(yǔ)言流程控制語(yǔ)句在使用if選擇語(yǔ)句的時(shí)候應(yīng)注意:(1)如果if后面的語(yǔ)句只有一條,可以不加大括號(hào),如果有兩條或者兩條以上的語(yǔ)句,必須用大括號(hào)把這些語(yǔ)句括起來(lái)。為了增加程序的可讀性,就算語(yǔ)句只有一條,也要用大括號(hào)括起來(lái)。(2)if-else是一對(duì)組合,不能只有else而沒(méi)有if。else總是和離它最近的一個(gè)缺少了else配對(duì)的if進(jìn)行配對(duì)。(3)if-else語(yǔ)句中如果在else后面的語(yǔ)句繼續(xù)加if-else語(yǔ)句,可形成多分支語(yǔ)句。下面是錯(cuò)誤例子:if(a>10);b=1;c=1;elseb=2;錯(cuò)誤例子分析:if后面的語(yǔ)句有三條,分別是空語(yǔ)句;、賦值語(yǔ)句b=1和c=1,從而導(dǎo)致else不能和if配對(duì),所以錯(cuò)誤。修改正確后的程序:if(a>10){b=1;c=1;}else{b=2;}3.3C51語(yǔ)言流程控制語(yǔ)句2、switch語(yǔ)句switch語(yǔ)句的一般形式為:switch(表達(dá)式){ case常量1:語(yǔ)句1;break; case常量2:語(yǔ)句2;break; case常量3:語(yǔ)句3;break;…case常量n:語(yǔ)句n;break;default:語(yǔ)句;break;}switch語(yǔ)句執(zhí)行的過(guò)程:先計(jì)算表達(dá)式的值,并逐個(gè)比較case后面常量的值,當(dāng)與某個(gè)常量的值相等的時(shí)候,就執(zhí)行對(duì)應(yīng)該常量后面的語(yǔ)句,語(yǔ)句執(zhí)行后遇到break語(yǔ)句,就跳出switch語(yǔ)句。如果表達(dá)式的值與所有的case后面的常量的值均不相等時(shí),則執(zhí)行default后面的語(yǔ)句。3.3C51語(yǔ)言流程控制語(yǔ)句使用switch語(yǔ)句需要注意一下幾點(diǎn):(1)case與常量之間至少要空一格,卻每個(gè)case后面的常量的值不能有相同的,否則會(huì)出錯(cuò)。(2)遇到break語(yǔ)句,可以跳出當(dāng)前的switch語(yǔ)句,如果在某一個(gè)case后面沒(méi)有break語(yǔ)句,程序?qū)⒗^續(xù)往下執(zhí)行,直到遇到break語(yǔ)句或者是switch結(jié)束才可以跳出switch語(yǔ)句。(3)default語(yǔ)句也可以缺省。例如:a=P1;switch(a){case0xfe:key=1;break;case0xfd:key=2;break;case0xfb:key=3;break;case0xf7:key=4;break;case0xef:key=5;break;case0xdf:key=6;break;case0xbf:key=7;break;case0x7f:key=8;break;}3.3C51語(yǔ)言流程控制語(yǔ)句3.3.3循環(huán)結(jié)構(gòu)1、for語(yǔ)句for循環(huán)是一種計(jì)數(shù)型循環(huán),適用于循環(huán)次數(shù)已知情況下的循環(huán)結(jié)構(gòu),它采用循環(huán)控制變量來(lái)自動(dòng)控制循環(huán)的次數(shù)。for語(yǔ)句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語(yǔ)句;}for語(yǔ)句執(zhí)行的過(guò)程:(1)執(zhí)行表達(dá)式1;(2)執(zhí)行表達(dá)式2,若表達(dá)式2為真,則執(zhí)行循環(huán)體里面的語(yǔ)句;若表達(dá)式2為假,則退出for循環(huán);(3)執(zhí)行表達(dá)式3;(4)重復(fù)過(guò)程(2)、(3)。其執(zhí)行的流程圖如圖3.3.1所示。表達(dá)式2表達(dá)式1真表達(dá)式3假圖3.3.1例如:for(i=1;i<=100;i++)//先執(zhí)行i=1,再執(zhí)行i<=100是真的,則執(zhí)行循環(huán)體的語(yǔ)句{ //sum=sum+i,然后執(zhí)行i++,再繼續(xù)i<=100表達(dá)式為真為假。sum=sum+i;//因此總共要執(zhí)行循環(huán)體100次。}for語(yǔ)句也可以簡(jiǎn)單的理解為如下形式:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)循環(huán)變量賦初值總是一個(gè)賦值語(yǔ)句,它用來(lái)給循環(huán)控制變量賦初值;循環(huán)條件是一個(gè)關(guān)系表達(dá)式,它決定什么時(shí)候退出循環(huán);循環(huán)變量增量,定義循環(huán)控制變量每循環(huán)一次后按什么方式變化。這三個(gè)部分之間用“;”分開(kāi)。3.3C51語(yǔ)言流程控制語(yǔ)句使用for語(yǔ)句應(yīng)該注意以下幾點(diǎn):(1)for循環(huán)中的“表達(dá)式1(循環(huán)變量賦初值)”、“表達(dá)式2(循環(huán)條件)”和“表達(dá)式3(循環(huán)變量增量)”都是選擇項(xiàng),即可以缺省,但“;”不能缺省。(2)省略了“表達(dá)式1(循環(huán)變量賦初值)”,表示不對(duì)循環(huán)控制變量賦初值。(3)省略了“表達(dá)式2(循環(huán)條件)”,認(rèn)為表達(dá)式2總是為真的,如不做其它處理時(shí)便成為死循環(huán)。3.3C51語(yǔ)言流程控制語(yǔ)句2、while語(yǔ)句while循環(huán)是一種條件型循環(huán),適用于循環(huán)次數(shù)未知情況下的循環(huán)結(jié)構(gòu)。while的一般形式為:while(表達(dá)式){語(yǔ)句;}while語(yǔ)句執(zhí)行過(guò)程:(1)先執(zhí)行表達(dá)式;(2)如果表達(dá)式為真,則執(zhí)行循環(huán)體里的語(yǔ)句;如果表達(dá)式為假,則退出while語(yǔ)句;(3)重復(fù)步驟(1)和(2)其執(zhí)行的流程圖如圖3.3.2所示表達(dá)式語(yǔ)句真假圖3.3.2例如:求一個(gè)無(wú)符號(hào)整型變量的各個(gè)位數(shù)字之和;while(a>0){ sum=sum+a%10; a=a/10;}3.3C51語(yǔ)言流程控制語(yǔ)句使用while語(yǔ)句需要注意以下幾點(diǎn):(1)while語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。(2)循環(huán)體如包括有一條以上的語(yǔ)句,則必須用{}括起來(lái),組成復(fù)合語(yǔ)句。(3)為了提高程序的可讀性,循環(huán)體如果只有一條語(yǔ)句,也應(yīng)加上{}括起來(lái)。3.3C51語(yǔ)言流程控制語(yǔ)句3、do-while語(yǔ)句do-while語(yǔ)句與while語(yǔ)句使用差不多。While語(yǔ)句是先判斷真假,為真再執(zhí)行。do-while是先執(zhí)行后判斷真假,為真就繼續(xù)執(zhí)行。do-while的一般形式為:do{ 語(yǔ)句}while(表達(dá)式);do-while語(yǔ)句的執(zhí)行過(guò)程:(1)先執(zhí)行do后面的語(yǔ)句;(2)執(zhí)行表達(dá)式,如果表達(dá)式為假,則退出do-while語(yǔ)句;如果表達(dá)式為真,則回到(1)繼續(xù)執(zhí)行。do-while語(yǔ)句執(zhí)行的流程圖如圖3.3.3所示:圖3.3.3例如:do{i++; }while(i<100);語(yǔ)句表達(dá)式真假3.3C51語(yǔ)言流程控制語(yǔ)句使用do-while語(yǔ)句要注意以下兩點(diǎn):(1)do-while語(yǔ)句的表達(dá)式后面必須加分號(hào);(2)do-while語(yǔ)句是先執(zhí)行,后判斷語(yǔ)句;3.3.4C51語(yǔ)言流程控制語(yǔ)句小結(jié)順序結(jié)構(gòu)包括:賦值語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句;分支語(yǔ)句包括:if語(yǔ)句、if-else語(yǔ)句、switch語(yǔ)句;循環(huán)語(yǔ)句包括:for循環(huán)語(yǔ)句、while循環(huán)語(yǔ)句。輔助語(yǔ)句:break語(yǔ)句、continue語(yǔ)句。3.4函數(shù)
函數(shù)是C語(yǔ)言程序中最基本的組成單位,每個(gè)程序都是由函數(shù)組成。main()也算是一個(gè)函數(shù),只不過(guò)它比較特殊,編譯時(shí)以它做為程序的開(kāi)始段。函數(shù)體現(xiàn)了C語(yǔ)言模塊化的優(yōu)點(diǎn),一般功能較多的程序,會(huì)在編寫程序時(shí)把每項(xiàng)單獨(dú)的功能分成數(shù)個(gè)子程序模塊,每個(gè)子程序就能用函數(shù)來(lái)實(shí)現(xiàn)。函數(shù)還能被反復(fù)的調(diào)用,因此一些常用的函數(shù)能做成函數(shù)庫(kù)以供在編寫程序時(shí)直接調(diào)用,從而更好的實(shí)現(xiàn)模塊化的設(shè)計(jì),大大提高編程工作的效率。
3.4.1函數(shù)的定義通常C語(yǔ)言的編譯器會(huì)自帶標(biāo)準(zhǔn)的函數(shù)庫(kù),這些都是一些常用的函數(shù),Keiluv[這是什么?請(qǐng)作者介紹補(bǔ)充或者刪去。]中也不例外。標(biāo)準(zhǔn)函數(shù)已由編譯器軟件商編寫定義,使用者直接調(diào)用就能了,而無(wú)需定義。但是標(biāo)準(zhǔn)的函數(shù)不足以滿足使用者的特殊要求,因此C語(yǔ)言允許使用者根據(jù)需要編寫特定功能的函數(shù),要調(diào)用它必須要先對(duì)其進(jìn)行定義。定義的形式如下:函數(shù)類型函數(shù)名稱(形式參數(shù)表){函數(shù)體}3.4函數(shù)
說(shuō)明:
(1)函數(shù)的類型是函數(shù)執(zhí)行后返回?cái)?shù)值的類型,函數(shù)類型是說(shuō)明所定義函數(shù)返回值的類型。返回值如果是一個(gè)變量,只要按變量類型來(lái)定義函數(shù)類型就行了。如函數(shù)不需要返回值函數(shù)類型,寫作“void”表示該函數(shù)沒(méi)有返回值。注意的是函數(shù)體返回值的類型一定要和函數(shù)類型一致,不然會(huì)造成錯(cuò)誤。
(2)函數(shù)名稱的定義在遵循C語(yǔ)言變量命名規(guī)則的同時(shí),不能在同一程序中定義同名的函數(shù)這將會(huì)造成編譯錯(cuò)誤(同一程序中是允許有同名變量的,因?yàn)樽兞坑腥趾途植孔兞恐?。
(3)形式參數(shù)是指調(diào)用函數(shù)時(shí)要傳入到函數(shù)體內(nèi)參與運(yùn)算的變量,它能有一個(gè)、幾個(gè)或沒(méi)有,當(dāng)不需要形式參數(shù)也就是無(wú)參函數(shù),括號(hào)內(nèi)能為空或?qū)懭搿皏oid”表示,但括號(hào)不能少。
(4)函數(shù)體中一般包含有局部變量的定義和程序語(yǔ)句,如函數(shù)要返回運(yùn)算值則要使用return語(yǔ)句進(jìn)行返回。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)種植確權(quán)管理辦法
- 高層建筑火災(zāi)模擬與人員安全疏散策略研究
- 教育的進(jìn)階之路:學(xué)校改進(jìn)策略與實(shí)踐探索
- 普通設(shè)備租賃管理辦法
- 液氯企業(yè)安全風(fēng)險(xiǎn)隱患排查表
- 景區(qū)物業(yè)收費(fèi)管理辦法
- 電氣工程雙創(chuàng)人才培養(yǎng)模式探討與實(shí)踐
- 重點(diǎn)高校自學(xué)考試課程體系優(yōu)化研究
- 幕墻工程工作總結(jié)
- 高校數(shù)字化資源服務(wù)系統(tǒng)用戶體驗(yàn)優(yōu)化
- translated-NCCN臨床實(shí)踐指南:非小細(xì)胞肺癌(中文版2022.V5)
- GB/T 8312-2002茶咖啡堿測(cè)定
- 通信線路工程施工組織設(shè)計(jì)方案【實(shí)用文檔】doc
- 護(hù)士注冊(cè)健康體檢表下載【可直接打印版本】
- 預(yù)計(jì)財(cái)務(wù)報(bào)表編制及分析課件
- 學(xué)生集體外出活動(dòng)備案表
- Q∕SY 1347-2010 石油化工蒸汽透平式壓縮機(jī)組節(jié)能監(jiān)測(cè)方法
- 西門子順序功能圖語(yǔ)言S7-Graph的應(yīng)用
- 中醫(yī)治療室工作制度管理辦法
- 提花裝造工藝技術(shù)培訓(xùn)課程
- 直播傳媒公司簡(jiǎn)介PPT課件(參考)
評(píng)論
0/150
提交評(píng)論