陣列
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