首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮小弟我找找有关问题,好不好啊多谢各位大神了

2013-02-27 
帮我找找问题,好不好啊!!谢谢各位大神了#includestdio.h#includestdlib.hstruct data{int nrowint nc

帮我找找问题,好不好啊!!谢谢各位大神了


#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;
}



这是我写的代码,但是只能输入整数,我想输入小数的,时候总是会出错,我试着将一些地方改成float,好像不行,我不知道怎么改了,可不可以帮我帮我啊。。。拜托了

最后显示就像这幅图一样。。。。。
帮小弟我找找有关问题,好不好啊多谢各位大神了
[解决办法]

struct data
{
    float nrow;
    float ncol;
    float **data;
};


所有数据改成float试试,不行,就用强制转换
[解决办法]
我估计你的问题出在这里

1 : 

scanf("%d",&X->data[row][col]);  


改成

scanf("%f",&X->data[row][col]);  


scanf和printf我很久没用了,也有可能不是%f

2 :
int **data也得改成float **data,这是比较简单的方法
另外一个方法是把int **data改成char **data
然后根据不同的type分配资源(malloc(sizeof(**) * x) )并且进行type转换

3 : 

if(A.nrow!=0)
            {
                free(A.data);
                free(B.data);
            }


这里怪怪的,你的资源释放的不完全
既然分成2维分配资源,应该也要以2维的
方法释放资源


int i = 0;
for(i = 0; i != nrows; ++i)
{
    free(matrix[i]);
}
free(matrix);


4 :

struct data A,B;
    A.nrow=0;

如果没有什么特殊的理由,请你写一个简单的函数来初始化A,B
这个习惯可以帮你避开一些奇奇怪怪的问题

我目前只发现这些,你自己试一试行不行吧

热点排行