C 程式設計— 函式 台大資訊工程學系 資訊系統訓練班.

Slides:



Advertisements
Similar presentations
大綱 1. 三角函數的導函數. 2. 反三角函數的導函數. 3. 對數函數的導函數. 4. 指數函數的導函數.
Advertisements

第一單元 建立java 程式.
Introduction to C Programming
計算機程式語言實習課.
第七章 副程式.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 7 Subroutine and Function
函數 Function ●什麼是函數?函數就是一段獨立程式,用來處理獨立的工作。
C语言程序设计 第八章 函数.
第十一章 結構.
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
列舉(enum).
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Chapter 7 指標.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
Java 程式設計 講師:FrankLin.
Introduction to the C Programming Language
Introduction to the C Programming Language
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
複習 int a[5]; int i; //a[0], a[1], a[2], a[3], a[4]
INDEX 資訊學科種子教師研習 課程說明 教學活動計畫.
開始使用Visual C++.
C++ 程式初探 III.
|07 函數.
|08 前置處理器與標準函數.
輸入&輸出 函數 P20~P21.
第十章 指標.
小學四年級數學科 8.最大公因數.
CH1 我的第一個App與變數宣告.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
函式庫補充資料.
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
函數 博碩文化出版發行.
C qsort.
第二章 类型、对象、运算符和表达式.
Pthread.
Introduction to the C Programming Language
亂數 隨機產生亂數 Random類別支援的方法: Next多載方法 Next :傳回亂數。
陣列與結構.
隨機數 (亂數) 10後,取餘數 n = rand(); 利用 Code::Block 驗證一下 n = rand() %10; 998
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
查表法&電腦IO Port二進制轉七段顯示器
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
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
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
台大資訊工程學系 資訊系統訓練班 第119期 吳晉賢
函式庫補充資料 1.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
隨機函數.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

C 程式設計— 函式 台大資訊工程學系 資訊系統訓練班

課程大綱 C語言簡介 基本資料型態, 變數, 基本輸入輸出 控制敘述- 選擇控制與重覆控制 陣列 函式 指標 字元與字串 結構 檔案處理

本次課程大綱 函式基本概念 函式建立 函式使用 引數傳遞 儲存類別 遞迴函式

函式的基本概念 函式--是一個副程式 C程式中 函式有以下的優點. 例子 所有函式的地位一律平等; 函式可以自行呼叫本身函式. 所有函式的地位一律平等;  函式可以自行呼叫本身函式. 函式有以下的優點. 避免造成相同程式區段的重覆出現. 開發較大程式時, 可以分工處理, 最後再把所有函式合起來. 增加程式的可讀性, 減少維修成本. 結構化語言. 例子

程式階層圖

數學函式 數學函式 呼叫一個函式 通用的數學運算式 多個參數以逗號隔開 呼叫sqrt 函式 所有數學函式會傳double的資料型態 #include <math.h> 呼叫一個函式 函式名稱( 參數列 ); 多個參數以逗號隔開 printf( "%.2f", sqrt( 900.0 ) ); 呼叫sqrt 函式 所有數學函式會傳double的資料型態

常用的數學函式(1) 例子: 函式 說明 x和y的資料型態 exp(x) 指數函式e^x double或float log(x) 自然對數函式; ln(x) double或float log10(x) 以10為底的對數 double或float sqrt(x) x的開平方根值 double或float fabs(x) x的絕對值 double或float pow(x,y) x的y次方值 x^y double 例子:

常用的數學函式(2) 例子: 函式 說明 x的資料型態 sin(x) 正弦函式 double或float cos(x) 餘弦函式 double或float tan(x) 正切函式 double或float asin(x) 反正切函式 double或float acos(x) 反餘弦函式 double或float atan(x) 反正切函式 double或float 例子:

使用者自訂函式 使用者自訂函式三步驟 函式宣告 函式定義 函式呼叫

函式宣告 函式宣告 函式名稱 參數 回傳值 當函式定義在使用之前,就必須先宣告 舉例: int maximum( int x, int y, int z ); 使用三個整數參數 回傳整數

函式定義 函式格式 函式內不可再次定義函式 回傳值的資料型態 函式名稱( 參數列) { 變數宣告 指令敘述 } 函式名稱 任意名稱 回傳值的資料型態 函式名稱( 參數列) { 變數宣告 指令敘述 } 函式名稱 任意名稱 回傳值的資料型態 void – 指沒有回傳值 參數列: 每個參數都要指定它的資料型態和名稱 函式內不可再次定義函式 int func ( int a, int b) { int c; c=a+b; return c; }

函式呼叫 函式的呼叫形式 不傳參數, 不傳回值. 不傳參數, 有傳回值. 傳參數, 不傳回值. 傳參數, 有傳回值. void func(void); 不傳參數, 有傳回值. int func(void); 傳參數, 不傳回值. void func (a); (a的資料型態需與指定參數的資料型態相等) 傳參數, 有傳回值. Int func (a); (a的資料型態需與指定參數的資料型態相等)

#include <stdio.h> int min(int x,int y); // int min(int,int) also works int main() { int i,j; scanf(“%d%d”,&i,&j); printf(“%d”,min(i,j)); } int min(int x,int y) return x>y?y:x; 宣告 #include <stdio.h> int min(int x,int y) { return x>y?y:x; } int main() int i,j; scanf(“%d%d”,&i,&j); printf(“%d”,min(i,j)); 定義 定義

