久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9463|回復: 8
收起左側

第2章 C語言基礎

  [復制鏈接]
ID:111078 發表于 2016-3-28 00:37 | 顯示全部樓層 |閱讀模式
51單片機輕松入門—基于STC15W4K系列(C語言版)
李友全
編著:http://www.zg4o1577.cn/bbs/dpj-37954-1.html

2 C語言基礎

 

 

 

 

 

1 變量的數據類型(bit、char、int、long、float)

2 變量存儲空間(code、data 、xdata)

3 變量存儲類型(auto、static)

%E7%AC%AC2%E7%AB%A0-c%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-2.jpg

4 變量作用域

5 運算符

6 分支結構

7 循環結構

8 函數

1 變量的數據類型(bitcharintlongfloat)

 

 

常用變量定義舉例:

bit a; // bit位型變量長度是1個位,取值范圍是01,通常用作程序中的標志位。

unsigned char b; // 正數運算,占用內存1個字節(8位,運算范圍:0  255

 

unsigned

int c;

// 正數運算,占用內存2個字節(2*8=16位,運算范圍:0  65535 

unsigned

long d;

// 正數運算,占用內存4個字節(4*8=32位)

float f;

 

// 帶小數點的數值運算

 

數據類型

符號

說明

字節數

表示形式

數值范圍

位 型

 

1/8

bit、sbit

0或1

 

字符型

 

1

char

-128 ~ +127

 

1

unsigned char

0 ~ 255

 

 

 

 

整數型

 

整型

2

int

-32768 ~ +32767

長整型

4

long

-2147483648~ +2147483647

 

整型

2

unsigned int

0 ~ 65535

長整型

4

unsigned long

0 ~ 4294967295

實型

有效值24位

4

float

(±16777215)× 10±127

 

2 變量存儲空間(codedata xdata)

 

 

 

code :變量存放在程序存儲器空間,最主要的用途是存放表格數據。 比如:unsigned char code Table[]={0x12,0x23,… ,0x34};P0 = Table[ i ]; data :變量存放在內部RAM ,訪問速度快。

xdata :變量存放在外部RAM, 訪問速度慢(單片機內部擴展的xdata 速度仍然很

快)

 

 

如果定義變量時沒有說明存儲空間,此時變量存儲空間由keil環境確定,單擊工具 欄按鈕options for target,選擇target選項卡,在Memory model后就可以選擇變 量默認存儲空間。

 

 

%E7%AC%AC2%E7%AB%A0-c%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-1.jpg

 

 

 

 

void fun()

{


3 變量存儲類型(autostatic)

auto unsigned char x;

static unsigned char y=5; //初次運行時進行初始化賦值1

x++;

y++;

}

 

 

auto:只用于函數內部變量定義,單片機在執行這個函數的時為它分配內存地址, 當函數 執行完畢返回后,auto變量就會被銷毀,再次進入這個函數時,它的初值是不確定的,

auto變量是局部變量,只允許在定義它的函數內使用,由于auto變量在定義它的函數外的

任何地方都是不可見的,所以允許我們在這個函數外的其它地方或者是其它的函數內定義 同名的變量,它們之間不會發生沖突,因為他們都有自己的區域性,由于函數內部變量默

認存儲類型就是動態型auto,所以實際代碼中一般都省略了這個關鍵字。

 

 

static:在函數內部,static允許一個變量在重新進入這個函數時能夠保持原來的值不 變,在函數內部用static定義的變量在函數初次運行時進行初始化賦值1, 且只操作一 次,以后每次調用函數時不再重新賦初值而只引用上次函數調用結束時的值,在函數內部 使用static定義的變量是局部變量, 只能在定義該變量的函數內使用該變量。

4 變量作用域

 

如果一個變量在某個文件或函數范圍內是有效的,則稱該文件或函數為該變量的作用 域,在此作用域內可以使用該變量,所以又稱變量在此作用域內可見,通常,變量的 作用域都是通過它在程序中的位置隱式說明的。

 

 

局部變量 :

① 在一個函數內部定義的變量是局部變量,只能在函數內部使用,在main主函數內部 定義的變量也是局部變量,其它函數也不能使用主函數中的變量。

② 局部變量在沒有賦值以前的值是不確定的,是以前殘留在內存里的隨機值,所以在定

