51單片機(jī)C語(yǔ)言簡(jiǎn)介81_第1頁(yè)
51單片機(jī)C語(yǔ)言簡(jiǎn)介81_第2頁(yè)
51單片機(jī)C語(yǔ)言簡(jiǎn)介81_第3頁(yè)
51單片機(jī)C語(yǔ)言簡(jiǎn)介81_第4頁(yè)
51單片機(jī)C語(yǔ)言簡(jiǎn)介81_第5頁(yè)
已閱讀5頁(yè),還剩97頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第7章 51單片機(jī)C語(yǔ)言簡(jiǎn)介 7.1 C語(yǔ)言的根本知識(shí) 7.2 C51程序設(shè)計(jì)的根本語(yǔ)法 7.3 C51程序設(shè)計(jì) 7.4 函數(shù) 7.5 模塊化程序設(shè)計(jì) 7.6 C51編程實(shí)例 7.1 C語(yǔ)言的根本知識(shí) 7.1.1 C語(yǔ)言的特點(diǎn)與程序結(jié)構(gòu) 以前計(jì)算機(jī)的系統(tǒng)軟件主要是用匯編語(yǔ)言編寫(xiě)的,對(duì)于單片機(jī)應(yīng)用系統(tǒng)來(lái)說(shuō)更是如此。由于匯編語(yǔ)言程序的可讀性和可移植性都較差,采用匯編語(yǔ)言編寫(xiě)單片機(jī)應(yīng)用系統(tǒng)程序的周期長(zhǎng),而且調(diào)試和排錯(cuò)也比較困難。為了提高編制計(jì)算機(jī)系統(tǒng)和應(yīng)用程序的效率,改善程序的可讀性和可移植性,最好采用高級(jí)語(yǔ)言編程。C語(yǔ)言既具有一般高級(jí)語(yǔ)言的特點(diǎn),又能直接對(duì)計(jì)算機(jī)的硬件進(jìn)行操作,并且采用C語(yǔ)言編寫(xiě)的

2、程序能夠很容易地在不同類(lèi)型的計(jì)算機(jī)之間進(jìn)行移植。與其它計(jì)算機(jī)高級(jí)語(yǔ)言相比,C語(yǔ)言具有它自身的特點(diǎn): 1語(yǔ)言簡(jiǎn)潔,使用方便靈活。 2可移植性好。 3表達(dá)能力強(qiáng)。 4可進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)。 5可以直接操作計(jì)算機(jī)硬件。 6生成的目標(biāo)代碼質(zhì)量高 。 盡管C語(yǔ)言具有很多的優(yōu)點(diǎn),但和其它任何一種程序設(shè)計(jì)語(yǔ)言一樣,也有其自身的缺點(diǎn),如不能自動(dòng)檢查數(shù)組的邊界,各種運(yùn)算符的優(yōu)先級(jí)別太多,某些運(yùn)算符具有多種用途等。 C語(yǔ)言程序是由假設(shè)干個(gè)函數(shù)單元組成的,每個(gè)函數(shù)都是完成某個(gè)特殊任務(wù)的子程序段。組成一個(gè)程序的假設(shè)干個(gè)函數(shù)可以保存在一個(gè)源程序文件中,也可以保存語(yǔ)言源程序文件的文件名由程序設(shè)計(jì)人員根據(jù)某種俗成規(guī)那么自己

3、確定,其擴(kuò)展名統(tǒng)一為“.C。如A1-1.C、A2-1.C。 C語(yǔ)言程序的開(kāi)始局部通常是預(yù)處理命令,如程序中通常遇到的include命令。這個(gè)預(yù)處理命令通知編譯器在對(duì)程序進(jìn)行編譯時(shí),將所需要的頭文件讀入后再一起進(jìn)行編譯。一般在“頭文件中包含有程序在編譯時(shí)的一些必要的信息,通常C語(yǔ)言編譯器都會(huì)提供假設(shè)干個(gè)不同用途的頭文件。頭文件的讀入是在對(duì)程序進(jìn)行編譯時(shí)才完成的。 C語(yǔ)言程序是由函數(shù)所組成的。一個(gè)完整的C語(yǔ)言程序應(yīng)包含一個(gè)主函數(shù)main和假設(shè)干個(gè)其它功能的函數(shù)。函數(shù)之間可以相互調(diào)用,但main函數(shù)只能調(diào)用其它的功能函數(shù),而不能被其它函數(shù)所調(diào)用。功能函數(shù)可以是C語(yǔ)言編譯器提供的庫(kù)函數(shù),也可以由用戶(hù)按

4、實(shí)際需要自行編寫(xiě)的函數(shù)。不管main函數(shù)處于程序中的什么位置,程序總是從main函數(shù)開(kāi)始執(zhí)行。一個(gè)函數(shù)必須預(yù)先定義或聲明后才能調(diào)用。 函數(shù)定義或聲明位于源程序的預(yù)處理命令之后的開(kāi)始位置。函數(shù)定義局部包括有函數(shù)的存儲(chǔ)類(lèi)型、返回值數(shù)據(jù)類(lèi)型、函數(shù)名、形式參數(shù)說(shuō)明等,函數(shù)名后面必須跟一個(gè)圓括弧,形式參數(shù)說(shuō)明在圓括弧內(nèi)進(jìn)行。函數(shù)也可以沒(méi)有形式參數(shù),如main( )。函數(shù)的位置比較自由??梢杂沙绦蛟O(shè)計(jì)人員安排在函數(shù)定義后的任意位置。函數(shù)由函數(shù)名和一對(duì)花括弧“組成,在“里面的內(nèi)容就是函數(shù)體,如果一個(gè)函數(shù)有多個(gè)“,那么最外面的一對(duì)“為函數(shù)體的范圍。 函數(shù)體的內(nèi)容為假設(shè)干條語(yǔ)句,一般有兩類(lèi)語(yǔ)句,一類(lèi)為說(shuō)明語(yǔ)句,

5、用來(lái)對(duì)函數(shù)中將要用到的變量進(jìn)行定義;另一類(lèi)為執(zhí)行語(yǔ)句,用來(lái)完成一定的功能或算法處理。有的函數(shù)體僅有一對(duì)“,其中既沒(méi)有變量定義語(yǔ)句,也沒(méi)有執(zhí)行語(yǔ)句,這也是合法的,稱(chēng)為“空函數(shù)。 C語(yǔ)言源程序可以采用任何一種編輯器來(lái)編寫(xiě),既可以是windows環(huán)境下的編輯器,如記事本NOTEPAD或?qū)懽职錡ORDPAD,也可以是DOS環(huán)境下的編輯器,如EDIT或PE等。C語(yǔ)言程序的書(shū)寫(xiě)格式十分自由。一條語(yǔ)句可以寫(xiě)成一行,也可以寫(xiě)成幾行;還可以在一行內(nèi)寫(xiě)多條語(yǔ)句;但是需要注意的是,每條語(yǔ)句都必須以分號(hào)“;作為結(jié)束符。 另外,C語(yǔ)言區(qū)分大小寫(xiě)字母,C語(yǔ)言編譯器在對(duì)程序進(jìn)行編譯時(shí),對(duì)于程序中同一個(gè)字母的大小寫(xiě)作為不同的

6、變量來(lái)處理。雖然C語(yǔ)言程序不要求具有固定的格式,但我們?cè)趯?shí)際編寫(xiě)程序時(shí)還是應(yīng)該遵守一定的規(guī)那么,一般應(yīng)按程序的功能以“縮格形式來(lái)寫(xiě)程序,同時(shí)還應(yīng)在適當(dāng)?shù)牡胤郊由媳匾淖⑨?。注釋?duì)于比較大的程序來(lái)說(shuō)是十分重要的,這有利于修改與讀懂程序。 C語(yǔ)言本身沒(méi)有輸入輸出功能,C語(yǔ)言程序的輸入和輸出是通過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的。Franklin C51編譯器提供的輸入輸出庫(kù)函數(shù) scanf和 printf是通過(guò) 8051單片機(jī)的串行口實(shí)現(xiàn)的,在程序中使用這種輸入輸出庫(kù)函數(shù)之前必須先對(duì)8051單片機(jī)的串行口進(jìn)行初始化。但是對(duì)于單片機(jī)應(yīng)用系統(tǒng)來(lái)說(shuō),由于具體要求的不同,應(yīng)用系統(tǒng)的輸入輸出方式多種多樣,不可能一律采用串行

