N维矩阵的乘法

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

写过一个矩阵乘法,给你参考一下。

#include <stdio.h>
#include <stdlib.h>

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++;
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答