C/C++ 프로그래밍 · 7 min read · Oct 12, 2025
C/C++ 단계별 학습 - 페이지 7
07. 단계별 C/C++ — C 프로그래밍 - 배열
| 1. 배열 소개 | |
| 2. 배열에 대하여 | |
| 3. 배열 요소 | |
| 4. 배열을 함수에 전달하기 |
| | 5. 배열의 종류 | | - 단일 차원 배열 1. 요소 추가
- 요소 삽입
- 요소 삭제
- 요소 교체
- 요소 검색
- 배열 삭제
- 배열 정렬 - 다차원 배열
다차원 배열을 이용한 행렬 연산 | |
1. 배열 소개
변수는 상수 값을 저장할 수 있습니다. 단일 상수 값만 저장할 수 있으며, 변수에 두 개 이상의 값을 저장하는 것은 불가능합니다.
다음 예제는 변수의 범위를 보여줍니다.
| | int main()
{
int sno;
sno = 1001;
sno = 1008;
sno = 1005;
printf(“%d”, sno);
return 0;
} | | | 출력:
1005 |
위 프로그램은 1005만 표시할 수 있으며, 모든 값(즉, 1001, 1008, 1005)을 표시할 수 없습니다.
위 프로그램 대신 다음 프로그램을 사용할 수 있을까요?
| | int main()
{
int sno;
sno 0 = 1001;
sno 1 = 1008;
sno 2 = 1005;
printf(“%d”, sno);
return 0;
} | | | 출력:
아무것도,
위 프로그램은 접근 방식이 잘못되어 오류 목록을 표시합니다. |
0 오류 프로그램을 얻기 위해 다음 프로그램을 계속 진행합시다.
| | int main()
{
int sno[3];
sno[0] = 1001;
sno[1] = 1008;
sno[2] = 1005;
printf(“%d”, sno[2] );
return 0;
} | / 3 값을 삽입하기 위해 /
/ 첫 번째 위치에 1001 삽입 /
/ 다음 위치에 1008 삽입 /
/ 그리고 다음 위치에 1005 삽입 /
/ 두 번째 위치의 값을 출력 / | | | | | 출력:
아무것도 | |
위 프로그램은 접근 방식이 잘못되어 오류 목록을 표시합니다.
위 프로그램에 따라 변수 sno는 여러 학생 번호를 저장할 수 있습니다. 다중 위치 기술을 사용하여 쉽게 할 수 있으며, 이를 배열이라고도 합니다.
2. 배열에 대하여
배열은 동일한 유형의 여러 데이터 항목을 포함합니다. 이 유형은 단순 데이터 유형, 구조체 또는 클래스일 수 있습니다. 배열의 항목은 요소라고 합니다. 요소에 접근하는 숫자를 인덱스라고 합니다. 배열이 정의될 때 요소는 특정 값으로 초기화될 수 있습니다.
배열은 여러 차원을 가질 수 있습니다.
2차원 배열은 배열의 배열입니다. 배열의 주소는 함수의 인수로 사용될 수 있으며, 배열 자체는 복사되지 않습니다. 배열은 클래스의 멤버 데이터로 사용할 수 있습니다. 배열 외부의 메모리에 데이터가 배치되지 않도록 주의해야 합니다.
/ 다음 프로그램은 4명의 나이를 읽고 표시합니다 /
| | / 47_arrays.c /
#include
int main()
{
int age[4], i;
for( i=0; i<4; i++)
{
printf(“나이를 입력하세요 “); scanf(“%d”, &age[i]);
}
for(i=0; i<4; i++)
printf(“ 입력한 값은 %d입니다”, age[i]);
return 0;
} |
| |
|
C의 다른 변수와 마찬가지로 배열은 정보를 저장하기 위해 사용되기 전에 정의되어야 합니다. 그리고 다른 정의와 마찬가지로 배열 정의는 변수 유형과 이름을 지정합니다.
그러나 또 다른 기능이 포함됩니다: 크기. 크기는 배열이 포함할 데이터 항목의 수를 지정합니다. 이는 이름 바로 뒤에 오며, 대괄호로 둘러싸입니다.
3. 배열 요소
배열의 항목은 요소라고 합니다. 단일 차원 배열은 행 또는 열 방향으로 값을 수용합니다. 단일 세트의 값만 저장할 수 있습니다.
첫 번째 배열 요소는 0, 두 번째는 1 등입니다.
| |
|
배열 값은 설계 시간에 직접 초기화할 수 있습니다.
배열 초기화는 다음과 같습니다..
| |
|
4. 배열을 함수에 전달하기
배열은 함수의 인수로 사용할 수 있습니다.
함수 선언에서 배열의 데이터 유형과 크기는 배열 인수를 나타냅니다.
void display(float [DISPLAY][MONTHS]);
함수가 호출될 때 배열의 이름만 인수로 사용됩니다.
display(sales); 10 요소의 배열을 수용하고 인쇄하는 프로그램
| | / 48_ ele10.c /
#define MAX 10
display(int a[MAX])
{
int i;
for(i = 0;i
}
int main()
{
int x[MAX], i;
for(i=0;i
display(x);
return 0;
} |
함수에서 값을 배열로 반환하는 것도 가능하지만 포인터 개념에 대해 명확해야 합니다. 더 많은 정보는 포인터 주제를 참조하십시오.
5. 배열의 분류
배열은 두 가지 유형이 있습니다.
| | 1. 단일 차원 배열
- 다차원 배열 |
1. 단일 차원 배열
단일 차원 배열은 요소의 집합을 행 또는 열 형식으로 모은 것입니다.
단일 차원 배열은 다음 작업을 수용할 수 있습니다.
| | 1. 요소 추가
- 요소 삽입
- 요소 삭제
- 요소 교체
- 요소 검색
- 배열 삭제
- 배열 정렬 |
다음 프로그램은 위에서 설명한 모든 작업을 수행할 수 있습니다.
| | / 배열 함수 /
/ 49_sarray.c /
#define N 100
#define M 10
int i,j,r,c,r1,r2,c1,c2; / 배열 요소 읽기 /
int accept_values(int a[N])
{
int n;
printf(“ 입력할 값의 수는..? ”);
scanf(“%d”,&n);
printf(“ 데이터 요소를 입력하세요.. ”);
for(i=0;i
return n;
} / 배열 요소 표시 /
void display(int a[N],int n)
{
printf(“ 배열 요소는…”);
for(i=0;i
} / 배열 요소 삭제 /
int delete_cell(int a[N],int n)
{
int pos;
char ch;
printf(“ 삭제할 요소의 위치를 입력하세요: ”);
scanf(“%d”,&pos);
for(i=pos-1;i
n–;
printf(“ 계속하시겠습니까..(y/n)?”);
ch = getche();
if(ch == ‘y’) delete_cell(a,n);
return n;
} / 배열 요소 삽입 /
int insert_cell(int a[N],int n)
{
int pos, new;
char ch;
printf(“ 삽입할 요소를 입력하세요: ”); scanf(“%d”,&new);
printf(“ 삽입할 위치를 입력하세요: ”); scanf(“%d”,&pos);
for(i=n;i>=pos;i–)
a[i] = a[i-1];
a[pos-1] = new;
n++;
printf(“ 계속하시겠습니까..(y/n)?”);
ch = getche();
if(ch==’y’) insert_cell(a,n);
return n;
} / 기존 배열에 요소 추가 /
int append_cell(int a[N],int n)
{
int pos, new;
char ch;
printf(“ 추가할 요소를 입력하세요: ”);
scanf(“%d”,&new);
a[n] = new;
n++;
printf(“ 계속하시겠습니까..(y/n)?”);
ch = getche();
if(ch==’y’)append_cell(a,n);
return n;
} / 배열 요소를 내림차순으로 정렬 /
void sort_list_descend(int a[N],int n)
{
int temp;
for(i=0;i
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ 내림차순으로 정렬된 요소는…”);
} / 배열 요소를 오름차순으로 정렬 /
void sort_list_ascend(int a[N],int n)
{
int temp;
for(i=0;i
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ 오름차순으로 정렬된 요소는..”);
} / 기존 배열의 최소 및 최대 찾기 /
void small_big(int a[N],int n)
{
int temp;
for(i=0;i
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ 최소 요소는 : %d”,a[n-1]);
printf(“ 최대 요소는 : %d”,a[0]);
} / 배열에서 요소 검색 /
void search(int a[N],int n)
{
int target, temp=0;
printf(“ 검색할 요소를 입력하세요: ”);
scanf(“%d”,&target);
for(i=0;i
{
printf(“ 위치 %d에서 발견”,i+1);
temp = 1;
}
if(temp == 0)
printf(“ 발견되지 않음”);
} / 메인 프로그램 / / 간단한 배열 작업을 시연하기 위해 /
#include
#include
int main()
{
int a[m],n; char ch;
clrscr();
n = accept_values(a);
do
{
printf(“ 1 - append_cell”);
printf(“ 2 - delete_cell”);
printf(“ 3 - insert_cell”);
printf(“ 4 - sort_list_descend”);
printf(“ 5 - sort_list_ascend”);
printf(“ 6 - small_big”);
printf(“ 7 - search”);
printf(“ 8 - remove_list”);
printf(“ 9 - exit”);
printf(“ 선택하세요: ”); ch = getche();
printf(“ ”);
switch(ch)
{
case ‘1’: n = append_cell(a,n); break;
case ‘2’: n = delete_cell(a,n); break;
case ‘3’: n = insert_cell(a,n); break;
case ‘4’: sort_list_descend(a,n); break;
case ‘5’: sort_list_ascend(a,n); break;
case ‘6’: small_big(a,n); break;
case ‘7’: search(a,n); break;
case ‘8’: n = 0; break;
case ‘9’: printf(“ 프로그램을 종료합니다.”); break;
}
display(a,n);
printf(“ 다시 실행하시겠습니까..(y/n)?”);
ch = getche();
}
while(ch!=’9’);
return 0;
} |
2. 이중 차원 배열
이중 차원 배열은 요소의 집합을 행과 열 형식으로 모은 것입니다.
다차원 배열은 다음 작업을 수용할 수 있습니다.
다차원 배열은 행렬 영역에서 전체 작업을 가장 쉽게 이해하기 위해 일반적으로 사용됩니다.
행렬 함수
| | / 50_menumat.c /
#define N 100
#define M 10
int i, j, r, c, r1, r2, c1, c2; / 행렬의 값을 읽기 /
void read_matrix(int A[M][M])
{
printf(“ 행의 수는? ”);
scanf(“%d”,&r);
printf(“ 열의 수는? ”);
scanf(“%d”,&c);
for(i=0;i
} / 행렬의 값을 쓰기 /
void disp_matrix(int A[M][M])
{
for(i=0;i
for(j=0;j
printf(“ ”);
}
} / 임의의 차수의 행렬에 대한 전치 찾기 /
void tra_matrix_1(int T[M][M],int A[M][M])
{
printf(“ A의 전치는 ”);
for(i=0;i
for(j=0;j
T[i][j] = A[j][i];
printf(“%5d”,T[i][j]);
}
printf(“ ”);
}
} / 두 행렬 더하기
( 가능, 단 동일한 차수일 때 ) /
void add_matrix(int C[M][M],int A[M][M],int B[M][M])
{
for(i=0;i
printf(“ A와 B의 합은”);
} / 임의의 차수의 행렬 곱하기
( 행렬 곱셈 규칙을 따라야 함 ) /
void mul_matrix_1(int C[M][M],int A[M][M],int B[M][M])
{
int k;
printf(“ A와 B의 곱은.. ”);
printf(“ 행렬 C ”);
for(i=0;i
for(j=0;j
C[i][j]=0;
for(k=0;k
printf(“%5d”,C[i][j]);
}
printf(“ ”);
}
} / 두 행렬 빼기
( 가능, 단 동일한 차수일 때 ) /
void sub_matrix(int C[M][M],int A[M][M],int B[M][M])
{
for(i=0;i
printf(“ A와 B의 차이는”);
} / 행렬 작업을 수행하는 메뉴 기반 프로그램 */
#include
#include
int main()
{
int A[M][M],B[M][M],C[M][M],T[M][M]; char ch;
clrscr( );
printf(“ 행렬 A 요소를 입력하세요.. ”); read_matrix(A); r1=r; c1=c;
printf(“ 행렬 A ”); disp_matrix(A);
printf(“ 행렬 B 요소를 입력하세요.. ”); read_matrix(B); r2=r; c2=c;
printf(“ 행렬 B ”);disp_matrix(B);
do {
printf(“ 1:덧셈”);
printf(“ 2:뺄셈”);
printf(“ 3:곱셈”);
printf(“ 4:전치”);
printf(“ 5:종료”);
printf(“ 선택하세요..”); ch = getche();
switch(ch)
{
case ‘1’:
if(r1==r2 && c1==c2)
{
add_matrix(C,A,B);printf(“ 행렬 C ”);
disp_matrix(C);
}
else
{
printf(“ 입력한 r1,r2 및 c1,c2 값이 같지 않으므로,”);
printf(“ 따라서 이 행렬 덧셈을 수행할 수 없습니다.”);
printf(“ 올바른 행렬을 입력하세요.”);
} break;
case ‘2’:
if(r1==r2 && c1==c2)
{
sub_matrix(C,A,B);printf(“ 행렬 C ”);
disp_matrix(C);
}
else
{
printf(“ 입력한 r1,r2 및 c1,c2 값이 같지 않으므로,”);
printf(“ 따라서 이 행렬 뺄셈을 수행할 수 없습니다.”);
printf(“ 올바른 행렬을 입력하세요.”);
} break;
case ‘3’:
if(c1==r2)
mul_matrix_1(C,A,B);
else
{
printf(“ 행렬 A의 열(c1)이”);
printf(“행렬 B의 행(r2)과 같지 않습니다.”);
printf(“ 따라서 이 행렬 곱셈을 수행할 수 없습니다.”);
printf(“ c1 == r2인 행렬을 입력하세요.”);
} break;
case ‘4’:
printf(“ 행렬 A의 차수는 %d x %d입니다”,r1,c1);
tra_matrix_1(T,A);
printf(“ A 전치의 차수는 %d x %d입니다”,c1,r1); break;
case ‘5’: printf(“ 프로그램을 종료합니다.”); break;
}
printf(“ 다시 실행하시겠습니까…[y/n]? ”); ch=getche();
}while(ch!=’5’);
return 0;
}
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.