義局部變量的時候一定要初始化。

③ 不同函數中可以使用同名變量,它們作用域不同,因此不會發生沖突。

④局部變量在函數被調用的過程中動態占有存儲單元,調用結束立即釋放。

 

 

全局變量 :

① 在函數外部定義的變量是全局變量,其作用域是變量定義位置開始至整個程序文件結 束,實際中全局變量一般是在程序的開頭位置定義。

② 全局變量在沒有賦值以前系統默認為0

③局部變量若與全局變量同名,則在局部變量的作用域內,全局變量存在,但不可見, 全局變量的作用被屏蔽。

④全局變量在程序運行過程中一直占用RAM存儲單元。

 

5 運算符

 

 

 

C語言中的常用運算符可以歸納為下列7大類:

 

 

 

算術運算符  + - * / % ++ -- 

關系運算符  <, >, <=, >=, ==, != )輸入數值,輸出01 邏輯運算符  && ||、 ! ) 輸入數值,輸出01 位操作運算符 & | ~ ^ <<  >> )輸入數值,輸出數值 賦值運算符  = 

特殊運算符  &  *  分隔符主要包括這幾個:[ ] ( ) { } , : ;

 

 

 

1 if (表達式)

{


6 分支結構

語句塊;

}

示例: if (a >=3)

{

b = 0;

}

說明:① 如果表達式的結果為真(0代表,用非0代表),則執行語句塊,否則執行if

句后面的語句(即語句塊后面的語句)。

 

2 if (表達式)

{

 

 

}

else

{

 

 

}


語句塊1;

 

 

 

 

 

語句塊2;

示例: if (a >=3)

{

b = 0;

}

else

{

b = 1000;

}

 

 

switch(變量表達式)

{

case 常量表達式1:

{ 語句塊1;}

break; // 必須使用break跳出當前switch結構。

case 常量表達式2:

{ 語句塊2;}

break; // 必須使用break跳出當前switch結構。

case 常量表達式n:

{ 語句塊n;}

break; // 特別提示:default前也必須有break。

default:

{ 語句塊n+1;}

break; //必須使用break跳出當前switch結構。

}

補充說明:

① “變量表達式”結果必須是字符型、整型或長整型,而不能是浮點型,否則編譯錯誤。

② “break;”語句可放在{ 語句塊X} 外,如上面格式所示,也可放在{ 語句塊X}內的最后 一行。

③ 多個case語句可以共享一組執行語句,例如下面的語句case 1與case 2執行同一個語 句塊。

case 1:

case 2:{ 語句塊;}

 

 

 

 

(1) while (表達式)

{


7 循環結構

語句塊;

}

說明:如果表達式的結果為真(0代表,用非0代表),則執行語句塊,否則執

while語句后面的語句(即語句塊后面的語句)。

特殊的: while (1) 構成1個無限循環過程。

(2) do

{


很常用

語句塊;

}

while (表達式); // 當表達式的值為真(非0都算作真)時繼續執行循環體

 

%E7%AC%AC2%E7%AB%A0-c%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-3.jpg (3) for (表達式1;表達式2;表達式3)

{

語句塊;

}

for循環的等效結構如下。

for (循環變量初值;循環條件;循環變量增值)

{

語句塊;

}

特殊的:for (;;); // 構成1個無限循環過程

 

 

 

 

示例1void print_message()

 

{


8 函 數

 

print (“How do you do! ” );

 

}

無參數函數定義格式: 返回值類型 函數名()

{

變量聲明;

語句塊 ;

return (變量或表達式);

}


可以不用

 

 

示例2int max (int x,int y)

{

int z ;

z = x > y ? xy;

return (z);

}

帶參數函數定義格式:

