Variable cpp Variable cpp include iostream using namespace
範例程式 Variable. cpp // Variable. cpp #include <iostream> using namespace std; // ----- 主程式 ------------int main() { double A = 2. 5; cout << "A 的值為:" << A << endl; cout << "A 所佔用的記憶體大小為:" << sizeof(A) << " bytes 或是 " << sizeof(double) << " bytes" << endl; cout << "A 所在位址為:" << “ 0 x” << &A << endl; return 0; } 5
使用下標來計算陣列元素的位址 const int m = 20; const int n = 60; double B[m][n]; 元素B[i][j] 的位址為 &B[0][0] + (i × n + j) × sizeof(double) 20
使用下標來計算陣列元素的位址 const int m = 20; const int n = 60; const int p = 80; double C[m][n][p]; 元素C[i][j][k]的位址為 &C[0][0][0] + (i × n × p + j × p + k) × sizeof(double) 21
範例程式 Apointer. cpp (指標代數) 使用*p. V++ 逐一獲得向量的各個元素,以求得向量的總合 24 // Apointer. cpp #include <iostream> using namespace std; // ----- 主程式 ----------------int main() { const int Size = 5; double V[Size] = {48. 4, 39. 8, 40. 5, 42. 6, 41. 2}; double Sum = 0. 0, Average; double *p. V = V; int i; for (i=0; i<Size; i++) Sum += *p. V++; cout << "陣列 V 各元素的總合是 : " << Sum << endl; cout << "陣列 V 各元素的平均� 是: " << Sum / double(Size) << endl; return 0; }
範例程式 Show. Matrix. cpp (指標表示法) #include <iomanip> #include <iostream> using namespace std; // -----------------int main() { const int Row = 2; const int Col = 3; double B[Row][Col]={ 1. 8, 4. 9, 6. 8, 6. 2, 2. 1, 3. 4}; int i, j; cout << "(1)陣列 B 是: " << endl; for (int i=0; i< Row; i++) { for (int j=0; j< Col; j++) cout << setw(5) << B[i][j]; cout << endl; } 28
cout << endl; cout << "(2)陣列 B 是: " << endl; for (int i=0; i< Row; i++) { for (int j=0; j< Col; j++) cout << setw(5) << *(B[i] + j); cout << endl; } cout << endl; cout << "(3)陣列 B 是: " << endl; for (int i=0; i< Row; i++) { for (int j=0; j< Col; j++) cout << setw(5) << *(*(B+i) + j); cout << endl; } return 0; } 29
範例程式 Swap 2 F. cpp 使用傳址的方式來交換變數的值 33 // Swap 2 F. cpp #include <iostream> using namespace std; // --- 函數 Swap. F () 的宣告 --------void Swap. F(double* x, double* y); // --- 主程式 --------------int main() { double a = 2, b = 5; cout << "執行 Swap. F() 前, n"; cout << " a 是: " << a << " b 是: " << b << endl; Swap. F(&a, &b); cout << "執行 Swap. F() 後, n"; cout << " a 是: " << a << " b 是: " << b; return 0; }
// --- 函數 Swap. F () 的定義 --------void Swap. F(double* x, double* y) { double Temp; Temp = *x; *x = *y; *y = Temp; return; } 34
範例程式 37 檔案 Array. PFnc. cpp // Array. PFnc. cpp #include <iostream> using namespace std; // ---函數 Average()和Max. Elem()的宣告 double Average(double *); double Max. Elem(double *); const int Size = 5; // ---主程式------------int main() { double P[Size] = {48. 4, 39. 8, 40. 5, 42. 6, 41. 2}; cout << "陣列 P 的平均� 是: " << Average(P) << endl; cout << "陣列 P 的最大� 是: " << Max. Elem(P) << endl; return 0; }
38 // ---函數 Average() 的定義-----double Average(double* V) { double Sum = 0; for (int i = 0; i < Size; i++) Sum += V[i]; return Sum/double(Size); } // ---函數 Max. Elem() 的定義-----double Max. Elem(double* V) { double Max. E; Max. E = V[0]; for (int i = 1; i < Size; i++ ) if (Max. E < V[i]) Max. E = V[i]; return Max. E; }
範例程式 Fnc. Point. cpp 函數指標的使用 43 // Fnc. Point. cpp #include <iostream> using namespace std; // --- 函數 F 1(), F 2()和Twice() 的宣告 -double F 1(int); double F 2(int); double Twice(double (*)(int), int); // --- 主程式 -------------int main() { int A = 3; int B = 5; cout << "Twice(F 1, A)的� 是: " << Twice(F 1, A) << endl; cout << "Twice(F 2, B)的� 是: " << Twice(F 2, B) << endl; return 0; }
// ---- 函數F 1()的定義 ----------double F 1(int N) { return double (N*N); } // ---- 函數F 2()的定義 ----------double F 2(int N) { return double (N*N*N); } // --- 函數Twice()的定義 --------double Twice(double (*p. F)(int), int N) {return 2. 0 * double( p. F(N) ); } 44
一維陣列的動態記憶體配置及回收 int Size = 100; double *p. V = new double[Size]; double *p. V; p. V = new double[Size]; delete [] p. V; 46
範例程式 Swap. V. cpp 交換指標內容以交 換陣列 48 // Swap. V. cpp #include <iostream> #include <iomanip> using namespace std; // ---函數的宣告----------void Display. V 1(double*, int); void Display. V 2(double*, int); void Swap(double** x, double** y); // ---主程式------------int main() { const int Size. A = 5; const int Size. B = 7; double* A = new double [Size. A]; double* B = new double [Size. B]; for (int i=0; i<Size. A; i++) A[i]= 1. 0*i; for (int i=0; i<Size. B; i++) B[i]= 3. 0*i; cout << "執行 Swap() 前, n"; cout << "A 是 : n";
Display. V 1(A, Size. A); cout << "B 是 : n"; Display. V 2(B, Size. B); Swap(&A, &B); cout << "執行 Swap() 後, n"; cout << "A 是 : n"; Display. V 1(A, Size. B); cout << "B 是 : n"; Display. V 2(B, Size. A); delete [] A; delete [] B; return 0; } 49 // ------ 函數Display. V 1()的定義 ------void Display. V 1(double* V, int N) { cout << endl; for(int i = 0; i < N; i++) cout << setw(5) << V[i] << " "; cout << endl; return; } }
50 // ------- 函數Display. V 2()的定義 ------void Display. V 2(double* V, int N) { cout << endl; for(int i = 0; i < N; i++) cout << setw(5) << *(V+i) << " "; cout << endl; return; } // ---- 函數Swap()的定義 --------void Swap(double** x, double** y) { double* Temp; Temp = *x; *x = *y; *y = Temp;
範例程式 Dyn. Matrix. cpp 向量和矩陣用在檢查亂數的平均值 56 // Dyn. Matrix. cpp #include <iomanip> #include <iostream> #include <new> using namespace std; const int m = 2; const int n = 3; // --- 各函數的宣告 ------------void Show. Matrix(double **); double Matrix. Avg (double **); void Sum(double **, double **); void Lack. Memory() { cerr << "記憶體不足!n"; abort(); }
// --- 主程式 --------------int main() { // 動態記憶體配置 p. Ma set_new_handler(Lack. Memory); double **p. Ma = new double *[m]; for (int i=0; i<m; i++) p. Ma[i] = new double[n]; 57 for (int i=0; i< m; i++) for (int j=0; j< n; j++) p. Ma[i][j]= (i*i+2. 0*j)/2. 0; // 動態記憶體配置 p. Mb double **p. Mb = new double *[m]; p. Mb[0] = new double [m*n]; for (int i=1; i<m; i++) p. Mb[i] = p. Mb[i-1]+n; for (int i=0; i< m; i++) for (int j=0; j< n; j++) p. Mb[i][j] = double(i+j)/2. 0;
58 // 動態記憶體配置 p. Mc double **p. Mc = new double *[m]; p. Mc[0] = new double [m*n]; for (int i=1; i<m; i++) p. Mc[i] = p. Mc[i-1]+n; // 顯示 p. Ma 和 p. Mb cout << "陣列 p. Ma 是: " << endl; Show. Matrix(p. Ma); cout << "陣列 p. Mb 是: " << endl; Show. Matrix(p. Mb); // 求 p. Mc Sum(p. Ma, p. Mb, p. Mc); cout << "陣列 p. Ma + p. Mb 是: " << endl; Show. Matrix(p. Mc); // 求 p. Ma 的平均� cout << "陣列 p. Ma 的平均� 是: " << Matrix. Avg(p. Ma) << endl; // 回收 p. Ma for (int i=0; i<m; i++) delete [] p. Ma[i]; delete [] p. Ma;
59 // 回收 p. Mb delete [] p. Mb[0]; delete [] p. Mb; // 回收 p. Mc delete [] p. Mc[0]; delete [] p. Mc; return 0; } // --- 函數 Show. Matrix() 的定義 -----void Show. Matrix(double **M) { for (int i=0; i< m; i++) { for (int j=0; j< n; j++) cout << setw(5) << M[i][j]; cout << endl; } cout << endl; return; }
60 // --- 函數 Matrix. Avg() 的定義 ------double Matrix. Avg(double **M) { double Sum = 0; for (int i=0; i< m; i++) for (int j=0; j< n; j++) Sum+= M[i][j]; return Sum / double(m*n); } // --- 函數 Sum() 的定義 ---------void Sum(double **X, double **Y, double **Z) { for (int i=0; i< m; i++) for (int j=0; j< n; j++) Z[i][j]= X[i][j]+Y[i][j]; return; }
- Slides: 61