완숙의 블로그

배열 1(Array) 본문

Programing Language/C

배열 1(Array)

완숙 2019. 1. 10. 19:15

배열

  • 동일한 종류, 동일한 자료형의 데이터를 메모리에 일련의 구조화된 집단으로 구성한 것
  • 배열을 사용하지 않는다면

    • 각각의 값에 따라 모두 변수선언을 해야할 것

배열 선언

자료형 배열명[배열 크기];
int score[10]

 

2019-01-10 4 10 51

 

  • int 형 변수 1개의 메모리 크기가 4byte

    -> score[10]같은 경우 40바이트

  • index는 0번 부터 시작

 

배열 초기화

 

int a[3];		//선언
a[0] = 10;
a[1] = 15;
a[2] = 20;
int a[3]= {10, 15, 20};
// a[0] = 10
// a[1] = 15
// a[2] = 20
int a[3]= {10, 15, 20};
// a[0] = 10
// a[1] = 15
// a[2] = 0
  1. 선언한 배열의 원소보다 초기값을 많이 할당한 경우 => 에러
int a[3] = {10, 15, 20, 30};		// 오류

 

  1. 원소개수를 표시하지 않고 자동으로 원소가 생성되게 하는 예
int a[] = {5, 25, 18, 6, 8};
  • 그런데 초기값을 따로 할당하는 것은 오류 발생

    int a[];
    a[0] = 5;
    a[1] = 25;
    a[2] = 18;				// 오류
    

 

  1. 그림으로 알아보자.

2019-01-10 4 18 58

 

 

 

1차원 배열

  • 대괄호([]) 1개로 선언하는 배열
  • 배열을 반복문과 함께 사용하면 유용
  • 반복문의 초기값을 설정할 때, 배열의 원소는 0부터 시작함

 

Problem 1

#include <stdio.h>
int main() {
	int i;
	int a[] = {5, 10, 15};
	
	for(i = 0; i<3; i++)
	{
		printf("a[%d] = %d\n", i, a[i]);
	}
	return 0;
}

// 프로세스가 시작되었습니다..
> a[0] = 5
a[1] = 10
a[2] = 15

// 프로세스가 종료되었습니다.

 

Problem 2

#include <stdio.h>
int main() {
	int A[5] = {1,2,3,4,5};
	int i, sum = 0;
	double average;
	
	for(i = 0; i < 5; i++)
		sum += A[i];
	
	average = (double)sum / i;
	
	printf("배열 A 원소의 합은 %d다.\n",sum);
	printf("배열 A 원소의 평균은 %4.2lf이다.\n",average);
	
	return 0;
}

// 프로세스가 시작되었습니다..
> 배열 A 원소의 합은 15다.
배열 A 원소의 평균은 3.00이다.

// 프로세스가 종료되었습니다.

 

Problem 3

#include <stdio.h>
int main() {
	
	int ans = 1;
	int mult[] = {4, 2, 5, 1, 3};
	
	for (int i = 0; i < 5; i++){
		ans = ans*mult[i];
	}
	
	printf("제시된 모든 원소의 곱은 %d", ans);

	return 0;
}

// 프로세스가 시작되었습니다..
> 제시된 모든 원소의 곱은 120
// 프로세스가 종료되었습니다.

 

Problem 4

#include <stdio.h>
int main() {
	int input[20] = {0};
	
	printf("배열에 저장할 정수 여러 개 입력. 0을 입력하면 입력을 종료\n");
	
	int i = 0;
	do{
		scanf("%d", &input[i]);
		
	}while(input[i++] != 0);
	
	i = 0;
	while(input[i] != 0){
		printf("%d ", input[i++]);
	}
	
	printf("\n");
	
	return 0;
}

// 프로세스가 시작되었습니다..
>  배열에 저장할 정수 여러 개 입력. 0을 입력하면 입력을 종료
1 3 5 7 9 0
1 3 5 7 9

// 프로세스가 종료되었습니다.

 

 

 