7、口作輸入和輸出。因此應(yīng)該根據(jù)實(shí)際需要,由應(yīng)用系統(tǒng)的研制人員自己來(lái)編寫(xiě)滿(mǎn)足特定需要的輸入輸出函數(shù),這一點(diǎn)對(duì)于單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)研制人員來(lái)說(shuō)是十分重要的。 7.1.2 C語(yǔ)言的標(biāo)識(shí)符和關(guān)鍵字 C語(yǔ)言的標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)源程序中某個(gè)對(duì)象名字的。這些對(duì)象可以是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類(lèi)型、存儲(chǔ)方式、語(yǔ)句等。一個(gè)標(biāo)識(shí)符由字符串、數(shù)字和下劃線等組成,第一個(gè)字符必須是字母或下劃線,通常以下劃線開(kāi)頭的標(biāo)識(shí)符是編譯系統(tǒng)專(zhuān)用的,因此在編寫(xiě)C語(yǔ)言源程序時(shí)一般不要使用以下劃線開(kāi)頭的標(biāo)識(shí)符,而將下劃線用作分段符。C51編譯器規(guī)定標(biāo)識(shí)符最長(zhǎng)可達(dá)255個(gè)字符,但只有前面32個(gè)字符在編譯時(shí)有效,因此在編寫(xiě)源程序時(shí)標(biāo)識(shí)符的

8、長(zhǎng)度不要超過(guò) 32個(gè)字符。程序中對(duì)于標(biāo)識(shí)符的命名應(yīng)當(dāng)簡(jiǎn)潔明了,含義清晰,便于閱讀理解,如用標(biāo)識(shí)符“max表示最大值,用“TIMER0表示定時(shí)器0等。 關(guān)鍵字是一類(lèi)具有固定名稱(chēng)和特定含義的特殊標(biāo)識(shí)符,又稱(chēng)為保存字。在編寫(xiě)C語(yǔ)言源程序時(shí)一般不允許將關(guān)鍵字另作別用,換句話說(shuō)就是對(duì)于標(biāo)識(shí)符的命名不要與關(guān)鍵字相同。在C語(yǔ)言中,ANSI C標(biāo)準(zhǔn)一共規(guī)定了32個(gè)關(guān)鍵字,表 7.1按用途列出了 ANSI C標(biāo)準(zhǔn)的關(guān)鍵字。表 7.1 ANSI C標(biāo)準(zhǔn)的關(guān)鍵字關(guān)鍵字 用 途 說(shuō) 明 autobreakcasecharconstcontinue defaultdodoubleelseenumexternfloatf

9、orgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile存儲(chǔ)類(lèi)說(shuō)明程序語(yǔ)句程序語(yǔ)句數(shù)據(jù)類(lèi)型說(shuō)明存儲(chǔ)類(lèi)型說(shuō)明程序語(yǔ)句程序語(yǔ)句程序語(yǔ)句數(shù)據(jù)類(lèi)型說(shuō)明程序語(yǔ)句數(shù)據(jù)類(lèi)型說(shuō)明存儲(chǔ)種類(lèi)說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明程序語(yǔ)句程序語(yǔ)句程序語(yǔ)句數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明存儲(chǔ)種類(lèi)說(shuō)明程序語(yǔ)句數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明運(yùn)算符存儲(chǔ)種類(lèi)說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明程序語(yǔ)句數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明程序語(yǔ)句用以說(shuō)明局部變量退出最內(nèi)層循環(huán)switch語(yǔ)句中的選擇項(xiàng)單字節(jié)整型數(shù)或

10、字符型數(shù)據(jù)在程序執(zhí)行過(guò)程中不可能修改的變量值轉(zhuǎn)向下一個(gè)循環(huán)switch語(yǔ)句中的失敗選擇項(xiàng)構(gòu)成dowhile循環(huán)結(jié)構(gòu)雙精度浮點(diǎn)數(shù)構(gòu)成 ifelse選擇結(jié)構(gòu)枚舉在其它程序模塊中說(shuō)明了的全局變量單精度浮點(diǎn)數(shù)構(gòu)成for循環(huán)結(jié)構(gòu)構(gòu)成goto轉(zhuǎn)移結(jié)構(gòu)構(gòu)成ifelse選擇結(jié)構(gòu)基本整型數(shù)長(zhǎng)整型數(shù)使用CPU內(nèi)部寄存器的變量函數(shù)返回短整型數(shù)有符號(hào)數(shù),二進(jìn)制數(shù)據(jù)的最高位為符號(hào)位計(jì)算表達(dá)式或數(shù)據(jù)類(lèi)型的字節(jié)數(shù)靜態(tài)變量結(jié)構(gòu)類(lèi)型數(shù)據(jù)構(gòu)成switch選擇結(jié)構(gòu)重新進(jìn)行數(shù)據(jù)類(lèi)型定義聯(lián)合數(shù)據(jù)類(lèi)型無(wú)符號(hào)數(shù)據(jù)無(wú)符號(hào)數(shù)據(jù)說(shuō)明該變量在程序執(zhí)行中可被隱含地改變構(gòu)成while和dowhile循環(huán)結(jié)構(gòu) 關(guān)鍵字 用 途 說(shuō) 明bitsbitsfr

11、sfr16databdataidatapdataxdatacodeinterruptUsingreetrant位標(biāo)量聲明位標(biāo)量聲明特殊功能寄存器聲明特殊功能寄存器聲明存儲(chǔ)器類(lèi)型聲明存儲(chǔ)器類(lèi)型聲明存儲(chǔ)器類(lèi)型說(shuō)明存儲(chǔ)器類(lèi)型說(shuō)明存儲(chǔ)器類(lèi)型說(shuō)明存儲(chǔ)器類(lèi)型說(shuō)明中斷函數(shù)說(shuō)明寄存器組定義再入函數(shù)聲明聲明一個(gè)位標(biāo)量或位類(lèi)型的函數(shù)聲明一個(gè)可位尋址變量聲明一個(gè)特殊功能寄存器(8位)聲明一個(gè)16位的特殊功能寄存器直接尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器可位尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器間接尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器“分頁(yè)”尋址的8051外部數(shù)據(jù)存儲(chǔ)器8051外部數(shù)據(jù)存儲(chǔ)器8051程序存儲(chǔ)器定義一個(gè)中斷函數(shù)定義8051工作寄

12、存器組定義一個(gè)再入函數(shù)C51編譯器除了支持ANSI C標(biāo)準(zhǔn)關(guān)鍵字以外,還擴(kuò)展了如表7.2所示的關(guān)鍵字: 表7.2C51編譯器的擴(kuò)展關(guān)鍵字7.1.3 單片機(jī)C51程序的編譯連接與調(diào)試 Franklin C51交叉編譯器是專(zhuān)為8051系列單片機(jī)設(shè)計(jì)的C語(yǔ)言編譯器,它能在IBM PC及其兼容機(jī)上運(yùn)行,使用非常方便。為了保證編譯器能正常工作,PC機(jī)應(yīng)具有512K以上的內(nèi)存、一個(gè)軟盤(pán)驅(qū)動(dòng)器、一個(gè)硬盤(pán),采用MSDOS 3.0以上版本的操作系統(tǒng)。Franklin C51以軟件包的形式提供,軟件包中主要有C51交叉編譯器、A51交叉匯編器、L51連接定位器、OHS51代碼轉(zhuǎn)換器和 dScope一51軟件仿真調(diào)

13、試器以及其它一些實(shí)用軟件程序。如果在PC機(jī)的硬盤(pán)C:上安裝C51編譯器,在安裝之前應(yīng)對(duì)PC機(jī)的配置文件CONFIG.SYS和自動(dòng)批處理文件AUTOEXEC.BAT作如下修改: CONFIG.SYS: FIELS 20 BUFFER 20 AUTOEXEC.BAT: SET C51LIB=C:C51LIB SET C51INC C:CSIINC SET PATH=C:C51BIN 這樣修改之后,C51編譯器會(huì)當(dāng)頭文件不在當(dāng)前目錄時(shí),能從C:C51INC子目錄中找到頭文件;L51連接器會(huì)自動(dòng)為所有的編譯模式及算術(shù)尤其是浮點(diǎn)運(yùn)算功能從C:C51LIB于目錄中找到所需要的庫(kù)文件。 C51編譯器可根據(jù)不

14、同的硬件環(huán)境由4個(gè)文件做出修改。以下配置文件包括在C51軟件包中: STARTUP.A51:C51編譯器的啟動(dòng)程序,所有的棧指針和存貯器,只要需要,將被初始化。 INT.A51:在文件中已明確初始化了的變量作初始化。如果系統(tǒng)裝了“看門(mén)狗,該文件可包含附加的“看門(mén)狗刷新。 PUTCHAR.C:函數(shù)“printf、“puts等的字符輸出核心程序,該程序可根據(jù)用戶(hù)硬件加以修改如LCD顯示。 GETKEY.C:函數(shù)“getchar、“scanf等的字符輸入核心程序,該程序可根據(jù)硬件加以修改如矩陣鍵盤(pán) 所有文件都包含在C運(yùn)行庫(kù)中,因此,不能在連接時(shí)指定調(diào)用。如果用戶(hù)改變一個(gè)文件,可將其編譯后與其它目標(biāo)文

