陣列

Array

目錄

為什麼要用陣列??

當你要cin一串數字,假設要計算大家數學的成績...

int a, b,... 
cin >> a >> b >>...

一班有35個人,就要寫35個變數...

一年級有700人,就要寫700個變數...

全國高一有20萬人,就要寫...

But...

 

這時就是   陣列    

出場的時候了!!!

什麼是陣列??

一種資料結構

->宣告變數 : int a = 5

    將5存在一個叫a的箱子

 

->宣告陣列 : int a[10] = {2, 4, 6, 8, 10, 12,...}

    宣告一個櫃子,將變數按照號碼存在每個抽屜裡

  2   4   6  8 10 12 ...
  5

基本用法

初始化:把所有初值用大括號包住,並以逗號隔開

 

-> 陣列後面沒給值的數初始值都會是 0

int a[10]={2, 4, 6, 8};

     int score[5] = {2, 4, 6, 8, 10}

陣列名稱

陣列型態

空間數

內容物(非必要)

取值 : 當我們要用到陣列裡面的數字時

           -> 陣列名稱[位置] 

#include <iostream>
using namespace std;

int main(){
    int a[3] = {2, 4, 6};
    cout << a[0] << endl; //會輸出2
    //陣列索引值的第一個位置是0
    
    return 0;
}

賦值 : 當你想用輸入的方式賦予它數值時

           ->用迴圈

#include <iostream>
using namespace std;

int main(){
    int a[3];
    a[3] = {1, 2, 3}
    
    for(int i=0; i<3; i++){
        cin >> a[i];
    }  
    return 0;
}

小練習1

int a[5]={2, 4, 6, 8}
cout << a[1] << endl;
cout << a[4] << endl;

輸出4

輸出0

int a[10] = {};
for(int i=1; i<10; i++){
 a[i] = i+1
}
cout << a[0] << endl;
cour << a[1] << endl;

輸出0

輸出2

小練習2

段考後大家拿到了自己的數學考卷,老師想要請全班最高分喝飲料,於是請你找出大家成績的最高分。

 

輸入 :

第一行有一個正整數N,表示接下來有N個數字。(N<=10^6)第二行有N個數字Pi

題目練習 測資

測資:

    輸入:

    20

    88 91 100 34 60 38 86 59 36 87 95 74 86 99 7

    88 42 59 76 87

 

    輸出:

    最高分 : 100

 

 

題目練習 解答

#include <iostream>
using namespace std;

int main() {
	int n;
    cin >> n;
    int score[100] = {0};
    int highest = 0;
  
    for(int i=0; i<n; i++){
    	cin >> score[i];
 		if(score[i] > highest) highest = score[i];
 	 }
 	cout << "最高分: " << highest << endl;
	return 0;
}

一維陣列

三維陣列

二維陣列

1.陣列的每個元素都有索引值,因此存取方便

 

2.操作上通常比其他動態資料結構更有效率

 

3.簡單易上手,屬於比較入門的語法

優點

1.在刪除或新增元素時需要移動大量的資料。

 

2.若需要擴展資料數量,陣列大小是固定的,不能自動擴展

 

3.只能存放相同類型的資料

缺點

常見問題Q&A

Q1 : RE怎麼辦?

 

通常程式會RE大部分是因為...

1.陣列的大小設太小 -> 將中括號的數值增加。

2.但如果是記憶體過大導致程式無法進行,那可以將陣列開在全域就是int main() 外面

Q2 : 陣列忘記初始化

 

很多時候我們希望陣列裡的值是0,但有時利用for迴圈時會忘記在最開始重新初始化,就要記得寫成int a[100] = {}才比較好做後面的變化,

補充:陣列工具包

(這邊聽不懂沒關係

sizeof() 取得陣列的大小(以位元組為單位)
memecpy() 複製陣列的內容到另一個陣列。
memset() 初始化或設置陣列的所有元素為某個值(通常是 0)

-> 用法 : 陣列名稱.函式(工具)名稱

#include <iostream>
using namespace std;

int main() {
  int arr[3]={0,1,2};
  
  int size = sizeof(arr) / sizeof(arr[0]);
  cout << size << endl; //輸出3
  
  int brr[5];
  memcpy(brr, arr, sizeof(arr));
  cout << brr[2] << endl; //輸出2
  
  memset(arr, 0, sizeof(arr));
  cout << arr[1] << endl; //輸出0
}

題目練習

有一個數列,第一項的值為 1,第二項的值為第一項加 1,第三項的值為第二項加 2,第四項的值為第三項加 3 ... 第 k 項的值為第 k-1 項的值加上 k-1。

給一個數字 n,請印出這個數列的第 n 項。

 

輸入:

本題為重複輸入,有多筆測資。

每筆輸入有一個數字 n,1<=n<=500。

題目練習 測資

測資:

    輸入 : 1  4

    輸出 : 1  7

 

題目練習 解答

#include <iostream>
using namespace std;

int main() {
  int n;
  while(cin >> n){
    int alley[501] = {};
    alley[1] = 1;
    for(int i=2; i<=n; i++){
    	alley[i] = alley[i-1] + i-1;
 	  }
 	  cout << alley[n] << endl;
  }
	return 0;
}

KAHOOT!

Serif

By phoebe tsai

Serif

  • 250