陣列 - CMLab

Download Report

Transcript 陣列 - CMLab

C 程式設計
台大資訊工程學系
資料系統訓練班 第119期
吳晉賢
課程大綱









C語言簡介
基本資料型態, 變數, 基本輸入輸出
控制敘述- 選擇控制與重覆控制
陣列
函式
指標
字元與字串
結構
檔案處理
陣列 (array)

陣列是一種結構性的資料儲存空間, 在記憶體
中是相臨的位置, 所有的資料以一個共同的變
數名稱作為代表名稱, 元素彼此間以索引值來
識別, 同時允許對結構中每一個元素做直接存
取.

int arr[10];
陣列的優點



大量的資料儲存在記憶體中.
這些資料的型態都一樣.
資料處理的技巧能以較為簡潔的方式表達.
–
–
根據結構, 陣列可分為 (1) 一維陣列 (2) 二維陣列
(3) 多維陣列.
不論是幾維陣列, 在主記憶體裡基本上都是轉成線
性關係的相臨位置來儲存.
一維陣列

資料型態 陣列名稱 [ 陣列大小 ];
–



int arr[20]; float arr1[20]; double arr2[30]; char arr3[30];
資料型態是指陣列的元素型態而言.
陣列名稱根據識別字規格命名之.
陣列大小表示陣列中的元素最多有幾個.
一維陣列元素的引用

陣列名稱 [ 索引值 ];
–


arr[5]; 代表索引值為5的元素.
陣列名稱就是陣列起始位置的位址.
索引值就是陣列起始位置的位移.
Note: 如果使用超過原來定義的陣列大小, 可能
會有不可遇期的結果.
一維陣列的圖示
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
e.g. int a[8]; // 假設一個int為4 bytes
如果陣列a的起始位置為600, 則a[3]的起始
位置為612
一維陣列的例子

輸入6個實數, 並求其平均數.

一個超過陣列界限的錯誤函數.
陣列初值的設定

資料型態 陣列名稱 [ 陣列大小 ] = { data1, data2, …, dataN }

例子:
多維陣列

二維陣列
–

三維陣列
–

int arr[2][3];
int arr[2][3][4];
N維陣列
一個簡單的三維陣列
例子:
arr[0][0][0]
arr[0][0][1]
arr[0][0][2]
arr[0][1][0]
arr[0][1][1]
arr[0][1][2]
二維陣列的例子

基本二維陣列的加法運算.

二維陣列的記憶體位址.
以陣列為參數的函數呼叫

參數為一維陣列
–
int fun(int array[]);
int main()
{
int arr[10];
fun(arr);
}
int fun(int array[])
{
…………….
}
例子:如果修改傳入的陣列內容會如何?
以陣列為參數的函數呼叫

參數為二維陣列
–
int fun(int array[][3]);
int main()
{
int arr[10][3];
fun(arr);
}
int fun(int array[][3])
{
…………….
}
字元陣列

char str[7]=“String”;
char str[]=“String”;
char str[]={‘S’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ‘\0’};
例子1: 字元陣列的應用
例子2: 輸入一個字串, 計算小寫字母分別有多少
個?
例子3: 設計一個函數, 可以把一個字串拷貝到另
一個字串.
練習題:

設計泡沫排序法(Bubble Sort)的函數, 以陣列
做為函數的參數.

設計選擇排序法(Selection Sort)的函數, 以陣
列做為函數的參數.

迷宮問題

上課討論.