언어/c언어

네이버 지식인 풀이

파아랑새 2018. 11. 10. 21:23

# 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