*function
函數(式)
使用function的原因
- 程式太大
- 程式模組化
語法
類型名稱 函數名稱 (引數) { 敘述 }
開啟專案的原因是會編輯不只一個程式
每個function 都是獨立的, 所以不會有 function包含function
函數必須要下型別名稱
程式的編譯是由上到下
所以函數要先宣告, 然後實作, 呼叫
Lab:
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//因為把 函數放在主程式的下方 所以要先宣告
void repeat();
//進入主程式
int main()
{
int main()
{
//呼叫 repeat
repeat();
printf("*Welcome to Dev C++*\n");
repeat();
system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內
return 0;
}
return 0;
}
//建立一個 function repeat void repeat() { //列印 20個 * for(int i=0;i<20;i++) printf("*"); //執行完 for 換行 printf("\n"); }
Lab:使用專案
開啟一個 C++的專案(console application)
然後準備兩個 原始碼
檔案:2009060201.cpp
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //因為把 函數放在主程式的下方 所以要先宣告 void repeat(); //進入主程式 int main() { //呼叫 repeat repeat(); printf("*Welcome to Dev C++*\n"); repeat(); system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
檔案:2009060202-repeat.cpp
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //建立一個 function repeat void repeat() { //列印 20個 * for(int i=0;i<20;i++) printf("*"); //執行完 for 換行 printf("\n"); }
在專案1(包含兩個 source: 2009060201.cpp 及 2009060202-repeat.cpp)
- 刪除原來的main.cpp
- 將上面兩個 原始碼(cpp) 加入到專案(於專案1上面按滑鼠右鍵 --> 將檔案加入專案)
- 嘗試編譯 --> 成功. 因為專案是會編譯所有的 source code
- 每一個source code 的include 都是獨立的
以上的 repeat 不夠強,所以作一些修改
修改如下(紅色的部分)
----------------------------檔案:2009060201.cpp-----------------------------------
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //因為把 函數放在主程式的下方 所以要先宣告 // 因為 改過 repeat 所以要宣告 void repeat(int,char); //進入主程式 int main() { //呼叫 repeat 給傳入值 30 內容為後面帶的字元 repeat(30, '@');
system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
----------------------------檔案:2009060202-repeat.cpp----------------------------- // include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //建立一個 function repeat // 宣告 整數int 傳入值 n 字元 傳入值 ch void repeat(int n,char ch) { //列印 n個 * 由傳入值決定 for(int i=0;i<n;i++) //列印 ch 的內容 printf("%c",ch); //執行完 for 換行 printf("\n"); }
**為何要 include?
- 因為要做函數的宣告
另外一種想法: 可以事先儲值
----------------------------檔案:2009060201.cpp-----------------------------------
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //因為把 函數放在主程式的下方 所以要先宣告 // 因為 改過 repeat 所以要宣告, 可以事先儲值 int=20 或是 char的字元是 *
//如果使用者沒有輸入就會利用 事先的儲值
//只適用於 C++, C and Java 沒有 void repeat(int=20,char='*'); //進入主程式 int main() { //呼叫 repeat 給傳入值 30 內容為後面帶的字元 repeat(); system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
如果是要讓其他的語言可以使用
或是使用物件導向的寫法可以寫成下列
----------------------------檔案:2009060202-repeat.cpp----------------------------- // include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //因為把 函數放在主程式的下方 所以要先宣告 // 因為 改過 repeat 所以要宣告 //因為 有三個讀立的 function 所以三個都要宣告 //物件導向的寫法 void repeat(); void repeat(int); void repeat(int,char); //進入主程式 int main() { //呼叫 repeat 給傳入值 30 內容為後面帶的字元 repeat(); system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
----------------------------檔案:2009060201.cpp-----------------------------------
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //定義三個獨立的function //建立一個 function repeat // 宣告 整數int 傳入值 n 字元 傳入值 ch void repeat() { //列印 n個 * 由傳入值決定 for(int i=0;i<20;i++) //列印 ch 的內容 printf("*"); //執行完 for 換行 printf("\n"); } void repeat(int n) { //列印 n個 * 由傳入值決定 for(int i=0;i<n;i++) //列印 ch 的內容 printf("*"); //執行完 for 換行 printf("\n"); } void repeat(int n,char ch) { //列印 n個 * 由傳入值決定 for(int i=0;i<n;i++) //列印 ch 的內容 printf("%c",ch); //執行完 for 換行 printf("\n"); }
以上先有印象就好
Lab: 建立 Header
於專案內新增一個檔案
內容為
//因為把 函數放在主程式的下方 所以要先宣告 // 因為 改過 repeat 所以要宣告 //因為 有三個讀立的 function 所以三個都要宣告 void repeat(); void repeat(int); void repeat(int,char);
儲存為 me 的Head file
修改
----------------------------檔案:2009060201.cpp-----------------------------------
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" #include "me.h" //進入主程式 int main() { //呼叫 repeat 給傳入值 30 內容為後面帶的字元 repeat(30, '@'); system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
**在include 的時候 < > 與 " " 的差別
- < > 角括號 只包含系統的路徑變數
- " " 雙引號 包含系統的路徑變數 + 現行目錄的路徑
**類型名稱 void
- 沒有傳回值
Lab: 建立兩個 function 來計算 面積還有容積
專案1目前包含 2009060201.cpp 2009060202-repeat.cpp me.h
----------------------------檔案:2009060201.cpp-----------------------------------
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" #include "me.h" //進入主程式 int main() { //呼叫 repeat 給傳入值 30 內容為後面帶的字元 repeat(30, '*'); //列印出 area 的傳回值, area 傳入 10 當傳入值 printf("area=%f \n\n",area(10)); //列印出 vol的傳回值, vol 傳入 高度 20 還有 半徑10 printf("vol=%f \n",vol(20,10)); //呼叫 repeat 給傳入值 30 內容為後面帶的字元 repeat(30, '*'); system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
----------------------------檔案:2009060202-repeat.cpp-----------------------------
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h #include "stdio.h" #include "stdlib.h" //定義三個獨立的function //建立一個 function repeat // 宣告 整數int 傳入值 n 字元 傳入值 ch void repeat() { //列印 n個 * 由傳入值決定 for(int i=0;i<20;i++) //列印 ch 的內容 printf("*"); //執行完 for 換行 printf("\n"); } void repeat(int n) { //列印 n個 * 由傳入值決定 for(int i=0;i<n;i++) //列印 ch 的內容 printf("*"); //執行完 for 換行 printf("\n"); } void repeat(int n,char ch) { //列印 n個 * 由傳入值決定 for(int i=0;i<n;i++) //列印 ch 的內容 printf("%c",ch); //執行完 for 換行 printf("\n"); } //定義一個 function area 為浮點數 radius 為半徑 // area 內有 radius 的傳入值 float area(float radius) { float a; //a 為面積 = 3.14 *radius *radius a=3.14 *radius *radius; return a; } //定義一個 function vol 來算容積 float vol(float height,float radius) { float v; //在function 內呼叫另一個 function area // v 為容積= 面積 * 高度 v=area(radius) *height; return v; }
----------------------------檔案:me.h-----------------------------------------------
//因為把 函數放在主程式的下方 所以要先宣告 // 因為 改過 repeat 所以要宣告 //因為 有三個讀立的 function 所以三個都要宣告 void repeat(); void repeat(int); void repeat(int,char); //宣告 剛定義的 area 算面積用 float area(float); //宣告 剛定義的 vol 算容積用 float vol(float,float);
**變數**
- 全域性變數
- 區域性變數
- 全域性變數或是區域性變數 看宣告的位置來決定
- 初學者區域性變數儘量多用, 全域性變數少用
Lab: 全域變數
// include 引入 .h (標頭檔) // header .h 要放在程式的最前面 // 引入 stdio.h 及 stdlib.h
#include "stdio.h" #include "stdlib.h"
//定義一個 整數 a 使用的想法為全域變數
int a; void sub() { a+=5; } //進入主程式 int main() { a=10; printf("a=%d\n",a); //因為 a 為全域變數, 會備 sub() 使用 a=10+5=15 sub(); printf("a=%d\n",a); system("pause"); //執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內 return 0; }
***************************************************************
1 則留言:
我可以自己建立一個標頭檔嗎?然後在主程式時叫出來用就好
還是你要看看我寫的?
張貼留言