資料坐火車 …… 談陣列 ( array )

26
資資資資資…… 資資資 (Array) 綠綠 2008/12/15

Upload: duman

Post on 22-Feb-2016

108 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 資料坐火車 …… 談陣列 ( Array )

資料坐火車…… 談陣列 (Array)

綠園  2008/12/15

Page 2: 資料坐火車 …… 談陣列 ( Array )

Array 的宣告整數陣列的宣告

 int student[5]; 意義:宣告了 5個 int大小的連續空間,名稱 為 student,沒有預設值,則為系統殘值。student

student[0] student[1] student[4]student[2] student[3]

Page 3: 資料坐火車 …… 談陣列 ( Array )

Array 的宣告整數陣列的宣告

 int student[5]={0}; 意義:宣告了 5 個 int大小的連續空間,名稱 為 student, 且裏面的值皆預設為 0。

0 0 0 0 0student

student[0] student[1] student[4]student[2] student[3]

Page 4: 資料坐火車 …… 談陣列 ( Array )

Array 的宣告整數陣列的宣告

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

1 3 4 6 7student

student[0] student[1] student[4]student[2] student[3]

Page 5: 資料坐火車 …… 談陣列 ( Array )

Array 的宣告浮點數陣列的宣告

float num[4]={1.2, 3.2, 4.5};意義:宣告了 4個 float大小的連續空間,名稱 為 num, 其預設值如下:

1.2 3.2 4.5num

num[0] num[1] num[2] num[3]

0

Page 6: 資料坐火車 …… 談陣列 ( Array )

Array 的宣告字元陣列的宣告—常用來儲存字串

char  name[10]= “John”; (雙引號)意義:宣告了 10個 char大小的連續空間,名稱 為 name, 其預設值如下:

char name[10]={‘J’,‘o’,‘h’,‘n’}; (單引號)意義:宣告了 10個 char大小的連續空間,名稱 為 name, 其預設值如下

Jname

name[0]

o h n

name[1] name[2] name[9]name[8]

\0

Jname

name[0]

o h n

name[1] name[2] name[9]name[8]

Page 7: 資料坐火車 …… 談陣列 ( Array )

Array 的宣告字串陣列的宣告—常用來儲存字串

char  name[3][10] ={“John1”, “John2”, “John3”}意義:宣告了 3 組 10個 char大小的連續空間,名稱 為 name, 其預設值如下:name[0] J o h n 1

J o h n 2

J o h n 3

name[1]

name[2]

\0

\0

\0

Page 8: 資料坐火車 …… 談陣列 ( Array )

Array的運用-- Fibonacci

#include <iostream>#include <cstdlib>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;}

Page 9: 資料坐火車 …… 談陣列 ( Array )

Array 的運用--找最大值與最小值請編寫一程式,找出 33, 75, 69, 41, 32, 19中的

最大值 (max)與最小值 (min)。Hint: (1)先開一陣列,將這些數值存下。(2)最大值: max,最小值: min。 (3)用重覆結構 (for迴圈 或 while迴圈)一一比對。(4)印出 max 和 min。

Page 10: 資料坐火車 …… 談陣列 ( Array )

練習:試設計一程式,將字串陣列中的所有小寫字母轉換成大寫字母。 #define MAX 50int 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;

}

Page 11: 資料坐火車 …… 談陣列 ( Array )

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;

}

Page 12: 資料坐火車 …… 談陣列 ( Array )

函數間傳遞一維陣列 函數的宣告

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;}

當傳遞的引數是陣列時,傳遞到函數中的是該陣列實際的位址,而不是另外複製一份陣列。

Page 13: 資料坐火車 …… 談陣列 ( Array )

隨堂練習 --- 泡泡排序法 (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[]) //試完成之。

Page 14: 資料坐火車 …… 談陣列 ( Array )

二維陣列宣告:資料型態 陣列名稱 [ 列的個數 ][ 行的個

數 ] 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

0 1 2 3

0

1

sale 【行】

【列】

sale[0]

sale[1]

Page 15: 資料坐火車 …… 談陣列 ( Array )

二維陣列—印出陣列中的資料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;}

Page 16: 資料坐火車 …… 談陣列 ( Array )

二維陣列—印出陣列中的資料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;}

Page 17: 資料坐火車 …… 談陣列 ( Array )

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

Page 18: 資料坐火車 …… 談陣列 ( Array )

多維陣列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]

第一維

第二維

第三維

第一維

第二維

第三維

Page 19: 資料坐火車 …… 談陣列 ( Array )

函數間傳遞多維陣列 函數的宣告

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; } 當傳遞的引數是多維陣列時,只有陣列名稱後面的第一個註標可以不填入元素個數,其餘均須填入數值。

Page 20: 資料坐火車 …… 談陣列 ( Array )

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

Page 21: 資料坐火車 …… 談陣列 ( Array )

字串的輸入與輸出使用 cin

char str[20];cin >> str;

字串中不可包含空白字元。使用 cin.getline(字串名稱 ,最大長度 ,字串結束字元 );

char str[15];cin.getline(str,15);字串結束字元預設為 ‘ \n’,若不需更改則不必指出該結束字元。

字串中可包含空白字元。使用 cin.get(字元變數名稱);

char ch;cin.get(ch);在輸入單一字元的情況下使用。

Page 22: 資料坐火車 …… 談陣列 ( Array )

字串陣列元素的引用及存取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;}

Page 23: 資料坐火車 …… 談陣列 ( Array )

字串陣列的複製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;}

Page 24: 資料坐火車 …… 談陣列 ( Array )

字串陣列的複製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;}

Page 25: 資料坐火車 …… 談陣列 ( Array )

常用字串處理函數 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

Page 26: 資料坐火車 …… 談陣列 ( Array )

常用字元處理函數 isalpha 是否為英文字母

isalpha(ch); //結果為0表示為數字 //結果為1表示為大寫英文字母 //結果為2表示為小寫英文字母

isupper 是否為大寫英文字母 isupper(ch);

islower 是否為小寫英文字母 islower(ch);

toupper 轉換為大寫英文字母 toupper(ch);

tolower 轉換為小寫英文字母 tolower(ch);