C언어 ⑦

정혜지·2023년 4월 13일
0
post-thumbnail

배열

하나의 식별자로 같은 타입의 여러 데이터를 다룰 수 있다.
생성되는 공간의 크기는 같아야하고, 공간 안의 값의 크기는 달라질 수 있다.


1차원 배열


배열의 선언

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

배열의 초기화

  • 선언과 동시에 초기화하는 경우에는 중괄호를 이용한 전체 초기화 가능
    • int arr1[4] = {2, 4, 5, 3};
    • itn arr2[4] = {0, 0, 0, 0};
    • int arr3[4] = {0};
  • 선언 이후에 초기화하는 경우에는 각 데이터를 각각 초기화해야한다.


5개의 정수 중에서 최대값과 최소값의 위치를 출력

#include <stdio.h>
#include <limits.h>
#defind NUM 5		// 배열의 크기를 상수로 지정해서 사용하는 경우 多

// main 함수
int main()
{
  int i, max, min, idx;
  max = 0;
  idx = 0;
  int arr[NUM];
  // arr[0] ~ arr[4] : 총 5개의 아이템이 들어갈 수 있는 크기의 배열 선언
  for(i=0; i<NUM; i++)
  {
    scanf("%d", &arr[i]);
    if(max < arr[i])	//현재의 최대값보다 i번째 아이템이 더 크다면
    {
      max = arr[i];		// max에 해당 값을 넣어준다
      idx = i;		// idx의 값으로 해당위치를 넣어준다
    }
  }
  printf("최대값은 %d입니다. 그리고 %d번째에 있습니다.\n", max, idx + 1);
  
  // 최소값 초기화
  min = INT_MAX;	// int형이 가질 수 있는 가장 큰 값
  for(i=0; i<NUM; i++)
  {
    scanf("%d", &arr[i]);
    if(min > arr[i]) 
    {
      min = arr[i];
      idx = i;
    }
  }
  printf("최소값은 %d입니다. 그리고 %d번째에 있습니다.\n", min, idx + 1);
  
  return 0;
}

5개의 정수 중에서 짝수 최대값과 홀수 최대값을 출력

#include <stdio.h>
#define NUM 5

int main()
{
  int arr[NUM];
  int i, oddMax, evenMax;
  oddMax = 0;
  evenMax = 0;
  for(i=0; i<NUM; i++)
  {
    scanf("%d", &arr[i]);
    if(arrr[i] % 2 == 0)
    {
      if(evenMax < arr[i]) {
        evenMax = arr[i];
      }
    }
    else 
    {
      if(oddMax < arr[i]) {
        oddMax = arr[i];
      }
    }
  }
  printf("홀수의 최대값은 %d이고, 짝수의 최대값은 %d이다.", oddMax, evenMax);
  return 0;
}





다차원 배열

배열이 배열의 원소로 들어가는 구조 -> 배열의 데이터가 또 다른 배열


2차원 배열 선언

  • <자료형> <배열명>[1차원 배열 크기][2차원배열크기];
  • M * N 형태

MN배열


2차원 배열 초기화

  • 논리적으로는 떨어져 있지만 물리적으로는 연속된 공간에 나열된다
    • 주소값이 연속적으로 부여되기 때문
  • 중괄호를 ⭐2중으로 겹쳐서
    • 중괄호를 하나만 사용할 경우에는 배열의 순서에 맞춰서 할당된다.
  • 행, 열로 표현하지만, 실제로는 연속된 공간에 나열되어 있다.

2차원 배열


구구단을 이용하여 2차원 배열 출력

#include <stdio.h>
#define NUM 10

// main 함수
int main()
{
  int i, j;
  int gugudan[NUM][NUM];
  for(i=1; i<NUM; i++) {
    printf("\n[ %d단 ]\n\n", i);
    for(j=1; j<NUM; j++) {
      gugudan[i][j] = i * j;
      printf("%d X %d = %d\n", i, j, gugudan[i][j]);
    }
    // 2중 for문과 2차원 배열은 밀접한 관계
  }
  return 0;
}

학생점수의 총 합 출력

#include <stdio.h>

//main 함수
int main()
{
  int score[5][2];
  int total[2] = {0, };
  // 1차원 배열을 할당할 때 모든 데이터 값에 0을 넣어줌
  int i;
  
  for(i = 0; i<5; i++) {
    printf("%d번 학생의 수학, 영어 점수 : ", i + 1);
    scanf("%d %d", &score[i][0], &score[i][1]);
  }
  for(i=0; i<5; i++) {
    total[0] += score[i][0];
    total[1] += score[i][1];
  }
  
  printf("\n\n5명의 수학 점수 합계 : %d\n", total[0]);
  printf("\n\n5명의 영어 점수 합계 : %d\n", total[1]);
  return 0;
}


profile
오히려 좋아

0개의 댓글