图像所C语言练习
编译环境GCC
1. struct MAT
{
int row,col;
int*p;
}
二维数组有一个MAT型结构体指向,其中row,col为数组的行和列大小,*p指向数组的具体数据。
(1)定义一个函数,struct MAT* createMat(int r,int c),分配一个结构体空间,指向一个r*c个单元的数组,并给数组分配空间,正确分配返回结构体地址,否者返回NULL。(2)定义函数,void showMat(struct MAT *m),显示m指向的矩阵所有值。
(3)定义函数char put(struct MAT *m,int r,intc,int n),给*m指向的数组的第r行,第c列赋值n,如果成功返回1,否则返回0。
(4)定义函数int get(struct MAT *m,int r,intc),返回*m指向的数组的第r行,第c列值。
(5)定义函数char save(FILE *f,struct MAT *m),以文本文件形式保存m的元素到文件f中, 如果成功返回1,否则返回0。
(6)定义函数char load(FILE *f,struct MAT *m),以文本文件形式读文件f的数据给m的元素, 如果成功返回1,否则返回0。
(7)定义函数void max(struct MAT *s,struct MAT *ms),寻找s矩阵每行的最大值,放在一个一维的矩阵ms中。
(8)定义矩阵加法函数,void add(struct MAT *src1,struct MAT *src1,struct MAT *dst),实现dst=src1+src2功能。
综合:利用以上函数,定义一个3X5的矩阵,给每个单元赋一个随机值(rand函数),并显示,求每行的最大值,并显示。
编译环境GCC
1. struct MAT
{
int row,col;
int*p;
}
二维数组有一个MAT型结构体指向,其中row,col为数组的行和列大小,*p指向数组的具体数据。
(1)定义一个函数,struct MAT* createMat(int r,int c),分配一个结构体空间,指向一个r*c个单元的数组,并给数组分配空间,正确分配返回结构体地址,否者返回NULL。(2)定义函数,void showMat(struct MAT *m),显示m指向的矩阵所有值。
(3)定义函数char put(struct MAT *m,int r,intc,int n),给*m指向的数组的第r行,第c列赋值n,如果成功返回1,否则返回0。
(4)定义函数int get(struct MAT *m,int r,intc),返回*m指向的数组的第r行,第c列值。
(5)定义函数char save(FILE *f,struct MAT *m),以文本文件形式保存m的元素到文件f中, 如果成功返回1,否则返回0。
(6)定义函数char load(FILE *f,struct MAT *m),以文本文件形式读文件f的数据给m的元素, 如果成功返回1,否则返回0。
(7)定义函数void max(struct MAT *s,struct MAT *ms),寻找s矩阵每行的最大值,放在一个一维的矩阵ms中。
(8)定义矩阵加法函数,void add(struct MAT *src1,struct MAT *src1,struct MAT *dst),实现dst=src1+src2功能。
综合:利用以上函数,定义一个3X5的矩阵,给每个单元赋一个随机值(rand函数),并显示,求每行的最大值,并显示。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 5
struct MAT {
int row ,col;
int *p ;
};
typedef struct MAT mat ;
typedef struct MAT* pmat;
struct MAT *createMat(int r,int c)
{
struct MAT * pMat ;
pMat = malloc(sizeof(mat));
if(pMat==NULL)
{
printf("creatMat fail \n");
return 0 ;
}
pMat->p = malloc(sizeof(int)*r*c);
pMat->row = r;
pMat->col = c;
return pMat ;
}
void showMat(struct MAT *m)
{
int i ,j;
for(i= 0;i < m->row;i++)
{
for(j=0;j < m->col;j++)
printf("%i ",*(m->p+i*m->col+j));
printf("\n");
}
}
char put(struct MAT *m,int r,int c,int n)
{
if(r > m->row&& c > m->col)
return 0;
*(m->p+(r-1)*m->col+c-1)= n;
return 1 ;
}
int get(struct MAT*m,int r,int c)
{
return *(m->p+m->col*(r-1)+c-1);
}
char save(FILE* f,struct MAT *m)
{
int i ,j;
for(i= 0;i < m->row;i++)
{
for(j=0;j < m->col;j++)
fprintf(f,"%i ",*(m->p+i*m->col+j));
fprintf(f,"\n");
}
return 1;
}
char load(FILE *f,struct MAT *m)
{
int i ,j ;
for(i= 0;i < m->row;i++)
for(j = 0 ;j < m->col;j++)
fscanf(f,"%i ",(m->p + m->col*i+j));
return 1;
}
void maxMat(struct MAT *s,struct MAT *ms)
{
int max ;
int i,j;
for(i = 0;i< s->row;i++)
{
max = *(s->p+ s->col*i);
for(j=1;j < s->col;j++)
{
if(max < *(s->p+s->col*i+j))
max = *(s->p+s->col*i+j);
}
*(ms->p+i) = max ;
}
}
void add(struct MAT *src1,struct MAT *src2,struct MAT *dst)
{
int i,j;
for(i = 0;i < src1->row;i++)
for(j=0;j< src1->col;j++)
*(dst->p+i*dst->col+j) = *(src1->p+i*src1->col+j) + *(src2->p+i*src2->col+j);
}
int main(int argc ,char* argv[])
{
struct MAT* m ,*ms,*dst;
int r ,c ;
FILE *fp;
fp = fopen("mat.txt","w");
srand((unsigned int)time(NULL));
m = createMat(ROW,COL);
ms = createMat(ROW,1);
dst = createMat(ROW,COL);
for(r= 1 ;r <= ROW;r++)
for(c = 1 ;c <= COL;c++)
put(m,r,c,(int)(100.0*rand()/RAND_MAX+1.0));
showMat(m);
maxMat(m,ms);
showMat(ms);
add(m,m,dst);
showMat(dst);
save(fp,m);
fclose(fp);
return 0;
}