2차원 배열

  • 연속적인 저장 공간을 선언하는 배열에서 1차원 뿐만 아니라 2차원 이상도 가능

 

형태

2019-01-10 5 04 05

2019-01-10 5 06 26

 

선언

int a [2][3] = {{10, 20, 30}, {40, 50, 60}};
int a [2][3] = {10, 20, 30, 40, 50, 60};

 

int a [][3] = {10, 20, 30, 40, 50, 60}; // True
int a [][3] = {10, 20, 30, 40};			// True
int a [2][] = {10, 20, 30, 40, 50, 60}; // False
int a [][] = {10, 20, 30, 40, 50, 60}; // False

 

Problem 1

#include <stdio.h>
int main() {
	int i, j;
	int a[2][3] = {{15, 20, 30}, {35, 40, 45}};
	
	for(i = 0; i<2; i++)
	{
		for(j=0; j<3; j++)
		{
			printf("a[%d][%d] = %d\n", i, j, a[i][j]);
		}
	}
	
	return 0;
}

// 프로세스가 시작되었습니다..
> a[0][0] = 15
a[0][1] = 20
a[0][2] = 30
a[1][0] = 35
a[1][1] = 40
a[1][2] = 45

// 프로세스가 종료되었습니다.

 

Problem 2

#include <stdio.h>
int main() {
	int i, j, sum = 0;
	int a[2][2] = {5, 20, 12, 7};
	
	for(i = 0; i<2; i++){
		for(j = 0; j <2; j++){
			sum += a[i][j];
		}
	}
	
	printf("2차원 배열 a의 합은 %d다.\n", sum);
	
	return 0;
}

// 프로세스가 시작되었습니다..
> 2차원 배열 a의 합은 44다.

// 프로세스가 종료되었습니다.

 

Problem 3

#include <stdio.h>
int main() {
	
	int i, j, sum = 0;

	int a[][3] = {{90,80,90},
								{70,100,100},
								{80,90,90}};
	
	double aveClass[3];
	
	for(j=0; j<3;j++)
	{
		for(i=0; i<3; i++)
		{
			sum += a[i][j];
		}
	
	
		aveClass[j] = (double)sum / i;
	
		if(j==0)
			printf("국어 평균은 %.2lf이다.\n", aveClass[j]);
		else if(j==1)
			printf("영어 평균은 %.2lf이다.\n", aveClass[j]);
		else if(j==2)
			printf("수학 평균은 %.2lf이다.\n", aveClass[j]);
	
		// 다음 과목의 평균을 구하기 위해서 sum을 초기화한다.
		sum = 0;
	}

	return 0;
}

// 프로세스가 시작되었습니다..
> 국어 평균은 80.00이다.
영어 평균은 90.00이다.
수학 평균은 93.33이다.

// 프로세스가 종료되었습니다.

 

 

 

다차원 배열

int a[2][2][2];
int b[2][2][2][2];

 

Problem 1

#include <stdio.h>
int main() {
	int x[2][2][5] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
	int i,j,k;
	
	for(i = 0; i<2; i++){
		for(j = 0; j<2; j++){
			for(k = 0; k<5; k++){
				printf("x[%d][%d][%d] = %d\n",i,j,k,x[i][j][k]);
			}
		}
	}
	
	return 0;
}

// 프로세스가 시작되었습니다..
> x[0][0][0] = 0
x[0][0][1] = 1
x[0][0][2] = 2
x[0][0][3] = 3
x[0][0][4] = 4
x[0][1][0] = 5
x[0][1][1] = 6
x[0][1][2] = 7
x[0][1][3] = 8
x[0][1][4] = 9
x[1][0][0] = 10
x[1][0][1] = 11
x[1][0][2] = 12
x[1][0][3] = 13
x[1][0][4] = 14
x[1][1][0] = 15
x[1][1][1] = 16
x[1][1][2] = 17
x[1][1][3] = 18
x[1][1][4] = 19

// 프로세스가 종료되었습니다.

 

 

