본문 바로가기

프로그래밍/C 프로그래밍

[C언어] 배열

# 배열

  • 동일 자료형의 값들이 순서적으로 하나의 이름에 모여 있는 것
  • 배열의 각 요소는 하나의 변수로 취급
  • 각각의 자료들은 원소라 하며, 이들은 배열명과 첨자로 구분
  • 첨자의 표현은 대괄호로 나타냄.

# 1차원 배열

  • 배열의 첨자가 하나만 있음
  • 첨자의 개수는 배열 전체의 구성요소의 개수를 의미 (첨자 0부터 시작)
  • 1차원 배열의 초기화
    • 배열을 선언하면 기억공간을 초기화해야 한다.
  •  1차원 배열의 초기화방법
    • 배열 선언 후 초기값 할당 : 반드시 배열의 크기 지정.
    • 외부로부터 자료 입력받아 초기화: ex)  scanf("%d", &x[ i ]);

배열선언과 동시에 초깃값 할당

int array[4] = {10,20,30,40};
int array[] = {10,20,30,40}; // 배열의 크기 생략 가능
int array[4] = {10,20,30, };
int array[4] = {10, ,30,40}; // 에러 발생

# 2차원 배열

  • 2차원 배열의 선언과 초기화
int array[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

int array[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};

int array[3][3] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9}};

//3차원 배열
int a[2][3][4]={{{1,2,3,4},{5,6,7,8},{9,10,11,12}},
				{{13,14,15,16},{17,18,19,20},{21,22,23,24}}}

 

# char형 배열

형식: char 배열명[문자열 길이 + 1]
사용예: char str[12]
// 배열명이 str이고, 12문자 길이가진 char형 배열

 

  • char형 배열 선언과 초기화
char name[ ] = "HONG GIL DONG"; //문자열 단위로 초기화
// 자동으로 맨 끝에 \0 삽입
char address[ ] = {'S', 'E', 'O', 'U', 'L', '\0'}; //문자단위
//‘\0’문자를 삽입해야 함
char adrs[6]={'S','E','O','U','L','\0'};
  • 문자단위로 초기화할 때 마지막 요소에 \0 붙이지 않으면 쓰레기 값이 붙을 수 있음.
  • ⭐scanf()함수 호출을 통해 입력 받은 문자열의 끝에도 \0가 자동으로 삽입됨

 

# [실습] 학생들의 성적을 입력받아 총점과 평균을 구하고, 성적순으로 출력하는 프로그램

#include <stdio.h>
#define N 10

void input(int scr[], int size);
int sum2(int scr[], int size);
void sort(int scr[], int size);

int main(){
	int score[N] = {0};
	int j, sum;
	float average;
	
	input(score, N);
	sum = sum2(score, N);
	average = (float) sum/N;
	printf("평균: %f \n",average);
	
	sort(score, N);
	printf("성적순 : ");
	for(j=0; j<N; j++)
		printf("%d	", score[j]);
	printf("\n");
	
} 

void input(int scr[], int size) { //배열을 매개변수로 전달
	int j;
	for(j = 0; j<size; j++){
		printf("%d번째 성적을 입력하세요: ", j+1);
		scanf("%d", &(scr[j]));
	} 
}

int sum2(int scr[], int size){
	int sum, j;
	for(sum = 0, j = 0; j < size; j++)
		sum += scr[j];
	return sum;
}

void sort(int scr[], int size){
	int j, k, temp;
	for(j=0; j<size-1; j++){
		for(k = size-1; k > j; k--){
			if(scr[k-1] > scr[k]){
				temp = scr[k-1];
				scr[k-1] = scr[k];
				scr[k] = temp;
			}
		}
	}
}

 

// 3 X 3 행렬 2개를 읽어들여 합을 출력하는 프로그램 
#include <stdio.h>
int main(){
	int A[3][3], B[3][3], C[3][3];
	int i, j;
	
	printf("*** Input the first matrix (3*3) *** \n");
	
	for(i=0; i<3; i++)
		for(int j=0; j<3; j++)
		scanf("%d", &A[i][j]); //2차원배열의 각 요소에 자리 입력
	
	printf("\t ## A ## \n");
	
	for (i=0; i<3; i++){
		for(int j=0; j<3; j++)
			printf("%d", A[i][j]);
		printf("\n");
	}
	printf("*** Input the second matrix (3*3) *** \n");
	
	for(i=0; i<3; i++)
		for(int j=0; j<3; j++)
			scanf("%d", &B[i][j]); // 2차원배열의 각 요소에 자리 입력
	
	printf("\t ## B ## \n");
	
	for (i=0; i<3; i++){
		for(int j=0; j<3; j++)
			printf("%d", B[i][j]);
		printf("\n");
	}	
	
	for(i=0; i<3; i++)
		for(int j=0; j<3; j++)
			C[i][j] = A[i][j] + B[i][j];
			
	printf("\n *** C=A+B *** \n");
	printf("\t ## C ## \n");

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

 

# 전치 행렬

#include <stdio.h>

int main(){
	int i, j;
	int dim[5][5] = {
		{4,5,6,7,8}, {5,2,4,6,2},{4,7,8,5,2}, {3,5,8,9,6}, {7,5,6,9,8} };
	
	const int max_count = sizeof(dim)/sizeof(dim[0]); // 배열 전체의 크기 / 배열의 첫번째 행의 크기 = 배열의 행 개수 
	
	printf("원래의 행렬 \n");
	
	for(i=0; i<max_count; i++){
		for(j=0; j<max_count; j++)
			printf("%d ", dim[i][j]);
		printf("\n");
	}
	printf("\n");
	for(i=0; i<max_count; i++){
		for(j=0; j<i; j++){
			dim[i][j] ^= dim[j][i]; //XOR 연산 사용.
			dim[j][i] ^= dim[i][j];
			dim[i][j] ^= dim[j][i];
		}
	}
	
	printf("전치행렬 \n");
	for(i=0; i<max_count; i++){
		for(j=0; j<max_count; j++)
			printf("%d ", dim[i][j]);
		printf("\n");
	}
	
}

// 결과값
원래의 행렬
4 5 6 7 8
5 2 4 6 2
4 7 8 5 2
3 5 8 9 6
7 5 6 9 8

전치행렬
4 5 4 3 7
5 2 7 5 5
6 4 8 8 6
7 6 5 9 9
8 2 2 6 8

 

반응형

'프로그래밍 > C 프로그래밍' 카테고리의 다른 글

[C언어] 구조체와 공용체  (0) 2024.06.06
[C언어] 포인터 및 참조  (0) 2024.06.05
[C언어] 함수  (0) 2024.06.04
[C언어] 선택제어문/반복제어문  (0) 2024.06.04
[C언어] 입출력함수와 연산자  (1) 2024.06.04