Introduction to the C Programming Language Function CSIM

  • Slides: 21
Download presentation
Introduction to the C Programming Language 續 Function (函式) CSIM, PU C Language 1

Introduction to the C Programming Language 續 Function (函式) CSIM, PU C Language 1

回顧複習 CSIM, PU C Language 2

回顧複習 CSIM, PU C Language 2

Example 範例: 寫兩個函式, 一個使兩數相加, 傳回運算後結果; 一個顯示答案, 不傳回值. #include <stdio. h> int add(int, int); /*宣告函式,

Example 範例: 寫兩個函式, 一個使兩數相加, 傳回運算後結果; 一個顯示答案, 不傳回值. #include <stdio. h> int add(int, int); /*宣告函式, 函式原型 int是傳回int型態, 傳入兩個int型態 */ void show(int); /*宣告函式, 函式原型void是不傳回值, 傳入一個int型態 */ void main() { int n. Num 1 = 5 , n. Num 2 = 5 , n. Sum; n. Sum = add(n. Num 1, n. Num 2); /*把add(n. Num 1, n. Num 2)的return傳回n. Sum */ show(n. Sum); /*把n. Sum傳入show函式 */ } /*傳入的值是n. Num 1, n. Num 2, 定義兩個int且n. Data 1 = n. Num 1; n. Num 2 = n. Data 2; */ int add(int n. Data 1, int n. Data 2) { return (n. Data 1 + n. Data 2); /*傳回n. Data 1 + n. Data 2相加的值. */ } /*傳入的是n. Sum, 定義一個int n. Data, 且n. Data= n. Sum; */ void show(int n. Data) { printf("The Anser is %d" , n. Data); } CSIM, PU C Language 4

傳值呼叫 - 範例一 q 比較使用者所輸入兩整數之大小 q #include <stdio. h> 傳值呼叫參數值 int larger_value(int num_x, int

傳值呼叫 - 範例一 q 比較使用者所輸入兩整數之大小 q #include <stdio. h> 傳值呼叫參數值 int larger_value(int num_x, int num_y) { num_a num_x if(num_x < num_y) 複製值 5 5 return(num_y); 傳回值 num_b num_y else 複製值 3 3 return(num_x); 傳回值 } void main(void) { int larger_value(int, int); int num_a, num_b; 函式呼叫 printf("1: Please input 2 numbers. n ==> "); scanf("%d %d”, &num_a, &num_b); printf(“The larger number is %d n”, larger_value(num_a, num_b)); } CSIM, PU C Language 8

傳值呼叫 -範例二 q 輸入一數值 n, 求出 1 至 n 的連乘 (示範函數傳回數值給呼叫程式) q void main()

傳值呼叫 -範例二 q 輸入一數值 n, 求出 1 至 n 的連乘 (示範函數傳回數值給呼叫程式) q void main() { long fact(void); long f; 函式呼叫 (無參數傳遞) f = fact(); printf("The factorial = %ld n", f); } long fact(void) 參數列中無資料 { int i, n; long f=1; printf("Enter one value : "); scanf("%d", &n); for( i=1; i<= n; i++) f *= i; return(f); 傳回值 } CSIM, PU C Language 9

傳值呼叫 -範例四 – (共 2頁) q 計算輸入之三個整數的 gcd最大公因數 與 lcm最小公倍數. q void main() {

傳值呼叫 -範例四 – (共 2頁) q 計算輸入之三個整數的 gcd最大公因數 與 lcm最小公倍數. q void main() { int gcd(int, int); int lcm(int, int); int a, b, c; printf("Enter three integer values : "); scanf("%d %d %d", &a, &b, &c); printf("The gcd of %d %d %d is %d n", a, b, c, gcd(a, b), c) ); printf("The lcm of %d %d %d is %d n", a, b, c, lcm(a, b), c) ); } 續下頁 CSIM, PU C Language 11

傳值呼叫 -範例四 – 續 接上頁 int gcd(int x, int y) { int r; while

傳值呼叫 -範例四 – 續 接上頁 int gcd(int x, int y) { int r; while (y != 0) { r = x % y; x = y; } return(x); } y = r; int lcm(int x, int y) { return(x * y / gcd(x, y)); } CSIM, PU C Language 12

傳值呼叫與傳址呼叫之比較範例 /* example: 傳值呼叫和傳址呼叫 (交換XY)*/ /* ----------Call by value----- */ 傳值呼叫參數值 void swap 1(int

傳值呼叫與傳址呼叫之比較範例 /* example: 傳值呼叫和傳址呼叫 (交換XY)*/ /* ----------Call by value----- */ 傳值呼叫參數值 void swap 1(int x, int y) { int temp; num_x x 複製值 temp = x; 10 10 x = y; num_y y y = temp; 複製值 } 0 0 /* ---------- Call by address ------ */ void swap 2(int *x, int *y) { int temp; temp = *x; 傳址呼叫參數值 *x = *y; *y = temp; num_x x x 指向 } 10 續下頁 num_y 0 CSIM, PU &num_x 指向 y &num_y x 0 y 10 &num_y y &num_x C Language X 與 y 兩數 交換不影響 num_x與 num_y X 與 y 兩數 交換後, 則 分別指向 num_y 與 num_x 13

傳值呼叫與傳址呼叫之比較範例 – 續 接上頁 /* -----------Main function----------- */ void swap 1(int, int); void swap

傳值呼叫與傳址呼叫之比較範例 – 續 接上頁 /* -----------Main function----------- */ void swap 1(int, int); void swap 2(int *, int *); void main() { int num_x = 10, num_y=0; printf(" X Y n"); printf(" Initial value %d %d n", num_x, num_y); swap 1(num_x, num_y); /* call by value */ printf(" Call by value %d %d n", num_x, num_y); swap 2(&num_x, &num_y); /* call by address */ printf(" Call by address %d %d n", num_x, num_y); } CSIM, PU C Language 14

陣列資料傳遞 CSIM, PU C Language 15

陣列資料傳遞 CSIM, PU C Language 15

回顧-Example 1 b 範例:呼叫函式,印出學號 #include<stdio. h> void p(char *); /*宣告函式, 函式原型void是不傳回值, 傳入一個char型態*/ int main(void)

回顧-Example 1 b 範例:呼叫函式,印出學號 #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[ ]) /*p函式的num[ ]與主程式裡的num[ ]是不同地*/ { printf("nn您的學號為 %s", num); } CSIM, PU C Language 17

陣列資料傳遞 – 範例一 q 利用函數方式, 將陣列中的最小值傳回 #include <stdio. h> int minimum(int *, int); void

陣列資料傳遞 – 範例一 q 利用函數方式, 將陣列中的最小值傳回 #include <stdio. h> int minimum(int *, int); void main() { int array[5]; int minimum_value; int i; for( i =0; i<5; i++) { printf("1: input value %d ==> ", i+1); scanf("%d", &array[i]); } minimum_value = minimum(array, 5); printf("2: The minimum value is %d n", minimum_value); } 續下頁 CSIM, PU C Language 18

陣列資料傳遞 – 範例一續 接上頁 int minimum(int *var, int size) { int min, i; min

陣列資料傳遞 – 範例一續 接上頁 int minimum(int *var, int size) { int min, i; min = var[0]; for( i=0; i<=size-1; i++) if(var[i] < min) min = var[i]; return min; } CSIM, PU C Language 19