배열의 개념에 대해 알아보고, 배열의 정의와 선언 형태, 배열과 기억공간의 표현에 대해 알아본다.
-
학습 목표
- 배열을 선언하고 초기화.
- 배열의 요소를 참조.
- 배열과 기억공간의 표현을 이해.
- char형 배열을 이해.
주요 용어
- 배열 : 동일한 자료형으 ㅣ값들이 순서적으로 하나의 이름(배열명)에 모여있는 것으로, 같은 이름을 갖는 하나 이상의 변수 리스트.
- 1차원 배열 : 배열의 첨자가 하나만 있는 배열.
- 2차원 배열 : 배열의 첨자가 2개인 배열.
- 3차원 배열 : 배열의 첨자가 3개인 배열.
- char형 배열 : 문자열을 처리하기 위해 사용되는 배열.
배열의 개념
n개의 자료를 처리하기 위해, n개의 변수를 만들고 모든 변수 이름을 기억하고 자료를 처리하기는 복잡함. ->
일관성 있고 효율적인 새료운 변수릐 필요
- 하나의 변수 이름에 순서에 의한 번호 부여.
- 변수명[0], 변수명[2], ...
- 효율적인 자료 처리 가능.
배열의 정의와 형태
- 배열의 정의.
- 동일한 자료형을 갖는 자료들의 리스트.
- 배열의 각 요소는 하나의 변수로 취급.
- 배열은 배열명과 첨자로 구분.
- 배열 선언 형태.
- 1차원 배열.
- 2차원 배열.
- 3차원 배열.
1차원 배열
- 배열의 첨자가 하나만 있는 배열.
- 첨자의 개수는 배열 전체의 구성요소의 개수를 의미.
- 배열의 각 요소는 배열명과 첨자로 구분.
- 첨자는 0 부터 시작.
- 배열의 각 요소는 배열명과 첨자로 구분.
- 자료형과 기억 클래스는 갖는다.
선언
- 형식 : 자료형 배열명 [개수]
- 사용 예 : int a [10]
- 의미 : 1차원 배열로서, 배열명은 a, 크기는 10, 정수 값이 기억됨.
1차원 배열의 기억 공간 표현
1차원 배열의 초기화
배열을 선언하면 기억공간을 초기화 해야 함.
-
초기화 방법.
-
배열선언 후 초기값 할당.
-
int arr[4]; // -> 반드시 배열의 크기를 지정해야 함. arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40;
-
-
배열선언과 동시에 초기값 할당.
-
int arr[4] = {10, 20, 30, 40}; // -> 배열의 각 요소에 초기 값 할당. int arr[] = {10, 20, 30, 40}; // -> 배열의 크기 생량 가능. int arr[4] = {10, 20, 30,}; // -> arr[3] = 0으로 초기화. int arr[4] = {10, , 30, 40}; // -> 에러 발생. int arr[4] = {10, 20, 30, 40, 50}; // -> 에러
-
-
외부로부터 자료를 입력받아 초기화.
-
int x[10]; for( i = 0; i < 10; i++ ) { scanf("%d", &x[i]); }
-
-
-
1차원 배열의 초기화 후 기억공간의 표현
int arr[5] = {10, 20, 30, 40, 50};
-
EX 1
-
#include <stdio.h> int main() { // 배열 선언과 초기화 int arr1[4] = {10, 20, 30, 40}; int arr2[] = {10, 20, 30, 40}; int arr3[4] = {10, 20}; int arr4[4] = {0}; int i; printf("\narr1 ->\n\t"); for (i = 0; i <= 3; i++) { printf("[%d] : %d\t", i, arr1[i]); } printf("\narr2 ->\n\t"); for (i = 0; i <= 3; i++) { printf("[%d] : %d\t", i, arr2[i]); } printf("\narr3 ->\n\t"); for (i = 0; i <= 3; i++) { printf("[%d] : %d\t", i, arr3[i]); } printf("\narr4 ->\n\t"); for (i = 0; i <= 3; i++) { printf("[%d] : %d\t", i, arr4[i]); } printf("\n"); return 0; }
-
-
EX 2
-
#include <stdio.h> int main() { // 1차원 배열 선언과 초기화 static int x[] = {1, 2, 3, 4}; static int y[] = {10, 20, 30, 40}; int i, z[4]; for (i = 0; i < 4; ++i) z[i] = x[i] + y[3 - i]; printf("SUM OF OTHER SIDE OF EACH ARRAY\n"); for (i = 0; i < 4; ++i) printf("%d + %d = %d\n", x[i], y[3 - i], z[i]); return 0; }
-
2차원 배열 선언
- 형식 : 자료형 배열명[행의 수][열의 수]
- 사용 예 : int a[3][4];
- 의미 : 2차원 배열로, 배열 명은 a이고, 3행 4열로 됨 12개의 요소를 가진 정수형 배열.
2차원 배열의 선언과 초기화
int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int arr[3][3] = {
{1, 2, 3}
, {4, 5, 6}
, {7, 8, 9}
};
2차원 배열의 기억공간 표현
2차원 배열의 사용 예
#include <stdio.h>
int main()
{
static int score[4][3] = {
{90, 90, 90},
{80, 80, 80},
{70, 70, 70},
{60, 60, 60}};
int sum, i, j;
printf("No\tA\tB\tC\tSUM\n");
for (i = 0; i < 4; ++i)
{
sum = 0;
printf("%3d", i + 1);
for (j = 0; j < 3; j++)
{
printf("\t%3d", score[i][j]);
sum += score[i][j];
}
printf("\t%3d\n", sum);
}
return 0;
}
3차원 배열의 선언
- 형식 : 자료형 배열명 [면의 수] [행의 수] [열의 수];
- 사용 예 : int a[2][3][4];
- 의미 : 3차원 배열로서, 배열 명은 a이고, 2면 3행 4열로 된,
24개 요소를 가진 정수형 배열.
3차원 배열의 초기화와 기억공간 표현
char형 배열
- 형식 : char 배열명[문자열 길이 + 1]
- 사용 예 : char str[12]
- 의미 : 배열명 str, 12문자 길이를 가진 char 형 배열.
char형 배열선언과 초기화
char name[] = "JEAHA OH"; // 문자열 단위로 초기화
char addr[] = {'S', 'E', 'O', 'U', 'L', '\0'}; // 문자 단위로 초기화. '\0'을 삽입 해야 함.
char형 배열 사용 예
#include <stdio.h>
int main()
{
char name[] = "JEAHA OH";
char addr1[6] = {'S', 'E', 'O', 'U', 'L', '\0'}; // 마지막 요소 \0 삽입
char addr2[6] = {'S', 'E', 'O', 'U', 'L'}; // 마지막 요소 \0을 삽입하지 않을 경우 쓰레기 값이 붙을 수 있음.
printf("\n name : %s", name);
printf("\n addr1 : %s", addr1);
printf("\n addr2 : %s", addr2);
return 0;
}
#include <stdio.h>
int main()
{
char string[50];
int i = 0;
printf("\t INSERT SOMETHING STRING >> ");
scanf("%s", string);
printf("RECEIVED STRING : %s\n", string);
printf("PRINT AS CHARACTER : ");
while (string[i] != '\0')
{
printf("%c", string[i]);
i++;
}
printf("\n");
return 0;
}
함수와 배열
- 배열을 함수의 매개변수로 사용할 경우
- 함수 호출 시 배열명만 명시하여 호출.
-
int score[2][5] = {{1, 2, 3, 4, 5}, {1, 1, 1, 1, 1}}; score_sum( score, 2, 5);
- 함수의 헤더에는
- 1차원 배열의 경우 크기 생략 가능
- 다차원 배열의 경우 가장 높은 차원의 크기 생략 가능.
#include <stdio.h>
void score_sum(int gr[][5], int, int);
int main()
{
int score[2][5] = {
{10, 20, 30, 40, 50},
{10, 10, 10, 10, 10}};
score_sum(score, 2, 5);
return 0;
}
void score_sum(int gr[][5], int row, int column)
{
int sum[2] = {0};
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
sum[i] += gr[i][j];
printf("SUM[%d] = %d\n", i, sum[i]);
}
}
printf("\n");
}
728x90
반응형
'Language > C' 카테고리의 다른 글
[C] 배열과 포인터 - 3 (0) | 2020.12.27 |
---|---|
[C] 배열과 포인터 - 2 (0) | 2020.12.27 |
[C] 함수와 기억 클래스 - 2 (0) | 2020.12.25 |
[C] 함수와 기억 클래스 - 1 (0) | 2020.12.20 |
[C] 선택 제어문과 반복 제어문 (0) | 2020.12.20 |