c语言编程。两个5*5矩阵相乘

如题所述

#include "stdio.h"

const int MAX=5;
void multi(int a[MAX][MAX],int b[MAX][MAX],int c[MAX][MAX])
{
int i,j,k;
for(i=0;i<MAX;i++)for(j=0;j<MAX;j++)c[i][j]=0;//初值化
for(i=0;i<MAX;i++)//按照书上的公式,乘起来,结果放在C数组里
{
for(j=0;j<MAX;j++)
{
for(k=0;k<MAX;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
}
void out(int x[MAX][MAX],int n)//输入矩阵
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",x[i][j]);
puts("");
}
}
void read(int x[MAX][MAX],int n)
{
int i,j;
for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&x[i][j]);
}
int main()
{
int a[MAX][MAX],b[MAX][MAX],c[MAX][MAX];
read(a,MAX);//读入矩阵
read(b,MAX);
out(c,MAX);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-07
这是幻方吧、、、、、、//分析:魔方阵有如下规律:
// 1:自然数1总是在方阵第一行当中一列上。
// 2:后续的自然数在当前数的右上方,
// 1)如果是在第一行则行数变为第n行列数加1 ;
// 2)如果是在最后一列,行数减1,列数为第1行。
// 3)如果后续的数所处位置已有数,则行数加1,列数不变。
/******************************************************************************************************************************
巧填奇数阶幻方(魔方阵)[转]2007-01-03 17:57 一、什么叫幻方?
(通俗点说)把一些有规律的数填在纵横格数都相等的正方形图内,使每一行、每一列和每一条对角线上各个数之和都相等。这样的方阵图叫做幻方。
幻方又分为奇数阶幻方和偶数阶幻方。奇数阶幻方是指横行、竖列都是单数(即3、5、7、9……)的方阵图。偶数阶幻方是指横行、竖列都是双数(即4、6、8、10……)的方阵图。
二、奇数阶幻方的填法。
奇数阶幻方中最简便的一种就是三阶幻方,又称“九宫图”。
平常我们遇到这类题都是用分析、分组、尝试的方法推出,这种方法较麻烦,如果是五阶幻方、七阶幻方就更困难了。
有一种方法不仅能很快地填出三阶幻方,还能很快地填出五阶幻方、七阶幻方、九阶幻方……那就是“口诀法”
口 诀
“1”坐边中间,斜着把数填;
出边填对面,遇数往下旋;
出角仅一次,转回下格间。
注意:
(1)这里的“1”,是指要填的这一列数中的第一个数。
(2)“1”坐边中间,指第一个数要填在任何一边的正中间的空格里。
(3)从1到2时,必须先向边外斜(比如:第一个数填在上边的正中间,填第二个数时,要向左上方或右上方斜),填后面的数时也要按照同样的方向斜。
*******************************************************************************************************************************/
#include<iostream>
using namespace std;
void main()
{
int a[32][32],i,j,k,p,n;
p=1;
while(p==1)
{
cout<<"Enter n(n=1~25):";
cin>>n;
if((n!=0)&&(n<=25)&&(n%2!=0))
p=0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1)
i=n;
if(j>n)
j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

}

/*C_ban*
所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间.
我编的程序如下:
*/
#include<stdio.h>
#define N 15
main()
{
int i,j,row,cloum,size,square[N][N],count;
clrscr();
printf("please enter the square size(odd && <=15):\n");
scanf("%d",&size);
while(size%2==0||size>15||size<3)
{
printf("error due to the wrng input!please input it again!\n");
scanf("%d",&size);
}
for(i=0;i<size;i++)
for(j=0;j<size;j++)
square[i][j]=0;
i=0;j=(size-1)/2;
square[i][j]=1;
for(count=2;count<=size*size;count++)
{
row=i-1<0?(size-1):(i-1);
cloum=j-1<0?(size-1):(j-1);
if(square[row][cloum])
i=(++i)%size;
else
{i=row;
j=j-1<0?(size-1):(j-1);
}
square[i][j]=count;
}
printf("the %d square is:\n",size);
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
printf("%d",square[i][j]);
printf("\n");
}
}

只能求奇数的魔方阵
#define N 20
main()
{
int a[N][N];
int n,i,j,r;
scanf("%d",&n);
for(i=0;i<N;i++) for(j=0;j<N;j++) a[i][j]=0;
i=0;
j=n/2;
a[i][j]=1;
for (r=2;r<=n*n;r++)
if (a[(i+n-1)%n][(j+1)%n]==0)
{i=(i+n-1)%n;j=(j+1)%n;a[i][j]=r;}
else
{i=(i+1)%n;a[i][j]=r;}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
这是以前别人写的,你参考一下!
第2个回答  2012-02-07
#include<stdio.h>
#include<stdlib.h>
#define RA 5 /*矩阵A的行数*/
#define CA 5 /*矩阵A的列数*/
#define RB 5 /*矩阵B的行数*/
#define CB 5 /*矩阵B的列数*/

main()
{
int A[RA][CA];
int B[RB][CB];
int C[RA][CB];
int i,j,k;
printf("1");
/*随机生成矩阵A*/
randomize();
for(i=0;i<RA;i++)
{ for(j=0;j<CA;j++)
A[i][j]=random(20); }

/*随机生成矩阵B*/
randomize();
for(i=0;i<RB;i++)
{ for(j=0;j<CB;j++)
B[i][j]=random(20); }

/*输出矩阵A*/
printf("\nMatrix A");
for(i=0;i<RA;i++){
printf("\n");

for(j=0;j<CA;j++)
printf("%4d",A[i][j]);
printf("\n");
}

/*输出矩阵B*/
printf("\nMatrix B");
for(i=0;i<RB;i++){
printf("\n");

for(j=0;j<CB;j++)
printf("%4d",B[i][j]);
printf("\n");
}

/*两个矩阵相乘*/

for(i=0;i<=RA;i++)
for(j=0;j<CB;j++)
{
C[i][j]=0;
for(k=0;k<RA;k++)
C[i][j]+=A[i][k]*B[k][j];
}

/*输出结果矩阵*/
printf("\nMatrix A*B\n");
for(i=0;i<RA;i++){
printf("\n");
for(j=0;j<CB;j++)
printf("%4d",C[i][j]);
printf("\n");

} getch();
}
第3个回答  2012-02-17
以前做过一个矩阵计算器,可以实现矩阵相乘,矩阵与常量相乘,矩阵消减和转置,矩阵的闭包计算,有需要的话留邮箱。
第4个回答  2012-02-16
孙老师,你这个回答的就不太好了
你把a,b,c数组的行和列都分别定义了,你怎么保证b的列数就和a的行数相同?
而且结果就是 a的行和b的列那么大的矩阵呢?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网