#include<stdio.h>
void main(){
int m,n,m1,n1,a[m][n],b[m1][n1],s=0,i,j,c[m][n1],i1,j1;
printf("Enter no. of rows...& no. of columns..of 1st matrix");
scanf("%d",&m);
scanf("%d",&n);
printf("Enter no. of rows...& no. of columns..of 2nd matrix");
scanf("%d",&m1);
scanf("%d",&n1);
if(n!=m1){
printf("Matrix multiplication can't be performed.Please check the order
of the matrices.");
}
else{
for(i=1;i<=m;i+=1){
for(j=1;j<=n;j+=1){
s+=a[i][j]*b[j][i];
}
for(i1=1;i1<=m;i1+=1){
for(j1=1;j1<=n1;j1+=1){
c[i1][j1]=s;
printf("%d",c[i1][j1]);
}
printf("\n");
}
}
}
}
当我做它时..它显示没有错误 但在运行代码时,它显示.exe已停止工作 请提一下我的代码中的错误......以前在codeblocks ide中运行过的程序已经正确执行了.....
答案 0 :(得分:2)
目前你的代码看起来像这样(我已经减少了变量的数量以便于阅读)。
int m,n;
int a[m][n];
printf("Enter no. of rows...& no. of columns..of 1st matrix");
scanf("%d",&m);
scanf("%d",&n);
当您声明数组a
时,m
和n
的值未定义 - 它们可以是适合int
的任何值。例如,它们可能为0,这意味着您已将a
声明为a[0][0]
。然后,您会获得m
和n
的值,在哪个阶段为时已晚。无论哪种方式,您的代码都将遭受未定义的行为。
一个可能的解决方案是为像这样的矩阵分配内存......
int m,n;
int **a;
printf("Enter no. of rows...& no. of columns..of 1st matrix");
scanf("%d",&m);
scanf("%d",&n);
a=malloc(sizeof(*a)*m);
for(i=0;i<m;i++)
{
a[i]=malloc(sizeof(*a[i])*n);
}
您需要记住free()
使用完毕后分配的内存。