c语言错误error: incompatible types in assignment

2019-04-26 14:14发布

#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条回答

你对指针的概念还是不很清楚

1。对你的程序

  Matrix *T;
   InitMatrix(T); //这里的T不会改变你的指针的值的,正确的

要改为

  Matrix *T;
   InitMatrix(&T);

函数声明改为

int InitMatrix(Matrix **M)

2。同样

MatrixCreat(*T);

不要改变*T中的内容的(也就是你无论在MatrixCreat中做什么,都不会影响到最后的结果的

(你好好看下C语言有关参数部分,特别是形参/实参的概念和作用)

另外,你的结果与这个申明没有关系,我上次已结你回得较清楚的(可能你没有细细的看下)

你可能没有好好研究下数组结构,这个是编程最大的基础

程序 = 数据结构 + 算法

若按你的数据结构,你的程序要达到你的结果,要用以下程序

(不能上文本了)


一周热门 更多>