본문 바로가기

공부/C언어

C언어(배열)

배열(array)은 같은 데이터형의 변수를 메모리에 연속적으로 할당하고 같은 이름으로 사용하는 기능이다. 배열안에 들어가는 변수 하나하나를 원소(element)라고 한다. 배열 전체가 같은 이름의 변수이므로 배열의 각 원소를 구분하기 위해서 인덱스(index)를 사용한다. 각 원소를 구분하기 위한 번호를 인덱스라고 한다. ex) num[0], num[1] ~~와 같은 방식으로 배열의 각 원소를 구분한다.

 

배열의 선언

배열을 선언 하려면 배열 원소의 데이터형과 배열의 이름을 쓰고 [ ]안에 배열의 크기를 지정한다. 배열의 크기는 배열에 들어있는 원소의 개수이다.

형식 데이텨형 배열명[크기]
사용예

int num[5];

double data[100];

char name[32]

*배열의 크기는 반드시 0보다 큰 정수형 상수로 지정해야 한다. 또한 배열의 크기를 지정할 때는 리터럴 상수뿐 아니라 매크로 상수도 사용할 수 있다. '배열 전체 바이트 수 / 원소 하나의 바이트 수'로 구한 값은 한상 배열의 크기가 된다.

 

배열의 초기화

배열의 초기화는 배열 원소의 초기화를 의미한다. 배열의 원소도 변수이므로 따로 초기화하지 않으면 쓰레기 값이 된다. 배열을 초기화하려면 { }안에 배열 원소의 초기값을 콤마(,)로 나열한다.

개수이다.

형식 데이텨형 배열명[크기] = [초기값목록];
사용예

int num[5] = {10, 20, 30, 40, 50};

double data[100] = {0};

char name[32] = "Jin";


1)선택정렬

#include <stdio.h>

#define SIZE 5

int main(void)
{
	int data[SIZE] = {7, 3, 9, 5, 1}; //배열의 크기는 5이다.
	int i, j;
	int index, temp;
	
	for (i = 0; i < SIZE - 1; i++) // 0~(i-1)까지는 정렬된 상태이다.
	{
		index = i; //정렬한 배열 중 가장 작은 원소의 인덱스, 처음에는 index0
		for (j = i + 1; j < SIZE; j++) // data[i]~data[SIAE-1]중 가장 작은원소의 인덱스를 index에 저장
		{ // j는 1부터 시작,, data[index0] > data[1]이라면 자리를 바꾼다. 아니면 j는 1증가한다.
			if (data[index] > data[j]) //오름차순 정렬
			index = j; // i번째 원소를 index에 있는 원소와 맞바꾼다.
		} 
	if (i != index) // 만약 i가 index가 아니라면(가장작은수가 아니라면)
		{
		temp = data[i]; // 임시저장소에 data[i]를 널고
		data[i] = data[index]; // 이 데이터i는 data[index]로 저장
		data[index] = temp; // i번째 원소가 i번째로 작은 값이 된다.
		}
	}
	printf("정렬 후: ");
	for (i = 0; i < SIZE; i++)
		printf("%d ", data[i]);
		printf("\n");
		return 0;
}

실행결과

정렬 후 : 1 3 5 7 9

 

2)다음은 피보나치 수열을 구해서 크기가 20인 배열에 저장하고 출력하는 코드이다. ___부분에 필요한 코드를 작성하시오. 피보나치 수열은 바로 앞의 두 수의 합으로 구해지며, 처음 두 항은 1이다.

#include <stdio.h>
int main(void)
{
	int fibo[20] = { 1, 1 };
	int sz = sizeof(fibo) / sizeof(fibo[0]);
	int i;
	
	for (i = 0; i < sz-2; i++)
		fibo[i+2] = fibo[i] + fibo[i+1];
		
	for (i = 0; i < sz; i++)
		printf("%d ", fibo[i]);
	printf("\n");
	
	return 0; 
}

 

3)[2차원 배열] 3X3 행렬의 합을 구하는 프로그램을 작성하시오. 행렬로 사용될 2차원 배열은 마음대로 초기화해도 된다.

실행결과

X 행렬 :

           10 20 30

           40 50 60

           70 80 90

Y 행렬 :

            9   8   7

            6   5   4

            3   2   1

X+Y 행렬 :

            19 28 37

            46 55 64

            73 82 91

#include <stdio.h>
void print_matrix(int arr[][3])
{
	int i, j;
	for (i=0; i<3; i++)
	{
		for(j=0; j<3; j++)
		printf("%3d", arr[i][j]);
		printf("\n");
	}
}
int main(void)
{
	int x[3][3] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 };
	int y[3][3] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
	int z[3][3] = { 0 };
	int i,j;
	printf("x행렬 : \n");
	print_matrix(x);
	printf("y행렬 : \n");
	print_matrix(y);
	for(i=0; i<3; i++)
	for(j=0; j<3; j++)
	z[i][j] = x[i][j] + y[i][j];
	printf("x+y행렬: \n");
	print_matrix(z);
	
	return 0;
}

4)[2차원 배열과 1차원 배열] 각 학생별로 한 학기 성적은 중간고사 30점, 기말고사 30점, 팀프로젝트30점, 출석10점으로 계산된다. 학생이 모두5명일 때, 각 학생별 총점을 구하고 중간고사, 기말고사, 팀프로젝트, 출석의 평균점을 구해서 출력하는 프로그램을 작성하시오. 성적을 저장하는 2차원 배열은 다음과 같이 초기화해서 사용한다.

실행결과

학생 1번 : 28 28 26  9 ==> 91 

학생 2번 : 30 27 30 10 ==> 97 

학생 3번 : 25 26 24  8 ==> 83

학생 4번 : 18 22 22  5 ==> 67

학생 5번 : 24 25 30 10 ==> 89

항목별평균 : 25.00 25.60 26.40 8.40

#include <stdio.h>

int main(void)
{
    int scores[5][4] = // 학생 1명당 4개의 성적, 학생은 모두 5명임
    {
        {28,28,26,9},
        {30,27,30,10},
        {25,26,24,8},
        {18,22,22,5},
        {24,25,30,10}
    };
    int total_scores[5] = { 0 };
    double averages[4] = { 0 };
    int i, j;

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 4; j++)
        {
            total_scores[i] += scores[i][j];
            averages[j] += scores[i][j];
        }
    }
    for (j = 0; j < 4; j++)
        averages[j] /= 5;
    for (i = 0; i < 5; i++)
    {
        printf("학 생  %2d번: ", i + 1);
        for (int j = 0; j < 4; j++)
        {
            printf("%5d ", scores[i][j]);
        }
        printf("==> %3d\n", total_scores[i]);
    }
    printf("항목별 평균:    ");
    for (j = 0; j < 4; j++)
        printf("%5.2f ", averages[j]);
    printf("\n");

    return 0;
}

 

'공부 > C언어' 카테고리의 다른 글

C언어(함수)  (0) 2019.12.17