실습

Problem 1

#include <stdio.h>
int main() {
	
	int nums[5] = {2, 19, 1, 27, 16};
	int max;
	
	for (int i = 0; i < 5; i++){
		printf("nums[%d] is %d\n",i, nums[i]);
	}
	printf("\n");
	
	for (int i = 0; i < 4; i++){
		max = (nums[i] > nums[i+1])? nums[i]:nums[i+1];
	}
	
	printf("최대값은 %d 이다.", max);
	
	return 0;
}


// 프로세스가 시작되었습니다..
> nums[0] is 2
nums[1] is 19
nums[2] is 1
nums[3] is 27
nums[4] is 16

최대값은 27 이다.
// 프로세스가 종료되었습니다.

 

Problem 2

#include <stdio.h>
int main() {
	
	int Array[3][4] = {{10, 20, 30, 40},
										 {-50, -60, -70, -80},
										 {90, 100, 50, 50}};
	int colsum[4] = {0};
	int rowsum[3] = {0};
	
	for (int i = 0; i < 3; i++){
		for (int j = 0; j < 4; j++){
			rowsum[i] += Array[i][j];
		}
		printf("%d행의 합은 %4d, 평균은 %2.3f\n", i+1, rowsum[i], (double)rowsum[i]/4);
	}
	printf("\n");
	
	for (int k = 0; k < 4; k++){
		for (int l = 0; l < 3; l++){
			colsum[k] += Array[l][k];
		}
		printf("%d열의 합은 %4d, 평균은 %2.3f\n", k+1, colsum[k], (double)colsum[k]/3);
	}
	
	

		

	
	return 0;
}

// 프로세스가 시작되었습니다..
> 1행의 합은  100, 평균은 25.000
2행의 합은 -260, 평균은 -65.000
3행의 합은  290, 평균은 72.500

1열의 합은   50, 평균은 16.667
2열의 합은   60, 평균은 20.000
3열의 합은   10, 평균은 3.333
4열의 합은   10, 평균은 3.333

// 프로세스가 종료되었습니다.

 

 

Problem 3

#include <stdio.h>
int main() {
	
	int x[20] = {0};
	int count[10] = {0};
	int max = 0;
	
	for (int i = 0; i < 20; i++){
		printf("%2d 번째 정수 : ",i+1);
		scanf("%d", &x[i]);
	}
	
	for (int i = 0; i < 20; i++){
		for (int j = 0; j < 10; j++){
			if (x[i] == j){
				count[j]++;
				break;
			}
		}
	}
	
	for (int i = 0; i < 19; i++){
		max = (count[i] > count[i+1])? count[i]: count[i+1];
	}
	
	for (int i = 0; i < 10; i++){
		if (count[i] == max){
			printf("정수 : %d,  최대 빈도수 : %d회\n", i+1, max);
		}
	}
	
	
	return 0;
}

// 프로세스가 시작되었습니다..
>  1 번째 정수 : 1
 2 번째 정수 : 2
 3 번째 정수 : 3
 4 번째 정수 : 1
 5 번째 정수 : 2
 6 번째 정수 : 3
 7 번째 정수 : 3
 8 번째 정수 : 2
 9 번째 정수 : 4
10 번째 정수 : 6
11 번째 정수 : 6
12 번째 정수 : 8
13 번째 정수 : 8
14 번째 정수 : 6
15 번째 정수 : 5
16 번째 정수 : 4
17 번째 정수 : 3
18 번째 정수 : 4
19 번째 정수 : 3
20 번째 정수 : 2
정수 : 5,  최대 빈도수 : 3회
정수 : 7,  최대 빈도수 : 3회

// 프로세스가 종료되었습니다.

 

'Programing Language > C' 카테고리의 다른 글

함수 1  (0) 2019.01.14
배열 2(Array)  (0) 2019.01.11
반복문 2  (0) 2019.01.08
반복문 1  (0) 2019.01.07
선택문  (0) 2019.01.03
Comments