C  入門教學 好景企業股份有限公司
關 於  C (C 語言的格式 ) <ul><li>C 語言編譯過程 </li></ul><ul><li>原始程式  -->  經由編譯器  -->  變成目的檔  -->  經由連結器  -->  變成執行檔 </li></ul><ul><l...
關 於  C (C 語言的格式 ) <ul><li>標 準  C  語 言 格 式  </li></ul><ul><li>/*Hello World Program*/ #include <stdio.h> int main() {   pri...
基 本 資 料 型 態 <ul><li>變 數 命 名 的 原 則 </li></ul><ul><li>開 頭 必 須 是 字 母  ( letter )  或 底 線  ( underscore ) . </li></ul><ul><li>字...
基 本 資 料 型 態 <ul><li>變 數 的 資 料 型 態 種 類 </li></ul>類 別 符號位元 位元長 (bits) 表 示 法 整 數 無 8 unsigned char 16 unsigned short 32 unsig...
基 本 資 料 型 態 <ul><li>變 數 的 宣 告 方 法 </li></ul><ul><li>整 數 部 份  : </li></ul><ul><ul><li>int a; </li></ul></ul><ul><ul><li>int...
儲 存 類 別 Scope <ul><li>自 動 變 數  ( auto variable ) </li></ul><ul><li>自 動 變 數 只 在 它 所 定 義 的 區 塊 內 有 效 。 只 要 在 變 數 所 屬 的 區 塊 結...
儲 存 類 別 Scope <ul><li>靜 態 變 數  ( static variable) </li></ul><ul><li>靜 態 變 數 與 自 動 變 數 一 樣 , 是 某 特 定 函 數 內 的 區 域 性 變 數 , 但靜...
儲 存 類 別 Scope <ul><li>外 部 變 數  ( extern variable) </li></ul><ul><li>外 部 變 數 和 前 面 所 提 到 的 變 數 不 同 。 外 部 變 數 的 有 效 範 圍 不 是 ...
運 算 子 <ul><li>算 術 運 算 元  ( Arithmetic operators ) </li></ul><ul><li>加、減、乘、除、負 數 及 模 數 運 算子 </li></ul><ul><ul><li>加  ( + ) ...
運 算 子 <ul><li>運 算 子 的 優 先 權 </li></ul><ul><li>* 、 / 、 % 、 + 、 -  以 上 所 標 示 的 運 算 子 , 其 運 算 的 優 先 順 序 由 左 至 右 。 </li></ul><...
運 算 子 <ul><li>型別之轉換 </li></ul><ul><li>語法:  (type) expression </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><...
運 算 子 <ul><li>遞 增 與 遞 減 </li></ul><ul><li>遞 增 與 遞 減 又 分 為 前 置 模 式  ( prefix )  與 後 置 模 式 ( postfix )  ; </li></ul><ul><ul>...
運 算 子 <ul><li>設定特殊運算式 </li></ul><ul><li>特殊運算式 </li></ul><ul><li>a += b </li></ul><ul><li>a -= b </li></ul><ul><li>a *= b <...
運 算 子 <ul><li>邏 輯 運 算 子  ( Logical operators ) </li></ul>邏 輯 運 算 的 種 類 運算子 功能敘述 運算子 功能敘述 && AND( 及 ) ~ 1' complement( 一的補數...
運 算 子 <ul><li>關 係 運 算 子  ( Relational operators ) </li></ul><ul><li>一 般 用 於 控 制 流 程 或 有 條 件 的 敘 述 當 中 </li></ul>關 係 運 算 子 ...
運 算 子 <ul><li>基本運算子優先順序表 </li></ul><ul><ul><li>!,  負號  (-), ++, -- </li></ul></ul><ul><ul><li>乘  ( * ) 、除  ( / ) 、餘數 ( % )...
Q & A <ul><li>休息一下 </li></ul>
流 程 控 制 <ul><li>控 制 結 構  ( control structure ) </li></ul><ul><li>結 構 化 程 式 設 計 的 基 礎 建 立 在 下 列 三 個 結 構 : </li></ul><ul><ul...
流 程 控 制 <ul><li>條 件 執 行  if  的 運 用 </li></ul><ul><ul><li>syntax  : </li></ul></ul><ul><ul><li>if ( 關係運算元 ) </li></ul></ul>...
流 程 控 制 <ul><li>迴 路  while  的 運 用 </li></ul><ul><li>在  while  的 敘 述 中 , 當 關 係 運 算 元 之 條 件 為 真 時 , 會 不 斷 地 重 覆 執 行 位 於  whi...
流 程 控 制 <ul><li>迴 路  do-while  的 運 用 </li></ul><ul><li>do-while  迴 路 , 由 於 測 試 條 件 在 迴 路 的 後 面 , 所 以 迴 路 中 的 敘 述 至 少 會 被 執...
流 程 控 制 <ul><li>迴 路  for  的 運 用 </li></ul><ul><li>for  允 許 使 用 者 在 同 一 行 敘 述 中 就 設 定 了 迴 路 的 三 個 部 份 。  ( 1 )  計 數 器 的 初 值...
流 程 控 制 <ul><li>條 件 執 行  switch  的 運 用 </li></ul><ul><li>我 們 在 實 際 的 程 式 寫 作 時 常 會 遇 到 多 種 選 擇 情 況 , 而 使 用 一 連 串  if - els...
流 程 控 制 <ul><li>goto  的 運 用 </li></ul><ul><li>在 一 個 程 式 中 , 使 用  goto  敘 述 可 以 強 制 改 變 程 式 執 行 的 步 驟 , 但 也 會 因 此 使 程 式 的 結...
函 數 Function <ul><li>何 謂 函 數  ? </li></ul><ul><li>C 語言使用的函數可以寫出非常漂亮的程式結構,使程式簡單化,偵錯容易。 </li></ul><ul><li>將重複之某些指令撰寫成一個函數,可減...
函 數 Function <ul><li>函 數 的 定 義  ( 格式 ) </li></ul><ul><li>Example: </li></ul><ul><li>void Line (void) </li></ul><ul><li>{ <...
函 數 Function <ul><li>函 數 的 儲 存 類 別 </li></ul><ul><li>static </li></ul><ul><li>只能在進行宣告的編譯單位內可以執行 </li></ul><ul><li>extern <...
函 數 Function <ul><li>函 數 的 傳 回 值 與 資 料 形 態 </li></ul><ul><ul><li>要 求 函 數 送 回 傳 回 值  ( 函數值 ) ,  必 須 在 函 數 本 體 中 利 用  return...
函 數 Function <ul><li>return() 敘述之目的如下  </li></ul><ul><ul><li>將控制權傳回給呼叫程式 </li></ul></ul><ul><ul><li>將 return() 敘述後括號內之數值傳給...
函 數 Function <ul><li>     值 的 傳 遞 方 法 </li></ul><ul><li>傳 遞 變 數 值 本 身  ( Call by value ) </li></ul><ul><li>Example 1:  傳值呼...
Q & A <ul><li>休息一下 </li></ul>
前 置 處 理 器 Preprocessor <ul><li>前 置 處 理 器  (preprocessor) </li></ul><ul><li>我 們 在 寫 程 式 的 時 候  ,  常 常 會 碰 到 某 些 資 料 重 覆 使 用...
前 置 處 理 器 Preprocessor <ul><li>#include (檔 案 的 含 入) </li></ul><ul><li>#include &quot; 檔案名稱 &quot; :  此表示系統將會到目前的目錄  ( 路徑  ...
前 置 處 理 器 Preprocessor <ul><li>#define (字 串 的 置 換  /  巨 集 定 義)與  #undef </li></ul><ul><li><1>  巨 集  #define  的 使 用  : </li...
前 置 處 理 器 Preprocessor <ul><li>Example1: </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>#define PI 3.14159 </li>...
前 置 處 理 器 Preprocessor <ul><li>條 件 式 的 編 譯 </li></ul><ul><li>條 件 式 的 編 譯 ,  此 用 法 的 最 大 特 色 在 於 其 敘 述 不 僅 可 以 放 在 程 式 的 頂 ...
前 置 處 理 器 Preprocessor <ul><li>由 以 上 的 敘 述  ,  我 們 不 難 發 現 這 些 條 件 式 編 譯 的 成 員 與 前 幾 章 控 制 流 程 所 提 到  if ... then ... else...
結 構 Struct  與 組 合 Union <ul><li>結 構  (Structure) </li></ul><ul><li>在 C 語言中 , 結構的宣告方式如下  : </li></ul><ul><ul><ul><li>struct...
結 構 Struct  與 組 合 Union <ul><li>結 構  </li></ul><ul><li>的 使 用   </li></ul>
結 構 Struct  與 組 合 Union <ul><li>聯集  (Union) </li></ul><ul><li>聯集之形式與結構非常類似。在 C 語言中 ,  聯集之宣告方式如下  : </li></ul><ul><ul><li>u...
結 構 Struct  與 組 合 Union <ul><li>聯集與結構之不同處在於聯集所佔之空間為所有成員中最大物件擁有之空間。也就是說,聯集中所有成員,再同一瞬間,僅能有一種型態存在。上例中,聯集 object 不可能擁有字元 ’ a’ ...
Q & A <ul><li>休息一下 </li></ul>
陣 列 Array  與 指 標 Pointer <ul><li>何謂陣列  ( Array) </li></ul><ul><li>有限個相同資料型態之元素組成之集合 </li></ul><ul><li>一大塊連續之記憶體 </li></ul>...
陣 列 Array  與 指 標 Pointer <ul><li>一 維 陣 列 </li></ul><ul><ul><li>一 維 陣 列 的 宣 告 方 式 如 下 所 述  : </li></ul></ul><ul><ul><li>陣列的...
陣 列 Array  與 指 標 Pointer <ul><li>陣 列 與 基 本 輸 出  /  輸 入 函 數 的 搭 配 </li></ul><ul><li>無 論 是 整 數  ,  浮 點 數 或 字 元 陣 列  ( 字串  ) ...
陣 列 Array  與 指 標 Pointer <ul><li>指 標  ( Pointer ) </li></ul><ul><li>何 謂 指 標 呢  ?  簡 單 的 說  &quot;  它 是 一 個 用 來 指 示 資 料 存 在...
陣 列 Array  與 指 標 Pointer <ul><li>指 標 的 基 本 觀 念 </li></ul><ul><li>在  C  語 言 中  ,  指 標 變 數 的 宣 告 方 式 如 下  : </li></ul><ul><u...
陣 列 Array  與 指 標 Pointer <ul><li>指 標 變 數 宣 告 的 關 鍵 字 為  &quot; * &quot; ,  而 指 標 變 數 的 資 料 型 態 也 分 為 整 數  ( int ) ,  浮 點 數...
陣 列 Array  與 指 標 Pointer <ul><li>指 標 與 函 數 間 的 關 係 </li></ul><ul><li>關 於 函 數 呼 叫 的 方 式 中  , Call by value  的 引 數 傳 遞 方 式  ...
陣 列 Array  與 指 標 Pointer <ul><li>指 標 與 陣 列 的 關 係 </li></ul><ul><li>我 們 可 以 將 指 標 與 陣 列 的 關 係 來 做 一 對 比  .  例 如  :  有 一 整 數...
陣 列 Array  與 指 標 Pointer <ul><li>指 標 與 字 元 陣 列  (  字 串  )  間 的 關 係 </li></ul><ul><li>string[0]=P <--> *(string+0)=P </li><...
陣 列 Array  與 指 標 Pointer <ul><li>指 標 與 陣 列 的 混 合 應 用 </li></ul><ul><li>指標之運算有兩種:  (+)  、  (-)  </li></ul><ul><li>假設指標 ptr ...
Q & A <ul><li>發問時間 </li></ul>
Upcoming SlideShare
Loading in...5
×

1 C入門教學

2,653

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,653
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

1 C入門教學

  1. 1. C 入門教學 好景企業股份有限公司
  2. 2. 關 於 C (C 語言的格式 ) <ul><li>C 語言編譯過程 </li></ul><ul><li>原始程式 --> 經由編譯器 --> 變成目的檔 --> 經由連結器 --> 變成執行檔 </li></ul><ul><li>SOURCE.C --> COMPILER --> SOURCE.OBJ --> LINKER --> SOURCE.EXE </li></ul><ul><li>C 語 言 的 特 性 </li></ul><ul><li>可 以 像 組 合 語 言 一 樣 進 行 硬 體 之 直 接 存 取 . </li></ul><ul><li>為 語 法 規 則 簡 單 , 清 楚 , 容 易 使 用 之 結 構 化 語 言 . </li></ul><ul><li>必 要 時 可 以 與 組 合 語 言 連 結 . </li></ul><ul><li>可 攜 性 ( Portability ) 極 佳 , 跨 平 台 的 能 力 強 . </li></ul>
  3. 3. 關 於 C (C 語言的格式 ) <ul><li>標 準 C 語 言 格 式 </li></ul><ul><li>/*Hello World Program*/ #include <stdio.h> int main() {   printf(&quot;Hello, world! &quot;); // 第一個 statement   return 0; // 第二個 statement } </li></ul>
  4. 4. 基 本 資 料 型 態 <ul><li>變 數 命 名 的 原 則 </li></ul><ul><li>開 頭 必 須 是 字 母 ( letter ) 或 底 線 ( underscore ) . </li></ul><ul><li>字 元 的 大 寫 小 寫 所 代 表 的 意 義 不 同 . </li></ul><ul><li>不 得 使 用 關 鍵 字 ( keyword ) . </li></ul>
  5. 5. 基 本 資 料 型 態 <ul><li>變 數 的 資 料 型 態 種 類 </li></ul>類 別 符號位元 位元長 (bits) 表 示 法 整 數 無 8 unsigned char 16 unsigned short 32 unsigned long 64 unsigned long long 8/16/32 unsigned int 有 8 char 16 short 32 long 字元 N/A 8 char
  6. 6. 基 本 資 料 型 態 <ul><li>變 數 的 宣 告 方 法 </li></ul><ul><li>整 數 部 份 : </li></ul><ul><ul><li>int a; </li></ul></ul><ul><ul><li>int b,c=45; </li></ul></ul><ul><ul><li>short name; </li></ul></ul><ul><ul><li>long var_name; </li></ul></ul><ul><ul><li>unsigned int argu1=30; </li></ul></ul><ul><li>浮 點 數 部 份 : </li></ul><ul><ul><li>float a=12.3456; /* 單精準度 */ </li></ul></ul><ul><ul><li>float b=0.12345e2; </li></ul></ul><ul><ul><li>double score=4.987654322e-7; /* 雙精準度 */ </li></ul></ul><ul><li>字 元 部 份 : </li></ul><ul><ul><li>char c='c'; </li></ul></ul><ul><ul><li>char bell=7; /*7 為 ASCII 之響聲字元 */ </li></ul></ul>
  7. 7. 儲 存 類 別 Scope <ul><li>自 動 變 數 ( auto variable ) </li></ul><ul><li>自 動 變 數 只 在 它 所 定 義 的 區 塊 內 有 效 。 只 要 在 變 數 所 屬 的 區 塊 結 構 內 執 行 , 該 變 數 的 資 料 是 有 效 而 正 確 的 。 當 程 式 執 行 離 開 了 該 區 塊 , 所 有 於 區 塊 內 定 義 的 自 動 變 數 就 不 存 在 了 。 </li></ul><ul><li>Example 1: </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int x=1; </li></ul><ul><li>inner( ); </li></ul><ul><li>printf(&quot;%d &quot;,x); </li></ul><ul><li>} </li></ul><ul><li>inner( ) </li></ul><ul><li>{ </li></ul><ul><li>int x=2; </li></ul><ul><li>printf(&quot;%d &quot;,x); </li></ul><ul><li>} </li></ul>
  8. 8. 儲 存 類 別 Scope <ul><li>靜 態 變 數 ( static variable) </li></ul><ul><li>靜 態 變 數 與 自 動 變 數 一 樣 , 是 某 特 定 函 數 內 的 區 域 性 變 數 , 但靜 態 變 數 的 值 不 會 因 函 數 的 執 行 結 束 而 消 失 。 </li></ul><ul><li>靜 態 變 數 的 宣 告 如 下 所 示 : </li></ul><ul><li>{ </li></ul><ul><li>static int a; </li></ul><ul><li>static int b=12345; </li></ul><ul><li>static char c; </li></ul><ul><li>static float d=13.45; </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>} </li></ul>
  9. 9. 儲 存 類 別 Scope <ul><li>外 部 變 數 ( extern variable) </li></ul><ul><li>外 部 變 數 和 前 面 所 提 到 的 變 數 不 同 。 外 部 變 數 的 有 效 範 圍 不 是 區 域 性 , 而 是 整 體 性 ( global ) , 外 部 變 數 定 義 在 任 何 函 數 的 外 面 , 表 示 可 以 被 其 他 函 數 所 共 用 。 </li></ul><ul><li>Example 1: </li></ul><ul><li>int x=123; </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;%d &quot;,x); </li></ul><ul><li>} </li></ul>
  10. 10. 運 算 子 <ul><li>算 術 運 算 元 ( Arithmetic operators ) </li></ul><ul><li>加、減、乘、除、負 數 及 模 數 運 算子 </li></ul><ul><ul><li>加 ( + ) 、減 ( - ) 、乘 ( * ) 、除 ( / ) 為 一 般 的 四 則 運 算 。 </li></ul></ul><ul><ul><li>而 模 數 運 算 ( % ) 是 經 由 兩 常 數 相 除 所 得 的 餘 數 稱 之 。 </li></ul></ul><ul><ul><li>負 數 是 在 某 個 常 數 前 面 加 個 減 號 所 成 的 組 合 稱 之 。 </li></ul></ul>
  11. 11. 運 算 子 <ul><li>運 算 子 的 優 先 權 </li></ul><ul><li>* 、 / 、 % 、 + 、 - 以 上 所 標 示 的 運 算 子 , 其 運 算 的 優 先 順 序 由 左 至 右 。 </li></ul><ul><li>最好記的方法就是加 () ,括弧。 </li></ul>負號 (-) 高優先順序 乘 ( * ) 、除 ( / ) 、餘數 ( % ) 中優先順序 加 ( +) 、減 ( - ) 低優先順序
  12. 12. 運 算 子 <ul><li>型別之轉換 </li></ul><ul><li>語法: (type) expression </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int x1; </li></ul><ul><li>float y1,y2; </li></ul><ul><li>x1=(int)4.123; </li></ul><ul><li>y1=(float)46/5; </li></ul><ul><li>y2=(int)5.3456; </li></ul><ul><li>printf(&quot;%d %f %f &quot;,x1,y1,y2); </li></ul><ul><li>} </li></ul>
  13. 13. 運 算 子 <ul><li>遞 增 與 遞 減 </li></ul><ul><li>遞 增 與 遞 減 又 分 為 前 置 模 式 ( prefix ) 與 後 置 模 式 ( postfix ) ; </li></ul><ul><ul><li>前 置 模 式:是 將 ++ 或 - - 置 於 變 數 之 前,其運算是在使用此運算元之前先進行加一或減一之動作。 </li></ul></ul><ul><ul><li>後 置 模 式: 是 將 ++ 或 - - 置 於 變 數 之 後,其運算是在使用此運算元之後才進行加一或減一之動作 。 </li></ul></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>int a=1,b=1,c=1,d=1; </li></ul><ul><li>int aplus,bplus; </li></ul><ul><li>int cminus,dminus; </li></ul><ul><li>aplus=++a; </li></ul><ul><li>bplus=b++; </li></ul><ul><li>cminus=--c; </li></ul><ul><li>dminus=d--; </li></ul><ul><li>printf(&quot;%d %d &quot;,aplus,bplus); </li></ul><ul><li>printf(&quot;%d %d &quot;,a,b); </li></ul><ul><li>printf(&quot;%d %d &quot;,cminus,dminus); </li></ul><ul><li>printf(&quot;%d %d &quot;,c,d); </li></ul><ul><li>} </li></ul>
  14. 14. 運 算 子 <ul><li>設定特殊運算式 </li></ul><ul><li>特殊運算式 </li></ul><ul><li>a += b </li></ul><ul><li>a -= b </li></ul><ul><li>a *= b </li></ul><ul><li>a /= b </li></ul><ul><li>a %= b </li></ul><ul><li>基本運算式 </li></ul><ul><li>a = a + b </li></ul><ul><li>a = a - b </li></ul><ul><li>a = a * b </li></ul><ul><li>a = a / b </li></ul><ul><li>a = a % b </li></ul>
  15. 15. 運 算 子 <ul><li>邏 輯 運 算 子 ( Logical operators ) </li></ul>邏 輯 運 算 的 種 類 運算子 功能敘述 運算子 功能敘述 && AND( 及 ) ~ 1' complement( 一的補數 ) || OR( 或 ) << Left shift( 左移 ) ! NOT( 反向 ) >> Right shift
  16. 16. 運 算 子 <ul><li>關 係 運 算 子 ( Relational operators ) </li></ul><ul><li>一 般 用 於 控 制 流 程 或 有 條 件 的 敘 述 當 中 </li></ul>關 係 運 算 子 運算子 功能敘述 運算子 功能敘述 < 小於 >= 大於等於 <= 小於等於 = = 等於 > 大於 != 不等於
  17. 17. 運 算 子 <ul><li>基本運算子優先順序表 </li></ul><ul><ul><li>!, 負號 (-), ++, -- </li></ul></ul><ul><ul><li>乘 ( * ) 、除 ( / ) 、餘數 ( % ) </li></ul></ul><ul><ul><li>加 ( +) 、減 ( - ) </li></ul></ul><ul><ul><li><, <=, >, >= </li></ul></ul><ul><ul><li>==, != </li></ul></ul><ul><ul><li>&& </li></ul></ul><ul><ul><li>|| </li></ul></ul>
  18. 18. Q & A <ul><li>休息一下 </li></ul>
  19. 19. 流 程 控 制 <ul><li>控 制 結 構 ( control structure ) </li></ul><ul><li>結 構 化 程 式 設 計 的 基 礎 建 立 在 下 列 三 個 結 構 : </li></ul><ul><ul><li>循 序 ( sequential ) : 以 一 個 接 著 一 個 方 式 進 行 作 業 。 </li></ul></ul><ul><ul><li>條 件 執 行 ( conditional ) : if_then_else 。 </li></ul></ul><ul><ul><li>迴 路 ( looping ) : </li></ul></ul>
  20. 20. 流 程 控 制 <ul><li>條 件 執 行 if 的 運 用 </li></ul><ul><ul><li>syntax : </li></ul></ul><ul><ul><li>if ( 關係運算元 ) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>statement 1 ; </li></ul></ul><ul><ul><li>statement 2 ; </li></ul></ul><ul><ul><li>. </li></ul></ul><ul><ul><li>statement n ; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>else </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>statement 1 ; </li></ul></ul><ul><ul><li>statement 2 ; </li></ul></ul><ul><ul><li>. </li></ul></ul><ul><ul><li>statement n ; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>如 果 statement 超 過 一 個 以 上 , 則 須 以 { } 將 其 區 塊 分 隔 開 來 。 </li></ul><ul><ul><li>Example : </li></ul></ul><ul><ul><li>void main(void) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>char c; </li></ul></ul><ul><ul><li>scanf(&quot;%c&quot;,&c); </li></ul></ul><ul><ul><li>if( c == 'A' ) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(&quot;c=%c &quot;,c); </li></ul></ul><ul><ul><li>printf(&quot;This is true. &quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>else </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(&quot;c!=A &quot;); </li></ul></ul><ul><ul><li>printf(&quot;That isn't true. &quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  21. 21. 流 程 控 制 <ul><li>迴 路 while 的 運 用 </li></ul><ul><li>在 while 的 敘 述 中 , 當 關 係 運 算 元 之 條 件 為 真 時 , 會 不 斷 地 重 覆 執 行 位 於 while 後 所 列 的 敘 述 , 直 到 條 件 變 為 否 定 才 停 止 。 </li></ul><ul><li>Example : </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int i=0,c=0; </li></ul><ul><li>while ( i < 5 ) </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;%d&quot;,i++); </li></ul><ul><li>printf(&quot;%d &quot;,++c); </li></ul><ul><li>} </li></ul><ul><li>printf(&quot;out of loop. &quot;); </li></ul><ul><li>} </li></ul>
  22. 22. 流 程 控 制 <ul><li>迴 路 do-while 的 運 用 </li></ul><ul><li>do-while 迴 路 , 由 於 測 試 條 件 在 迴 路 的 後 面 , 所 以 迴 路 中 的 敘 述 至 少 會 被 執 行 一 次 。 </li></ul><ul><li>Example 1: </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int i=0,c=0; </li></ul><ul><li>do </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;%d&quot;,i++); </li></ul><ul><li>printf(&quot;%d &quot;,++c); </li></ul><ul><li>} while ( i < 5 ) ; </li></ul><ul><li>printf(&quot;We're out of the loop. &quot;); </li></ul><ul><li>} </li></ul>
  23. 23. 流 程 控 制 <ul><li>迴 路 for 的 運 用 </li></ul><ul><li>for 允 許 使 用 者 在 同 一 行 敘 述 中 就 設 定 了 迴 路 的 三 個 部 份 。 ( 1 ) 計 數 器 的 初 值 , ( 2 ) 關 係 運 算 元 , ( 3 ) 增 減 迴 路 計 數 器 的 值 。 </li></ul><ul><li>Example : </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int i,c; </li></ul><ul><li>for ( i=0,c=1 ; i < 5 ; ++i,++c ) </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;%d&quot;,i); </li></ul><ul><li>printf(&quot;%d &quot;,c); </li></ul><ul><li>} </li></ul><ul><li>printf(&quot;Out of Loop. &quot;); </li></ul><ul><li>} </li></ul>
  24. 24. 流 程 控 制 <ul><li>條 件 執 行 switch 的 運 用 </li></ul><ul><li>我 們 在 實 際 的 程 式 寫 作 時 常 會 遇 到 多 種 選 擇 情 況 , 而 使 用 一 連 串 if - else 來 表 示 是 常 發 生 的 , 所 以 C 提 供 了 一 項 特 殊 的 控 制 結 構 , 讓 我 們 能 夠 有 效 且 精 簡 處 理 程 式 。 </li></ul><ul><li>Example : </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int var=3; </li></ul><ul><li>switch ( var ) </li></ul><ul><li>{ </li></ul><ul><li>case 1 : </li></ul><ul><li>printf(&quot;var = 1 &quot;); </li></ul><ul><li>break; </li></ul><ul><li>case 2 : </li></ul><ul><li>printf(&quot;var = 2 &quot;); </li></ul><ul><li>break; </li></ul><ul><li>case 3 : </li></ul><ul><li>printf(&quot;var = 3 &quot;); </li></ul><ul><li>break; </li></ul><ul><li>default : </li></ul><ul><li>printf(&quot;I'm in default&quot;); </li></ul><ul><li>} /* end of switch */ </li></ul><ul><li>}/*end of main */ </li></ul>
  25. 25. 流 程 控 制 <ul><li>goto 的 運 用 </li></ul><ul><li>在 一 個 程 式 中 , 使 用 goto 敘 述 可 以 強 制 改 變 程 式 執 行 的 步 驟 , 但 也 會 因 此 使 程 式 的 結 構 混 亂 , 所 以 此 敘 述 應 儘 量 不 用 。 其 語 法 如 下 所 述 。 </li></ul><ul><li>Example: </li></ul><ul><li>main( ) </li></ul><ul><li>{ </li></ul><ul><li>int i=1111; </li></ul><ul><li>repeat : </li></ul><ul><li>printf(&quot;%d &quot;,i); </li></ul><ul><li>goto repeat ; </li></ul><ul><li>} </li></ul>
  26. 26. 函 數 Function <ul><li>何 謂 函 數 ? </li></ul><ul><li>C 語言使用的函數可以寫出非常漂亮的程式結構,使程式簡單化,偵錯容易。 </li></ul><ul><li>將重複之某些指令撰寫成一個函數,可減少編輯程式時間,更可使程式精簡,清晰了解。 </li></ul><ul><li>C 語言使用的函數其呼叫方法與數學上使用函數完全相同 , </li></ul><ul><li>例 如 : </li></ul><ul><li>a = function ( x , y ) ; </li></ul><ul><li>表示將變數 x , y 輸入函數 function , 其傳回函數值設定給變數 a </li></ul>
  27. 27. 函 數 Function <ul><li>函 數 的 定 義 ( 格式 ) </li></ul><ul><li>Example: </li></ul><ul><li>void Line (void) </li></ul><ul><li>{ </li></ul><ul><li>int j; </li></ul><ul><li>for (j=1;j<20;j++) </li></ul><ul><li>printf(“%d ”,j); </li></ul><ul><li>} </li></ul>
  28. 28. 函 數 Function <ul><li>函 數 的 儲 存 類 別 </li></ul><ul><li>static </li></ul><ul><li>只能在進行宣告的編譯單位內可以執行 </li></ul><ul><li>extern </li></ul><ul><li>在進行宣告的編譯單位以外也可執行 </li></ul><ul><li>Example: file2.c </li></ul><ul><li>extern func1( ); </li></ul><ul><li>static func3( ) </li></ul><ul><li>{ </li></ul><ul><li>. </li></ul><ul><li>. </li></ul><ul><li>func1( ); </li></ul><ul><li>. </li></ul><ul><li>} </li></ul>
  29. 29. 函 數 Function <ul><li>函 數 的 傳 回 值 與 資 料 形 態 </li></ul><ul><ul><li>要 求 函 數 送 回 傳 回 值 ( 函數值 ) , 必 須 在 函 數 本 體 中 利 用 return 敘 述 進 行 , 例 如 : </li></ul></ul><ul><li>return ( 變數或式子 ) ; </li></ul><ul><ul><li>此 處 必 須 先 宣 告 傳 回 值 ( 函數值 ) 的 資 料 形 態 是 什 麼 。 </li></ul></ul>
  30. 30. 函 數 Function <ul><li>return() 敘述之目的如下 </li></ul><ul><ul><li>將控制權傳回給呼叫程式 </li></ul></ul><ul><ul><li>將 return() 敘述後括號內之數值傳給呼叫程式之方式 </li></ul></ul>
  31. 31. 函 數 Function <ul><li>     值 的 傳 遞 方 法 </li></ul><ul><li>傳 遞 變 數 值 本 身 ( Call by value ) </li></ul><ul><li>Example 1: 傳值呼叫 </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>int func(int a,b,c) </li></ul><ul><li>{ </li></ul><ul><li>int d; </li></ul><ul><li>d=a+b+c; </li></ul><ul><li>return(d); </li></ul><ul><li>} </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int x,y,z,p; </li></ul><ul><li>x=y=z=3; </li></ul><ul><li>p=func(x,y,z); </li></ul><ul><li>printf(&quot;p-->%d &quot;,p); </li></ul><ul><li>} </li></ul><ul><li>傳 遞 變 數 的 位 址 ( Call by reference ) </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>void func(int *a,*b,*c,*d) </li></ul><ul><li>{ </li></ul><ul><li>*d=*a+*b+*c; </li></ul><ul><li>} </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int x,y,z,p; </li></ul><ul><li>x=y=z=3; </li></ul><ul><li>func(&x,&y,&z,&p); </li></ul><ul><li>printf(&quot;p-->%d &quot;,p); </li></ul><ul><li>} </li></ul>
  32. 32. Q & A <ul><li>休息一下 </li></ul>
  33. 33. 前 置 處 理 器 Preprocessor <ul><li>前 置 處 理 器 (preprocessor) </li></ul><ul><li>我 們 在 寫 程 式 的 時 候 , 常 常 會 碰 到 某 些 資 料 重 覆 使 用 或 是 某 些 程 式 片 段 因 特 定 的 條 件 下 須 放 棄 , 如 果 以 正 常 的 方 式 來 寫 作 程 式 , 可 能 會 增 加 無 謂 的 程 式 片 段 , 使 的 程 式 笨 重 不 堪 , 但 如 果 能 好 好 運 用 C 語 言 所 提 供 的 前 置 處 理 器 , 則 上 述 的 狀 況 將 改 善 許 多 . 這 個 功 能 並 非 C 語 言 本 身 的 格 式 , 但 仍 為 編 譯 程 式 所 能 接 受 . 對 前 置 處 理 器 的 解 釋 , 如 圖 所 示 , 因 為 它 是 在 程 式 編 譯 之 前 執 行 , 所 以 顧 名 思 義 稱 之 前 置 處 理 . </li></ul>
  34. 34. 前 置 處 理 器 Preprocessor <ul><li>#include (檔 案 的 含 入) </li></ul><ul><li>#include &quot; 檔案名稱 &quot; : 此表示系統將會到目前的目錄 ( 路徑 ) 下尋找所指定的檔案 , 如果找不到 , 則會去系統設定的目錄底下尋找 </li></ul><ul><li>#include < 檔案名稱 > : 此表示系統將會到系統設定的目錄底下尋找所指定的檔案 . </li></ul>
  35. 35. 前 置 處 理 器 Preprocessor <ul><li>#define (字 串 的 置 換 / 巨 集 定 義)與 #undef </li></ul><ul><li><1> 巨 集 #define 的 使 用 : </li></ul><ul><li>其 主 要 之 功 能 是 以 簡 單 的 名 稱 取 代 某 些 特 定 的 常 數 或 字 串 , 函 數 , 建 立 更 簡 單 更 易 懂 的 程 式 . 語 法 如 下 : </li></ul><ul><li>#define 巨集名稱 常數或函式或字串 </li></ul><ul><li><2> 巨 集 #undef 的 使 用 : </li></ul><ul><li>其 主 要 之 功 能 則 是 取 消 最 接 近 之 #define 所 定 義 的 敘 述 . </li></ul><ul><li>#undef 巨集名稱 </li></ul>
  36. 36. 前 置 處 理 器 Preprocessor <ul><li>Example1: </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>#define PI 3.14159 </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;PI=%2.5f&quot;,PI); </li></ul><ul><li>} </li></ul><ul><li>Example2 : </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>#define add(a,b) a+b </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int i,j,k; </li></ul><ul><ul><li>i=2; </li></ul></ul><ul><ul><li>j=3; </li></ul></ul><ul><li>k=add(i,j); </li></ul><ul><li>printf(&quot;i+j=%d &quot;,k); </li></ul><ul><li>} </li></ul>
  37. 37. 前 置 處 理 器 Preprocessor <ul><li>條 件 式 的 編 譯 </li></ul><ul><li>條 件 式 的 編 譯 , 此 用 法 的 最 大 特 色 在 於 其 敘 述 不 僅 可 以 放 在 程 式 的 頂 端 , 亦 可 將 其 敘 述 放 置 於 程 式 中 . 以 下 所 列 (1) ,(2) ,(3) 項 為 條 件 式 編 譯 的 成 員 . </li></ul><ul><li>(1) #if , #endif </li></ul><ul><li>(2) #else / #elif </li></ul><ul><li>(3) #ifdef , #ifndef </li></ul>
  38. 38. 前 置 處 理 器 Preprocessor <ul><li>由 以 上 的 敘 述 , 我 們 不 難 發 現 這 些 條 件 式 編 譯 的 成 員 與 前 幾 章 控 制 流 程 所 提 到 if ... then ... else 的 語 法 十 分 相 似 , 且 連 使 用 方 法 與 原 理 都 非 常 相 似 . </li></ul><ul><li>Example1: </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>#define value 99 </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>#if value < 100 </li></ul><ul><li>printf(&quot;value < 100&quot;); </li></ul><ul><li>#else </li></ul><ul><li>printf(&quot;value >= 100&quot;); </li></ul><ul><li>#endif </li></ul><ul><li>} </li></ul>
  39. 39. 結 構 Struct 與 組 合 Union <ul><li>結 構 (Structure) </li></ul><ul><li>在 C 語言中 , 結構的宣告方式如下 : </li></ul><ul><ul><ul><li>struct 結構名稱標籤 </li></ul></ul></ul><ul><ul><ul><li>{ 資料型態 資料變數元素 1; </li></ul></ul></ul><ul><ul><ul><li>資料型態 資料變數元素 2; ‧‧‧‧‧‧‧‧ }; </li></ul></ul></ul><ul><li>For example </li></ul><ul><li>struct Personal </li></ul><ul><li>{ </li></ul><ul><li>char Name; </li></ul><ul><li>int Hour; </li></ul><ul><li>int Minute; </li></ul><ul><li>} </li></ul>
  40. 40. 結 構 Struct 與 組 合 Union <ul><li>結 構  </li></ul><ul><li>的 使 用 </li></ul>
  41. 41. 結 構 Struct 與 組 合 Union <ul><li>聯集 (Union) </li></ul><ul><li>聯集之形式與結構非常類似。在 C 語言中 , 聯集之宣告方式如下 : </li></ul><ul><ul><li>union 聯集名稱標籤 { </li></ul></ul><ul><ul><li>資料型態 資料變數元素 1; </li></ul></ul><ul><ul><li>資料型態 資料變數元素 2; </li></ul></ul><ul><ul><li>‧‧‧‧‧‧‧‧ }; </li></ul></ul><ul><li>Example: </li></ul><ul><li>union unit { </li></ul><ul><li>char ch; </li></ul><ul><li>int num; </li></ul><ul><li>float fl; </li></ul><ul><li>} object; </li></ul><ul><li>object.ch = ‘a’; </li></ul><ul><li>object.num = 100; </li></ul><ul><li>object.fl = 3.41; </li></ul>
  42. 42. 結 構 Struct 與 組 合 Union <ul><li>聯集與結構之不同處在於聯集所佔之空間為所有成員中最大物件擁有之空間。也就是說,聯集中所有成員,再同一瞬間,僅能有一種型態存在。上例中,聯集 object 不可能擁有字元 ’ a’ 與整數 100; 它僅佔有 4 個 Bytes ,因為成員中 float 型態所佔有空間最大。 </li></ul>
  43. 43. Q & A <ul><li>休息一下 </li></ul>
  44. 44. 陣 列 Array 與 指 標 Pointer <ul><li>何謂陣列 ( Array) </li></ul><ul><li>有限個相同資料型態之元素組成之集合 </li></ul><ul><li>一大塊連續之記憶體 </li></ul><ul><li>一組索引與資料對映 </li></ul>
  45. 45. 陣 列 Array 與 指 標 Pointer <ul><li>一 維 陣 列 </li></ul><ul><ul><li>一 維 陣 列 的 宣 告 方 式 如 下 所 述 : </li></ul></ul><ul><ul><li>陣列的資料型態 陣列的名稱 [ 陣列的大小 ] ; </li></ul></ul><ul><ul><ul><li>int array1 [ 20 ] ; </li></ul></ul></ul><ul><ul><ul><li>float array2 [ 25 ] ; </li></ul></ul></ul><ul><ul><ul><li>char array3 [ 50 ] ; </li></ul></ul></ul>
  46. 46. 陣 列 Array 與 指 標 Pointer <ul><li>陣 列 與 基 本 輸 出 / 輸 入 函 數 的 搭 配 </li></ul><ul><li>無 論 是 整 數 , 浮 點 數 或 字 元 陣 列 ( 字串 ) 均 可 與 基 本 輸 出 / 輸 入 函 數 的 搭 配 . 例 如 一 名 叫 array1 的 字 元 陣 列 : </li></ul><ul><li>printf(&quot;%s &quot;,array1); </li></ul><ul><li>puts(array1); </li></ul><ul><li>scanf(&quot;%s&quot;,array1); </li></ul><ul><li>gets(array1); </li></ul><ul><li>所 以 USER 可 以 自 行 參 考 相 關 的 章 節 使 用 之 . 在 此 補 充 一 點 , 上 述 所 敘 述 scanf 函 數 是 乎 少 一 個 & ( 位址運算元 ) ? ? ? 沒 錯 ! 那 是 因 為陣 列 本 身 的 名 稱 即 代 表 其 位 址 之 所 在 , 所 以 不 需 在 陣 列 名 稱 前 加 上 & 符 號 來 代 表 位 址 . </li></ul>
  47. 47. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 ( Pointer ) </li></ul><ul><li>何 謂 指 標 呢 ? 簡 單 的 說 &quot; 它 是 一 個 用 來 指 示 資 料 存 在 於 記 憶 體 中 的 位 址 標 示 器 &quot; , 簡 稱 指 標 . 由 指 標 的 運 用 裡 , 使 我 們 瞭 解 到 資 料 與 位 址 間 的 關 係 , 進 而 對 記 憶 體 配 置 有 很 大 的 幫 助 . </li></ul>
  48. 48. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 的 基 本 觀 念 </li></ul><ul><li>在 C 語 言 中 , 指 標 變 數 的 宣 告 方 式 如 下 : </li></ul><ul><ul><li>變數資料型態 * 變數名稱 ; </li></ul></ul><ul><ul><li>For example int *ptr ; </li></ul></ul><ul><li>由 以 上 的 宣 告 , 表 示 了 三 件 事 : </li></ul><ul><li>ptr 為 指 標 變 數 , ptr 代 表 一 個 位 址 </li></ul><ul><li>*ptr 代 表 此 位 址 內 的 資 料 </li></ul><ul><li>ptr 所 指 向 此 位 址 之 變 數 型 態 為 整 數 ( int ) </li></ul>
  49. 49. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 變 數 宣 告 的 關 鍵 字 為 &quot; * &quot; , 而 指 標 變 數 的 資 料 型 態 也 分 為 整 數 ( int ) , 浮 點 數 ( float ) , 字 元 ( char ) 三 種 . </li></ul><ul><li>&quot;&&quot; 為另一重要符號, &quot;&&quot; 為一個特殊運算子,目的為傳回運算元之位址 </li></ul><ul><li>為什麼 scanf() 中之所有引數變數一定要加上 &quot;&&quot; 符號 ???………. </li></ul><ul><li>Example: </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int x=10; </li></ul><ul><li>int *y; </li></ul><ul><li>y=&x; </li></ul><ul><li>printf(&quot; x = %d &quot;, x); </li></ul><ul><li>printf(&quot;&x = %x &quot;,&x); </li></ul><ul><li>printf(&quot;*y = %d &quot;,*y); </li></ul><ul><li>printf(&quot; y = %x &quot;, y); </li></ul><ul><li>} </li></ul><ul><li>執行結果 : </li></ul><ul><li>x = 10 </li></ul><ul><li>&x = ffda </li></ul><ul><li>*y = 10 </li></ul><ul><li>y = ffda </li></ul>
  50. 50. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 與 函 數 間 的 關 係 </li></ul><ul><li>關 於 函 數 呼 叫 的 方 式 中 , Call by value 的 引 數 傳 遞 方 式 , 被 呼 叫 函 數 不 能 直 接 更 改 呼 叫 函 數 中 的 變 數 , 但 如 果 是 以 指 標 當 作 函 數 的 引 數 ( Call by reference ) , 則 上 述 的 狀 況 均 迎 刃 而 解 , 而 且 也 不 受 函 數 返 回 值 ( return ) 只 能 有 一 個 的 影 響 . </li></ul><ul><li>Example: </li></ul><ul><li>#include < stdio.h > </li></ul><ul><li>change(int *x,*y) </li></ul><ul><li>{ </li></ul><ul><li>int temp; </li></ul><ul><li>temp=*x; </li></ul><ul><li>*x=*y; </li></ul><ul><li>*y=temp; </li></ul><ul><li>} </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int m=3,n=4; </li></ul><ul><li>printf(&quot; m = %d n= %d &quot;,m,n); </li></ul><ul><li>change(&m,&n); </li></ul><ul><li>printf(&quot; m = %d n= %d &quot;,m,n); </li></ul><ul><li>} </li></ul><ul><li>執行結果 : </li></ul><ul><li>m = 3 n= 4 </li></ul><ul><li>m = 4 n= 3 </li></ul>
  51. 51. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 與 陣 列 的 關 係 </li></ul><ul><li>我 們 可 以 將 指 標 與 陣 列 的 關 係 來 做 一 對 比 . 例 如 : 有 一 整 數 陣 列 名 為 array , 其 陣 列 大 小 為 五 個 , 其 內 容 分 別 是 1,2,3,4,5 . </li></ul><ul><li>For example: int array[5]={ 1,2,3,4,5 }; </li></ul><ul><li>array[0]=1 <--> *(array+0)=1 </li></ul><ul><li>array[1]=2 <--> *(array+1)=2 </li></ul><ul><li>array[2]=3 <--> *(array+2)=3 </li></ul><ul><li>array[3]=4 <--> *(array+3)=4 </li></ul><ul><li>array[4]=5 <--> *(array+4)=5 </li></ul>
  52. 52. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 與 字 元 陣 列 ( 字 串 ) 間 的 關 係 </li></ul><ul><li>string[0]=P <--> *(string+0)=P </li></ul><ul><li>string[1]=O <--> *(string+1)=O </li></ul><ul><li>string[2]=I <--> *(string+2)=I </li></ul><ul><li>string[3]=N <--> *(string+3)=N </li></ul><ul><li>string[4]=T <--> *(string+4)=T </li></ul><ul><li>string[5]=E <--> *(string+5)=E </li></ul><ul><li>string[6]=R <--> *(string+6)=R </li></ul>
  53. 53. 陣 列 Array 與 指 標 Pointer <ul><li>指 標 與 陣 列 的 混 合 應 用 </li></ul><ul><li>指標之運算有兩種: (+) 、 (-) </li></ul><ul><li>假設指標 ptr 所指資料為整數,且其為指為 1666 </li></ul><ul><li>指令 執行結果 執行動作 </li></ul><ul><li>ptr++ 1668 指向下一個整數位址 </li></ul><ul><li>ptr-- 1664 指向前一個整數位址 </li></ul><ul><li>ptr+7 1674 指向第七個整數位址 </li></ul>
  54. 54. Q & A <ul><li>發問時間 </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×