C 语 言 的 格 式 - SO-NET.doc_第1页
C 语 言 的 格 式 - SO-NET.doc_第2页
C 语 言 的 格 式 - SO-NET.doc_第3页
C 语 言 的 格 式 - SO-NET.doc_第4页
C 语 言 的 格 式 - SO-NET.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C 語 言 的 格 式l 什麼是C語言?l C語言執行過程?原始程式 - 經由編譯器 - 變成目的檔 - 經由連結器 - 變成執行檔SOURCE.C - COMPILER - SOURCE.OBJ - LINKER - SOURCE.EXEl C 語 言 的 特 性( 1 ) 可 以 像 組 合 語 言 一 樣 進 行 硬 體 之 直 接 存 取 .( 2 ) 為 語 法 規 則 簡 單 , 清 楚 , 容 易 使 用 之 結 構 化 語 言 .( 3 ) 必 要 時 可 以 與 組 合 語 言 連 結 .( 4 ) 可 攜 性 ( Portability ) 極 佳 , 跨 平 台 的 能 力 強 . l 標 準 C 語 言 格 式#include - 前置處理器subroutine( ) - 副程式.subroutine( ) - 副程式main( ) - 主程式 int i=0 ; /* 變 數 宣 告 */i=i+1; /* 算 數 運 算 */- 程式主體printf(i=%dn,i) ; /* 輸 出 至 螢 幕 */基 本 資 料 型 態 l 變 數 命 名 的 原 則 ?1. 開 頭 必 須 是 字 母 ( letter ) 或 底 線 ( underscore ) .2. 字 元 的 大 寫 小 寫 所 代 表 的 意 義 不 同 .3. 不 得 使 用 關 鍵 字 ( keyword ) . (在 Borland C+ 軟體中已粗體顯現)l 變 數 的 資 料 型 態 種 類 :類 別 符號位元 位元長(bits) 表 示 法 數 值 範 圍 整 數 有 16 int(short) -32768-32767 32 long -2147483648-2147483647 無 16 unsigned int 0-65535 16 unsigned short 0-65535 32 unsigned long 0-4294967295 浮點數 有 32 float 10-38-1038 64 double 10-308-10308 字元 無 8 char 0-255 l 變 數 的 宣 告 方 法 :( 1 ) 整 數 部 份 : int a; int b,c=45; short int name; long int var_name; unsigned int argu1=30;( 2 ) 浮 點 數 部 份 : float a=12.3456; /*單精準度*/ float b=0.12345e2; double score=4.987654322e-7; /*雙精準度*/( 3 ) 字 元 部 份 : char c=c; char bell=7; /*7為ASCII之響聲字元*/儲 存 類 別 l 自 動 變 數 ( auto variable )l 自 動 變 數 只 在 它 所 定 義 的 區 塊 內 有 效 。 只 要 在 變 數 所 屬 的 區 塊 結 構 內 執 行 , 該 變 數 的 資 料 是 有 效 而 正 確 的 。 當 程 式 執 行 離 開 了 該 區 塊 , 所 有 於 區 塊 內 定 義 的 自 動 變 數 就 不 存 在 了 。 l Example 1:l main( ) int x=1; inner( ); printf(%dn,x); l inner( ) int x=2; printf(%dn,x); l 靜 態 變 數 ( static variable)靜 態 變 數 與 自 動 變 數 一 樣 , 是 某 特 定 函 數 內 的 區 域 性 變 數 , 但靜 態 變 數 的 值 不 會 因 函 數 的 執 行 結 束 而 消 失 。 靜 態 變 數 的 宣 告 如 下 所 示 : static int a; static int b=12345; static char c; static float d=13.45; . . . Example 1:main() increment(); increment(); increment(); increment() int x=0; x=x+1; printf(%dn,x); Result = ?Example 2:main() increment(); increment(); increment(); increment() static int x=0; x=x+1; printf(%dn,x); Result = ?l 外 部 變 數 ( extern variable)外 部 變 數 和 前 面 所 提 到 的 變 數 不 同 。 外 部 變 數 的 有 效 範 圍 不 是 區 域 性 , 而 是 整 體 性 ( global ) , 外 部 變 數 定 義 在 任 何 函 數 的 外 面 , 表 示 可 以 被 其 他 函 數 所 共 用 。Example 1: int x=123; main() printf(%dn,x); Result = ?Example 2: int x=123;main() int x=321; printf(%dn,x); Result = ?Example 3:#include #include extern.c int x=123; main() printf(%dn,x); run1(); run2(); run1() printf(%dn,x); extern.c 內 容 如 下 : #include run2() extern int x; printf(%dn,x); Result = ? /* = */* 程式實例: */* 局部(local)和整體(Global) 變數 */* = */#include int step = 10; /* 整體變數宣告 */int count = 5; /* 整體變數宣告 */* - */* 將變數值加一 */* - */void increment() int step = 0; /* 局部變數 step 宣告 */ step+; /* 局部變數加一 */ count+; /* 整體變數加一 */ printf( 副程序 %2d %2d n,step, count);/* - */* 主程式 */* - */void main() int count = 0; /* 局部變數宣告 */ count+; /* 局部變數加一 */ step+; /* 整體變數加一 */ printf( 程序名 STEP COUNT n); increment(); /* 副程序呼叫 */ printf( 主程序 %2d %2d n,step, count);/* = */執行結果程序名STEPCOUNT副程序16主程序111基 本 輸 入 / 輸 出 函 數l 格 式 化 輸 出 函 數 printf( )語 法 如 下 : printf(format_string,arg1,arg2,.argn);轉換字元的種類種 類 表 示 法 功 能 敘 述 整 數(integer) d 以十進位方式印出。 o 以八進位方式印出。 x 以十六進位方式印出。 u 以不帶符號的十進位方式印出。 l 以長整數(long)方式印出。 浮點數(float) f 以 xxx.xxxxxxx 方式印出。 e 以指數的方式印出。 字元(char) c 以字元方式印出。 s 以字串方式印出。 其他(other) - 向左邊靠齊印出 。 dd 指定欄位寬。 . 分隔欄寬。 *.* 指定浮點數之精確度。 int x=42; float y=12.345; char c=A,c14=ABC ; printf(/%d/n,x); printf(/%15d/n/%-15d/n,x,x); printf(/%f %4.3f/n,y,y); printf(/%08.4f/n,y); printf(/%0*.*f/n,8,4,y); printf(/%c %s/n,c,c1); result: /42/ / 42/ /42 / /12.3450000 12.345/ /012.3450/ /012.3450/ /A ABC/ 表二.特殊控制碼種 類 功 能 敘 述 n newline 新行。 r carriage return 回歸鍵。 t tab 跳格。 b backspace 退位。 f form feed 跳頁。 backslash 反斜線。 single quote 單引號。 double quote 雙引號。l 格 式 化 輸 入 函 數 scanf( )語 法 如 下 : scanf(format_string,argptr1,argptr2,.argptrn); main( ) int x; float y; char z; scanf(%d %f %c,&x,&y,&z); printf(%d %f %cn,x,y,z);scanf(%3d %4f,&x,&y);printf(%d %fn,x,y); result :24 12.45 G - 此處為鍵盤輸入之資料24 12.4500001 G123 4567890 - 此處為鍵盤輸入之資料123 4567.00000C語言基本資料處理 l 算 術 運 算 元 ( Arithmetic operators )將 整 數及浮 點 數 或 字 元 指 定 給 某 一 不 特 定 的 變 數 之 動 作 l 加、減、乘、除、負 數 及 模 數 運 算子 加 ( + )、減 ( - )、乘 ( * )、除 ( / ) 為 一 般 的 四 則 運 算 , 而 模 數 運 算 ( % ) 是 經 由 兩 常 數 相 除 所 得 的 餘 數 稱 之 。 負 數 是 在 某 個 常 數 前 面 加 個 減 號 所 成 的 組 合 稱 之 。 l 運 算 子 的 優 先 權 *、/、%、+、- 以 上 所 標 示 的 運 算 子 , 其 運 算 的 優 先 順 序 由 左 至 右 。負號 (-)高優先順序乘 ( * )、除 ( / )、餘數( % )中優先順序加 ( +)、減 ( - )低優先順序l 型別之轉換: 語法: (type) expression main( ) int x1; float y1,y2; x1=(int)4.123; y1=(float)46/5; y2=(int)5.3456; printf(%d %f %fn,x1,y1,y2); Result: 4 9.20000000 5.00000000l 遞 增 與 遞 減遞 增 與 遞 減 又 分 為 前 置 模 式 ( prefix ) 與 後 置 模 式( postfix ) ;前 置 模 式:是 將 + 或 - - 置 於 變 數 之 前,其運算是在使用此運算元之前先進行加一或減一之動作。後 置 模 式: 是 將 + 或 - - 置 於 變 數 之 後,其運算是在使用此運算元之後才進行加一或減一之動作 。 main() int a=1,b=1,c=1,d=1; int aplus,bplus; int cminus,dminus; aplus=+a; bplus=b+; cminus=-c; dminus=d-; printf(%d %dn,aplus,bplus); printf(%d %dn,a,b); printf(%d %dn,cminus,dminus); printf(%d %dn,c,d);Result:2 12 20 10 0l 設定特殊運算式特殊運算式基本運算式a += ba = a + ba -= ba = a - ba *= ba = a * ba /= ba = a / ba %= ba = a % bl 邏 輯 運 算 子 ( Logical operators )邏 輯 運 算 的 種 類 運算子 功能敘述 運算子 功能敘述 & AND(及) 1 complement(一的補數) |OR(或) Right shiftl 關 係 運 算 子 ( Relational operators ) : 一 般 用 於 控 制 流 程 或 有 條 件 的 敘 述 當 中 , 關 係 運 算 子運算子 功能敘述 運算子 功能敘述 = 大於等於 大於 != 不等於!, 負號 (-), +, -乘 ( * )、除 ( / )、餘數( % )加 ( +)、減 ( - ), , =, !=&|基本運算子優先順序表流 程 控 制 l 控 制 結 構 ( control structure )結 構 化 程 式 設 計 的 基 礎 建 立 在 下 列 三 個 結 構 : ( 1 ) 循 序 ( sequential ) : 以 一 個 接 著 一 個 方 式 進 行 作 業 。( 2 ) 條 件 執 行 ( conditional ) : if_then_else 。( 3 ) 迴 路 ( looping ) :l 條 件 執 行 if 的 運 用以 下 是 if_then_else 流 程 控 制 可 能 出 現 的 四 種 語 法 syntax 1: if (關係運算元) statement ; syntax 3: if (關係運算元) statement ; else statement ;syntax 2: if (關係運算元) statement 1 ; statement 2 ; . . . statement n ; syntax 4: if (關係運算元) statement 1 ; statement 2 ; . statement n ; else statement 1 ; statement 2 ; . statement n ; ps. 如果 statement 超 過 一 個 以 上,則 須 以 將 其區塊分隔開來 。 Example 1: Void main(void) int x; scanf(%d,&x); if ( x = 10 ) printf(%d = 10n,x); else printf(%d 此處為鍵盤輸入值 10 = 10 Example 2: Void main(void) char c; scanf(%c,&c); if( c = A ) printf(c=%cn,c); printf(This is true.n); else printf(c!=An); printf(That isnt true.n); Result: A - 此處為鍵盤輸入值 c=A This is true l 迴 路 while 的 運 用在while的敘述中,當關係運算元之條件為真時 , 會不斷地重覆執行位於 while 後 所 列 的 敘 述 , 直 到 條 件 變 為 否 定 才 停 止 。Syntax 1: while ( 關係運算元 ) statement ;Syntax 2: while ( 關係運算元 ) statement 1 ; statement n ; Example 1:Void main( ) int i=0; while ( i 5 ) printf(%dn,i+); printf(out of loop.n); Result = ? Example 2: Void main( ) int i=0,c=0; while ( i 5 ) printf(%d,i+); printf(%dn,+c); printf(out of loop.n);Result = ?l 迴 路 do-while 的 運 用do-while 迴 路 , 由 於 測 試 條 件 在 迴 路 的 後 面 , 所 以 迴 路 中 的 敘 述 至 少 會 被 執 行 一 次 , Syntax 1: do statement ; while ( 關係運算元 ) ;Syntax 2: do statement 1 ; statement 2 ; . statement n ; while ( 關係運算元 ) ; Example: Void main( ) int i=0,c=0; do printf(%d,i+); printf(%dn,+c); while ( i 5 ) ; printf(out of the loop.n); Result = ? l 迴 路 for 的 運 用for 允 許 使 用 者 在 同 一 行 敘 述 中 就 設 定 了 迴 路 的 三 個 部 份 。 ( 1 ) 計 數 器 的 初 值 , ( 2 ) 關 係 運 算 元 , ( 3 ) 增 減 迴 路 計 數 器 的 值 。 其 語 法 如 下 所 示 ,for ( 計數器初值,關係運算元,計數器值更新 ) statement ; or for ( 計數器初值,關係運算元,計數器值更新 ) statement 1 ; . statement n ; Example 1: Void main( ) int i; for( i = 0 ; i = 5 ; +i ) printf(%d ,i); Result = ?0 1 2 3 4 5 Example 2:Void main( )int i,c; for (i=0, c=1 ; i 5 ; +i,+c ) printf(%d,i); printf(%dn,c); printf(Out of Loop.n);Result = ?l goto 的 運 用在 一 個 程 式 中 , 使 用 goto 敘 述 可 以 強 制 改 變 程 式 執 行 的 步 驟 , 但 也 會 因 此 使 程 式 的 結 構 混 亂 , 所 以 此 敘 述 應 儘 量 不 用 。 其 語 法 如 下 所 述 。 Syntax : goto label ; . . . label : . Example:main( ) int i=1111; repeat : printf(%dn,i); goto repeat ; l 條 件 執 行 switch 的 運 用switch語 法 如 下 所 示 switch ( 變數) case 常數 1 : statement 1 ; case 常數 2 : statement 2 ; . case 常數 n : statement n ; default : statement ; ps. 此 處 常 數 的 資 料 型 態 為 整 數 與 字 元 兩 種 。Example 1:Void main( ) char var=D; switch (var ) case A : printf(var = An); break; case B : printf(var = Bn); break; case C : printf(var =Cn); break; default : printf(Im in default.); /* end of switch */ /*end of main */Example 2:Void main( ) int var=3; switch ( var ) case 1 : printf(var = 1n); break; case 2 : printf(var = 2n); break; case 3 : printf(var = 3n); break; default : printf(Im in default); /* end of switch */ /*end of main */函 數l 何 謂 函 數 ?1. C語言使用的函數可以寫出非常漂亮的程式結構,使程式簡單化,偵錯容易。2. 將重複之某些指令撰寫成一個函數,可減少編輯程式時間,更可使程式精簡,清晰了解。3. C語言使用的函數其呼叫方法與數學上使用函數完全相同, 例 如 :a = function ( x , y ) ;表示將變數 x , y 輸入函數 function , 其傳回函數值設定給變數 a 。l 函 數 的 結 構 (格式)1. 函 數 的 定 義 (Function Definition)2. 呼 叫 函 數 (Function Call)3. 函 數 原 形 宣 告 (Function Prototype)l 函 數 的 定 義 (格式)儲存類別 資料型別 函數名稱 (形式引數的串列) 形式引數的宣告 ; 函數的本體(執行敘述) Example: void line (void) int j;for (j=1;j20;j+)printf(“%dn”,j);l 函 數 的 傳 回 值 與 資 料 形 態要 求 函 數 送 回 傳 回 值 (函數值) , 必 須 在 函 數 本 體 中 利 用 return 敘 述 進 行 , 例 如 :return ( 變數或式子 ) ;此 處 必 須 先 宣 告 傳 回 值 (函數值) 的 資 料 形 態 是 什 麼 。return()敘述之目的如下1. 將控制權傳回給呼叫程式2. 將return()敘述後括號內之數值傳給呼叫程式之方式l 呼叫函式傳值的方式有兩種:( 1 ) 傳 遞 變 數 值 本 身 ( Call by value ) (一般c函式採用的方式)double power(double,int);.int i=3;double x=4.0;double result=power(x,i);call by valuex4.0i3暫時存放暫時存放copycopy34.0複製後交給函式處理power(double,int)複製後,函式如何改變數值都與原先變數不相干( 2 ) 傳 遞 變 數 的 位 址 ( Call by reference )n 將變數直接傳給函式處理n 不做copy的動作(call by value會做copy動作)n 函式內用到parameters的地方,相當於使用原變數double power(double &,int &); /* 函式原型宣告 */.int i=3;double x=4.0;double result=power(x,i);double power(double &y, int &k) y=. k=.ix4.03y相當於x的別名(alias)k相當於i的別名 power(double& y,int& k)Example 1: 傳值呼叫#include int func(a,b,c) int a,b,c; int d; d=a+b+c; return(d);void main(void) int x,y,z,p; x=y=z=4; p=func(x,y,z); printf(p-%dn,p); 輸出結果 : ? Example 2: 傳址呼叫#include void func(a,b,c,d)int *a,*b,*c,*d; *d=*a+*b+*c; void main(void) int x,y,z,p; x=y=z=4; func(&x,&y,&z,&p); printf(p-%dn,p); 輸出結果 : ? /* = */* 程式實例:傅值和傳址的副程序呼叫(交換XY) */* = */* -交換兩值(傳值副程序)- */void swap1(int x,int y) int temp; temp = x; x = y; y = temp;/* - 交換兩值(傳址副程序) - */void swap2(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp;/* -主程式- */void main() int x = 10, y=0; /* 局部變數宣告 */ printf( X Y n); printf( 初值 %d %d n,x,y); swap1(x,y); /* 傳值副程序呼叫(交換XY) */ printf( 傳值 %d %d n,x,y); swap2(&x,&y); /* 傳址副程序呼叫(交換XY) */ printf( 傳址 %d %d n,x,y);輸出結果: X Y 初值 10 0 傳值 10 0 傳址 0 10遞迴 ( recursion)C 語 言 的 函 數 可 進 行 遞 迴 呼 叫 (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论