이 문제를 해결하기 위한 C 프로그램을 단계별로 작성하려면 다음과 같은 함수들이 필요합니다:
1. `createMatrix`: `m`과 `n`을 인자로 받아 동적 메모리 할당을 통해 행렬을 생성하고, 행렬의 포인터를 반환합니다.
2. `fillMatrix`: 할당된 행렬에 -100에서 100 사이의 난수를 채워 넣습니다.
3. `addMatrices`: 두 행렬을 더하는 함수입니다. 덧셈 결과를 새로운 행렬에 저장하여 반환합니다.
4. `subtractMatrices`: 두 행렬을 빼는 함수입니다. 뺄셈 결과를 새로운 행렬에 저장하여 반환합니다.
5. `printMatrix`: 행렬을 화면에 출력합니다.
6. `freeMatrix`: 할당된 메모리를 해제합니다.
프로그램의 각 부분을 아래의 코드 예시를 참고하여 구현할 수 있습니다:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int** createMatrix(int m, int n);
void fillMatrix(int **matrix, int m, int n);
void printMatrix(int **matrix, int m, int n);
int** addMatrices(int **a, int **b, int m, int n);
int** subtractMatrices(int **a, int **b, int m, int n);
void freeMatrix(int **matrix, int m);
int main() {
srand(time(NULL)); // 난수 초기화
int m, n;
printf("m과 n의 값을 입력하세요 (2 ≤ m, n ≤ 5): ");
scanf("%d %d", &m, &n);
int **A = createMatrix(m, n);
int **B = createMatrix(m, n);
fillMatrix(A, m, n);
fillMatrix(B, m, n);
int **C = addMatrices(A, B, m, n);
int **D = subtractMatrices(A, B, m, n);
printf("행렬 A:\n");
printMatrix(A, m, n);
printf("행렬 B:\n");
printMatrix(B, m, n);
printf("행렬 A+B:\n");
printMatrix(C, m, n);
printf("행렬 A-B:\n");
printMatrix(D, m, n);
freeMatrix(A, m);
freeMatrix(B, m);
freeMatrix(C, m);
freeMatrix(D, m);
return 0;
}
// 이제 각 함수를 정의하고 구현해야 합니다. 예를 들어:
int** createMatrix(int m, int n) {
// ... 동적 메모리 할당과 NULL 포인터 검사 ...
}
void fillMatrix(int **matrix, int m, int n) {
// ... -100과 100 사이의 값으로 행렬 채우기 ...
}
void printMatrix(int **matrix, int m, int n) {
// ... 행렬 출력 ...
}
int** addMatrices(int **a, int **b, int m, int n) {
// ... 두 행렬 더하기 ...
}
int** subtractMatrices(int **a, int **b, int m, int n) {
// ... 두 행렬 빼기 ...
}
void freeMatrix(int **matrix, int m) {
// ... 할당된 메모리 해제 ...
}
```
위의 예시는 플랫폼에 따라 다르게 구현될 수 있습니다. 실제 구현을 진행하기 위해서는 C 언어 개발 환경이 필요합니다. 도움이 필요하면 구체적인 코드 구현에 관해 질문해 주세요.