單元五 :陣列(Array)
「陣列」是由一群相同型態的變數所組成的資料型態。它們以一個共同的名稱表示,其陣列中的個別元素,則以「註標」(subscript)來標示存放的位置。
例一:一維陣列宣告
int score[10]; 宣告一個整數(int)陣列,名稱為score ,元素個數為 10
個,由 0 到 9
score[0] |
score[1] |
score[2] |
score[3] |
score[4] |
score[5] |
score[6] |
score[7] |
score[8] |
score[9] |
float tempe[7]; 宣告一個 陣列,名稱為 , 元素個數為______個,由___到___
char name[12]; 宣告一個 陣列,名稱為 , 元素個數為______個,由___到___
陣列初值設定:
int score[5]={75,89,90,43,65};
float
char name[12]=”KatherineLin”;
題一:比較陣列元素值的大小 #include <stdio.h> #include
<stdlib.h> int main() { int
A[5]={74,48,30,17,62}; int i,min,max; min=max=A[0]; printf("elements in array A are
"); for(i=0;i<5;i++) { printf("%d ",A[i]); if(A[i]>max) /* 判斷最大值 */ max=A[i]; if(A[i]<min)
/* 判斷最小值 */ min=A[i]; } printf("\nMaximum is
%d",max); printf("\nMinimum is
%d\n",min); system(“PAUSE”); return 0; } |
1.此程式中,陣列的名稱為_______, 資料型態設定為______,共____個元素。 A[__]=_____A[__]=_____ A[__]=_____A[__]=_____ A[__]=_____ 2. 程式一開始,是假設 3.for 迴圈中, i=0時,max=______, min=______ i=1時,max=______, min=______ i=2時,max=______, min=______ i=3時,max=______, min=______ i=4時,max=______, min=______ 4.最後, max=________, min=________ 5. 此程式應注意的地方: |
||||||||||||||||||||||||||||||||||||
題二:陣列的輸入與輸出 #include <stdio.h> #include <stdlib.h> int main() { int i,score[5]; for(______;___________;_______) { printf("Input
score %d:",i); scanf("%d",&score[i]); } printf("***Output***\n"); for(i=0;i<=4;i++) printf("score[%d]=%d\n",i,score[i]); system(“PAUSE”); return 0; } |
題三:搜尋陣列中的資料 #include
<stdio.h> #include
<stdlib.h> #define SIZE 6 int main() { int
i,num,flag=0; int A[SIZE]={33,75,69,41,33,19}; printf("Input
an integer:"); scanf("%d",&num); printf("elements in array
A(0~5): "); for(i=0;i<SIZE;i++) printf("%d
",A[i]); for(______;___________;______) if(A[i]==num) { printf("\nYes! [%d]=%d",i,A[i]); flag=1; } if(flag == 0) printf("\nNot found!!\n"); system(“PAUSE”); return 0; } |
||||||||||||||||||||||||||||||||||||
1. for 迴圈中i=0~4, 依次輸入為
|
1. 請問陣列A的初始值為: 2. 變數i 在程式中的作用為何? 3. 變數 flag 在程式中的作用為何? 4. flag=______表示在陣列中有找到我們想找的數。 5. 此程式中的flag初始值為_______,所以表示這個程式是預設_________(有、沒有)找到我們想找的數。 6.#define SIZE 6 代表何意? |
動手寫程式一:費伯納基數列 說明:請利用陣列逐步填空的方式,做出費伯納基數列。(此法稱為___________) Hint: 1.宣告一個陣列名稱為________,元素個數_______個。 2.初始值設定 f[____]=________;
f[______]=_______ 3.輸入值n,(由使用者決定要列出數列元素幾個) 4.利用for 迴圈來填入陣列值: for (______; _______; _______) 5.最後,再用for 迴圈將整個陣列值輸出 我的程式碼: #include <______________> /*用到printf和scanf函數*/ #include <
> f[____]=f[_____]=______; /*數列初值設定*/ printf("_______________________________"); /*提示使用者輸入數列大小*/ scanf("_____", _________); /*將輸入值放入記憶體位置*/ for (________; ________; ________) {
___________=____________+___________; /*依序填入值*/ } for (________; ________; ________) {
printf("_______",__________); /*依序輸出整個數列值*/ }
system(“PAUSE”);
return 0; } |
挑戰題(加10分): 二維陣列表現NxN的魔術方陣 (限制N為奇數) 3x3 5x5 7x7
Hint: 1.假設有一二維陣列magic[3][3],其註標為:
2.填入的規則: (1). 把1放在最上層的中間格。 (2). 第I個放在第I-1個的左上格(當I>1時)。 (3).
重複(2),直到第NxN個放完為止。 3. 思考一下,如何記錄某個位置是否被占據。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
程式碼: |