15、件一起連接,因而不必改動(dòng)運(yùn)行庫(kù)。庫(kù)中原文件自動(dòng)忽略。 例:L51 MYMODUL1.OBJ,MYMODUL2.OBJ ,STARTUP.OBJ,PUTCHAR.OBJ 上例將用戶(hù)建立的STARTUP.OBJ和PUTCHAR.OBJ連接起來(lái)。 用C語(yǔ)言編寫(xiě)的程序必須通過(guò)編譯和連接之后,才能生成可執(zhí)行代碼。C51編譯器由命令“C51啟動(dòng),例如以EXI2.C為文件名的程序編譯命令如下; C51 EXI2.C CODE DEBUG回車(chē) C51是編譯器啟動(dòng)命令,EXI2.C是程序文件名,CODE和DEBUG是編譯控制指令。輸入完命令后回車(chē),即可進(jìn)人編譯過(guò)程。如果編譯過(guò)程中未發(fā)現(xiàn)錯(cuò)誤,屏幕上會(huì)顯示出: C

16、51 COMPILATION COMPILETE, 0 WARINGS, 0 ERRORS 并產(chǎn)生列表文件 EXI2.LST和目標(biāo)文件 EXI2.OBJ。如果編譯中發(fā)現(xiàn)任何錯(cuò)誤,那么不產(chǎn)生目標(biāo)文件,而將所有的錯(cuò)誤信息都在列表文件中表示出來(lái)。編譯控制指令CODE使列表文件的后面附加一個(gè)匯編語(yǔ)言文件。編譯控制指令DEBUG使目標(biāo)文件中包含有進(jìn)行源程序調(diào)試時(shí)需要的各種符號(hào)信息。目標(biāo)文件中還包含有可再定位的目標(biāo)碼,以供 L51連接器作進(jìn)一步的處理。C51編譯器提供了許多不同控制指令可以完成各種編譯控制功能。7.2 C51程序設(shè)計(jì)的根本語(yǔ)法 C語(yǔ)言是一種程序設(shè)計(jì)語(yǔ)言,采用C語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),需要遵循一

17、定的語(yǔ)法規(guī)那么。 7.2.1 C語(yǔ)言的數(shù)據(jù)類(lèi)型 C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類(lèi)型出現(xiàn)的,數(shù)據(jù)類(lèi)型可分為根本數(shù)據(jù)類(lèi)型和復(fù)雜數(shù)據(jù)類(lèi)型,復(fù)雜數(shù)據(jù)類(lèi)型由根本數(shù)據(jù)類(lèi)型構(gòu)造而成。C語(yǔ)言中的根本數(shù)據(jù)類(lèi)型有char,int,short,long,float和double。對(duì)于C51編譯器來(lái)說(shuō),short型與int型相同, double型與float型相同。分別說(shuō)明如下: 1 char 字符類(lèi)型。有 signed char和 unsigned char之分,默認(rèn)值為 signed char。對(duì)于 signed char型數(shù)據(jù),其字節(jié)中的最高位表示該數(shù)據(jù)的符號(hào),“0表示正數(shù),“l(fā)表示負(fù)數(shù)。負(fù)數(shù)用補(bǔ)碼表示。所能表示的數(shù)

18、值范圍是 -128127;unsigned char型數(shù)據(jù),是無(wú)符號(hào)字符型數(shù)據(jù),其字節(jié)中的所有位均用來(lái)表示數(shù)據(jù)的數(shù)值,所表示的數(shù)值范圍是 0255。 2 int 整型。有signed int和unsigned nit之分,默認(rèn)值為signed int。signed int是有符號(hào)整型數(shù),字節(jié)中的最高位表示數(shù)據(jù)的符號(hào),“0表示正數(shù),“1表示負(fù)數(shù)。所能表示的數(shù)值范圍是 -32768+32767。unsigned int是無(wú)符號(hào)整型數(shù),所表示的數(shù)值范圍是065535。 3 long 長(zhǎng)整型。有signed long和unsigned long之分,默認(rèn)值為signed long。它們的長(zhǎng)度均為四個(gè)字

19、節(jié)。singed long是有符號(hào)的長(zhǎng)整型數(shù)據(jù),字節(jié)中的最高位表示數(shù)據(jù)的符號(hào),“ 0表示正數(shù),“1表示負(fù)數(shù)。數(shù)值的表示范圍是2147483648 2147483647; unsigned long是無(wú)符號(hào)長(zhǎng)整型數(shù)據(jù),數(shù)值的表示范圍是04294967295。 4float 浮點(diǎn)型。它是符合IEEE754標(biāo)準(zhǔn)的單精度浮點(diǎn)型數(shù)據(jù),在十進(jìn)制中具有7位有效數(shù)字。float型數(shù)據(jù)占用四個(gè)字節(jié) 2位二進(jìn)制數(shù)。 需要指出的是,對(duì)于浮點(diǎn)型數(shù)據(jù)除了有正常數(shù)值之外,還可能出現(xiàn)非正常數(shù)值。根據(jù)IEEE標(biāo)準(zhǔn),當(dāng)浮點(diǎn)型數(shù)據(jù)取以下數(shù)值16進(jìn)制數(shù)時(shí)即為非正常值:FFFFFFFFH非數(shù)NaN;7F800000H正溢出INF;F

20、F800000H負(fù)溢出INF; 另外,由于8051單片機(jī)不包括捕獲浮點(diǎn)運(yùn)算錯(cuò)誤的中斷向量,因此必須由用戶(hù)自己根據(jù)可能出現(xiàn)的錯(cuò)誤條件用軟件來(lái)進(jìn)行適當(dāng)?shù)奶幚怼?5* 指針型。指針型數(shù)據(jù)不同于以上四種根本數(shù)據(jù)類(lèi)型,它本身是一個(gè)變量,但在這個(gè)變量中存放的不是普通的數(shù)據(jù)而是指向另一個(gè)數(shù)據(jù)的地址。指針變量也要占據(jù)一定的內(nèi)存單元,在C51中指針變量的長(zhǎng)度一般為3個(gè)字節(jié)。指針變量也具有類(lèi)型,其表示方法是在指針?lè)?hào)“*的前面冠以數(shù)據(jù)類(lèi)型符號(hào)。如 char *Pointl;表示 Pointl是一個(gè)字符型的指針變量。指針變量的類(lèi)型表示該指針?biāo)赶虻刂分袛?shù)據(jù)的類(lèi)型。使用指針型變量可以方便地對(duì)8051單片機(jī)的各局部物理

21、地址直接進(jìn)行操作。 6bit 位標(biāo)量。這是C 51編譯器的一種擴(kuò)充數(shù)據(jù)類(lèi)型,利用它可定義一個(gè)位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。 7sfr 特殊功能存放器。這也是C 51編譯器的一種擴(kuò)充數(shù)據(jù)類(lèi)型,利用它可以訪問(wèn)8051單片機(jī)的所有內(nèi)部特殊功能存放器。sfr型數(shù)據(jù)占用一個(gè)內(nèi)存單元,其取值范圍0255。 8sfr16 16位特殊功能存放器。它占用兩個(gè)內(nèi)存單元,取值范圍是065535。 9sbit 可尋址位。這也是C51編譯器的一種擴(kuò)充數(shù)據(jù)類(lèi)型,利用它可以訪8051單片機(jī)內(nèi)部RAM中的可尋址位或特殊功能存放器中的可尋址位。 在C語(yǔ)言程序中的表達(dá)式或變量賦值運(yùn)算中,有時(shí)會(huì)出現(xiàn)運(yùn)算對(duì)象的數(shù)據(jù)不一

22、致的情況,C語(yǔ)言允許任何標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型之間的隱式轉(zhuǎn)換。隱式轉(zhuǎn)換按以下優(yōu)先級(jí)別自動(dòng)進(jìn)行: bit char int long float signed unsigned 轉(zhuǎn)換時(shí)由低向高進(jìn)行,而不是數(shù)據(jù)轉(zhuǎn)換時(shí)的順序。一般來(lái)說(shuō),如果有幾個(gè)不同類(lèi)型的數(shù)據(jù)同時(shí)參加運(yùn)算,先將低級(jí)別類(lèi)型的數(shù)據(jù)轉(zhuǎn)換成高級(jí)別類(lèi)型,再作運(yùn)算處理,并且運(yùn)算結(jié)果為高級(jí)別類(lèi)型數(shù)據(jù)。 C51編譯器除了能支持以上這些根本數(shù)據(jù)之外,還能支持一些復(fù)雜的構(gòu)造型數(shù)據(jù),如結(jié)構(gòu)類(lèi)型、聯(lián)合類(lèi)型等。 7.2.2 常量 常量是在程序執(zhí)行過(guò)程中其值不能改變的量。常量的數(shù)據(jù)類(lèi)型有整型、浮點(diǎn)型、字符型和字符串型等,C51編譯器還擴(kuò)充了一種位bit標(biāo)量。分別說(shuō)明如下

23、: 1整型常量 整型常量就是整型常數(shù),可表示為以下幾種形式:十進(jìn)制整數(shù);十六進(jìn)制整數(shù):以 0X開(kāi)頭的數(shù)是十六進(jìn)制數(shù),ANSI C標(biāo)準(zhǔn)規(guī)定十六進(jìn)制數(shù)的數(shù)字為09,再加字母af;長(zhǎng)整數(shù):在數(shù)字后面加一個(gè)字母L就構(gòu)成了長(zhǎng)整數(shù)。 2浮點(diǎn)型常量 浮點(diǎn)型常量有十進(jìn)制表示形式和指數(shù)表示形式。 十進(jìn)制表示形式又稱(chēng)定點(diǎn)表示形式,由數(shù)字和小數(shù)點(diǎn)組成。如 0.3141、31.41、314.1及0.0都是十進(jìn)制數(shù)表示形式的浮點(diǎn)型常量。 在這種表示形式中,如果整數(shù)或小數(shù)局部為0可以省略不寫(xiě),但必須有小數(shù)點(diǎn)。 指數(shù)表示形式為: 數(shù)字?jǐn)?shù)字e 數(shù)字 其中,中的內(nèi)容為可選項(xiàng),可有可無(wú),但其余局部必須有。 3字符型常量 字符型常

24、量是單引號(hào)內(nèi)的字符,如a、b等。對(duì)于不可顯示的控制字符,可以在該字符前面加一個(gè)反斜杠字符“組成專(zhuān)用轉(zhuǎn)義字符。利用轉(zhuǎn)義字符可以完成一些特殊功能和輸出時(shí)的格式控制。 4字符串型常量 字符串型常量由雙引號(hào)“內(nèi)的字符組成。當(dāng)雙引號(hào)內(nèi)的字符個(gè)數(shù)為0時(shí),稱(chēng)為空串常量。需要注意的是,字符串常量首尾的雙引號(hào)是界限符,當(dāng)需要表示雙引號(hào)字符串時(shí),可用轉(zhuǎn)義字符來(lái)表示為:“。 如:“I say:“goodbye!字符串為I say:“goodbye! 另外,C語(yǔ)言將字符串常量作為一個(gè)字符類(lèi)型數(shù)組來(lái)處理,在存儲(chǔ)字符串常量時(shí),要在字符串的尾部加一個(gè)轉(zhuǎn)義字符0作為該字符串常量的結(jié)束符。因此不要將字符常量與字符串常量混淆。5

25、位標(biāo)量 這是C51編譯器的一種擴(kuò)充數(shù)據(jù)類(lèi)型。位標(biāo)量用關(guān)鍵字“bit來(lái)定義,它的值是一個(gè)二進(jìn)制位。一個(gè)函數(shù)中可以包含“bit類(lèi)型的參數(shù),函數(shù)的返回值也可為“bit型。 另外,不能定義位指針,也不能定義位數(shù)組。7.2.3 變量及其存儲(chǔ)模式 和常量相比,變量是另一種量,在程序執(zhí)行過(guò)程中其值能不斷變化。每一個(gè)變量都必須有一個(gè)標(biāo)識(shí)符作為它的變量名。在使用一個(gè)變量之前,必須先對(duì)該變量進(jìn)行定義,指出它的數(shù)據(jù)類(lèi)型和存儲(chǔ)模式,以便編譯系統(tǒng)為它分配相應(yīng)的存儲(chǔ)單元。在C51中對(duì)變量進(jìn)行定義的格式如下: 存儲(chǔ)種類(lèi)數(shù)據(jù)類(lèi)型存儲(chǔ)器類(lèi)型變量名表; 其中,“存儲(chǔ)種類(lèi)和“存儲(chǔ)器類(lèi)型是可選項(xiàng)。變量的存儲(chǔ)種類(lèi)有四種:自動(dòng)auto、

26、外部extern、靜態(tài)static和存放器register。在定義一個(gè)變量時(shí)如果省略存儲(chǔ)種類(lèi)選項(xiàng),那么該變量將為自動(dòng)auto變量。 定義一個(gè)變量時(shí)除了需要說(shuō)明其數(shù)據(jù)類(lèi)型之外,C51編譯器還允許說(shuō)明變量的存儲(chǔ)器類(lèi)型。 Franklin C51對(duì)于每個(gè)變量可以準(zhǔn)確地賦予其存儲(chǔ)器類(lèi)型,從而可使之能夠在單片機(jī)系統(tǒng)內(nèi)準(zhǔn)確地定位。 定義變量時(shí)如果省略“存儲(chǔ)器類(lèi)型選項(xiàng),那么按編譯模式SMALL、COMPACT或LARGE所規(guī)定的默認(rèn)存儲(chǔ)器類(lèi)型確定變量的存儲(chǔ)區(qū)域,不能位于存放器中的參數(shù)傳遞變量和過(guò)程變量也保存在默認(rèn)的存儲(chǔ)器區(qū)域。C51編譯器的三種存儲(chǔ)器模式默認(rèn)的存儲(chǔ)器類(lèi)型對(duì)變量的影響如下: 1. SMALL

27、變量被定義在 8051單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器中,因此對(duì)這種變量的訪問(wèn)速度最快。另外,所有的對(duì)象,包括堆棧,都必須嵌入內(nèi)部數(shù)據(jù)存儲(chǔ)器,而堆棧的長(zhǎng)度是很重要的,實(shí)際棧長(zhǎng)取決于不同函數(shù)的嵌套深度。 2. COMPACT 變量被定義在分頁(yè)外部數(shù)據(jù)存儲(chǔ)器中,外部數(shù)據(jù)段的長(zhǎng)度可達(dá)256字節(jié)。這時(shí)對(duì)變量的訪問(wèn)是通過(guò)存放器間接尋址MOVX Ri進(jìn)行的,堆棧位于8051單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器中。采用這種編譯模式時(shí),變量的高 8位地址由 P2口確定。因此,在采用這種模式的同時(shí),必須適當(dāng)改變啟動(dòng)程序 STARTUPA51中的參數(shù):PDATASTART和PDATALEN;用L51進(jìn)行連接時(shí)還必須采用連接控制命令PDAT

28、A來(lái)對(duì)P2口地址進(jìn)行定位,這樣才能確保P2口為所需要的高8位地址。 3. LARGE 變量被定義在外部數(shù)據(jù)存儲(chǔ)器中最大可達(dá)64K字節(jié),使用數(shù)據(jù)指針DPTR來(lái)間接訪問(wèn)變量。這種訪問(wèn)數(shù)據(jù)的方法效率是不高的,尤其是對(duì)于2個(gè)或多個(gè)字節(jié)的變量,用這種數(shù)據(jù)訪問(wèn)方法相當(dāng)影響程序的代碼長(zhǎng)度。另外一個(gè)不方便之處是這種數(shù)據(jù)指針不能對(duì)稱(chēng)操作。 需要特別指出的是,變量的存儲(chǔ)種類(lèi)與存儲(chǔ)器類(lèi)型是完全無(wú)關(guān)的。例如: static unsigned char data x ;* 在內(nèi)部數(shù)據(jù) 存儲(chǔ)器中定義一個(gè)靜態(tài)無(wú)符號(hào)字符型變量x * int y; * 定義一個(gè)自動(dòng)整型變量y,它的存儲(chǔ)器 類(lèi)型由編譯模式確定 * 為了能夠直接訪

29、問(wèn)這些特殊功能存放器,C51編譯器擴(kuò)充了關(guān)鍵字 sfr和 sfr16,利用這種擴(kuò)充關(guān)鍵字可以在C語(yǔ)言源程序中直接對(duì)8051單片機(jī)的特殊功能存放器進(jìn)行定義。定義方法如下: sfr 特殊功能存放器名 = 地址常數(shù); 例如:sfr P0 = 0 x80;* 定義 IO口 P0,其地址為 80H * 這里需要注意的是,在關(guān)鍵字sfr后面必須是一個(gè)名字,名字可任意選取,但應(yīng)符合一般習(xí)慣。等號(hào)后面必須是常數(shù),不允許有帶運(yùn)算符的表達(dá)式,而且該常數(shù)必須在特殊功能存放器的地址范圍之內(nèi)80H0FFH。 在新一代的8051單片機(jī)中,特殊功能存放器經(jīng)常組合成16位來(lái)使用。為了有效地訪問(wèn)這種16位的特殊功能存放器,可采

30、用關(guān)鍵字sfr16。 在8051單片機(jī)應(yīng)用系統(tǒng)中經(jīng)常需要訪問(wèn)特殊功能存放器中的某些位,C51編譯器為此提供了一種擴(kuò)充關(guān)鍵字sbit,利用它可以訪問(wèn)可位尋址對(duì)象。使用方法有如下三種: 1. sbit 位變量名 位地址; 這種方法將位的絕對(duì)地址賦給位變量,位地址必須位于80HOFFH之間。例如: sbit OV 0 xD2; 2. sbit 位變量名 特殊功能存放器名位位置; 當(dāng)可尋址位位于特殊功能存放器中時(shí)可采用這種方法,“位位置是一個(gè)07之間的常數(shù)。例如sbit CY PSW7;3sbit 位變量名 字節(jié)地址位位置; 這種方法以一個(gè)常數(shù)字節(jié)地址作為基址,該常數(shù)必須在80HOFFH之間?!拔晃恢?/p>

