네이버 지식인 풀이
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
// ================================
typedef struct {
int** Mat;
int size; // 행렬의 크기
int sum; // 행과열의 합
}Matrix;
// function prototype =============
void size_setting(Matrix**); // func (1)
void element_insert(Matrix**); // func (2)
void row_col_totalSum(Matrix**); // func (3)
// ================================
int main(void) {
Matrix* pMat = NULL;
pMat = (Matrix*)malloc(sizeof(Matrix)); // 메모리 할당
if (pMat == NULL) {
printf("malloc fail ... !!!\n");
exit(1);
}
size_setting(&pMat);
element_insert(&pMat);
row_col_totalSum(&pMat);
// 메모리 해제
free(pMat);
return 0;
} // end of main function
// ================================
void size_setting(Matrix** p) { // func (1)
int i, j; // index
printf("행렬 크기 입력: ");
scanf("%d", &(**p).size);
(*p)->Mat = (int**)malloc(sizeof(int*)*(**p).size);
for (i = 0; i < (**p).size; i++) {
*((*p)->Mat + i) = (int*)malloc(sizeof(int)*(**p).size);
}
// 배열 초기화
for (i = 0; i < (**p).size; i++) {
for (j = 0; j < (**p).size; j++) {
(*p)->Mat[i][j] = 0;
}
}
// 합 초기화
(** p).sum = 0x0;
// 확인
/*
for (i = 0; i < (**p).size; i++) {
for (j = 0; j < (**p).size; j++) {
printf("%d", (*p)->Mat[i][j]);
if (j != (**p).size - 1) {
printf(" ");
}
}
printf("\n");
}
*/
} // end of size_setting function
// ================================
void element_insert(Matrix** p) { // func (2)
int i, j;
srand((unsigned)time(NULL));
// 데이터 삽입
for (i = 0; i < (**p).size; i++) {
for (j = 0; j < (**p).size; j++) {
(*p)->Mat[i][j] = rand() % 20 + 1;
}
}
for (i = 0; i < (**p).size; i++) {
for (j = 0; j < (**p).size; j++) {
printf("%02d", (*p)->Mat[i][j]);
if (j != (**p).size - 1) {
printf(" ");
}
}
printf("\n");
}
} // end of element_insert function
// ================================
void row_col_totalSum(Matrix** p) { // func (3)
int r = 0; // 행
int c = 0; // 열
int i;
while (1) {
printf("행 입력 : ");
scanf("%d", &r);
printf("열 입력 : ");
scanf("%d", &c);
if (r < 0 || r >=(** p).size) {
printf("행 값이 범위를 벗어납니다.\n");
}
else {
// r >= 0 && r < (** p).size
if (c < 0 || c >= (** p).size) {
printf("열 값이 범위를 벗어납니다.\n");
}
else {
break;
}
}
}
for (i = 0; i < (**p).size; i++) {
// 행에 대한 합
(** p).sum += (** p).Mat[r][i];
}
for (i = 0; i < (**p).size; i++) {
// 열에 대한 합
(** p).sum += (** p).Mat[i][c];
}
printf("입력한 값의 행과 열의 전체 합은 : %02d\n", (** p).sum);
} // end of row_col_totalSum function