학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

배열

학습목표

배열을 사용하여 같은 변수를 가진 여러 개의 데이터 사용법을 공부한다.

배열에 저장된 데이터를 보드의 Led 출력한다.

학습주제

1.       1차원 배열, 2차원 배열, 함수 인수의 배열

2.       배열에 저장된 데이터를 함수의 변수로 전달하는 방법을 공부 한다.

예습내용

배열은 하나의 변수명에 여러 개의 데이터를 기억시키는 기억 장소의 선언이다.

1.배열의 선언

배열은 다음과 같이 선언 한다.

자료형 배열명[크기]

 

 

다음은 국어 점수 kor 하고 5개를 저장하는 1차원 배열을 알아보자.

예제1

1차원 배열의 저장 순서과 저장 번지를 알아 본다.

#include "stdafx.h"

#include "iostream.h"

int main(int argc, char* argv[])

{

              int i,kor[5]={1,2,3,4,5}; // 배열의 선언, 초기값 선언

              for(i=0;i<5;i++)

                             cout<<kor[i]<<"  "<<&kor[i]<<endl;  // kor[i]=저장값, &kor[i]=저장번지

              return 0;

}

1  0x0012FF68

2  0x0012FF6C

3  0x0012FF70

4  0x0012FF74

5  0x0012FF78

 

배열의 초기 값은 “{}” 사이에 값을 넣는다.

배열

kor[0]

kor[1]

kor[2]

kor[3]

kor[4]

저장값

1

2

3

4

5

번지

0x0012FF68

0x0012FF6C

0x0012FF70

0x0012FF74

0x0012FF78

 

2. 2차원 배열의 선언

2차원 배열의 선언은 아래와 같다.

자료형 배열명[크기][크기]

 

 

실제 컴퓨터의 메모리는 1차원 배열이다. 그러므로 2차원 배열도 1차원으로 저장 됨으로 저장 순서를 이해해야 한다.

예제2

2차원 배열의 저장 순서과 저장 번지를 알아 본다.

#include "stdafx.h"

#include "iostream.h"

int main(int argc, char* argv[])

{

              int i,j,kor[2][3]={1,2,3,4,5,6};

              for(i=0;i<2;i++)

                             for(j=0;j<3;j++)

                                           cout<<kor[i][j]<<"  "<<&kor[i][j]<<endl;

              return 0;

}

1  0x0012FF60

2  0x0012FF64

3  0x0012FF68

4  0x0012FF6C

5  0x0012FF70

6  0x0012FF74

kor 2차원 배열은 아래와 같은 순서로 저장된다.

배열

kor[0][0]

kor[0][1]

kor[0][2]

kor[1][0]

kor[1][1]

kor[1][2]

저장값

1

2

3

4

5

6

번지

0x0012FF60

0x0012FF64

0x0012FF68

0x0012FF6C

0x0012FF70

0x0012FF74

3. 함수 인수의 배열

함수에서 배열을 전달 하는 방법을 배운다. 기본적으로 배열 처음의 번지수를 전달해서 곳부터 정수나 실수의 자리수를 맞춰 값을 참조하면 된다. 이는 포인터에서 구체적인 것을 설명하겠다.

다음의 예제는 1차원 배열에서만 있는 방법이다. 예제1 함수에서 인수로 전달해 보자.

예제3

1차원 배열의 저장 순서과 저장 번지를 알아 본다.

#include "stdafx.h"

#include "iostream.h"

 

void Print(int sub[],int n);

 

int main(int argc, char* argv[])

{

              int i,kor[5]={1,2,3,4,5};

              for(i=0;i<5;i++)                     

                             cout<<kor[i]<<"  "<<&kor[i]<<endl;

              Print(kor,5);

              return 0;

}

 

void Print(int sub[],int n)

{

              int i;

              for(i=0;i<n;i++)                     

                             cout<<sub[i]<<"  "<<&sub[i]<<endl; 

}

1  0x0012FF68

2  0x0012FF6C

3  0x0012FF70

4  0x0012FF74

5  0x0012FF78

1  0x0012FF68

2  0x0012FF6C

3  0x0012FF70

4  0x0012FF74

5  0x0012FF78

 

아래 결과에서 보듯이 kor[] sub[] 저장 번지는 같다. 이는 함수에서 새로운 메모리를 사용하는 것이 아니라 sub[] kor[] 결과를 참조한다.

배열

kor[0]

kor[1]

kor[2]

kor[3]

kor[4]

sub[0]

sub[1]

sub[2]

sub[3]

sub[4]

저장값

1

2

3

4

5

번지

0x0012FF68

0x0012FF6C

0x0012FF70

0x0012FF74

0x0012FF78

2차원과 기타는 포인터에서 다시 설명한다.

 

실습방법

   

예제 프로그램을 실행 본다.

 

처음

   

1.       5명의 국어(kor), 영어(eng), 수학(math) 입력하는 프로그램을 작성하시오.

2.       위의 입력부를 input(int kor[],int eng[],int math[]) 함수를 사용하여 만들어라.

다음은 3명의 성적을 입력하는 프로그램이다. 이를 참조 하시오.

과제

3명의 국어,영어 성적을 입력하는 프로그램

#include "stdafx.h"

#include "iostream.h"

 

void input(float kor[],float eng[], int studenNo);

 

int main(int argc, char* argv[])

{

              int i;

              float kor[3],eng[3];

 

              //입력부

              input(kor,eng,3);

              //출력부

              for(i=0;i<3;i++)

                             cout<<kor[i]<<" "<<eng[i]<<endl;

              return 0;

}

 

void input(float kor[],float eng[], int studenNo)

{

              int i;

 

              for(i=0;i<studenNo;i++)

                             cin>>kor[i]>>eng[i];

}

 

중요함수

 

 

AVR 프로그램

“4주차 예제1” 배열로 수정한다. Led 출력 값을 배열로 정의 하고 이를 출력하는 프로그램을 만든다.

AVR 예제1  배열을 이용한 Led 점등 프로그램

#include <mega128.h>

#include <delay.h>

 

void main(void)

{

char led[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80},i;

while (1)

      {

      // Place your code here

          for(i=0;i<8;i++) {    

                       PORTC=led[i];       //1 보수를 출력                

                       delay_ms(100);  // 0.1초간 시간 지연  

        }

      };

}

전체프로그램 보기