單片機(jī)C語言(模塊一).doc_第1頁
單片機(jī)C語言(模塊一).doc_第2頁
單片機(jī)C語言(模塊一).doc_第3頁
單片機(jī)C語言(模塊一).doc_第4頁
單片機(jī)C語言(模塊一).doc_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)原理及應(yīng)用(二)模塊一 C51程序設(shè)計基礎(chǔ)任務(wù)1:實(shí)例導(dǎo)航第二章 C與8051 21 8051的編程語言1、8051的編程語言(四種):(1)BASIC語言(2)PL/M(3)匯編語言(4)C語言 目前,匯編語言和C語言是廣泛使用的兩種單片機(jī)編程語言。在未來的一段時間內(nèi),匯編語言和C語言還將同時存在,但從發(fā)展趨勢看,C語言有逐漸取代匯編語言的可能。 最好的單片機(jī)編程者應(yīng)是具有匯編語言基礎(chǔ),又精通C語言的。2、C語言的優(yōu)點(diǎn)(與匯編語言相比):(P41) (1)對單片機(jī)的指令系統(tǒng)不要求了解,僅要求對8051的存儲器結(jié)構(gòu)有所了解(2)寄存器的分配、不同存儲器的尋址及數(shù)據(jù)類型等細(xì)節(jié)由編譯器管理(3)程序有規(guī)范的結(jié)構(gòu),由不同的函數(shù)組成,這種方式可使程序結(jié)構(gòu)化(4)編程及程序調(diào)試時間顯著縮短,從而提高效率(5)提供庫函數(shù),具有較強(qiáng)的數(shù)據(jù)處理能力3、8051單片機(jī)C語言(單片機(jī)C51語言) 了解一下單片機(jī)的種類:(查資料)22 Cx51編譯器編譯: C語言源程序轉(zhuǎn)換成機(jī)器語言目標(biāo)程序的過程,叫做編譯。編譯器:能自動完成編譯過程的一種計算機(jī)軟件。(1) C語言編譯器(標(biāo)準(zhǔn)C)(2) C51編譯器(經(jīng)典8051單片機(jī))(3) Cx51編譯器(經(jīng)典8051單片機(jī)及派生產(chǎn)品)Cx51編譯器完全遵照ANSI C語言標(biāo)準(zhǔn),支持C語言的所有標(biāo)準(zhǔn)特征。另外,還增加了可以直接支持8051結(jié)構(gòu)的特征。典型產(chǎn)品:KILE套裝工具軟件-uVision2 集成開發(fā)環(huán)境的使用(P 302) 例2-1:用uVision2軟件編譯調(diào)試一個C51程序(HELLO.C) 基本步驟:(1) 創(chuàng)建一個新項(xiàng)目(建在一個新文件夾下)并為項(xiàng)目選擇一個CPU(此時會自動加入啟動文件)(2) 創(chuàng)建新程序文件(或打開舊程序文件)此例中,打開c:kilec51exampleshello(3) 將源文件添加到項(xiàng)目中此時還可修改工具選項(xiàng)(4) 編譯和鏈接項(xiàng)目(Build Target命令):翻譯和鏈接源文件,并生成一個可以載入到uvision2調(diào)試器進(jìn)行調(diào)試的絕對目標(biāo)模塊。(5) 調(diào)試項(xiàng)目printf(“hello world!n”); 它是C語言的庫函數(shù),功能是用于程序的輸出(顯示在屏幕上),對于單片機(jī)來說,則必須通過其串行接口才能輸出到屏幕上顯示。25 Cx51程序結(jié)構(gòu)(53頁)(一)Cx51程序結(jié)構(gòu)特點(diǎn)一個Cx51程序由函數(shù)構(gòu)成,是一個函數(shù)定義的集合。Cx51程序由主函數(shù)(main)、庫函數(shù)(如sqrt ,scanf,printf等)、用戶定義函數(shù)組成。(1)主函數(shù):在一個C51程序中,僅有一個名為main的函數(shù)(主函數(shù))主函數(shù)既是程序的入口,也是程序的出口。也就是說,程序的執(zhí)行起始于主函數(shù),并且最終結(jié)束于主函數(shù)。在主函數(shù)執(zhí)行過程中可調(diào)用其他函數(shù)。(2)庫函數(shù):是C51在庫文件中已定義的函數(shù),其函數(shù)說明在相關(guān)的頭文件中。這類函數(shù),用戶在編程時只要用 # include預(yù)處理指令將頭文件包含在用戶文件中,直接調(diào)用即可。例: #include main () . printf (Hello Worldn); (3)用戶定義函數(shù):使用前需要用戶自己定義。類型 函數(shù)名(數(shù)據(jù)類型 形式參數(shù), 數(shù)據(jù)類型 形式參數(shù),.)數(shù)據(jù)說明部分;執(zhí)行語句部分;函數(shù)體寫在一對 中。例:(P51)unsigned int fetch_rate ( ) uint count; do while (!FLAG1); FLAG1=0; count=TH1*256+TL1; TH1=0; TL1=0; Dtime=Btime; return(count/time);(二)C51程序的編程要點(diǎn)(P53) (1)一個C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何,且最終結(jié)束于main函數(shù)。 (2)C程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句可以分寫在多行上,每個語句和數(shù)據(jù)定義的最后必須有一個分號;分號是C語句結(jié)束符。(3)可以用/*/ 或 / 對C程序中的任何部分作注釋。(三)Cx51程序的書寫格式(P52) Cx51源程序是一個ASCII碼文件,可以用任何標(biāo)準(zhǔn)的ASCII碼文本編輯器編寫,例如:記事本、寫字板等。(1)一般情況下,每個語句占用一行(2)不同結(jié)構(gòu)層次的語句,從不同的起始位置開始,即在同一結(jié)構(gòu)層次中的語 句,縮進(jìn)同樣的字?jǐn)?shù)(3)表示結(jié)構(gòu)層次的大括號通常寫在該結(jié)構(gòu)語句第一個字母的下方,與結(jié)構(gòu)化語句對齊,并占用一行例:void T0Int() interrupt 1 C100us-; if (C100us = 0) C100us = Tick; / 100us 計數(shù)器為0, 重置計數(shù)器初值 Second+; if (Second = 60) Second = 0; Minute+; if (Minute = 60) Minute = 0; Hour+; if (Hour = 24) Hour = 0; 例2-2 程序結(jié)構(gòu)分析(P48): (1) 預(yù)處理指令(2) 全局變量的定義(3) 函數(shù)說明(item3)(4) 主函數(shù)(main)(5) 用戶定義函數(shù) fetch_rate ( ), timer0( )(6)T0中斷函數(shù)timer0 ( )補(bǔ)充:預(yù)處理器(P342)及頭文件預(yù)處理器嵌入在Cx51編譯器中,用于處理源程序文件中的預(yù)處理命令。預(yù)處理命令是給編譯器的工作指令。這些指令通知編譯器在編譯工作開始之前對源程序進(jìn)行某些處理。所有的預(yù)處理命令都以符號“#”作為前綴,而且在符號“#”和正式的命令之間不能出現(xiàn)空格、tab和換行等界定符。例如:表1 所有預(yù)處理命令(1) define:定義一個預(yù)處理宏或常量(2) include:文件包含,從外部文件中讀入一個源程序文本。C語言預(yù)處理命令主要包括宏定義、文件包含、條件編譯。(一)定義預(yù)處理宏或常量1、定義宏:用標(biāo)識符來代表一個字符串(給字符串取個名字)。如:#define uchar unsigned char;uchar i, m;C編譯系統(tǒng)在編譯前將這些標(biāo)識符替換成所定義的字符串。2、定義常量:#define CONST 60 使用符號常量的好處:(1) 含義清楚、見名知意(2) 修改方便、一改全改(二)文件包含 一個源文件可以將另一個源文件的全部包含進(jìn)來。被包含的頭文件可以用“”括起來,也可以用括起來(P334)。#include #include “文件名”區(qū)別是:(1)使用符號時,Cx51編譯器在頭文件目錄中查找頭文件;(2)使用“”符號時,Cx51編譯器在當(dāng)前目錄中查找頭文件。(三)頭文件(P342)頭文件保存于KeilC51INC文件夾下,包含常量和宏定義、類型定義以及函數(shù)原型。(1) (P52頁)包括對21個SFR寄存器,及PSW、TCON、IE、IP、P3、SCON中的可位尋址位的定義。頭文件的路徑為: C:KeilC51INC reg51.h(2) 344頁(3) 343頁(4) 342頁 absacc.h頭文件中包含的宏定義允許用戶直接訪問8051單片機(jī)不同存儲區(qū)。任務(wù)2:認(rèn)識數(shù)據(jù)第三章 Cx51數(shù)據(jù)與運(yùn)算31 數(shù)據(jù)與數(shù)據(jù)類型數(shù)據(jù)、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)Cx51的數(shù)據(jù)類型(圖3-1,表3-1)32 常量與變量(一) 常量與變量的區(qū)別 常量:在程序運(yùn)行過程中,其值不能改變的量。 變量:在程序運(yùn)行過程中,其值可以改變的量。(二) 定義常量(為常量定義一個符號名)例:#define CONST 60 其中:CONST是一個標(biāo)識符在程序中使用的變量名、函數(shù)名、標(biāo)號等統(tǒng)稱為標(biāo)識符,用來標(biāo)識各種程序成分。C語言規(guī)定,標(biāo)識符只能是由字母(A-Z,a-z),數(shù)字(0-9)、下劃線(_)組成字串,并且第一個字符必須是字母或下劃。(1)標(biāo)準(zhǔn)C不限制標(biāo)識符的長度,但它受各種版本的C語言編譯系統(tǒng)的限制。(2)在標(biāo)識符中,大小寫是有區(qū)別的(3)標(biāo)識符雖然可由程序隨意定義,但不能與關(guān)鍵字同名,也不能與系統(tǒng)預(yù)先定義的標(biāo)準(zhǔn)標(biāo)識符(如標(biāo)準(zhǔn)函數(shù))同名。標(biāo)識符在命名時應(yīng)當(dāng)簡單,含義清晰,這樣有助于閱讀理解程序。(三) 定義變量變量的定義格式如下:存儲模式 數(shù)據(jù)類型 存儲類型 變量名表如:unsigned int data variable, result ; 數(shù)據(jù)類型 存儲類型 變量名表1、符號常量與變量的區(qū)別(P57):2、局部變量與全局變量的區(qū)別:1)局部變量:在一定范圍內(nèi)(函數(shù)體內(nèi))定義的變量;2)全局變量:在函數(shù)之外定義的變量(所有函數(shù)前,各個函數(shù)之間,所有函數(shù)后)。3、 定義數(shù)據(jù)類型時可使用縮寫形式(P58) 例如: #define uchar unsigned char (char unsigned縮寫成uchar) #define uint unsigned int (uint unsigned縮寫成uint)33 Cx51數(shù)據(jù)的存儲類型與8051存儲器結(jié)構(gòu)(一) 存儲類型存儲類型分為data、bdata、idata、 pdata、xdata、code等。Cx51編譯器根據(jù)不同的存儲類型,將各種變量、常量定位到不同的存儲區(qū)域中。存儲類型與存儲區(qū)域的關(guān)系見表3-2。(P61)存儲類型缺省時,由存儲模式?jīng)Q定默認(rèn)類型。存儲模式分SMALL(小存儲模式),COMPACT(緊湊存儲模式)和LARGE(大存儲模式)三種,SMALL為初始的存儲模式。參考課本P63相關(guān)內(nèi)容。34 8051特殊功能寄存器(SFR)及其Cx51定義(一)SFR的定義有兩種方法 (P65)(1)用“sfr ”關(guān)鍵字sfr SCON=0x98;sfr TMOD=0x89;將寄存器名與地址聯(lián)系起來。經(jīng)定義,用戶在程序中可使用寄存器名來訪問寄存器。特點(diǎn):用幾個,定義幾個寄存器(2)包含頭文件例:#include 。特點(diǎn):一次全部定義,不用的也定義(二) 特殊位的定義 在11個可位尋址的SFR寄存器中,PSW、TCON、IE、IP、P3、SCON中的位定義,已包含在頭文件。其余5個SFR中的位要用“sbit ”關(guān)鍵字進(jìn)行定義。(P65) (1)用“sbit”關(guān)鍵字的方法例:方法一sfr PSW=0xD0;sbit OV= PSW2;sbit CY= PSW7; 例:方法二sbit OV= 0xD02;sbit CY= 0xD07;例:方法三sbit OV=0xD2;sbit CY=0xD7;(2)包含頭文件的方法例:#include 。特點(diǎn):只定義了PSW、TCON、IE、IP、P3、SCON六個SFR中的特殊位35 并行接口及其定義 (1)用“sfr ”關(guān)鍵字 (P66)sfr P0=0x80;sfr P1=0x90;sfr P2=0xa0;sfr P3=0xb0;將寄存器名與地址聯(lián)系起來。經(jīng)定義,用戶在程序中可使用寄存器名來訪問寄存器。(2)包含頭文件的方法 并行接口P0P3寄存器的定義已包含在頭文件中,可在程序開頭包含此頭文件。例3-1 P1口作輸出口,接八只發(fā)光二極管,編程使八只發(fā)光二極管輪流點(diǎn)亮。#include void delay() unsigned int i; for (i=0; i20000; i+) ;void main() unsigned char index,LED; while (1) LED = 0x01; for (index=0; index 8; index+) P1 = LED; LED = 1; delay( ); 調(diào)試時注意:用keil生成 .hex文件,須按以下操作進(jìn)行:3.6 位變量(BIT)及其定義 (P68)用“bit”關(guān)鍵字的方法舉例:bit LEDBuf;任務(wù)3:數(shù)據(jù)運(yùn)算37 Cx51運(yùn)算符、表達(dá)式及其規(guī)則 (P69)3.7.1 Cx51算術(shù)運(yùn)算符及其表達(dá)式1、算術(shù)運(yùn)算符 +、*、/、%2、算術(shù)表達(dá)式、優(yōu)先級與結(jié)合性(1)算術(shù)表達(dá)式(2)優(yōu)先級:先*、/、%,后+、,()最優(yōu)先 如:(a+b)*(c-d)-e如果一個運(yùn)算符的兩側(cè)的數(shù)據(jù)類型不同,則必須通過數(shù)據(jù)類型轉(zhuǎn)換,將數(shù)據(jù)轉(zhuǎn)換成同種類型。轉(zhuǎn)換方式有2種:(1)自動(缺省)轉(zhuǎn)換(圖3-7)(2)強(qiáng)制類型轉(zhuǎn)換 轉(zhuǎn)換形式: (類型名)(表達(dá)式);如:(double) a; (int) (x+y); (float)(5%3)例:unsigned char x, y;unsigned int z;z=x+( unsigned int)y;z=x+( unsigned int)x*y;3.7.2 關(guān)系運(yùn)算符、表達(dá)式及優(yōu)先級1關(guān)系運(yùn)算符 、=、= =、!= 2關(guān)系運(yùn)算符的優(yōu)先級(1)關(guān)系運(yùn)算符的優(yōu)先級(2)運(yùn)算符的優(yōu)先級(圖3-8)(3)關(guān)系表達(dá)式(4)關(guān)系表達(dá)式的結(jié)果(邏輯值)(真1,假0)373 邏輯運(yùn)算符、表達(dá)式及優(yōu)先級1、邏輯運(yùn)算符 &、 | 、 !2、邏輯表達(dá)式、優(yōu)先級與結(jié)合性(1)邏輯表達(dá)式(2)運(yùn)算符的優(yōu)先級(圖3-9)(3)邏輯表達(dá)式的值(邏輯值)(真1,假0)例:a=3,b=4 !a a|b a&b !a&b374 位操作及其表達(dá)式位操作運(yùn)算符: & 、| 、 、 、 數(shù)據(jù)類型:整型、字符型,不能為實(shí)型數(shù)據(jù) 例:若a=11000011B=E3H, 將a值右循環(huán)移位兩位。 Main() unsigned char a=0xc3, b, c int n=2; b=an; a=c | b; 注意:移位運(yùn)算并不能改變原變量本身,除非將移位的結(jié)果賦給另一變量。例:x=a3;y=a; / a中保留移位前的內(nèi)容375自增減運(yùn)算符、復(fù)合運(yùn)算符及表達(dá)式 1自增減運(yùn)算符+、 -作用:使變量值自動加1或減1。例1:若i值原來為5,則 j=+i j值為6,i值也為6;j=i+ j值為5,i值為6;2. 復(fù)合運(yùn)算符及其表達(dá)式a +=b a=a+ba- =b a=a-ba*=b a=a*ba / =b a=a / b 任務(wù)4:基本流程控制第四章 Cx51流程控制語句41 C語言程序的基本結(jié)構(gòu)及其流程圖C語言是一種結(jié)構(gòu)化編程語言。結(jié)構(gòu)化程序由若干模塊組成,每個模塊中包含著若干個基本結(jié)構(gòu),而每個基本結(jié)構(gòu)中可以有若干個語句。 C語言有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。4.1.1順序結(jié)構(gòu)及其流程圖圖4-14.1.2選擇結(jié)構(gòu)及其流程圖 (1)選擇結(jié)構(gòu):使計算機(jī)具有決策能力和選擇能力。 圖4-2 (2)多分支結(jié)構(gòu):分為串行多分支結(jié)構(gòu)和并行多分支結(jié)構(gòu)。1、串行多分支結(jié)構(gòu)及流程圖(圖4-3)2、并行多分支結(jié)構(gòu)及流程圖(圖4-4)4.1.3循環(huán)結(jié)構(gòu)及其流程圖1、“當(dāng)”(while)型循環(huán)結(jié)構(gòu)及其流程圖(圖4-5)2、“直到”(do while)型循環(huán)結(jié)構(gòu)及其流程圖(圖4-6)構(gòu)成循環(huán)結(jié)構(gòu)的常見語句:while, do while, for42選擇語句421選擇語句ifif (表達(dá)式)語句;if語句三種形式形式一:if(表達(dá)式)語句;形式二:if(表達(dá)式)語句1; else 語句2;形式三(串行多分支):if(表達(dá)式1)語句1; else if(表達(dá)式2)語句2;else if(表達(dá)式3)語句3;else if(表達(dá)式m)語句n;else 語句m; 422 switch/case語句(并行多分支)多分支可以使用嵌套的if語句處理,但如果分支較多,嵌套的if語句層數(shù)多,程序冗長,降低可讀性。C語言中switch語句是多分支選擇語句。其一般形式:switch(表達(dá)式) case 常量表達(dá)式1:語句1;break; case 常量表達(dá)式2:語句2;break; case 常量表達(dá)式n:語句n;break; default: 語句n+1;4. 3 循環(huán)語句4.3.1 while語句一般形式:while(表達(dá)式) 語句;表達(dá)式稱為“循環(huán)條件”,語句稱為“循環(huán)體”。4.3.2 do while語句do 語句; while(表達(dá)式);表達(dá)式稱為“循環(huán)條件”,語句稱為“循環(huán)體”。4.3.3 for循環(huán)語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句;例:int i; sum;sum=0;for (i=0; i=10; i+) sum+=i;例:for (y=0; y=99; y=y+3) delay(33); px = px;例:沒有循環(huán)體的for語句(延時程序)void delay() int sum=2000, t; for (t=0; t sum; t+) ;例:延時1ms程序void msec( unsigned int x) unsigned char j; while(x-) for (j=0; j 125; j+) ;第五章 CX51構(gòu)造數(shù)據(jù)類型(P94)51數(shù)組概念:數(shù)組、數(shù)組類型、數(shù)組元素、數(shù)組分類(一維,二維,三維,多維)511一維數(shù)組1 一維數(shù)組的定義類型說明符 數(shù)組名整型表達(dá)式舉例:char ch10;2 數(shù)組的初始化1) 在定義數(shù)組時對數(shù)組的全部元素賦予初值例:int idata a6=0,1,2,3,4,5;2) 只對數(shù)組的部分元素初始化例:int idata a10=0,1,2,3,4,5; 數(shù)組的前6個元素賦初值,后4個元素值為0。3) 在定義數(shù)組時,若不對數(shù)組的全部元素賦初值,則數(shù)組的全部元素被缺省賦值為0;例1:int idata a10;例2:unsigned int ary20;unsigned int x ;ary9=x;3 數(shù)組應(yīng)用例:由開關(guān)控制指示燈(P95)圖5-1,由8751單片機(jī)控制指示燈的電路,此電路從與P0口相連的8個開關(guān)讀入控制量信息,將最近讀入的10次信息儲存在10字節(jié)數(shù)組int array10中,并把最后一次讀入的信息顯示在與P2口相連的8位LED指示燈上。每次讀入的顯示信息間隔100ms,由延時程序msec(100)完成。(1) 電路圖(5-1)(2) 程序流程圖(5-2)#include void msec (unsigned int);void main() unsigned char array10;unsigned char i;while(1) for (i=0; i=9; i+) arrayi=P2=P0;msec(100);void msec (unsigned int x) unsigned char j; while(x-)!=0) for (j=0; j=125;j+);仿真調(diào)試:512 二維數(shù)組(不作要求)514 查表數(shù)組的一個非常有用的功能之一是查表。例:用查表法,將攝氏溫度轉(zhuǎn)換成華氏溫度。(P100)#define uchar unsigned charuchar code tempt =32,34,36,37,39,41;uchar ftoc(uchar degc) return temptdegc;main( ) uchar x; /加一行x=ftoc(5);課堂練習(xí):用查表法編寫程序,求某數(shù)x(09)的平方值,存到變量y中。515 數(shù)組與存儲空間( P101)當(dāng)程序中設(shè)定了一個數(shù)組時,C編譯器就會在系統(tǒng)的存儲空間中開辟一個區(qū)域,用于存放該數(shù)組的內(nèi)容。52 指針( P101)521 指針的基本概念變量由變量名和變量值兩部分構(gòu)成。內(nèi)存單元由單元地址和單元內(nèi)容兩部分構(gòu)成。變量名與內(nèi)存單元的地址相對應(yīng),變量值與內(nèi)存單元的內(nèi)容相對應(yīng)。變量與內(nèi)存單元的關(guān)系:(圖5-3)變量的指針:變量的地址。指向變量的指針變量:用來存放另一個變量的地址(即指針)的變量。通過指針對變量進(jìn)行間接訪問。1 指針變量的定義類型識別符 *指針變量名例:int *ap;float *pointer;2指針變量的引用例:定義變量、指針變量: int a,b,c;int *ap;int *bp;int *cp; 給變量、指針變量賦值: a=6;b=8;c=10;指針變量的引用:使用取地址運(yùn)算符“&”ap=&a;bp=&b;cp=&c;以上過程如圖(5-4 5-6)所示。通過指針、指針變量對內(nèi)存進(jìn)行間接訪問:使用指針運(yùn)算符“*”注意: “*” 有兩種作用例: int *ap; /“*”為指針類型說明符x=*ap; /“*”為指針運(yùn)算符例:取地址運(yùn)算符“&”和指針運(yùn)算符“*”的使用int *ap, int a; ap=&a; /取地址運(yùn)算符“&”例:#define uchar unsigned charuchar count;uchar *x;uchar xdata *y;uchar data *z;uchar code *w;uchar data *xdata zz;x=&cowrit;*x=0xfe;522 數(shù)組指針和指向數(shù)組的指針變量(P105)指針可以指向變量,也可以指向數(shù)組。數(shù)組的指針:數(shù)組的起始地址指向數(shù)組的指針變量:用來存放一個數(shù)組的起始地址(指針)的變量1 指向數(shù)組的指針變量的定義、引用和賦值例:int a10;int *app;引用方法:(1) app=&a0;(2) app=a;2 通過指針引用數(shù)組元素例:設(shè)一個整型數(shù)組a,有10個元素。要求輸出全部元素的值。(1)下標(biāo)法main() int a10=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i10;i+) printf(“%d”,ai);(2)通過數(shù)組名計算數(shù)組元素的地址,找出元素的值main() int a10=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i10;i+) printf(“%d”,*(a+i);(3)用指針變量指向數(shù)組元素main() int a10=1,2,3,4,5,6,7,8,9,10; int *p; for (p=a;p(a+10);p+) printf(“%d”,*p);以上三個程序的運(yùn)行結(jié)果:1 2 3 4 5 6 7 8 9 10第六章 CX51函數(shù)(P124)(1)函數(shù)(與子程序或過程類似)可以在不同地方被調(diào)用,并且函數(shù)可以重復(fù)使用。(2)C語言程序的構(gòu)成(由一個個函數(shù)構(gòu)成)(3)函數(shù)不能嵌套定義,但可以相互調(diào)用(4)函數(shù)調(diào)用的一般規(guī)則:主函數(shù)可以調(diào)用其他普通函數(shù),普通函數(shù)之間也可以互相調(diào)用,但普通函數(shù)不能調(diào)用主函數(shù)(5)C語言程序的執(zhí)行從main( )開始,最后在main( )中結(jié)束。61 函數(shù)的分類(一)主函數(shù)(二)普通函數(shù)(標(biāo)準(zhǔn)庫函數(shù)、用戶自定義函數(shù))1、標(biāo)準(zhǔn)庫函數(shù):由C編譯系統(tǒng)的函數(shù)庫提供。2、用戶自定義函數(shù):是用戶根據(jù)自己的需要編寫的函數(shù)。用戶自定義函數(shù)有3種形式:(1)無參數(shù)函數(shù) (2)有參數(shù)函數(shù) (3)空函數(shù)62 函數(shù)的定義 返回值類型標(biāo)識符 函數(shù)名(形式參數(shù)表)函數(shù)體語句1、無參數(shù)函數(shù)的定義方法 返回值類型標(biāo)識符 函數(shù)名( )函數(shù)體語句#include func( ) printf(“Function In func respond the call of Mainn”);main( ) printf(“Function In Main calls A Function in func n”); func( ) 在上面和程序中,實(shí)際定義了兩個函數(shù), main( )、func( )都是無參數(shù)函數(shù),它們的返回值標(biāo)識符可以省略,默認(rèn)值是int類型。 在上面和程序中, 函數(shù)func( )放在 main( )函數(shù)之前,這是經(jīng)典的C寫法。但是標(biāo)準(zhǔn)C(ANSI C)則要求主函數(shù)要放在前面,被調(diào)用函數(shù)放在后面,且應(yīng)在開頭進(jìn)行原型說明。2、有參數(shù)函數(shù)的定義方法返回值類型標(biāo)識符 函數(shù)名( 數(shù)據(jù)類型 形式參數(shù),數(shù)據(jù)類型 形式參數(shù))函數(shù)體語句 例:求兩個數(shù)的最大公約數(shù)。 #include int gcd(int u, int v) / u, v為gcd函數(shù)的形式參數(shù) int temp; while (v!=0) temp=u%v ; u=v ; v=temp ; return(u);main( ) int result, a=150, b=35; printf(“a=%d, b=%d”,a,b); / 在屏幕上顯示a, b的值 result=gcd(a, b); / 調(diào)用gcd函數(shù),(a, b)為實(shí)際參數(shù) printf(“The gcd of %d and %d is %dn”,a,b, result); 程序運(yùn)行結(jié)果:a=150 b=35 The gcd of 150 and 35 is 5 在上面的程序中,int為函數(shù)返回值類型標(biāo)志符,gcd為函數(shù)名,而括號中的u,v則為函數(shù)的輸入形式參數(shù)。在gcd 函數(shù)的結(jié)尾處有一個返回語句return(u)。其中u 為函數(shù)的返回變量。3、空函數(shù)的定義方法返回值類型標(biāo)識符 函數(shù)名( ) 例: float min( ) 63 函數(shù)的參數(shù)和函數(shù)值為了提高函數(shù)的通用性和靈活性,不同函數(shù)之間需要進(jìn)行參數(shù)傳遞。1、 形式參數(shù)和實(shí)際參數(shù)形式參數(shù):在定義函數(shù)時,函數(shù)名后面括號中的變量名稱為“形式參數(shù)”。實(shí)際參數(shù):在函數(shù)調(diào)用時,主調(diào)用函數(shù)名后面括號中的表達(dá)式稱為“實(shí)際參數(shù)”。在C語言的函數(shù)調(diào)用中,實(shí)際參數(shù)與形式參數(shù)之間的數(shù)據(jù)傳遞是單向進(jìn)行的,只能由實(shí)際參數(shù)傳遞給形式參數(shù),而不能由形式參數(shù)傳遞給實(shí)際參數(shù)。 例:圖6-1所示,函數(shù)調(diào)用的參數(shù)傳遞過程main() result=gcd (a,b); / (a, b)為實(shí)際參數(shù) int gcd(int u, int v) / u, v為gcd函數(shù)的形式參數(shù) result(u); 2、函數(shù)的返回值(1)函數(shù)的返回值是通過函數(shù)中的return語句獲得的

溫馨提示

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

最新文檔

評論

0/150

提交評論