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