Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

Introduction to C Programming
程式設計 博碩文化出版發行.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
函數 Function ●什麼是函數?函數就是一段獨立程式,用來處理獨立的工作。
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Introduction to the C Programming Language
第十一章 結構.
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
Chen Yi Fen The C Language Chen Yi Fen
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
String C語言-字串.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
第6章 函數與巨集 6-1 由上而下的設計方法 6-2 建立函數 6-3 函數的參數呼叫方式 6-4 變數的有效範圍 6-5 遞迴函數
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Java 程式設計 講師:FrankLin.
Introduction to the C Programming Language
Introduction to the C Programming Language
計數式重複敘述 for 迴圈 P
Introduction to the C Programming Language
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
第 19 章 XML記憶體執行模式.
陣列
|07 函數.
輸入&輸出 函數 P20~P21.
第十章 指標.
CH1 我的第一個App與變數宣告.
撰寫MATLAB基礎財務程式 柯婷瑱.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
函數 博碩文化出版發行.
引用檔案.
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
Pthread.
函數應用(二)與自定函數.
陣列與結構.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Introduction to the C Programming Language
實習八 函式指標.
變數與資料型態  綠園.
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
Chap 6 函數 故用兵之法,十則圍之,五則攻之,倍則分之, 敵則能戰之,少則能逃之,不若則能避之。 故小敵之堅,大敵之擒也。
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
適用於多選一 可減少if 與 else配對混淆的錯誤.
Introduction to the C Programming Language
Programming & Language Telling the computer what to do
Introduction to the C Programming Language
Chapter 6 函數.
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
函數(二) 函數的重載 函數的變數 參照與函數 綠園.
Introduction to the C Programming Language
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

Introduction to the C Programming Language 函式(Function)、參數

Fucntion (函數、函式、副程式)

何謂Function (函式)? 何謂函式(Function)? 函式特點 避免重複寫相同的程式碼,節省coding 時間 可重複使用該程式碼,容易偵錯程式 增加程式的可讀性與可維護性,降低主程式之複雜性 開發較大應用程式時,可分割成數個不同功能的function, 由不同的程式設計師分工完成 符合結構化語言之特性(模組化,由上而下設計) 函式特點 不可單獨執行,為主程式之一部份 擁有自己的名稱,不可與其他函數同名

宣告函式的格式 函式原型宣告的格式 宣告函式1 函式1 主程式 主程式 函式1 /*當函式位於main()之前時, 不需宣告函式, 反之則要*/ 傳回值型態 function_name (資料型態1,資料型態2…); 宣告函式1 主程式 函式1 函式1 主程式 左邊的圖,是當函式位於main()之後時,需要做宣告動作 右邊的圖,是當函式位於main()之前時,不需做宣告函式的動作

