重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。
创新互联公司专业为企业提供香格里拉网站建设、香格里拉做网站、香格里拉网站设计、香格里拉网站制作等企业网站建设、网页设计与制作、香格里拉企业网站模板建站服务,十多年香格里拉做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量,k则用于实现矩阵的乘法。
3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素。
4、输入三个矩阵的行数和列数,保存在变量a、b、c中。
5、输入矩阵A的各元素,保存在数组X中。
6、输入矩阵B的各元素,保存在数组Y中。
7、将二维数组Z的各元素,初始化为0。
8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果。
9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中。
10、最后,输出乘法所得的结果,即输出Z数组中的所有元素。
11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵。
1,若程序定义为三行三列的矩阵,并在主函数中键盘赋值。请编写函数juzhen(int a[][3],int n),函数功能是:使矩阵左下角元素中的值乘以.例如:若矩阵中的值为:
1 9 7
2 3 8
4 5 6
n=3,则矩阵值变为:
1 9 7
6 9 8
12 15 18
注:二维数组下三角元素每行最后元素的列标和该列的列号一致
#include stdio.h
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i3;i++)
for (j=0;j=i;j++)
a[i][j]=a[i][j]*n;
}
main()
{
int i,j,a[3][3],m;
clrscr();
printf("please enter 9 numbers :\n");
for (i=0;i3;i++)
for (j=0;j3;j++)
scanf("%d",a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("please enter a int number:\n");
scanf("%d",m);
juzhen (a,m);
printf("the new ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,请编写函数juzhen,该函数的功能是:将三行四列矩阵x乘以四行三列矩阵y,结果放在三行三列矩阵中。矩阵相乘的基本方法是:矩阵Xy中行列下标分别为i,j的元素的值,是矩阵X中第i行上四个元素与矩阵Y中第j列上四个元素对应相乘的积。
X和Y矩阵原型可运行后看到!
#include conio.h
#include stdio.h
void juzhen (int a[3][4],int b[4][3],int ab[3][3])
{
int i,j,z;
for (i=0;i3;i++)
for (j=0;j4;j++)
for (z=0;z3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得为要填写的内容*/
}
main()
{
int x[3][4]={1,0,1,1,2,1,0,1,1,2,0,3};
int y[4][3]={1,1,1,0,0,0,2,1,1,1,1,3};
int xy[3][3]={0},i,j;
clrscr();
juzhen (x,y,xy);
printf("x ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i4;i++)
{
for (j=0;j3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由于你没有说要求,我就写了两个,这是两道比较精典的求c语言矩阵乘法程序
#define MAX 50
#define M MAX
#define N MAX
#define T MAX
#define S MAX
int Mult(double a[][N],int m,int n,double b[][T]int s,int t,double c[][T]) {
int i,j,k;
if(n != s) {
printf("两矩阵相乘,左矩阵的列数与右矩阵的行数必须相等。\n");
return 0;
}
int c;
tmp.m_Mat = new double *[tmp.m_Rows];
for(int i = 0;i tmp.m_Rows;i++) tmp.m_Mat[i] = new double[tmp.m_Cols];
for(i = 0; i m; ++i) {
for(j = 0; j n; ++j) {
c[i][j] = 0;
for(k = 0; k t; ++k)
c[i][j] += c[i][k] * c[k][j];
}
}
return 1;
}
函数类型是根据有无返回值判断的,无返回值就把函数定义为void类型
如果是单纯输出矩阵那就不用返回了,如果还要传回主函数有其它应用那就返回吧
童鞋,不知道你是用的什么测试数据,在我的机器上测试了几组数据,结果都是正确的。
重复下我的测试代码。
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
void multiplication(int a,int b,int c,int *p,int *q);
void main()
{
int m,n,l,h;
int i,j,g,k;
int *p,*q;
char x;
printf("请输入a矩阵行数和列数,以空格分开,,,");
scanf("%d %d",m,n);
p=(int *)malloc(sizeof(int)*m*n);
for(i=0;im;i++)
for(j=0;jn;j++)
{
printf("请输入a矩阵%d行%d列的数,,",(i+1),(j+1));
scanf("%d",(p+m*i+j));
}
printf("请输入b矩阵行数和列数,以空格分开,,,");
scanf("%d %d",l,h);
q=(int *)malloc(sizeof(int)*l*h);
for(g=0;gl;g++)
for(k=0;kh;k++)
{
printf("请输入b矩阵%d行%d列的数,,",(g+1),(k+1));
scanf("%d",(q+l*g+k));
}
multiplication( m, n, h, p, q);
}
void multiplication(int a,int b,int c,int *p,int *q)
{
int i,j;
int k;
int sum;
for(i=0;ia;i++)
{
for(j=0;jc;j++)
{
sum=0;
for(k=0;kb;k++)
{
sum=sum+(*(p+a*i+k))*(*(q+b*k+j));
}
printf("%d ",sum);
}
printf("\n");
}
}
附带一组测试数据
A 3 4
2 1
B 3
4
Result
25
10
结果正确。
如果确定距阵的大小长度,定义两个二维数组,用两个for循环两数据输入到内存,是每两个for输入一个数组,然后定义另外一个数组,用来得到结果距阵,再用三个嵌套的for将结果放入第三个数组当中,即c[i][j]=a[i][k]+b[k][j],k是在第三重循环,这样就可以得到要求的距阵,如果不确定大小长度就在输入语句的每个for循环的辖区内加一个变量作为标记程序运行时求出距阵的大小