#include <stdio.h>
#include <time.h>
#include <malloc.h>
#define MAXLEN 100
typedef int ElemType;
typedef struct
{
int i,j;// 行下标,列下标
ElemType e; //元素值
} Doubtle;
typedef struct
{ Doubtle data[MAXLEN+1]; // 非零元三元组表,data[0]未用
int m,n,t;// 矩阵的行数、列数和元素个数
} Matrix;
int InitMatrix(Matrix *M)
{
*M=(Matrix*)malloc(sizeof(Matrix));
}
int MatrixCreat(Matrix M)
{ int a,b;
srand((int)time(NULL));
a=rand()%10+1;
b=rand()%10+1;
M.m=a;
M.n=b;
M.t=a*b;
int i,j,e;
for(e=1;e<=M.t;e++)
{for(i=1;i<=M.m;i++)
{for(j=1;j<=M.n;j++)
{srand((int)time(NULL));
M.data[e].e=rand()%50+1;
M.data[e].i=i;
M.data[e].j=j;
e++;
}
}
}
}
// 输出矩阵M
void PrintSMatrix(Matrix M)
{
int i;
printf("\n %d 行, %d 列, %d 个元素。\n",M.m, M.n, M.t);
printf("%4s %4s %8s\n", "i", "j", "e");
printf("======================\n");
for(i=1; i<=M.t; i++)
printf("%4d %4d %8d\n", M.data[i].i, M.data[i].j, M.data[i].e);
}
void qiuanma(Matrix M)
{
int q,p;
int MAX=0,MIN=100;
int lie,hang;
int anma;
for(q=1;q<=M.m;q++)
{
for(p=1;p<=M.n;p++)
{
if(M.data[p].e>MAX)
{MAX=M.data[p].e;
lie=M.data[p].j;}
}
if(M.data[q].e<MIN)
{MIN=M.data[q].e;
hang=M.data[q].i;
}
}
if(MIN==MAX)
{anma=MIN;}
printf("\n鞍马点为第%d行第%d列,元素值为%d",hang,lie,anma);
}
int main(int argc, char *argv[])
{ Matrix *T;
InitMatrix(T);
MatrixCreat(*T);
PrintSMatrix(*T);
qiuanma(*T);
return 0;
}
我想创建一个随机矩阵,然后求它的鞍马点的行列以及值,但是给矩阵分配空间的时候好像出了问题
你对指针的概念还是不很清楚
1。对你的程序
Matrix *T;
InitMatrix(T); //这里的T不会改变你的指针的值的,正确的
要改为
Matrix *T;
InitMatrix(&T);
函数声明改为
int InitMatrix(Matrix **M)
2。同样
MatrixCreat(*T);
不要改变*T中的内容的(也就是你无论在MatrixCreat中做什么,都不会影响到最后的结果的
(你好好看下C语言有关参数部分,特别是形参/实参的概念和作用)
另外,你的结果与这个申明没有关系,我上次已结你回得较清楚的(可能你没有细细的看下)
你可能没有好好研究下数组结构,这个是编程最大的基础
程序 = 数据结构 + 算法
若按你的数据结构,你的程序要达到你的结果,要用以下程序
(不能上文本了)
一周热门 更多>