31、是一個(gè)07之間的常數(shù)。例如: sbit CY 0 xD07; 需要注意的是,sbit是一個(gè)獨(dú)立的關(guān)鍵字,不要將它與關(guān)鍵字bit相混淆。 當(dāng)位對(duì)象位于8051單片機(jī)內(nèi)部存儲(chǔ)器的可位尋址區(qū)時(shí)稱(chēng)之為“可位尋址對(duì)象。C51編譯器提供了一個(gè) bdata存儲(chǔ)器類(lèi)型,允許將具有 bdata類(lèi)型的對(duì)象放入 8051單片機(jī)內(nèi)部可位尋址區(qū)。例如: int bdata ibase * 在位尋址區(qū)定義一 個(gè)整型變量 ibase * char bdata array4; * 在位尋址區(qū)定義一個(gè)數(shù)組 array 4 * 使用關(guān)鍵字sbit可以獨(dú)立訪問(wèn)可位尋址對(duì)象中的某一位。例如: sbit Ary37 = array37

32、; 采用這種方法定義可位尋址變量時(shí)要求基址對(duì)象的存儲(chǔ)器類(lèi)型為bdata,操作符“后面的位值的最大值取決于指定的基址類(lèi)型,對(duì)于char來(lái)說(shuō)是 07;對(duì)于int來(lái)說(shuō)是 015;對(duì)于long來(lái)說(shuō)是0 31。 用typedef重新定義數(shù)據(jù)類(lèi)型,定義的方法如下: typedef 已有的數(shù)據(jù)類(lèi)型 新的數(shù)據(jù)類(lèi)型名 已有的數(shù)據(jù)類(lèi)型是指C語(yǔ)言的所有數(shù)據(jù)類(lèi)型,新的數(shù)據(jù)類(lèi)型可按用戶(hù)自己的習(xí)慣或根據(jù)任務(wù)需要決定。 7.2.4 運(yùn)算符與表達(dá)式 運(yùn)算符按其在表達(dá)式中所起的作用,可分為賦值運(yùn)算符、算術(shù)運(yùn)算符、增量與減量運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、復(fù)合賦值運(yùn)算符、逗號(hào)運(yùn)算符、條件運(yùn)算符、指針和地址運(yùn)算符、強(qiáng)制類(lèi)

33、型轉(zhuǎn)換運(yùn)算符、sizeof運(yùn)算符等。運(yùn)算符按其在表達(dá)式中與運(yùn)算對(duì)象的關(guān)系,又可分為單目運(yùn)算符、雙目運(yùn)算符、三目運(yùn)算符等。單目運(yùn)算符需要一個(gè)運(yùn)算對(duì)象,雙目運(yùn)算符要求二個(gè)運(yùn)算對(duì)象,三目運(yùn)算符要求三個(gè)運(yùn)算對(duì)象。賦值運(yùn)算符 賦值語(yǔ)句的格式: 變量 表達(dá)式; 符號(hào)“是賦值運(yùn)算符,其作用是將一個(gè)數(shù)據(jù)的值賦給一個(gè)變量。利用賦值運(yùn)算符將一個(gè)變量與一個(gè)表達(dá)式連接起來(lái)的式子稱(chēng)為賦值表達(dá)式,后面加“;構(gòu)成賦值語(yǔ)句。2算術(shù)運(yùn)算符 C語(yǔ)言中的算術(shù)運(yùn)算符有: :加或取正值運(yùn)算符,:減或取負(fù)值運(yùn)算符; * :乘運(yùn)算符,:除運(yùn)算符,:取余運(yùn)算符 用算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的式子稱(chēng)為算術(shù)表達(dá)式。算術(shù)表達(dá)式的一般形式為:表達(dá)

34、式1 算術(shù)運(yùn)算符 表達(dá)式2 C語(yǔ)言中規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。在求一個(gè)表達(dá)式的值時(shí),要按運(yùn)算符的優(yōu)先級(jí)別進(jìn)行。算術(shù)運(yùn)算符中取負(fù)值的優(yōu)先級(jí)最高,其次是乘法*、除法和取余運(yùn)算符,加法和減法運(yùn)算符的優(yōu)先級(jí)最低。需要時(shí)可在算術(shù)表達(dá)式中采用圓括號(hào)來(lái)改變運(yùn)算符的優(yōu)先級(jí)。 如果在一個(gè)表達(dá)式中各個(gè)運(yùn)算符的優(yōu)先級(jí)別相同,那么計(jì)算時(shí)按規(guī)定的結(jié)合方向進(jìn)行。例如:由于+和-優(yōu)先級(jí)別相同,計(jì)算時(shí)按“從左至右的結(jié)合方向,這種“從左至右的結(jié)合方向稱(chēng)為“左結(jié)合性,而“從右至左的結(jié)合方向稱(chēng)為“右結(jié)合性。3增量和減量運(yùn)算符 C語(yǔ)言中除了根本的加、減、乘、除運(yùn)算符之外,還提供一種特殊的運(yùn)算符: :增量運(yùn)算符 :減量運(yùn)算符 增量

35、和減量是C語(yǔ)言中特有的一種運(yùn)算符,它們的作用分別是對(duì)運(yùn)算對(duì)象作加1和減l運(yùn)算。例如:i,i, j,j等。 看起來(lái)i和 i的作用都是使變量 i的值加1,但是由于運(yùn)算符所處的位置不同,使變量i加1的運(yùn)算過(guò)程也不同。 i或i是先執(zhí)行i1或i1操作,再使用i的值,而 i或i 是先使用i的值,再執(zhí)行i 1或i1操作。 增量運(yùn)算符和減量運(yùn)算符只能用于變量,不能用于常數(shù)或表達(dá)式。 printf函數(shù)的一般形式: printf格式控制,輸出參數(shù)表 格式控制又稱(chēng)為轉(zhuǎn)換控制字符串,它是用雙引號(hào)括起來(lái)的一些字符串,通常這些字符由格式說(shuō)明、普通字符和轉(zhuǎn)義字符三局部組成。 需要說(shuō)明的是:允許作為庫(kù)函數(shù)printf參量的總

36、字節(jié)數(shù)受C51編譯器中函數(shù)庫(kù)的限制。由于8051單片機(jī)存儲(chǔ)器結(jié)構(gòu)有限,在 SMALL和COMPACT 編譯模式下,最多可傳遞15個(gè)字節(jié)的參數(shù)即5個(gè)指針,或1個(gè)指針和3個(gè)長(zhǎng)字,在LARGE編譯模式下,最多可傳遞40個(gè)字節(jié)的參數(shù)。 另外,在采用printf輸出時(shí),printf函數(shù)中輸出參數(shù)表的每個(gè)輸出參數(shù)的數(shù)據(jù)類(lèi)型必須與程序中定義的變量類(lèi)型一致,否那么會(huì)使輸出的數(shù)據(jù)不對(duì),這一點(diǎn)在使用庫(kù)函數(shù)printf時(shí)是必須予以注意。4關(guān)系運(yùn)算符 C語(yǔ)言中有6種關(guān)系運(yùn)算符:大于、小于、=大于等于、=小于等于、 = =等于、 !=不等于。 前4種關(guān)系運(yùn)算符具有相同的優(yōu)先級(jí),后兩種關(guān)系運(yùn)算符也具有相同的優(yōu)先級(jí);但前4

37、種的優(yōu)先級(jí)高于后2種。用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)即成為關(guān)系表達(dá)式。 關(guān)系表達(dá)式的一般形式為: 表達(dá)式1 關(guān)系運(yùn)算符 表達(dá)式2 例如:x a、x + y b、x = 3 (y = 4) 都是合法的關(guān)系表達(dá)式。 關(guān)系運(yùn)算符通常用來(lái)判別某個(gè)條件是否滿(mǎn)足,關(guān)系運(yùn)算的結(jié)果只有0和1兩種值。當(dāng)所指定的條件滿(mǎn)足時(shí)結(jié)果為1,條件不滿(mǎn)足時(shí)結(jié)果為0。 scanf函數(shù)的一般形式: scanf格式控制,指針參數(shù)表 其中指針參數(shù)是指指針變量或者用取地址運(yùn)算符“&獲取普通變量的地址。scanf函數(shù)中的每個(gè)參數(shù)都必須為指針,并且指針參數(shù)所指向的數(shù)據(jù)類(lèi)型必須與格式控制串中所指定的格式相匹配,否那么scanf函數(shù)輸入的數(shù)

38、據(jù)將不正確。5邏輯運(yùn)算符 C語(yǔ)言中有3種邏輯運(yùn)算符:邏輯或、邏輯與、 !邏輯非 邏輯運(yùn)算符用來(lái)求某個(gè)條件式的邏輯值,用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)就是邏輯表達(dá)式。邏輯表達(dá)式的一般形式為: 邏輯與:條件式 條件式 邏輯或:條件式 條件式 邏輯非:!條件式 當(dāng)連接的兩個(gè)條件式都為真時(shí),邏輯與的結(jié)果為真1,否那么為假0。 當(dāng)連接的兩個(gè)條件式之中有一個(gè)為真時(shí),邏輯或的結(jié)果為真1,否那么為假0。 當(dāng)條件式的結(jié)果為真時(shí),邏輯非的結(jié)果為假,反之,那么為真。 邏輯運(yùn)算符的優(yōu)先級(jí)為由高至低:!非,與,或。6位運(yùn)算符 C語(yǔ)言有6種位運(yùn)算符: 按位取反 按位與 左移 右移 按位異或 | 按位或 運(yùn)算符的作

