007. ARRAY

Posted on by pkchan

007-01 // ONE DIMENSIONAL ARRAY

data_type array_name[array_size];

배열은 특정 자료형 변수의 모임이라고 보면 쉽습니다. 변수와 마찬가지로 자료형과 배열의 이름 그리고 배열의 크기를 지정해주면 됩니다. 배열의 크기를 지정해주는 부분에는 오직 숫자만 들어갈 수 있으며 선언한 후에는 바꿀 수 없습니다.

int arr[10];

이와 같이 선언했다면, 정수 int 형식의 변수 10개의 모임입니다. 원소에 접근하기 위해서는 arr[0] ~ arr[9]으로 10개의 원소에 각각 접근할 수 있습니다. 배열의 원소는 항상 0부터 시작합니다. 배열의 선언에서 정의한 사이즈 값에서 -1해준 값이 마지막 원소의 주소입니다.

int arr[5] = {23,45,76,12,9};
int arr[] = {23,45,76,12,9};

이와 같이 선언과 동시에 초기화 할 수 있습니다.

int arr[5] = {23,45};

처음 두 원소의 값이 채워지고 나머지 원소는 자동으로 0이 채워집니다.

007-02 // MEMORY ALLOCATION

int a[3] = {36,38,29};
a is equal to 100
a[0] is equal to 36

int형 변수 3개가 모인 배열(int a[3] = {36,38,29})이 메모리 할당된 그림입니다. 배열은 변수의 모임이므로 원소가 3개인 배열은 주소가 연속적으로 할당되며, int자료형의 크기인 4bytes * 3 = 12bytes가 할당됩니다. 특이한 점은 주소인데, 배열의 이름 즉, a는 첫번째 원소의 시작점을 가리키는 주소를 가진 상수입니다. 이로서 a는 주소를 요청하는 단항연산자인 &를 붙이지 않고도 주소를 반환합니다.

/*
 example 007-01
 C language one dimensional array
*/

#include < stdio.h >

int main(void) {

          int marks[10], i, n, sum = 0, average;

          printf("Enter n: ");
          scanf("%d", &n);

          for(i = 0; i < n; ++i) {

                    printf("Enter number%d: ",i+1);
                    scanf("%d", &marks[i]);

                    sum += marks[i];

          }

          average = sum/n;
          printf("Average = %d", average);

          return 0;

}

007-03 // TWO DIMENSIONAL ARRAY

data_type array_name[lows][array_size];

1차원 배열이 변수의 모임이라면, 2차원 배열은 1차원 배열의 모임입니다.

int arr[3][3];

int형식의 변수가 3개인 1차원 배열 3개의 모임입니다.

int arr[3][3] = {{34,56,54},{23,67,23},{67,21,3}};
int arr[][3] = {{34,56,54},{23,67,23},{67,21,3}};
int arr[3][3] = {34,56,54,23,67,23,67,21,3};

이와 같이 선언과 동시에 초기화 할 수 있습니다. 1차원 배열과 마찬가지로 부족한 부분은 0으로 채워집니다.

int arr[3][3] = {{34},{23,67},{67,21}};
int arr[3][3] = {34,56};

a is equal to 100 //address
&a is equal to 100 // address
&a[0] is equal to 100 //address

1차원 배열에서 첫번째 원소의 시작 주소를 가지고 있던 배열 이름이 2차원 배열에서도 마찬가지입니다. 2차원 배열에서는 각 행 원소의 시작점 주소를 가지는 arr[0], arr[1], arr[2]가 있으며 부분 배열 이름입니다.

/*
 example 007-02
 C language two dimensional array
*/

#include <stdio.h>

int main(void) {

          float a[2][2], b[2][2], c[2][2];
          int i, j;

          // Taking input using nested for loop
          printf("Enter elements of 1st matrix\n");

          for(i=0; i<2; ++i)

                    for(j=0; j<2; ++j) {

                              printf("Enter a[%d][%d]: ", i, j);
                              scanf("%f", &a[i][j]);

                    }

          // Taking input using nested for loop
          printf("Enter elements of 2nd matrix\n");

          for(i=0; i<2; ++i)

                    for(j=0; j<2; ++j) {

                              printf("Enter b[%d][%d]: ", i, j);
                              scanf("%f", &b[i][j]);

                    }

          // adding corresponding elements of two arrays
          for(i=0; i<2; ++i)

                    for(j=0; j<2; ++j) {

                              c[i][j] = a[i][j] + b[i][j];

                    }

          // Displaying the sum
          printf("\nSum Of Matrix:\n");

          for(i=0; i<2; ++i)

                    for(j=0; j<2; ++j) {

                              printf("%.1f\t", c[i][j]);  
             
                              if(j==1)

                                        printf("\n");

                    }

          return 0;

}

REVIEW EXERCISES // ONE DIMENSIONAL ARRAY

1. 특정 수를 입력받아 그 수의 배수를 배열에 입력하고 출력하세요.

enter number : 3
3 6 9 12 15 18 21 24 27 30

2. 5명의 학생의 점수를 배열로 입력받고 총점과 평균을 출력하세요.

enter score: 90
enter score: 90
enter score: 90
enter score: 90
enter score: 90
총점은 450점이며 평균은 90.00점입니다.

3. 5개의 정수를 배열로 입력받고 가장큰 수를 출력하세요.

98 78 76 57 99 60
가장 큰 수는 99입니다.

4. 5명의 학생의 점수를 입력받고 각 학생의 점수와 등수를 출력하세요.

1번 학생의 점수는? : 67
2번 학생의 점수는? : 70
3번 학생의 점수는? : 98
4번 학생의 점수는? : 79
5번 학생의 점수는? : 90

1번 학생은 67점, 5등입니다.
2번 학생은 70점, 4등입니다.
3번 학생은 98점, 1등입니다.
4번 학생은 79점, 3등입니다.
5번 학생은 90점, 2등입니다.

One Reply to “007. ARRAY”

    #include<stdio.h>
     
    int main(void) {
    	
    	int i,score[10];
    	int rank[10]={};
    	
    	for (i=0;i<10;i++){
    		printf("enter score : ");
    		scanf("%d",&score[i]);
    	} 
    	
    	for (i=0;i<10;i++)
    		for (j=0;j<10;j++)
    			if (score[i] <= score[j])
    				rank[i]++;
    
    	for (i = 0; i < 10; i++)
    		printf("%2d번 학생의 점수는  %3d점, %2d등입니다!\n", i+1, score[i], rank[i]);
    	
    	return 0;
    	
    }

Leave a Reply