#include <stdio.h>
#include <stdlib.h>
typedef struct
{
size_t rows,cols;
double *data;
} Matrix;
Matrix makeMatrix(size_t rows,size_t cols)
{
Matrix m={rows,cols,0};
m.
data=(double*)malloc(rows
*cols
*sizeof(double)); return m;
}
double *valueMatrix(Matrix *m,size_t r,size_t c)
{
return &m->data[r*m->cols+c];
}
void showMatrix(Matrix *m)
{
size_t r,c;
for(r
=0;r
<m
->rows
;++r
,printf("\n")) for(c
=0;c
<m
->cols
;++c
) printf("\t%7.2lf"+!c
,*valueMatrix
(m
,r
,c
)); }
void scanMatrix(Matrix *m)
{
size_t r,c;
for(r
=0;r
<m
->rows
;++r
) for(c
=0;c
<m
->cols
;++c
) scanf("%lf",valueMatrix
(m
,r
,c
)); }
void freeMatrix(Matrix *m)
{
}
int main()
{
Matrix m=makeMatrix(3,4);
scanMatrix(&m);
showMatrix(&m);
freeMatrix(&m);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IAp7CglzaXplX3Qgcm93cyxjb2xzOwoJZG91YmxlICpkYXRhOwp9IE1hdHJpeDsKCk1hdHJpeCBtYWtlTWF0cml4KHNpemVfdCByb3dzLHNpemVfdCBjb2xzKQp7CglNYXRyaXggbT17cm93cyxjb2xzLDB9OwoJbS5kYXRhPShkb3VibGUqKW1hbGxvYyhyb3dzKmNvbHMqc2l6ZW9mKGRvdWJsZSkpOwoJcmV0dXJuIG07Cn0KCmRvdWJsZSAqdmFsdWVNYXRyaXgoTWF0cml4ICptLHNpemVfdCByLHNpemVfdCBjKQp7CglyZXR1cm4gJm0tPmRhdGFbciptLT5jb2xzK2NdOwp9Cgp2b2lkIHNob3dNYXRyaXgoTWF0cml4ICptKQp7CglzaXplX3QgcixjOwoJZm9yKHI9MDtyPG0tPnJvd3M7KytyLHByaW50ZigiXG4iKSkgZm9yKGM9MDtjPG0tPmNvbHM7KytjKSBwcmludGYoIlx0JTcuMmxmIishYywqdmFsdWVNYXRyaXgobSxyLGMpKTsKfQoKdm9pZCBzY2FuTWF0cml4KE1hdHJpeCAqbSkKewoJc2l6ZV90IHIsYzsKCWZvcihyPTA7cjxtLT5yb3dzOysrcikgZm9yKGM9MDtjPG0tPmNvbHM7KytjKSBzY2FuZigiJWxmIix2YWx1ZU1hdHJpeChtLHIsYykpOwp9Cgp2b2lkIGZyZWVNYXRyaXgoTWF0cml4ICptKQp7CglmcmVlKG0tPmRhdGEpOwoJbWVtc2V0KG0sc2l6ZW9mKE1hdHJpeCksMCk7Cn0KCmludCBtYWluKCkKewoJTWF0cml4IG09bWFrZU1hdHJpeCgzLDQpOwoJc2Nhbk1hdHJpeCgmbSk7CglzaG93TWF0cml4KCZtKTsKCWZyZWVNYXRyaXgoJm0pOwoJcmV0dXJuIDA7Cn0=