39、用是按位對(duì)變量進(jìn)行運(yùn)算,并不改變參與運(yùn)算的變量的值。假設(shè)希望按位改變運(yùn)算變量的值,那么應(yīng)利用相應(yīng)的賦值運(yùn)算。另外位運(yùn)算符不能用來(lái)對(duì)浮點(diǎn)型數(shù)據(jù)進(jìn)行操作。 位運(yùn)算符的優(yōu)先級(jí)從高到低依次是: 按位取反、左移和右移、按位與、按位異或、按位或。 位運(yùn)算符的一般形式如下: 變量1 位運(yùn)算符 變量 2 按位取反、按位與、按位或、按位異或操作的運(yùn)算取值關(guān)系如表7.3所示。表7.3 按位取反、按位與、按位或、按位異或操作運(yùn)算取值關(guān)系xyxyx&yx|yxy00110000110011100101111001107復(fù)合賦值運(yùn)算符 在賦值運(yùn)算符“的前面加上其它運(yùn)算符,就構(gòu)成了所謂復(fù)合賦值運(yùn)算符: + 加法賦值, 右

40、移位賦值,-減法賦值 邏輯與賦值 * 乘法賦值, 邏輯或賦值, 除法賦值 邏輯異或賦值 取模賦值, 邏輯非賦值, 左移位賦值。 復(fù)合賦值運(yùn)算首先對(duì)變量進(jìn)行某種運(yùn)算,然后將運(yùn)算的結(jié)果賦給該變量。復(fù)合運(yùn)算的一般形式為: 變量 復(fù)合賦值運(yùn)算符 表達(dá)式 采用這種復(fù)合賦值運(yùn)算符,可以使程序簡(jiǎn)化,同時(shí)還可以提高程序的編譯效率。8逗號(hào)運(yùn)算符 在C語(yǔ)言中符號(hào)“,是一個(gè)特殊的運(yùn)算符,可以用它將兩個(gè)或多個(gè)表達(dá)式連接起來(lái),稱(chēng)為逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般形式為: 表達(dá)式1,表達(dá)式2, ,表達(dá)式n 程序運(yùn)行時(shí)對(duì)于逗號(hào)表達(dá)式的處理,是從左至右依次計(jì)算出各個(gè)表達(dá)式的值,而整個(gè)逗號(hào)表達(dá)式的值是最右邊表達(dá)式即表達(dá)式n的值。例

41、如:s = ( x = 4,y = 5,z = 6,10);執(zhí)行這條命令的結(jié)果是x、y、z、s分別賦值4 、5 、6 、10。9條件運(yùn)算符 條件運(yùn)算將“?:是C語(yǔ)言中唯一的一個(gè)三目運(yùn)算符,它要求有三個(gè)運(yùn)算對(duì)象,用它可以將三個(gè)表達(dá)式連接構(gòu)成一個(gè)條件表達(dá)式。條件表達(dá)式的一般形式如下: 邏輯表達(dá)式 ?表達(dá)式1 :表達(dá)式2 其功能是首先計(jì)算邏輯表達(dá)式,假設(shè)其值為真非 0值,將表達(dá)式 1的值作為整個(gè)條件表達(dá)式的值;當(dāng)邏輯表達(dá)式的值為假0值時(shí),將表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。例如:max = ( a b ) ? a :b;執(zhí)行這條命令的結(jié)果是把兩個(gè)數(shù)a、b中的最大值賦給max。10指針和地址運(yùn)算符

42、指針是C語(yǔ)言中一個(gè)十分重要的概念,在C語(yǔ)言的數(shù)據(jù)類(lèi)型中專(zhuān)門(mén)有一種指針類(lèi)型。變量的指針就是該變量的地址,可以定義一個(gè)指向某個(gè)變量的指針變量。為了表示指針變量和它所指向的變量地址之間的關(guān)系,C語(yǔ)言提供了兩個(gè)專(zhuān)門(mén)的運(yùn)算符: * 取內(nèi)容, 取地址 取內(nèi)容和取地址運(yùn)算的一般形式分別為: 變量 * 指針變量 指針變量 目標(biāo)變量 指針變量 目標(biāo)變量 取內(nèi)容運(yùn)算的含義是將指針變量所指向的目標(biāo)變量的值賦給左邊的變量;取地址運(yùn)算的含義是將目標(biāo)變量的地址賦給左邊的指針變量。需要注意的是,指針變量中只能存放地址即指針型數(shù)據(jù),不要將一個(gè)非指針類(lèi)型的數(shù)據(jù)賦值給一個(gè)指針變量。11強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符 C語(yǔ)言中的圓括號(hào)“也可作

43、為一種運(yùn)算符使用,這就是強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符,它的作用是將表達(dá)式或變量的類(lèi)型強(qiáng)制轉(zhuǎn)換成為所指定的類(lèi)型。C語(yǔ)言程序中進(jìn)行算術(shù)運(yùn)算時(shí),需要注意數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。有兩種數(shù)據(jù)類(lèi)型轉(zhuǎn)換方式,即隱式轉(zhuǎn)換和顯式轉(zhuǎn)換。隱式轉(zhuǎn)換是在對(duì)程序進(jìn)行編譯時(shí)由編譯器自動(dòng)處理的。 在C語(yǔ)言中只有根本數(shù)據(jù)類(lèi)型即char、int、long和float可以進(jìn)行隱式轉(zhuǎn)換。其余的數(shù)據(jù)類(lèi)型不能進(jìn)行隱式轉(zhuǎn)換。強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符來(lái)進(jìn)行顯式轉(zhuǎn)換。強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符的一般使用形式為: 類(lèi)型 表達(dá)式 例如:需要在外部存儲(chǔ)器xdata中定義一個(gè)字符型指針變量xp,并賦初值0 xC000,可以寫(xiě)成:xp = (char xdata * )0 xC000

44、;這種方法特別適合于用標(biāo)識(shí)符來(lái)存取地址。12sizeof運(yùn)算符 C語(yǔ)言中提供了一種用于求取數(shù)據(jù)類(lèi)型、變量以及表達(dá)式的字節(jié)數(shù)的運(yùn)算符: sizeof,該運(yùn)算符的一般使用形式為: sizeof表達(dá)式或sizeof數(shù)據(jù)類(lèi)型 應(yīng)該注意的是,sizeof是一種特殊的運(yùn)算符,不要錯(cuò)誤地認(rèn)為它是一個(gè)函數(shù)。實(shí)際上,字節(jié)數(shù)的計(jì)算在程序編譯時(shí)就完成了,而不是在程序執(zhí)行的過(guò)程中才計(jì)算出來(lái)的。例如:int a = sizeof(float); 執(zhí)行這條命令的結(jié)果是把4賦給了整型變量a,這意味著一個(gè)單精度數(shù)存儲(chǔ)時(shí)占有4個(gè)字節(jié)內(nèi)存。7.3C51 程序設(shè)計(jì) 7.3.1表達(dá)式語(yǔ)句 C語(yǔ)言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,它提供了十

45、分豐富的程序控制語(yǔ)句。表達(dá)式語(yǔ)句是最根本的一種語(yǔ)句。在表達(dá)式的后邊加一個(gè)分號(hào)“;就構(gòu)成了表達(dá)式語(yǔ)句。 表達(dá)式語(yǔ)句也可以?xún)H由一個(gè)分號(hào)“;組成,這種語(yǔ)句稱(chēng)為空語(yǔ)句??照Z(yǔ)句是表達(dá)式語(yǔ)句的一個(gè)特例??照Z(yǔ)句在程序設(shè)計(jì)中有時(shí)是很有用的,當(dāng)程序在語(yǔ)法上需要有一個(gè)語(yǔ)句,但在語(yǔ)義上并不要求有具體的動(dòng)作時(shí),便可以采用空語(yǔ)句??照Z(yǔ)句通常有兩種用法: 1在程序中為有關(guān)語(yǔ)句提供標(biāo)號(hào),用以標(biāo)記程序執(zhí)行的位置。 2在用while語(yǔ)句構(gòu)成的循環(huán)語(yǔ)句后面加一個(gè)分號(hào),形成一個(gè)不執(zhí)行其它操作的空循環(huán)體。 7.3.2復(fù)合語(yǔ)句 復(fù)合語(yǔ)句是由假設(shè)干條語(yǔ)句組合而成的一種語(yǔ)句,它是用一個(gè)大括號(hào)“將假設(shè)干條語(yǔ)句組合在一起而形成的一種功能塊。復(fù)

