認識陣列
初寫:2003.03.01, 更新日期:2020.08.10
 
參考資料:
 
或許有同學看過或聽過陣列是一串的變數,
不免心中有疑問,不就有變數可用了,為何還要有陣列?
因為若要處理「大量」的變數,
而又想有規則的去控制這些變數或數值,陣列剛好符合這需求。
比如,如果我們要讀入5個數字,並以相反順序列印出來。
照之前所學方法,可能作法如下:
main()
{  int a1, a2, a3, a4, a5;
    scanf("%d %d %d %d %d", &a1, &a2, &a3, &a4, &a5);
    printf("%d %d %d %d %d'', a5, a4, a3, a2, a1);
}
是不是蠻冗長和困難?
如果數量換成讀入50個數值,並反向印出,是不是更繁瑣呢?

譬如,撰寫一個撲克牌發牌程式,至少需宣告13個變數才夠用。
或如要處理一個班30人的學生成績,就得宣告30個變數來記錄。
陣列正是要簡化這情況的一種語法。

C提供的陣列結構,簡單來說,
就是向記憶體要求連續的位置,來放置一串的變數;
並使用索引,來存取這一個陣列的元素。

一維陣列的語法格式:
資料型態   陣列名稱 [ 陣列大小 ]

例如:
float  student[30];
表示宣告了一個名為 student 的陣列,
中括號內的數值,表示陣列中可使用的個數,也可稱為陣列索引。
所以,此陣列共有30個float型態的元素,也就是有30個可存浮點數的變數可以使用。
第一個陣列元素為 student[0],最後一個為 student[29]。
第一個陣列元素的索引值設定是零(0),
如下圖:

student[0] student[1] student[2] student[3] student[4] ..... student[27] student[28] student[29]
86.3 88.4 82.5 83.1 84.7 ... 87.2 81.5 90.3

也就是使用陣列運算時,索引值不能超過當初宣告的數值,
譬如使用student[30]、student[31]或 student[-1],都會造成錯誤。

而陣列索引,是控制陣列的一個重要關鍵。
我們可以使用迴圈重複結構,將陣列每個變數設定初始值,
範例1:
#include <stdio.h>
#include <stdlib.h>
main()
{
  int array[10];
  int n=0, i;
 
  array[0]=10;

  for(i=0; i<=10; i++){  /* 利用迴圈印出陣列 */
      printf("array[%d]=%d\n", i, array[i]);
  }
}
 請問執行的結果為何?
 陣列的初始化!


練習1: 請用上述範例概念,利用索引值,將此陣列存入10, 20, 30, 40, ..., 100
#include <stdio.h>
#include <stdlib.h>
main()
{
  int array[10];
  int n=0, i;
 
/*
  for(i=0; i<=10; i++){ //如何利用迴圈,將數值放入陣列...
     
  }
*/

  for(i=0; i<10; i++){ //利用迴圈印出陣列
      printf("array[%d]=%d\n", i, array[i]);
  }
}
 請修改上述程式碼,讓陣列可印出其要求?



練習:
#include <stdio.h>
main()
{
    int array[5];
    int i;
    for(i=0; i<=4; ++i)  scanf("%d", &array[i]);
    for(i=4; i>=0; --i)  printf("%d", array[i]);
    printf("\n");
}
請分別輸入5個整數,空格隔開,最後按Enter後,看看結果會發生什麼?

  • 實作1: 請寫一個程式,輸入數列個數,
    按照數入的數字,輸出此數字個數的數列長度(1  1  2  3  5  8  13 ...)
    測資一:
    Input serial number: 2
    1  1
    測資二:
    Input serial number: 5
    1  1  2  3  5


  • 實作2:
    檢查陣列中,是否有和為零的情況。



曾聖超老師製作