Function語法規則(1/2) 語法規則 傳回值資料型態 函數名稱(傳入值資料型態 變數名稱, 傳入值資料型態 變數名稱 …) { 傳回值資料型態 函數名稱(傳入值資料型態 變數名稱, 傳入值資料型態 變數名稱 …) { statements; /*函式主體*/ return 傳回值; /*若需傳回值時*/ }

Function語法規則(2/2) 語法規則1 : (不傳回值) void function_name (資料型態 參數1,資料型態 參數2…) { parameters declarations; /*區域變數宣告*/ statements; /*函式主體*/ } 語法規則2 :(傳回值) 資料型態 function_name (資料型態 參數1,資料型態 參數2…) return 傳回值;

Example 1a 範例:呼叫函式,印出學號 #include<stdio.h> void p(char sn[ ]); /*宣告函式,函式原型void是不傳回值,傳入一個char型態*/ int main(void) /*主程式*/ { char num[10]; printf("請輸入學號:"); scanf("%s",&num); p(num); /*呼叫p函式*/ printf("\n"); system("pause"); } void p(char sn[ ]) /*p函式*/ printf("\n\n您的學號為 %s",sn); 進入副程式 離開副程式

Example 1b 範例:呼叫函式,印出學號 #include<stdio.h> void p(char *); /*宣告函式,函式原型void是不傳回值,傳入一個char型態*/ int main(void) /*主程式*/ { char num[10]; printf("請輸入學號:"); scanf("%s",&num); p(num); /*呼叫p函式*/ printf("\n"); system("pause"); } void p(char num[ ]) printf("\n\n您的學號為 %s",num); /*p函式的num[ ]與主程式裡的num[ ]是不同地*/

Example 2 範例: 寫兩個函式,一個使兩數相加,傳回運算後結果;一個顯示答案,不傳回值. #include <stdio.h> int add(int,int);                           /*宣告函式,函式原型 int是傳回int型態,傳入兩個int型態 */ void show(int);                          /*宣告函式,函式原型 void是不傳回值,傳入一個int型態 */  void main() { int nNum1 = 5 , nNum2 = 5 , nSum; nSum = add(nNum1,nNum2);       /*把add(nNum1,nNum2)的return傳回nSum */ show(nSum);                                 /*把nSum傳入show函式 */  }   /*傳入的值是nNum1,nNum2,定義兩個int且nData1 = nNum1, nNum2 = nData2 */  int add(int nData1,int nData2)        return (nData1 + nData2);        /*傳回nData1 + nData2相加的值 */ /*傳入的是nSum,定義一個int nData,且nData= nSum; */  void show(int nData) printf("The Anser is %d" , nData); } add 與 show 兩函式於此程式中的任何地方均可被呼叫

函式與主程式間之架構 合法之架構 錯誤之架構 主程式 函式 1 函式2 主程式 函式1 函式2 主程式 函式1 函式2 主程式 函式1 函式不能包在主程式及其它函式裡

Function注意事項 函數名稱依照識別字的規則命名. 每個函數各自獨立,可相互呼叫. 所有函數語法地位一律平等. 參數列是呼叫函數時需要與主程式間作資料或位置的傳遞, 若無資料需要傳遞時,則可省略參數列, 但不可省略小括號. 若函數須傳回數值時, 則敘述中必有一條傳回敘述,語法規則為 : return (運算式) return 為關鍵字 運算式可為常數,變數或算數運算式 return 除了可把函數內的值傳回呼叫程式外,同時具有令函數結束, 返回呼叫程式之功能. 識別字:英文大小寫字母、數字或底線所組合而成

傳回值 return() 敘述之目的如下 將控制權傳回給呼叫程式 將return()敘述後括號內之數值傳給呼叫程式之方式

練習 撰寫一個程式,包含3個副程式,功能如下: func1:計算矩形面積。 func2:計算三角形面積。 func3:計算梯形面積。 輸入:長與寬 輸出:矩形面積 func2:計算三角形面積。 輸入:底、高 輸出:三角形面積 func3:計算梯形面積。 輸入:上底、下底、高 輸出:梯形面積

參數

參數之區域觀念 全面性變數(Global variable) : 宣告在主程式區域外的變數, 可在程式中任何區域中存取該變數. 區域性變數(Local variable) : 宣告在主函數區域中或函數區域中的變數, 只在該宣告的區域中有效. 離開該區域則視為未定義變數, 各區域中的區域變數互不相干. #include<stdio.h> /*前置處理,呼叫標頭檔*/ 宣告函式 宣告變數 /*全域變數*/ int main( ) { 宣告變數 /*區域變數*/ return 0; /*傳回值*/ } 當全面性變數名稱與區域性變數名稱相同時, 在該區域範圍中以區域性的變數為主

參數之儲存類別 C語言提供四個關鍵字 : auto, extern, static, register 靜態變數(Static variable) : 只要程式繼續執行, 不因函數的結束而消失, 該變數所配置的記憶體空間與數值依然存在. 外部變數(Extern variable) : 如上頁提及宣告在主程式區域外的變數為全面性變數, 也稱為外部變數. 外部靜態變數 : 只提供同一程式檔中的所有函數存取, 其他程式檔中的函數則無法使用. 暫存器變數(Register variable):只適用於區域變數的宣告, 且個數不能超過2個, 若超過2個, 則會自將超過的暫存器變數轉成auto區域變數. 全面性變數若需在其他程式中使用時, 則須在外在程式函數區域外宣告 “extern” 暫存器變數(Register variable) : 為加速程式的執行速度, 可將區域性變數或正式參數宣告為暫存器變數. 暫存器變數的存取速度快於主記憶體, 適用於使用頻率高的區域性變數, 全面性變數不可宣告為暫存器變數 通常在撰寫系統程式或驅動程式時,使用register variable當作迴圈的計數值,以加快執行的速度。 宣告為靜態變數或外部變數時, 系統自動給初始值 0, 為養成程式設計師良好習慣, 最好由設計師自訂變數初始值, 以確保執行結果之正確性 靜態變數(static variable):在編譯時就已配置有固定的記憶體空間。其生命週期,則在被編譯時即被配置一個固定的記憶體開始,函數執行結束時靜態變數並不會隨之結束,其值也會被保留下來,若是再次呼叫該函數時,會將靜態變數存在記憶體空間中的值取出來使用,而非定義的初值。

範例一 : 區域性變數宣告使用 #include<stdio.h> #include<stdlib.h> int sum(void); void main(void) { int i; /*區域變數*/ for (i=1; i<=3; i++) printf("%dth time = %d \n", i, sum()); system("pause"); } int sum(void) int x=0; /*區域變數*/ x++; return(x); f_ex1.c 1st time = 1 2nd time = 1 3rd time = 1

範例二 : 靜態性變數宣告使用 #include<stdio.h> #include<stdlib.h> void main() { int sum(void); int i; /*區域變數*/ for (i=1; i<=3; i++) printf("%dth time = %d \n", i, sum()); system("pause"); } int sum(void) static int x=0; x++; return(x); f_ex2.c 1st time = 1 2nd time = 2 3rd time = 3 靜態變數宣告

範例一 : 全域性變數宣告使用 #include<stdio.h> #include<stdlib.h> int sum(void); int x=0; /*全域變數*/ void main(void) { int i; /*區域變數*/ x++; for (i=1; i<=3; i++) printf("%dth time = %d \n", i, sum()); system("pause"); } int sum(void) return(x); f_ex1.c 1st time = 2 2nd time = 3 3rd time = 4