본문 바로가기
Basic C Language

#16. 2D_array

by Srff5123 2023. 4. 19.
728x90

#include <stdio.h>

#define ROWS 5
#define COLS 3

//자료형[행][열];

/*
   int arr[3];
   ㅁㅁㅇ
    => arr[2]
   
    int arr[3][5]

    ㅁㅁㅁㅁㅁ
    ㅁㅁㅁㅁㅁ
    ㅁㅁㅁㅇㅁ
    => 2행 3열로 접근
*/

int arrOne[10];
int arrTwo[5][5];
float arrThree[3][3][3];  

//initialize
int arr1[2][3] = { 1, 2, 3, 4, 5, 6 }; //이런식으로 적었을경우 알아서 123   456 으로 나누어짐
int arr2[2][3] = { {1, 2, 3}, {4, 5, 6} };
//123
//456
int arr3[2][3] = { 1, 2, 3 };
int arr4[][3] = { 1, 2, 3 };  //배열의 앞부분은 생략 가능
int arr5[][3] = { {1, 2}, {3, 4, 5}, {6} };
//int arr6[2][] = { 1, 2, 3, 4, 5, 6 }; // 뒤는 생략 불가

void printArr(); 
void Score();
void floor();
void board();

int main()
{
    //printArr();

    Score();

    floor();

    board();

    int arr7[4][2];

    printf("배열의 전체 바이트 크기 : %d\n", sizeof(arr7));
    printf("배열의 1행 바이트 크기 : %d\n", sizeof(arr7[0]));

    printf("배열의 원소의 개수 : %d\n", sizeof(arr7) / sizeof(int));
    printf("배열의 행의 개수 : %d\n", sizeof(arr7) / sizeof(arr7[0]));
    printf("배열의 열의 개수 : %d\n", sizeof(arr7[0]) / sizeof(arr7[0][0]));


    return 0;
}

#pragma region print_array
void printArr()
{
    //arr1
    printf("*** arr1 **\n");
    for(int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", arr1[i][j]); //00 01 02 , 10 11 12 , 20 21 22 자리의 숫자 출력
        }
        printf("\n");
    }

    printf("\n");

    //arr2
    printf("*** arr2 **\n");
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", arr2[i][j]);
        }
        printf("\n");
    }

    printf("\n");

    //arr3
    printf("*** arr3 **\n");
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", arr3[i][j]);
        }
        printf("\n");
    }

    printf("\n");

    //arr4
    printf("*** arr4 **\n");
    for (int i = 0; i < 1; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", arr4[i][j]);
        }
        printf("\n");
    }

    printf("\n");

    //arr5
    printf("*** arr5 **\n");
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", arr5[i][j]);
        }
        printf("\n");
    }

    printf("\n");
}
#pragma endregion

void Score()
{
    int score[ROWS][COLS] = { {85, 60, 70}, {90, 100, 80}, 
        {50, 60, 70}, {70, 50, 68}, {40, 90, 100} };     //전역변수 ROWS 5 COL 3   5행 3열의 배열선언및 값넣기
    int totalKor = 0, totalEng = 0, totalMath = 0;
    int koravg = 0, engavg = 0, mathavg = 0;

    for (int i = 0; i < ROWS; i++)
    {
        totalKor += score[i][0]; 
        totalEng += score[i][1];
        totalMath += score[i][2];
    }
    printf("\n국어총점\t영어총점\t수학총점\t\n");
    printf("%d\t\t%d\t\t%d\t\n", totalKor, totalEng, totalMath);

    koravg = totalKor / ROWS;
    engavg = totalEng / ROWS;
    mathavg = totalMath / ROWS;

    printf("\n국어평균\t영어평균\t수학평균\t\n");
    printf("%d\t\t%d\t\t%d\t\n", koravg, engavg, mathavg);

    int student[5] = { 0 };

    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            student[i] += score[i][j]; // student[] 일차원 i번쨰 배열에  score[i][j]의 배열값 +
        }

        printf("%d번째 학생의 총점 : %d\n", i + 1, student[i]); // 각학생의 총점 출력
    }
    printf("\n");
}

void floor()
{
    int floor[3][3];
    int floor1[3] = { 0 };
    int total = 0;

    for (int i = 0; i < 3; i++)
    {
        printf("*** %d층 ***\n", i + 1);
        for (int j = 0; j < 3; j++)
        {
            printf("%d층 %d호 인구수 : ", i + 1, j + 1);
            scanf_s("%d", &floor[i][j]);
        }
        for (int j = 0; j < 3; j++)
        {
            floor1[i] += floor[i][j];
        }
    }

    printf("\n");

    for (int i = 0; i < 3; i++)
    {
        printf("%d층 인구수 : %d명", i + 1, floor1[i]);
    }

    printf("\n");

    for (int i = 0; i < 3; i++)
    {
        total += floor1[i];
    }
    printf("총 인구수 %d\n", total);
}

void board()
{
    int board[5][5];

    for (int x = 0; x < 5; x++)
    {
        for (int y = 0; y < 5; y++)
        {
            board[x][y] = y * 5 + x; //0 5 10 15 20 
                                     //1 6 11 16 21
        }
    }
    
    for (int y = 0; y < 5; y++)
    {
        for (int x = 0; x < 5; x++)
        {
            printf("%d\t", board[x][y]);
        }
        printf("\n");
    }

    printf("\n");

    for (int x = 0; x < 5; x++)
    {
        for (int y = 0; y < 5; y++)
        {
            printf("%d\t", board[x][y]);
        }
        printf("\n");
    }
}

728x90

'Basic C Language' 카테고리의 다른 글

#18. Variable_Scope  (0) 2023.04.26
#17 . 별로 간단한 모양 찍기  (0) 2023.04.19
#15. Array_sort(배열 정렬)  (0) 2023.04.19
#14. Array(배열)  (0) 2023.04.19
#13. Function 2  (0) 2023.04.19