C - 배열

2022. 3. 6. 18:51C

Array 

배열이란 ? 

자료형 변수[배열크기] = {0, };

변수의 집합이다.

 

다른 변수와 마찬가지로 배열도 선언된 후 사용하여야 한다. 

 

* 배열의 크기에 대해 알아보는 법

sizeof(변수명)

int arr[5] = {0, };
int size = sizeof(arr);
printf("arr배열의 크기 : %d", size);

출력 결과

arr배열의 크기 : 20

왜 20일까?

배열의 크기 5, int형의 크기 4

4*5 = 20이다.

고로 실제 배열의 크기를 구하려면 각 변수의 크기를 나눠줘야 한다.

int arr[5] = {0, };
int arr_size = sizeof(arr);
int int_size = sizeof(int);
printf("arr배열의 크기 : %d", arr_size / int_size );

출력 결과

arr배열의 크기 : 5

*배열의 인덱스는 0번부터 시작한다 !!

int arr_a[5] = {1,2,3,4,5}; //살제 값 초기화
int arr_b[5] = { 0, };                           //0으로 초기화
int arr_c[] = {1,2,3,4,5}; //배열의 크기가 자동으로 설정

배열의 초기화 방법들이다.

 

* 문자열의 배열

char str[] = "I Like C";

이 배열의 크기는 8이 아닌 9이다

0~7번 인덱스까지 I Like C이고 8번 인덱스는 ₩0 ( NULL ) 이다.

문자열이 끝났음을 알려주는 역할이다.

 

char str[100] = "I Like C";

이렇게 배열의 크기를 100으로 설정해도 8번 인덱스에 NULL이 들어갔기 때문에 배열은 8번 인덱스에서 끝이 난다.

 

이렇게 배열요소들에 초기 값이 주어져있는 경우 그들의 합을 쉽게 구할 수 있다

int test[10] = {28, 67, 45, 35, 55, 78,97,45,77,82};
int i, sum;
sum = 0;

for (int i = 0; i <= 9 ; i++) {
    sum = sum + test[i];
}
printf("sum --- %d ", sum);

출력 결과

sum --- 609

 

배열 요소들에 문자가 주어진 후 출력하는 프로그램이다.

char ch[5] = {'K','o','r','e','a'};
for (int i = 0; i < 5; i++) {
    printf("ch[%d] --- %c \n",i ,ch[i]);
}

출력 결과

ch[0] --- K 
ch[1] --- o 
ch[2] --- r 
ch[3] --- e 
ch[4] --- a

 

키보드로 10명의 성적을 입력 받아 합과 평균을 구하는 프로그램

int score[10], sum = 0, i;
float aver;
 printf("Enter Scores : ");

 for(int i=0; i<10 ; i++){
     scanf("%d", &score[i]);
     sum = sum + score[i];
 }

 aver = sum / 10.0;
 printf("Sum -- %d\n Average -- %.2f",sum, aver);

출력 결과

Enter Scores : 100
50
60
70
80
90
50
40
30
20
Sum -- 590
Average -- 59.00

 

배열에서 다른 배열로 값들을 복사하는 프로그램이다.

int aa[5] = {23,15,26,77,89};
int bb[5];

printf("배열 aa : ");
for (int i = 0; i < 6 ; i++) {
    printf("%d ",aa[i]);
}

for (int i = 0; i < 6; i++) {
    bb[i] = aa[i];
}

printf("배열 bb : ");
for (int i = 0; i < 6; i++) {
    printf("%d ", bb[i]);
}

출력 결과

배열 aa : 23 15 26 77 89 3 배열 bb : 23 15 26 77 89 3

 

*2차원 배열

좀 복잡하지만 천천히 하니까 할 수 있더라

2차원 배열 선언 방법은 자료형 변수명[행][열]이다

int data[2][3];

위 처럼 선언하면 된다.

data[0][0] data[0][1] data[0][2]
data[1][0] data[1][1] data[1][2]

이렇게 구성 되어 있다.

 

2차원 배열에 값을 대입한 후 출력하는 프로그램이다.

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

 for (int i = 0; i <= 1; i++) {
     for (int j = 0; j <= 2; j++) {
         printf("data[%d][%d]--%d", i, j, data[i][j]);
         printf("\n");
     }
 }

출력 결과

data[0][0]--1
data[0][1]--2
data[0][2]--3
data[1][0]--4
data[1][1]--5
data[1][2]--6

 

5명의 국어, 수학, 영어 성적의 합과 평균을 구하는 프로그램

int score[5][3] = {
        {87, 65, 98},
        {78, 88, 90},
        {77, 87, 73},
        {98, 87, 79},
        {88, 89, 78}
};

int i, j, sum;
float aver;
printf("Kore MATH Eng Sum   Average \n");
printf("----------------------------------\n");
for (int i = 0; i <= 4; i++) {
    sum = 0;
    for (int j = 0; j <= 2; j++) {
        printf("%d   ", score[i][j]);
        sum = sum + score[i][j];
    }
    aver = sum / 3.0;
    printf("%d   %.1f\n", sum, aver);
}

출력 결과

Kor MATH Eng Sum   Average 
----------------------------------
87   65   98   250   83.3
78   88   90   256   85.3
77   87   73   237   79.0
98   87   79   264   88.0
88   89   78   255   85.0

조금 더 응용해서 5명의 성적을 입력 받아서 합과 평균을 구하는 프로그램을 만들어 보자.

int score[5][3];
for (int i = 0; i <= 4; i++) {
    for (int j = 0; j <= 2; j++) {
        scanf("%d", &score[i][j]);
    }
}

int i, j, sum;
float aver;
printf("Kor MATH Eng Sum   Average \n");
printf("----------------------------------\n");
for (int i = 0; i <= 4; i++) {
    sum = 0;
    for (int j = 0; j <= 2; j++) {
        printf("%d   ", score[i][j]);
        sum = sum + score[i][j];
    }
    aver = sum / 3.0;
    printf("%d   %.1f\n", sum, aver);
}

출력 결과

Kor MATH Eng Sum   Average 
----------------------------------
88   87   86   261   87.0
55   55   33   143   47.7
44   25   15   84   28.0
16   26   2   44   14.7
7   88   75   170   56.7

점수는 귀찮아서 막 쳤다.

 

**** 중요한거

char array[10];을 선언했을때

array[0]~array[9] 각 인덱스별로 메모리를 할당받아 주소값이 존재한다

10001~10010이 각각 주소값이라고 가정하고,

포인터와 같다고 볼 수 있다.

첫번째 배열 인덱스의 주소값이 array자체가 되는 것이다. 

array[1] = 7 일경우

&array[1] = 10002 이다.

 

 

내가 배열 인덱스 지정 해줬을때는 &주소값을 표시할 필요 없다

왜냐하면 배열 0번인덱스와 배열의 주소 값은 같기 때문이다.

하지만 배열만 선언했을 경우에는 &주소를 붙여줘야한다고 한다.

 

'C' 카테고리의 다른 글

C - 전처리기  (0) 2022.03.07
C - getchar() 함수와 gets()함수  (0) 2022.03.07
C - 포인터  (0) 2022.03.06
C - 반복문 예제  (0) 2022.02.25
C - 반복문  (0) 2022.02.20