返回值類型 函數名(類型 形參1,類型 形參2,…

{

變量聲明;

語句塊 ;

return (變量或表達式);

}

 

 

Ø 有些函數即將執行完畢時會返回一個值,函數定義時的“返回值類型”應該與函數內部

return語句行的變量數據類型相同,也就是說只要按變量類型來定義“返回值類型”就 行了,若函數不需要返回值,“返回值類型”要寫作“void”,此時函數內部也不需要 return語句。

Ø return語句功能是立即從所在的函數中退出, 返回到調用它的程序中去,同時還能返回 一個值給調用它的函數,一個函數中可以有多個return 語句(如分支結構),執行到 哪各return 語句則哪個return 語句起作用。

Ø 形式參數是指調用函數時要傳入到函數體內參與運算的變量,形式參數必須指定類型, 它可以有任意多個或沒有(由于單片機RAM存儲空間有限,所以實際上達不到任意多 個),當不需要形式參數時括號內可為空或寫入“void”表示,但括號不能少。

 

 

 

 

調用格式(1)函數名(變量或常數1,變量或常數2;

示例:Switch (x,y) print_message(); 調用格式(2 V = 函數名(變量或常數1,變量或常數2;

示例:z = max (5,9)

說明:當函數有多個參數時各參數要用逗號隔開。

 

 

 

Ø 傳值調用方式:主調函數的實參可以是常數、變量、數組元素(比如array[ i ])、結構體

成員變量(比如student.name),傳遞過去的是常數、變量、數組元素或結構體成員變量 里面的值,不管被調函數里面內容如何,調用結束后主調函數參數都不會發生變化。

 

 

 

Ø 傳地址調用方式:當用數組名作為函數實參時,是將數組所在內存單元首地址傳遞給函 數,而不是將整個數組元素都復制到被調函數中去,被調函數直接操作數組內的元素,所 以被調函數的操作會影響到主調函數的實參,這里是傳地址調用。例如:

int array[]={10,12,20,18,9,11,}; MaxNum=avrage(array,6);

注意:

① 函數定義行結尾不能有分號,函數調用語句結尾必須有分號。

 

② 主調函數的實參與被調函數的形參個數和類型必須一致,否則在傳值的過程中發生自動類 型轉換可能導致最終結果不正確。

③ 如果被調函數書寫在主調函數之后,則應在文件的開頭(即所有函數外的最上端)聲明被 調函數,聲明方法是將函數定義的一整行復制到文件開頭并在行尾添加分號即可。

回復

使用道具 舉報

ID:102953 發表于 2016-4-5 23:47 | 顯示全部樓層
很好的文章。
煩請再次排版,影響認真閱讀。
謝了!
回復

使用道具 舉報

ID:288930 發表于 2018-3-7 21:53 | 顯示全部樓層
很好,感謝分享
回復

使用道具 舉報

ID:169968 發表于 2018-8-6 21:27 | 顯示全部樓層
很好,感謝分享
回復

使用道具 舉報

ID:168971 發表于 2018-8-20 20:52 來自手機 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:391744 發表于 2018-10-21 18:55 | 顯示全部樓層
就是排版有點問題。學習了
回復

使用道具 舉報

ID:349598 發表于 2019-4-25 10:40 | 顯示全部樓層
很好,感謝分享
回復

使用道具 舉報

ID:403318 發表于 2020-12-9 11:49 | 顯示全部樓層
很好的文章。 煩請再次排版,影響認真閱讀。 謝了!
回復

使用道具 舉報

ID:968083 發表于 2021-9-26 05:07 | 顯示全部樓層
繼續看第二章,每天都進步一點
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人看人人草 | 久热久草| 日韩一区二区在线视频 | 国产一区二区在线免费观看 | 视频1区2区 | 欧美精品一区二区三区四区五区 | 久久免费视频网 | 性国产xxxx乳高跟 | 啪啪免费网 | 亚洲综合色 | 色婷婷av久久久久久久 | 成年人视频在线免费观看 | 色.com| 青青草网站在线观看 | 亚洲精品一区二区在线观看 | 欧美夜夜 | 一区二区三区av | 国产一区二区日韩 | 亚洲aⅴ | 成人一区二区三区在线观看 | 成人在线 | 精品视频在线观看 | 国产一区二区三区四区hd | 中文字幕成人 | 亚洲毛片在线观看 | 欧美三区视频 | 欧美狠狠操 | 欧美精品成人一区二区三区四区 | 亚洲欧美高清 | 色橹橹欧美在线观看视频高清 | 99热在线观看精品 | 成人久草 | 国产免费一区二区 | 一级欧美| 欧美精品一 | www97影院 | 国产精品久久99 | 欧美精品日韩精品国产精品 | 欧美激情视频一区二区三区免费 | 国产免费一区二区 | 久久av网站 |