[C++] 배열

haaana·2023년 11월 20일
0



7. 배열


7.1 1차원 배열

📌 배열 Array

배열 이란 같은 종류의 데이터들이 순차적으로 저장되어 있는 자료 구조를 말한다.
인덱스 란 배열 원소의 번호를 말한다.

📌 선언

배열의 선언은 데이터형 배열명 [ 배열 크기 ] ; 순으로 한다.

이 때 배열의 크기를 꼭 입력해야 한다.

다음은 배열 선언의 예시이다.

#include <iostream>
using namespace std;

int main() {
	int myArray[10];
}

여기서 데이터형은 배열 원소들이 int 형이라는 것을 의미한다.

배열명은 배열을 사용할 때 사용할 이름이 myArray 라는 것을 의미한다.

배열 크기는 배열 원소의 개수가 10개 라는 것을 의미한다.

배열 선언은 다양하게 할 수 있다.

#include <iostream>
using namespace std;

int main() {
	int myArray[10];
    float myArray1[5];
    char myArray2[50];
    char myArray3[50], myArray4[10]; // 2개의 문자형 배열을 동시에 선언할 수 있다.
    int index, myArray5[10]; // 일반 변수와 배열을 동시에 선언할 수 있다.
}

📌 초기화

배열의 초기화는 index 0 부터 시작한다.

#include <iostream>
using namespace std;

int main() {
  int myArray[5] = {1, 2, 3, 4, 5};
  // myArray[0] = 1
  // myArray[1] = 2
  // myArray[2] = 3
  // myArray[3] = 4
  // myArray[4] = 5
}

📌 주의 사항

{} : 선언부에서만 사용 가능하다.

#include <iostream>
using namespace std;

int main() {
	int myArray[3] = {1, 2, 3};
}

{} : 배열 크기는 생략 가능하다.
배열의 크기가 주어지지 않으면 자동으로 초기값의 개수만큼 배열의 크기로 할당된다.

#include <iostream>
using namespace std;

int main() {
	int myArray[] = {1, 2, 3};
}

0 으로 모두 초기화 가능하다.

#include <iostream>
using namespace std;

int main() {
	int myArray[3] = {0};
}

초기화하고 남은 배열은 0 으로 초기화한다.

#include <iostream>
using namespace std;

int main() {
  int myArray[3] = {1, 2};
  // myArray[0] = 1
  // myArray[1] = 2
  // myArray[2] = 0
}

인덱스 크기 를 초과할 수 없다.

#include <iostream>
using namespace std;

int main() {
	int myArray[3] = {1, 2, 3, 4} // Error
}

상수 , 매크로 상수 로 크기를 지정할 수 있다.

#include <iostream>
using namespace std;
#define MAX 100

int main() {
	int myArray[MAX];
}

문자형 배열의 초기화는 다음과 같이 한다.

#include <iostream>
using namespace std;

int main() {
	char myArray[3] = {'a', 'b', 'c'};
}

모든 문자열의 끝에는 null (1 byte)이 숨겨져있다.

#include <iostream>
using namespace std;

int main() {
	char myArray[4] = "abc"; // 문자 3개 + null (4 byte)
}

다음은 배열을 사용하여 성적을 입력받고 평균 점수와 학점을 계산하는 소스 코드이다.

#include <iostream>

using namespace std;

#define SUBJECTS 5

int avg_score(int score[]);
char choose_score(int result_avg);

int main() {
    int score[SUBJECTS], result_avg;
    char result_score;

    for(int i = 0; i < SUBJECTS; i++){
        printf("%d 번째 점수를 입력하세요: ", i+1);
        cin >> score[i];
    }

    result_avg = avg_score(score);
    printf("\n평균 점수: %d\n", result_avg);

    result_score = choose_score(result_avg);
    printf("\n학점은 %c 입니다.\n", result_score);

    return 0;
}

int avg_score(int score[]) {
    int result_sum = 0;
    for(int i = 0; i < SUBJECTS; i++)
        result_sum += score[i];

    int result_avg = result_sum / SUBJECTS;

    return result_avg;
}

char choose_score(int result_avg) {
    char result_score;

    switch (result_avg / 10) {
        case 10:
        case 9:
            result_score = 'A';
            break;
        case 8:
            result_score = 'B';
            break;
        case 7:
            result_score = 'C';
            break;
        case 6:
            result_score = 'D';
            break;
        default:
            result_score = 'F';
            break;
    }

    return result_score;
}



7.2 2차원 배열

📌 2차원 배열

2차원 배열의 선언은 데이터형 배열명 [ 행의 크기 ] [ 열의 크기 ] ; 순으로 한다.

다음은 2차원 배열 선언의 예시이다.

#include <iostream>
using namespace std;

int main() {
	int myArray[3][5];
}

📌 초기화

배열의 초기화는 index 0 부터 시작한다.

#include <iostream>
using namespace std;

int main() {
  int myArray[3][5] = {
  	{1, 2, 3, 4, 5}, // 첫 번째 행의 원소들의 초기값
  	{6, 7, 8, 9, 10}, // 두 번째 행의 원소들의 초기값
    {11, 12, 13, 14, 15} // 세 번째 행의 원소들의 초기값
  };
}

문자형 배열의 초기화는 다음과 같이 한다.

#include <iostream>
using namespace std;

int main() {
	char alphabet[4][10] = {"abc", "def", "ghi", "Hello"};
    char animal[3][10] = {"강아지", "고양이", "나무늘보"};
}

끝을 나타내기 위해서 모든 문자열의 끝에는 null (1 byte)이 자동으로 삽입된다.

한글은 2byte를 사용한다.

다음은 배열을 사용하여 여러 학생들의 성적을 입력받고 평균 점수와 학점을 계산하는 소스 코드이다.

#include <iostream>

using namespace std;

#define STUDENTS 3
#define SUBJECTS 5

int avg_score(int score[]);
char choose_score(int result_avg);

int main() {
    int score[STUDENTS][SUBJECTS], result_avg[STUDENTS];
    char result_score[STUDENTS];

    for(int i=0; i<STUDENTS;i++){
        printf("\n-- %d 번째 학생 --\n", i+1);
        for(int j=0;j<SUBJECTS;j++){
            printf("%d 번째 점수를 입력하세요: ", j+1);
            cin >> score[i][j];
        }

        result_avg[i] = avg_score(score[i]);
        printf("\n>> 평균 점수: %d\n", result_avg[i]);

        result_score[i] = choose_score(result_avg[i]);
        printf(">> 학점은 %c 입니다.\n", result_score[i]);
    }

    return 0;
}

int avg_score(int score[]) {
    int result_sum = 0, result_avg = 0;

    for(int i=0;i<SUBJECTS;i++)
            result_sum += score[i];
    result_avg = result_sum / SUBJECTS;

    return result_avg;
}

char choose_score(int result_avg) {
    char result_score;

    switch (result_avg / 10) {
        case 10:
        case 9:
            result_score = 'A';
            break;
        case 8:
            result_score = 'B';
            break;
        case 7:
            result_score = 'C';
            break;
        case 6:
            result_score = 'D';
            break;
        default:
            result_score = 'F';
            break;
    }

    return result_score;
}



7.3 3차원 배열

📌 3차원 배열

3차원 배열의 선언은 데이터형 배열명 [ 면의 개수 ] [ 행의 크기 ] [ 열의 크기 ] ; 순으로 한다.

다음은 3차원 배열 선언의 예시이다.

#include <iostream>
using namespace std;

int main() {
	int myArray[3][3][5];
}




profile
평범한 개발자

0개의 댓글