46、合語(yǔ)句不需要以分號(hào)“;結(jié)束,但它內(nèi)部的各條單語(yǔ)句仍需以分號(hào)“;結(jié)束。復(fù)合語(yǔ)句的一般形式為: 局部變量定義; 語(yǔ)句1; 語(yǔ)句2; 。 語(yǔ)句n; 復(fù)合語(yǔ)句在執(zhí)行時(shí),其中的各條單語(yǔ)句依次順序執(zhí)行。整個(gè)復(fù)合語(yǔ)句在語(yǔ)法上等價(jià)于一條單語(yǔ)句,因此在C語(yǔ)言程序中可以將復(fù)合語(yǔ)句視為一條單語(yǔ)句。復(fù)合語(yǔ)句允許嵌套,即在復(fù)合語(yǔ)句內(nèi)部還可以包含別的復(fù)合語(yǔ)句。 通常復(fù)合語(yǔ)句都出現(xiàn)在函數(shù)中,實(shí)際上,函數(shù)的執(zhí)行局部即函數(shù)體就是一個(gè)復(fù)合語(yǔ)句。復(fù)合語(yǔ)句中的單語(yǔ)句一般是可執(zhí)行語(yǔ)句,此外還可以是變量的定義語(yǔ)句說(shuō)明變量的數(shù)據(jù)類(lèi)型。用復(fù)合語(yǔ)句內(nèi)部變量定義語(yǔ)句所定義的變量,稱(chēng)為該復(fù)合語(yǔ)句中的局部變量,它僅在當(dāng)前這個(gè)復(fù)合語(yǔ)句中有效。利用復(fù)合

47、語(yǔ)句將多條單語(yǔ)句組合在一起,以及在復(fù)合語(yǔ)句中進(jìn)行局部變量定義是C語(yǔ)言的一個(gè)重要特征。7.3.3流程控制語(yǔ)句 選擇結(jié)構(gòu) if語(yǔ)句 if語(yǔ)句有三種形式:?jiǎn)畏种нx擇if語(yǔ)句、雙分支選擇if語(yǔ)句和多分支選擇if語(yǔ)句。 1單分支選擇語(yǔ)句 If ( 條件表達(dá)式 ) 語(yǔ)句 其含義為:假設(shè)條件表達(dá)式的結(jié)果為真非0值,就執(zhí)行了后面的語(yǔ)句;反之,假設(shè)條件達(dá)式的結(jié)果為假0值,就不執(zhí)行后面的語(yǔ)句。這里的語(yǔ)句也可以是復(fù)合語(yǔ)句。這種條件語(yǔ)句的執(zhí)行過(guò)程如圖7.3a所示。 2雙分支選擇語(yǔ)句 if條件表達(dá)式 語(yǔ)句 1; else 語(yǔ)句2; 其含義為:假設(shè)條件表達(dá)式的結(jié)果為真非0值,就執(zhí)行語(yǔ)句1;反之,假設(shè)條件表達(dá)式的結(jié)果為假0

48、值,就執(zhí)行語(yǔ)句2。這里的語(yǔ)句1和語(yǔ)句2均可以是復(fù)合語(yǔ)句。這種條件語(yǔ)句的執(zhí)過(guò)程如圖7.3b所示。 (a) (b) 圖7.3條件語(yǔ)句的執(zhí)行 3 多分支選擇語(yǔ)句 if條件表達(dá)式1 語(yǔ)句 1; else if條件式表達(dá)2 語(yǔ)句 2; else if條件式表達(dá)3 語(yǔ)句 3; else if條件表達(dá)式 n 語(yǔ)句 n else 語(yǔ)句n+1; 這種條件語(yǔ)句常用來(lái)實(shí)現(xiàn)多方向條件分支,其執(zhí)行過(guò)程如圖7.4所示。 例3.1 利用條件語(yǔ)句求一元二次方程的根 #include #include main( ) float a,b,c,x1,x2; float r,s; a = 2.0;b = 3.0;c = 4.0;r

49、 = b*b4.0*a*c; if ( r 0.0 ) s = sqrt (r); x1 = (bs)(2.0*a); x2 = (bs)(2.0*a); printf(“real:x1 = %15.7f,x2 = %15.7fn,x1,x2); else if (r = = 0.0) printf(“double:x1,x2 = %15.7n,b(2.0*a); else x1 = b(2.0*a); x2 = sqrt(r)(2.0*a); printf(“complex:re = %15.7f,im = %15.7fn,x1,x2); 程序執(zhí)行結(jié)果:complex:re 0.750000

50、0,im 1.1989580 這種條件語(yǔ)句常用來(lái)實(shí)現(xiàn)多方向條件分支,其執(zhí)行過(guò)程如圖7.4所示。 switch語(yǔ)句 開(kāi)關(guān)語(yǔ)句也是一種用來(lái)實(shí)現(xiàn)多方向條件分支的語(yǔ)句。開(kāi)關(guān)語(yǔ)句可直接處理多分支選擇,使程序結(jié)構(gòu)清晰,使用方便。開(kāi)關(guān)語(yǔ)句是用關(guān)鍵字switch構(gòu)成的,它的一般形式如下: switch表達(dá)式 case 常量表達(dá)式1 : 語(yǔ)句 1; break; case 常量表達(dá)式2 : 語(yǔ)句2; break; case 常量表達(dá)式n : 語(yǔ)句n; break; default: 語(yǔ)句n+1; 圖7.5 開(kāi)關(guān)語(yǔ)句的執(zhí)行過(guò)程循環(huán)結(jié)構(gòu) 在C語(yǔ)言程序中用來(lái)構(gòu)成循環(huán)控制的語(yǔ)句有:while語(yǔ)句、dowhile語(yǔ)句、f

51、or語(yǔ)句以及goto語(yǔ)句,分述如下: while語(yǔ)句 采用while語(yǔ)句構(gòu)成循環(huán)結(jié)構(gòu)的一般形式如下: while (條件表達(dá)式) 語(yǔ)句; 其意義為,當(dāng)條件表達(dá)式的結(jié)果為真非0值時(shí),程序就重復(fù)執(zhí)行后面的語(yǔ)句,一直執(zhí)行到條件表達(dá)式的結(jié)果變化為假0值時(shí)為止。這種循環(huán)結(jié)構(gòu)是先檢查條件表達(dá)式所給出的條件,再根據(jù)檢查的結(jié)果斷定是否執(zhí)行后面的語(yǔ)句。如果條件表達(dá)式的結(jié)果一開(kāi)始就為假,那么后面的語(yǔ)句一次也不會(huì)被執(zhí)行。這里的語(yǔ)句可以是復(fù)合語(yǔ)句。圖7.6所示為while語(yǔ)句的執(zhí)行過(guò)程。 dowhile語(yǔ)句 采用do一while語(yǔ)句構(gòu)成循環(huán)結(jié)構(gòu)的一般形式如下: do 語(yǔ)句 while條件表達(dá)式; 這種循環(huán)結(jié)構(gòu)的特點(diǎn)是

52、先執(zhí)行給定的循環(huán)體語(yǔ)句,然后再檢查條件表達(dá)式的結(jié)果。當(dāng)多件表達(dá)式的值為真非0值時(shí),那么重復(fù)執(zhí)行循環(huán)體語(yǔ)句,直到條件表達(dá)式的值變?yōu)榧?值時(shí)為止。因此,用如do一while語(yǔ)句構(gòu)成的循環(huán)結(jié)構(gòu)在任何條件下,循環(huán)體語(yǔ)句至少會(huì)被執(zhí)行一次。圖7.7繪出了這種循環(huán)結(jié)構(gòu)的流程圖。 圖7.6 while語(yǔ)句的執(zhí)行過(guò)程 圖7.7 dowhile循環(huán)結(jié)構(gòu)的流 例:3.2 while語(yǔ)句計(jì)算1-100的累加和 #include main( ) int i = 1,s = 0; while (i = 100) s = s+i;i+; printf (“s = %d/n,s); 例3.3 do-while語(yǔ)句計(jì)算1-10

53、0的累加和 #include main( ) int i = 1,s = 0; do s = s+i;i+; while ( i = 100) printf (“s = %d/n,s); for語(yǔ)句 采用for語(yǔ)句構(gòu)成循環(huán)結(jié)構(gòu)的一般形式如下: for初值設(shè)定表達(dá)式;循環(huán)條件表達(dá)式;更新表達(dá)式語(yǔ)句 for語(yǔ)句的執(zhí)行過(guò)程是:先計(jì)算出初值設(shè)定表達(dá)式的值作為循環(huán)控制變量的初值,再檢查循環(huán)條件表達(dá)式的結(jié)果,當(dāng)滿(mǎn)足循環(huán)條件時(shí)就執(zhí)行循環(huán)體語(yǔ)句并計(jì)算更新表達(dá)式,然后再根據(jù)更新表達(dá)式的計(jì)算結(jié)果來(lái)判斷循環(huán)條件是否滿(mǎn)足一直進(jìn)行到循環(huán)條件表達(dá)式的結(jié)果為假 0值時(shí),退出循環(huán)體。for語(yǔ)句的執(zhí)行過(guò)程如圖 7.8所示。 在

