> 知识 >

N维矩阵的乘法
n维矩阵乘法:A B-1
功能:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,
输出ab-1结果.
分步实施:
1) 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2) 完成最低要求:建立一个文件,可完成2维矩阵的情况;
3) 一步要求:通过键盘输入维数n.有兴趣的同学可以自己扩充系统功能.
要求:1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的.

人气:661 ℃ 时间:2024-06-21 20:38:54
解答

写过一个矩阵乘法,给你参考一下.
#include
#include
void print(int m,int p,int *p4); /*函数声明*/
int main()
{
int test_num = 0; /*要计算的次数*/
int comp_times = 0; /*已经执行计算的次数*/
int m,n,p,i,j,k,sum,x; /*m,n,p确定矩阵形式,i,j表行与列,sum求每次计算之和*/
int *p1 = NULL; /*定义3个指针并初始化*/
int *p2 = NULL;
int *p3 = NULL;
scanf ("%d",&test_num); /*读入要运算的次数*/
for( ; comp_times < test_num; comp_times++) /*当执行次数等于所要运行次数时退出*/
{
scanf("%d %d %d",&m,&n,&p); /*确定矩阵形式,m*n和n*p阶矩阵*/
p1 = malloc( (m * n) * sizeof(int) ); /*申请内存*/
p2 = malloc( (n * p) * sizeof(int) );
p3 = malloc( (m * p) * sizeof(int) );
for( i = 0; i < m * n; i++) /*读入第一个矩阵*/
{
scanf("%d",&*(p1 + i));
}
for( i = 0; i < n * p; i++) /*读入第二个矩阵*/
{
scanf("%d",&*(p2 + i));
}
/*以下计算矩阵乘法,并将每次的运算结果存入第三块内存*/
for(i = 0; i < m; i++)
{
for(j = 0; j < p; j++)
{
for (k = sum = 0; k < n; k++)
{
x = *(p1 + k + i*n) * *(p2 + k*p + j);
sum += x; /*累加求和*/
}
*(p3 + i*p + j) = sum;
}
}
print(m,p,p3);
free(p1);
free(p2);
free(p3);
}
return 0;
}
/*定义打印矩阵相乘结果的函数,变量分别为矩阵类型以及指
针p4用以实现每打p个数值后面就有一个回车,否则为空格*/
void print(int m,int p,int *p4)
{
int i = 0;
while (i < m * p)
{
if (i % p == p - 1)
printf("%d\n",*(p4 + i));
else
printf("%d ",*(p4 + i));
i++;
}
}

推荐
猜你喜欢
© 2024 79432.Com All Rights Reserved.
电脑版|手机版