帮我找找问题,好不好啊!!谢谢各位大神了
#include<stdio.h>
#include<stdlib.h>
struct data
{
int nrow;
int ncol;
int **data;
};
int** allocate(int nrows,int ncols)
{
int row;
int **matrix;
matrix=(int**)(malloc(nrows*sizeof(int*)));
for(row=0;row<nrows;row++)
matrix[row]=(int*)(malloc(ncols*sizeof(int)));
return matrix;
}
void read_matrix(struct data *X)
{
int row,col;
int nrow,ncol;
printf("Enter matrix data: \n");
for(row=0;row<X->nrow;row++)
for(col=0;col<X->ncol;col++)
scanf("%d",&X->data[row][col]);
}
void add(struct data *A, struct data *B)
{
int i,j;
printf("A+B=\n");
for(i=0;i<A->nrow;i++)
{
for(j=0;j<A->ncol;j++)
printf("%5d",A->data[i][j]+B->data[i][j]);
printf("\n");
}
}
void subtract(struct data *A, struct data *B)
{
int i,j;
printf("A-B=\n");
for(i=0;i<A->nrow;i++)
{
for(j=0;j<A->ncol;j++)
printf("%5d",A->data[i][j]-B->data[i][j]);
printf("\n");
}
}
void multiply_matrix(struct data *A, struct data *B)
{
int m,p,q;
int **c;
int sum;
sum=0;
if (A->ncol==B->nrow)
{
c=allocate(A->ncol,B->nrow);
for(m=0;m<A->nrow;m++)
{
for(p=0;p<B->ncol;p++)
{
for(q=0;q<A->ncol;q++)
{
sum=sum+(A->data[m][q]*B->data[q][p]);
}
c[m][p]=sum;
sum=0;
}
}
printf("\nA * B =\n");
for(m=0;m<A->nrow;m++)
{
for(p=0;p<B->ncol;p++)
{
printf("%1.1f ",(float)c[m][p]);
}
printf("\n");
}
printf("\n");
}
else
printf("Multiplication is is invalid\n");
}
void transpose(struct data *A, struct data *B)
{
int i,j;
printf("Transpose of A= \n");
for(i=0;i<A->ncol;i++)
{
for(j=0;j<A->nrow;j++)
printf("%5d",A->data[j][i]);
printf("\n");
}
}
void determinant(struct data *A, struct data *B)
{
int i,j;
int result;
if(A->ncol==2&&A->nrow==2)
{
for(i=0;i<A->nrow;i++)
{
for(j=0;j<A->ncol;j++)
{
result=A->data[0][0]*A->data[1][1]-A->data[1][0]*A->data[0][1];
}
}
printf("Determinant of A=%d\n",result);
}
else
printf("Determinant of A is invalid for a %d*%d matrix\n",A->nrow,A->ncol);
}
int main(void)
{
int option;
int **matrix;
struct data A,B;
A.nrow=0;
printf("1 - Enter matrices A & B\n");
printf("2 - Add matrices\n");
printf("3 - Subtract matrices\n");
printf("4 - Multiply matrices\n");
printf("5 - Transpose of A\n");
printf("6 - Determinant of A\n");
printf("7 - Quir program\n");
do
{
printf("\nOption: ");
scanf("%d",&option);
switch(option)
{
case 1:
if(A.nrow!=0)
{
free(A.data);
free(B.data);
}
printf("Number of rows in A: ");
scanf("%d",&A.nrow);
printf("Number of columns in A: ");
scanf("%d",&A.ncol);
A.data=allocate(A.nrow,A.ncol);
read_matrix(&A);
printf("\nNumber of rows in B: ");
scanf("%d",&B.nrow);
printf("Number of columns in B: ");
scanf("%d",&B.ncol);
B.data=allocate(A.nrow,A.ncol);
read_matrix(&B);
break;
case 2:
add(&A,&B);
break;
case 3:
subtract(&A,&B);
break;
case 4:
multiply_matrix(&A,&B);
break;
case 5:
transpose(&A,&B);
break;
case 6:
determinant(&A,&B);
break;
case 7:
printf("End of program\n");
break;
default:
printf("Invalid operator\n");
break;
}
}while(option!=7);
return 0;
}
struct data
{
float nrow;
float ncol;
float **data;
};
scanf("%d",&X->data[row][col]);
scanf("%f",&X->data[row][col]);
if(A.nrow!=0)
{
free(A.data);
free(B.data);
}
int i = 0;
for(i = 0; i != nrows; ++i)
{
free(matrix[i]);
}
free(matrix);
struct data A,B;
A.nrow=0;