單元五 :陣列(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 tempe[3]={43.5,45.6,23};

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. 程式一開始,是假設
min=________;   max=_______

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, 依次輸入為
10,23,54, 90,100;
請寫下score 陣列內的值的變化:

 

score[0]

score[1]

score[2]

score[3]

score[4]

i=0

 

 

 

 

 

i=1

 

 

 

 

 

i=2

 

 

 

 

 

i=3

 

 

 

 

 

i=4

 

 

 

 

 

 

 

1. 請問陣列A的初始值為:
 A[___]=_____;   A[___]=_____;
 A[___]=_____;   A[___]=_____;
 A[___]=_____;   A[___]=_____;


2. 變數i 在程式中的作用為何?

 

3. 變數 flag 在程式中的作用為何?

4. flag=______表示在陣列中有找到我們想找的數。

5. 此程式中的flag初始值為_______,所以表示這個程式是預設_________(有、沒有)找到我們想找的數。

6.#define SIZE 6 代表何意?

 

動手寫程式:費伯納基數列

說明:請利用陣列逐步填空的方式,做出費伯納基數列。(此法稱為___________)
費伯納基數列: f(0)=f(1)=1;    n>=2時,f(n)=f(n-1)+f(n-2); 

 

Hint:

1.宣告一個陣列名稱為________,元素個數_______

2.初始值設定 f[____]=________; f[______]=_______

3.輸入值n(由使用者決定要列出數列元素幾個)

4.利用for 迴圈來填入陣列值:   for (______; _______; _______)
  
填入的計算式為________________

5.最後,再用for 圈將整個陣列值輸出

 

 

我的程式碼:

#include <______________>   /*用到printfscanf函數*/

#include <                  >
int  main()
{
 _____   __________; /*
宣告陣列名稱與給定大小*/
 _____   __________; /*
宣告控制圈的計數器*/
 _____   __________; /*
宣告使用者輸入的數字(即數列元素個數)

 f[____]=f[_____]=______;     /*數列初值設定*/

 printf("_______________________________"); /*提示使用者輸入數列大小*/

 scanf("_____", _________);                 /*將輸入值放入記憶體位置*/

 for (________; ________; ________)

 {

   ___________=____________+___________;    /*依序填入值*/

 }

 for (________; ________; ________)

 {

   printf("_______",__________);    /*依序輸出整個數列值*/

 }

 

  system(“PAUSE”);

  return 0;

}

 

 

 


挑戰題(10): 二維陣列表現NxN的魔術方陣 (限制N為奇數)

3x3                 5x5                         7x7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hint:

1.假設有一二維陣列magic[3][3],其標為:

magic[0][0]

magic[0][1]

magic[0][2]

magic[1][0]

magic[1][1]

magic[1][2]

magic[2][0]

magic[2][1]

magic[1][2]

  2.填入的規則:

(1).  1放在最上層的中間格

(2).  I放在第I-1個的左上格(I>1)
若第I-1個的左上格已被占據,則放在第I-1個的下方格。

(3).  重複(2),直到第NxN放完為止。

  3. 思考一下,如何記錄某個位置是否被占據。

 

程式碼: