因為 C 的函式必定返回至多一個值,所以它應用在數學上, 只能拿來計算單值函數 (single-valued function)。 如果要設計一個 C 函式來製造一個多值 (multi-valued) 或向量值函數, 就必須利用 Call by Name 的機制。 例如將直角坐標 (x, y) 變換到極坐標 (r, d) 的計算,就是一個向量值函數。 以下我們用指標變數示範這種 C 函式的做法。
#include <stdio.h> #include <math.h> /* 示範向量值函數 (demo-polar.c) */ void polar(float, float, float*, float*); main() { float x, y, r, d; while (scanf("%f%f", &x, &y) != EOF) { polar(x, y, &r, &d); printf("%f\t%f\n", r, d); } } void polar(float x, float y, float *r, float *d) { float pi; pi = 4*atan(1); *r = sqrt(x*x + y*y); if (y == 0) { if (x >= 0) *d = pi/2; else *d = -pi/2; } else *d = atan(x/y); }
前面的示範,只要傳回兩個值。 如果一次要傳回很多值,那麼就要利用序列比較方便。
習題
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: Feb 28, 2001
Last Revised: Feb 28, 2001
© Copyright 2001 Wei-Chang Shann 單維彰