Presentation is loading. Please wait.

Presentation is loading. Please wait.

資料坐火車 …… 談陣列 (Array) 綠園 2008/12/15. Array 的宣告 整數陣列的宣告  int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1]

Similar presentations


Presentation on theme: "資料坐火車 …… 談陣列 (Array) 綠園 2008/12/15. Array 的宣告 整數陣列的宣告  int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1]"— Presentation transcript:

1 資料坐火車 …… 談陣列 (Array) 綠園 2008/12/15

2 Array 的宣告 整數陣列的宣告  int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1] student[4] student[2] student[3]

3 Array 的宣告 整數陣列的宣告  int student[5]={0}; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student, 且裏面的值皆預設為 0 。 00000 student student[0] student[1] student[4] student[2] student[3]

4 Array 的宣告 整數陣列的宣告  int student[5]={1, 3, 4, 6, 7}; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student, 其預設值如下: 13467 student student[0] student[1] student[4] student[2] student[3]

5 Array 的宣告 浮點數陣列的宣告  float num[4]={1.2, 3.2, 4.5}; 意義:宣告了 4 個 float 大小的連續空間,名稱 為 num , 其預設值如下: 1.23.24.5 num num[0]num[1]num[2]num[3] 0

6 Array 的宣告 字元陣列的宣告 — 常用來儲存字串  char name[10]= “John” ; (雙引號) 意義:宣告了 10 個 char 大小的連續空間,名稱 為 name, 其預設值如下:  char name[10]={ ‘J’,‘o’,‘h’,‘n’ }; (單引號) 意義:宣告了 10 個 char 大小的連續空間,名稱 為 name, 其預設值如下 J name name[0] ohn name[1]name[2]name[9]name[8] \0 J name name[0] ohn name[1]name[2]name[9]name[8]

7 Array 的宣告 字串陣列的宣告 — 常用來儲存字串  char name[3][10] = { “ John1 ”, “ John2 ”, “ John3 ” }  意義:宣告了 3 組 10 個 char 大小的連續空間,名稱 為 name, 其預設值如下: name[0] John1 John2 John3 name[1] name[2] \0

8 Array 的運用-- Fibonacci #include #include using namespace std; int main() { int f[10]; int i; f[0]=1; f[1]=1; for(i=2; i<10; i++) { f[i] = f[i-1] + f[i-2]; } system(“PAUSE”); return 0; }

9 Array 的運用-- 找最大值與最小值 請編寫一程式,找出 33, 75, 69, 41, 32, 19 中的最 大值 (max) 與最小值 (min) 。 Hint: (1) 先開一陣列,將這些數值存下。 (2) 最大值: max ,最小值: min 。 (3) 用重覆結構 (for 迴圈 或 while 迴圈)一一比對。 (4) 印出 max 和 min 。

10 練習:試設計一程式,將字串陣列中的所有小寫 字母轉換成大寫字母。 #define MAX 50 int main(void) { char data[MAX]; cout << "Input a string:" ; /* 輸入字串 */ cin.getline(data, MAX); /* 小寫轉換成大寫 */ …… cout <<"\n** After translation **\n"; cout << data << endl; /* 印出陣列的內容 */ system("PAUSE"); return 0; }