54、C語(yǔ)言程序的循環(huán)結(jié)構(gòu)中,for語(yǔ)句的使用最為靈活,它不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況。另外,for語(yǔ)句中的三個(gè)表達(dá)式是相互獨(dú)立的,并不一定要求三個(gè)表達(dá)式之間有依賴(lài)關(guān)系。并且 for語(yǔ)句中的三個(gè)表達(dá)式都可能缺省,但無(wú)論缺省哪一個(gè)表達(dá)式,其中的兩個(gè)分號(hào)都不能缺省。一般不要缺省循環(huán)條件表達(dá)式,以免形成死循環(huán)。例3. 用for 語(yǔ)句計(jì)算自然數(shù)1 100的累積和 #include main( ) int i = 1,s = 0; for( ;i = 100;) s = s+i; i+; printf (“s = %d n,s); 圖7.8 for語(yǔ)

55、句的執(zhí)行過(guò)程非結(jié)構(gòu)化語(yǔ)句 goto語(yǔ)句 goto語(yǔ)句是一個(gè)無(wú)條件轉(zhuǎn)向語(yǔ)句,它的一般形式為: goto 語(yǔ)句標(biāo)號(hào); 其中語(yǔ)句標(biāo)號(hào)是一個(gè)帶冒號(hào)“:的標(biāo)識(shí)符。將goto語(yǔ)句和if語(yǔ)句一起使用,可以構(gòu)成一個(gè)循環(huán)結(jié)構(gòu)。但更常見(jiàn)的是在C語(yǔ)言程序中采用goto語(yǔ)句來(lái)跳出多重循環(huán),需要注意的是只能用goto語(yǔ)句從內(nèi)層循環(huán)跳到外層循環(huán),而不允許從外層循環(huán)跳到內(nèi)層循環(huán)。 對(duì)于多重循環(huán)的情況,break語(yǔ)句只能跳出它所處的那一層循環(huán),而不象goto語(yǔ)句可以直接從最內(nèi)層循環(huán)中跳出來(lái)。由此可見(jiàn),要退出多重循環(huán)時(shí),采用goto語(yǔ)句比較方便。需要指出的是,break語(yǔ)句只能用于開(kāi)關(guān)語(yǔ)句和循環(huán)語(yǔ)句之中,它是一種具有特殊功能的

56、無(wú)條件轉(zhuǎn)移語(yǔ)句。另外還要注意,在進(jìn)行實(shí)際程序設(shè)計(jì)時(shí),為了保證程序具有良好的結(jié)構(gòu),應(yīng)當(dāng)盡可能地少采用goto語(yǔ)句,以使程序結(jié)構(gòu)清晰易讀。 continue語(yǔ)句 continue語(yǔ)句是一種中斷語(yǔ)句,它一般用在循環(huán)結(jié)構(gòu)中,其功能是結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,把程序流程轉(zhuǎn)移到當(dāng)前循環(huán)語(yǔ)句的下一個(gè)循環(huán)周期,并根據(jù)循環(huán)控制條件決定是否重復(fù)執(zhí)行該循環(huán)體。 continue語(yǔ)句的一般形式為:continue; continue語(yǔ)句通常和條件語(yǔ)句一起用在由 while、dowhile和 for語(yǔ)句構(gòu)成的循環(huán)結(jié)構(gòu)中,它也是一種具有特殊功能的無(wú)條件轉(zhuǎn)移語(yǔ)句,但它與 break語(yǔ)句不同,conti

57、nue語(yǔ)句并不跳出循環(huán)體,而只是根據(jù)循環(huán)控制條件確定是否繼續(xù)執(zhí)行循環(huán)語(yǔ)句 返回語(yǔ)句 返回語(yǔ)句用于終止函數(shù)的執(zhí)行,并控制程序返回到調(diào)用該函數(shù)時(shí)所處的位置。返回語(yǔ)句有兩種形式: lreturn表達(dá)式; 2return; 如果return語(yǔ)句后邊帶有表達(dá)式,那么要計(jì)算表達(dá)式的值,并將表達(dá)式的值作為該函數(shù)的返回值。假設(shè)使用不帶表達(dá)式的第2種形式,那么被調(diào)用函數(shù)返回主調(diào)用函數(shù)時(shí),函數(shù)值不確定。一個(gè)函數(shù)的內(nèi)部可以含有多個(gè)return語(yǔ)句,但程序僅執(zhí)行其中的一個(gè)return語(yǔ)句而返回主調(diào)用函數(shù)。一個(gè)函數(shù)的內(nèi)部也可以沒(méi)有return語(yǔ)句,在這種情況下,當(dāng)程序執(zhí)行到最后一個(gè)界限符“處時(shí),就自動(dòng)返回主調(diào)用函數(shù)。

58、7.4 函數(shù) 函數(shù)是C語(yǔ)言中的一種根本模塊,實(shí)際上一個(gè)C語(yǔ)言程序就是由假設(shè)干個(gè)模塊化的函數(shù)所構(gòu)成的。前面我們已經(jīng)看到,C語(yǔ)言程序總是由主函數(shù) main開(kāi)始,main函數(shù)是一個(gè)控制程序流程的特殊函數(shù),它是程序的起點(diǎn)。在進(jìn)行程序設(shè)計(jì)的過(guò)程中,如果所設(shè)計(jì)的程序較大,一般應(yīng)將其分成假設(shè)干個(gè)子程序模塊,每個(gè)子程序模塊完成一種特定的功能。在C語(yǔ)言中,子程序是用函數(shù)來(lái)實(shí)現(xiàn)的。對(duì)于一些需要經(jīng)常使用的子程序可以按函數(shù)來(lái)設(shè)計(jì),并且可以將自己所設(shè)計(jì)的功能函數(shù)做成一個(gè)專(zhuān)門(mén)的函數(shù)庫(kù),以供反復(fù)調(diào)用。此外,C51編譯器還提供了豐富的運(yùn)行庫(kù)函數(shù),用戶(hù)可以根據(jù)需要隨時(shí)調(diào)用。這種模塊化的程序設(shè)計(jì)方法,可以大大提高編程效率。7.4

59、.1 函數(shù)的定義 從用戶(hù)的角度來(lái)看,有兩種函數(shù):標(biāo)準(zhǔn)庫(kù)函數(shù)和用戶(hù)自定義函數(shù)。標(biāo)準(zhǔn)庫(kù)函數(shù)是C51編譯器提供的,不需要用戶(hù)進(jìn)行定義,可以直接調(diào)用。用戶(hù)自定義函數(shù)是用戶(hù)根據(jù)自己的需要編寫(xiě)的能實(shí)現(xiàn)特定功能的函數(shù),它必須先進(jìn)行定義之后才能調(diào)用。 函數(shù)定義的一般形式為: 函數(shù)類(lèi)型 函數(shù)名形式參數(shù)表 形式參數(shù)說(shuō)明; 局部變量定義; 函數(shù)體語(yǔ)句; 其中,“函數(shù)類(lèi)型說(shuō)明了自定義函數(shù)返回值的類(lèi)型。 “函數(shù)名是自定義函數(shù)的名字。 “形式參數(shù)表中列出的是在主調(diào)用函數(shù)與被調(diào)用函數(shù)之間傳遞數(shù)據(jù)的形式參數(shù),形式參數(shù)的類(lèi)型必須要加以說(shuō)明。ANSI C標(biāo)準(zhǔn)允許在形式參數(shù)表中對(duì)形式參數(shù)的類(lèi)型進(jìn)行說(shuō)明。如果定義的是無(wú)參函數(shù),可以沒(méi)

60、有形式參數(shù)表,但圓括號(hào)不能省略。 “局部變量定義是對(duì)在函數(shù)內(nèi)部使用的局部變量進(jìn)行定義。 “函數(shù)體語(yǔ)句是為完成該函數(shù)的特定功能而設(shè)置的各種語(yǔ)句。 如果定義函數(shù)時(shí)只給出一對(duì)花括號(hào)而不給出其局部變量和函數(shù)體語(yǔ)句,那么該函數(shù)為所謂“空函數(shù),這種空函數(shù)也是合法的。在進(jìn)行C語(yǔ)言模塊化程序設(shè)計(jì)時(shí),各模塊的功能可通過(guò)函數(shù)來(lái)實(shí)現(xiàn)。開(kāi)始時(shí)只設(shè)計(jì)最根本的模塊,其它作為擴(kuò)充功能在以后需要時(shí)再加上。編寫(xiě)程序時(shí)可在將來(lái)準(zhǔn)備擴(kuò)充的地方寫(xiě)上一個(gè)空函數(shù),這樣可使程序的結(jié)構(gòu)清晰,可讀性好,而且易于擴(kuò)充。7.4.2 函數(shù)的調(diào)用形式 1調(diào)用形式 C語(yǔ)言程序中函數(shù)是可以互相調(diào)用的。所謂函數(shù)調(diào)用就是在一個(gè)函數(shù)體中引用另外一個(gè)已經(jīng)定義了的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論