練習時間 例子1: 設計一個函式, 將兩個整數相加, 並傳回主函式. 例子2: 修改例子1

資料型態的轉換 (1) 選擇優先權最高的資料型態轉換 轉換完畢後就進行實際運算,並且將運算結果轉換為等號左邊變數所屬的資料型態,最後將運算結果回存到左邊的變數中。

資料型態的轉換 (2) 假設共有5個變數,其資料類型如下: int a; char b; float c; double d; int x; x=(a-b)+(c*d)/b

強制型態轉換 (強制轉換型態)運算式或變數 (float) x, (float) x/y Int x,y; Float z; z = x / y => z=3 z = (float)x / (float)y => z=3.75

實質參數跟形式參數 形式參數 實質參數 它們被定義在函式名稱之後 它們被實際傳入函式內 它們可以是常數,變數或實際數值 int mySqrt(double i) 實質參數 它們被實際傳入函式內 mysqrt(200.0) mysqrt(i) 它們可以是常數,變數或實際數值

引數傳遞(1) Call by value傳值呼叫 Call by reference傳址呼叫 通常用來提高效能 只將實際參數的數值傳入函式 原始的數值不會因為函式而改變 通常使用在不需要改變實際參數的數值 例子 Call by reference傳址呼叫 將實際參數的指標傳入 函數將會改變參數的原始值 只使用在確定可以信任的函式 會將原來的值保留,而將新的值儲存在另一個記憶體空間 通常用來提高效能

引數傳遞(2) 傳值呼叫 傳址呼叫

引數傳遞(3) 傳回值個數大於1時 傳址呼叫 全域變數

儲存類別 其主要功能在說明變數的生命期(life time)及範圍(scope). 主要分為區域變數及全域變數 生命期就是變數存在的時間. 範圍就是變數的可使用範圍. 主要分為區域變數及全域變數

宣告方式 區域變數 全域變數 宣告在函式本體, 或函式參數列中 宣告在任何函式定義之外 auto int num; static int num; 全域變數 宣告在任何函式定義之外

生命期 區域變數 全域變數 auto變數在其宣告的區塊作用期間佔用記憶體. static變數從程式開始執行時便已經存在, 一直到程式結束為止, 也就是說它只會初始化一次. 全域變數 同static變數

範圍 區域變數 全域變數 區域變數只能在它宣告的區塊使用. 當同時兩層出現同名區域變數時, 用的是最內層的區域變數. 全域變數從它宣告的地方開始, 到處都可以使用. 例子 Note:函式宣告與可用範圍與變數相同.

亂數產生函式(1) i = rand(); rand 函式 int rand(void); 存在在 <stdlib.h> 產生亂數 回傳0到32757的亂數 i = rand(); 每次程式執行的時候都會拿到同樣順序的亂數 例子

亂數產生函式(2) 決定亂數範圍 1 + ( rand() % n ) 希望得到1到n之間的亂數 rand() % n 回傳0到n-1的亂數 1到6之間的亂數 例子

亂數產生函式(3) Time函式 time_t time(time_t *timrptr); 存在在 <time.h> 取得由格林威治時間1970/1/1 00:00:00至今經過的秒數 例子

亂數產生函式(4) srand 函式 srand( seed ); void srand(unsigned int seed); 存在在 <stdlib.h> 設定亂數產生器種子 srand( seed ); Seed:亂數產生器的種子 例子 srand( time( NULL )) 回傳電腦內當時程式執行的時間作為亂數種子

遞迴函式 (1) 一個遞迴函式, 就是在函式的指令敘述內, 呼叫自己本身這個函式 遞迴函式用來處理大量而相同狀況的問題 如n!的計算.

遞迴函式 (2) n!的計算 請注意: 利用遞迴去計算 先解決基本狀況 (1! = 0! = 1) 之後逐步處理 5! = 5 * 4 * 3 * 2 * 1 請注意: 5! = 5 * 4! 4! = 4 * 3! ... 利用遞迴去計算 先解決基本狀況 (1! = 0! = 1) 之後逐步處理 2! = 2 * 1! = 2 * 1 = 2; 3! = 3 * 2! = 3 * 2 = 6;

遞迴函式 (3) 例子: 利用遞迴函式求n! (a) 遞迴呼叫的順序 (b) 遞迴值的回傳順序 最後值 = 120 5! 回傳 5! = 5 * 24 = 120 回傳 4! = 4 * 6 = 24 回傳 2! = 2 * 1 = 2 回傳 3! = 3 * 2 = 6 回傳 1 5 * 4! 1 4 * 3! 3 * 2! 2 * 1! 例子: 利用遞迴函式求n!

其他例子 問題: 利用遞迴函式求 1+2+3+…+n的值. sum(n) = 1, 如果 n = 1 sum(n) = n + sum(n-1), 如果 n > 1

遞迴函式: 費式數列 f( 3 ) f( 1 ) f( 2 ) f( 0 ) return 1 return 0 return +

練習時間 利用遞迴函式求費式數列 Fib(n) = 0, 如果 n=0; Fib(n) = 1, 如果 n=1; Fib(n) = Fib(n-1) + Fib(n-2), 如果n不為0或1

練習時間 計算m和n 二數的最大公因數 輾轉相除法 gcd(m,n) = n, 如果 m%n 等於 0 gcd(m,n) = gcd(n, m%n), 如果m%n 不等於 0

今天學到什麼… 什麼是函式 如何建立一個函式 如何使用函式 如何傳遞變數 什麼是儲存類別 如何建立遞迴函式