11 Array 的運用 - 泡泡排序法 (Bubble Sort) int main() {int list[5]={3, 5, 2, 4, 1}; int i, j, tmp; for(i=4; i>0; i--) for(j=0; j<i; j++) if(list[j] > list[j+1]) // 比較 { tmp=list[j]; // 交換 list[j] = list[j+1]; list[j+1] = tmp; } for(i=0; i<5; i++) // 印出結果 cout << list[i]; system("PAUSE"); return 0; }

12 函數間傳遞一維陣列 函數的宣告 void show(int array[]); 函數的呼叫 int arr[5]={1,2,3,4,5}; show(arr); 函數的定義 void show(int array[]) { int i; for(i=0;i<5;i++) cout << array[i] << endl; } 當傳遞的引數是陣列時,傳遞到函數中的是該陣列實際的 位址,而不是另外複製一份陣列。

13 隨堂練習 --- 泡泡排序法 (Bubble Sort) int main() {int data[5]; ………// 亂數產生 5 個整數,並儲存在 data 內 cout << “ 排序前 ……\n”; show(data); bobble(data); cout << “ 排序後 ……\n”; show(data); return 0; } void show(int a[])// 試完成之。 void bobble(int a[])// 試完成之。

14 二維陣列 宣告:資料型態 陣列名稱 [ 列的個數 ][ 行的個數 ] int sale[2][4]={{30,35,26,32}, {33,34,30,29}}; [0][0] 30 [0][1] 35 [0][2] 26 [0][3] 32 [1][0] 33 [1][1] 34 [1][2] 30 [1][3] 29 0123 0 1 sale 【行】【行】 【列】【列】 sale[0] sale[1]

15 二維陣列 — 印出陣列中的資料 int main(void) { int i,j,sum=0; int sale[2][4]={{30,35,26,32},{33,34,30,29}}; for(i=0;i<2;i++) { cout << “ 業務員 ” << (i+1) << “ 的業績分別為: ”; for(j=0;j<4;j++) { cout << sale[i][j] << “ ”; sum+=sale[i][j]; } cout << endl; } cout <<endl <<“ 本年度總銷售量為 ” <<sum <<“ 輛車 ” <<endl; system(“pause”); return 0; }

16 二維陣列 — 印出陣列中的資料 int main(void) { int i,j,sum=0; int sale[2][4]={{30,35,26,32},{33,34,30,29}}; for(i=0;i<2;i++) { cout << “ 業務員 ” << (i+1) << “ 的業績分別為: ”; for(j=0;j<4;j++) { cout << sale[i][j] << “ ”; sum+=sale[i][j]; } cout << endl; } cout <<endl <<“ 本年度總銷售量為 ” <<sum <<“ 輛車 ” <<endl; system(“pause”); return 0; }

17 二維陣列 C++ 允許二維以上的多維陣列不必定義陣列 的長度,但是只有最左邊 ( 第一個 ) 的註標 可以省略不定義外,其它的註標都必須定 義其長度。如: int temp[][4]={{30,35,26,32}, {33,34,30,29}, {25,33,29,25}};

18 多維陣列 int a[2][4][3]; a[0][0][0]a[0][0][1]a[0][0][2] a[0][1][0]a[0][1][1]a[0][1][2] a[0][2][0]a[0][2][1]a[0][2][2] a[0][3][0]a[0][3][1]a[0][3][2] 第一維 第二維 第三維 第一維 第二維 第三維

19 函數間傳遞多維陣列 函數的宣告 void show(int array[2][4]); 函數的呼叫 int arr[2][4]={{1,2,3,4},{5,6,7,8}}; show(arr); 函數的定義 void show(int array[2][4]) { int i,j; for(i=0;i<2;i++) { for(j=0;j<4;j++) cout << array[i][j] << “ ”; } cout << endl; } 當傳遞的引數是多維陣列時,只有陣列名稱後面的第一個註標可以不 填入元素個數,其餘均須填入數值。

20 隨堂練習 自我評量第 7 題、第 8 題。

21 字串的輸入與輸出 使用 cin char str[20]; cin >> str; 字串中不可包含空白字元。 使用 cin.getline( 字串名稱, 最大長度, 字串結束字元 ) ; char str[15]; cin.getline(str,15); 字串結束字元預設為 ‘\n’ ,若不需更改則不必指出該結束字元。 字串中可包含空白字元。 使用 cin.get( 字元變數名稱); char ch; cin.get(ch); 在輸入單一字元的情況下使用。

22 字串陣列元素的引用及存取 int main(void) { int i; char name[3][15]; for(i=0;i<3;i++) // 輸入字串 { cout << “Input student” << i << “\’s name:”; cin.getline(name[i],15); } for(i=0;i<3;i++) // 輸出字串 cout << “name[” << i << “]=” << name[i] << endl; cout << endl; for(i=0;i<3;i++) // 輸出字串位址 { cout << “addr of name[” << i << “]=” << &name[i] << endl; cout << “addr of name[” << i << “][0]=”; cout << (name+i) << endl << endl; } system(“pause”); return 0; }

23 字串陣列的複製 int main(void) { int i,j; char name[3][15]={“David”, “Jane Wang”, “Tom Lee”}; char copystr[3][15]; for(i=0;i<3;i++) { for(j=0;j<15;j++) if(name[i][j] == ‘\0’ break; else copystr[i][j] = name[i][j]; copystr[i][j]=‘\0’; } for(i=0;i<3;i++) cout << “copystr[” << i << “]=” << copystr[i] << endl; system(“pause”); return 0; }

24 字串陣列的複製 int main(void) { int i,j; char name[3][15]={“David”, “Jane Wang”, “Tom Lee”}; char copystr[3][15]; for(i=0;i<3;i++) // 複製字串陣列 { for(j=0;j<15;j++) if(name[i][j] == ‘\0’) // 判斷是否為字串結束字元 break; else copystr[i][j] = name[i][j]; copystr[i][j]=‘\0’; } for(i=0;i<3;i++) // 輸出字串陣列 cout << “copystr[” << i << “]=” << copystr[i] << endl; system(“pause”); return 0; }

25 常用字串處理函數 strlen 字串長度 strlen(string); // 計算 string 字串的長度 strcat 字串連結 strcat(dest,source); // 將 dest 字串加上 source 字串後存回 dest 。 strcpy 字串拷貝 strcpy(dest, source); // 將 source 字串拷貝至 dest strlwr 將字串中的大寫字母轉換小寫 strupr 將字串中的小寫字母轉換大寫 strcmp 字元比較 strcmp(str1, str2); // 根據 ASCII 值的大小比較 str1, str2 ,傳回值分為 // 小於 0 : str1 < str2 // 等於 0 : str1 = str2 // 大於 0 : str1 > str2

26 常用字元處理函數 isalpha 是否為英文字母 isalpha(ch); // 結果為0表示為數字 // 結果為1表示為大寫英文字母 // 結果為2表示為小寫英文字母 isupper 是否為大寫英文字母 isupper(ch); islower 是否為小寫英文字母 islower(ch); toupper 轉換為大寫英文字母 toupper(ch); tolower 轉換為小寫英文字母 tolower(ch);


Download ppt "資料坐火車 …… 談陣列 (Array) 綠園 2008/12/15. Array 的宣告 整數陣列的宣告  int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1]"

Similar presentations


Ads by Google