【发布时间】:2020-12-01 13:45:01
【问题描述】:
我编写的这个程序可以在满足条件时将任何类型的矩阵相乘
大部分代码只用于输入,函数需要输入的部分似乎是麻烦的区域, 无法得到正确的结果,并且在结果矩阵中也得到了垃圾值。
#include<stdio.h>
#include<math.h>
void multiply(int,int,int,int,int [][100],int [][100]);
void main()
{
int i,j,e;
int m,n,p,q;
int a[m][n],b[p][q];
printf("\n enter m and n");
scanf("%d %d",&m,&n);
printf("\n enter the matrix elements");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("\n enter p and q");
scanf("%d %d",&p,&q);
printf("\n enter the matrix elements");
for(i=0;i<p;i++)
for(j=0;j<q;j++)
scanf("%d",&b[i][j]);
printf("if u want to multliply the matrix enter 1");
scanf("%d",&e);
{
printf("a matrix n is columns and m is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("a matrix q is columns and p is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
printf("\n\n\n");
if(e==1&&n==p)
multiply(m,n,p,q,a,b);
}
}
void multiply(int m,int n,int p,int q,int a[][100],int b[][100])
{
printf("a matrix n is columns and m is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("a matrix q is columns and p is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
int s[m][q],sum=0,i,j,k;
for(i=0;i<m;i++)
{
for(j=0;j<q;j++)
{
s[i][j]=0;
for(k=0;k<n;k++)
{
s[i][j]=s[i][j]+a[i][k]*b[k][j];
}
printf("\t %d",s[i][j]);
}
printf("\n");
}
}
如何解决这个问题?
【问题讨论】:
-
当
scanf要求输入时,您是否将int a[m][n]中的n设置为1000?否则你会一团糟。编译器使用基于multiply()中的sizeof(int) * 1000的算术运算,如果将n设置为不同的值,则会得到错误的值。 -
如果
m、n、p和q还没有值,如何声明a和b数组的维度? C++是顺序语言,应该在scanf之后完成 -
您使用什么语言
C或C++?这:int m,n,p,q; int a[m][n],b[p][q];不是有效的 C++,即使那些int变量已初始化。 -
C 和 C++ 是非常不同的语言。除非您特别询问它们的区别,否则请不要同时标记两者。
-
使用的语言是 c