Download presentation
Presentation is loading. Please wait.
1
陣列 01010 10101 01010 10101 01010 10101
2
陣列 一種結構性的資料儲存方式,同一陣列裡的元素,其資料型態相同 陣列元素的記憶體位置被分配為相鄰 用一個變數名來代表整體的資料
把陣列想成一排置物櫃,陣列裡的數字代表櫃子的數量,例如:hey[20] C語言的陣列索引(index)從0的開始 x[2]是第三個陣列x的值,x[0],x[1],x[2],x[3]…
3
陣列宣告 陣列分為一維陣列、二維陣列、多維陣列 資料型態 陣列名稱[陣列大小]; 資料型態 陣列名稱[陣列大小][陣列大小];
資料型態 陣列名稱[陣列大小]; int x[5]; 資料型態 陣列名稱[陣列大小][陣列大小]; float y[2][3]; 宣告陣列時,可一併給初始值: int x[5] = {1,2,3,4,5}; int z[3][4] = {1,2,3,4,5,6,7,8,0,1,2,3}; X[0] X[1] X[2] X[3] X[4] Z[0][0],Z[0][1],Z[0][2],Z[0][3] Z[1][0],Z[1][1],Z[1][2],Z[1][3]
4
陣列宣告&使用 int age[4]; float b=7.0; char x[4]; scanf(“%d%d%d%d”,&age[0],&age[3],…); scanf(“%s”,x); … age[1] age[2] age[3] age[0] b 3A14 7.0 &b 8 1 9 5 ? age 1A00 1A02 1A04 1A06 age 1,5,9,8 1,5,9,8 Love L o v e ? ? ? ? x X[0] 2A11 X[1] 2A12 X[2] 2A13 X[3] 2A14 X[0] X[1] X[2] X[3]
5
輸入3個實數,並求其平均值 #include<stdio.h> void main() { float num[3], sum=0; int i; for (i = 0; i < 3; i++) { printf("Input a number to num[%d] : ", i); scanf("%f", &num[i]); sum = sum + num[i]; } printf("The average is %f\n", sum / i);
6
進階
7
陣列空間分配方式 C語言分配一塊連續的記憶體給一個陣列宣告 int x[10]; int x[5][10]; int x[4][5][6];
分配10*sizeof(int)個bytes int x[5][10]; 分配5*10*sizeof(int)個bytes int x[4][5][6]; 分配4*5*6*sizeof(int)個bytes void fun(int x[]) { } 沒有分配陣列空間,相當於int *x; C語言呼叫函數傳遞參數時,無法傳遞整個陣列(陣列可能大得不得了),而是傳遞陣列的開頭地址,也就是指標 在參數宣告時,指標和沒有宣告大小的陣列是可以混用
8
陣列空間分配方式 C語言是使用row major的方式來處理多維到一維的對應即右邊的索引先變化 int x[2][3];
六個陣列元素在記憶體中的排列順序為x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2]
9
Pascal Triangle 下圖為n=6的情況 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
規則是最外層是1, 裡面每個數字都是上方兩個數字的和 Pascal Triangle是(x + y)n每個項次的係數
10
Pascal Triangle提示: 如果把上圖左邊的空白拿掉則會變成下面的圖形, 除了最左邊和最右邊的數字是1以外,裡面的每一個數字都是其正上方和左上方數字的和.你可以用陣列來計算和儲存這些數字,然後再以上圖的格式印出來
11
Pascal Triangle提示: 回答下面問題,程式就寫完了 如果要用*號印出這種形狀的三角形,該怎麼寫? (雙層迴圈)
最左邊和最右邊如何表達? 內部每一個數字都是正上方和左上方數字,請問正上方和左上方這兩個位置的陣列索引如何表達? 每一個row前面要加上幾個空白才能讓圖形看起來是正三角形?
12
Pascal Triangle #include <stdio.h> #include <stdlib.h> int main() { int n, i, j; unsigned tri[51][51]; printf("Please input size of Pascal triangle(0 to 50): "); scanf("%d", &n); if (n < 0 || n > 50) { printf("I can only print Pascal triangle between 0 and 50.\n"); return; } for (i = 0; i <= n; i++) { for (j = 0; j < n - i; j++) { printf(" "); for (j = 0; j <= i; j++) { printf(" %5u",tri[i][j] = (j==0 || j==i) ? 1 : tri[i-1][j-1]+tri[i-1][j]); printf("\n"); system(“pause”);
Similar presentations