矩阵
矩阵运算
一、目的
-掌握矩阵的插入
-掌握矩阵的运算写法
-掌握多重循环
二、实验内容与设计思想
矩阵相乘
函数相关伪代码
1.int q1[20][20],q2[20][20]
2.输入矩阵的横和列个数a,s,d
3.双重循环输入矩阵
4.矩阵的每行每列相乘,相加
三重循环实现
函数代码
#include<stdio.h>
int main()
{
int a,s,d,i,n,sum,m,k=0;
scanf("%d %d %d",&a,&s,&d);
int q1[a][s],q2[s][d];
//矩阵的输入
for(i=0;i<a;i++){
for(n=0;n<s;n++){
scanf("%d ",&q1[i][n]);
}
}
for(i=0;i<s;i++){
for(n=0;n<d;n++){
scanf("%d",&q2[i][n]);
}
}
//矩阵相乘
for(i=0;i<a;i++){
for(m=0;m<d;m++){
sum=0;
for(n=0;n<s;n++){
sum+=q1[i][n]*q2[n][m];
}
printf("%d",sum);
k++;
if(k%d!=0){
printf(" ");
}else if(k<a*d){
printf("\n");
}
}
}
return 0;
}
时间复杂度O(n3),空间复杂度O(n2)
三、实验使用环境
以下请根据实际情况编写
- 操作系统:Windows 11专业版
- 编程语言:C
- 开发工具:[DevC++]
四、实验步骤和调试过程
矩阵相乘
本机运行截图
![]()
五、实验小结
遇到的问题及解决方法:
- 问题:对于矩阵运算的不熟悉
- 解决方法:修改代码,查找矩阵运算的运行规则
实验体会和收获:
通过这段C语言代码实现了两个矩阵的乘法。
首先,程序通过是scanf函数读取两个矩阵的尺寸和元素。接着,根据输入内容建立两个矩阵,通过矩阵的特性可知,需要双重循环来存入数组q1,q2,两个矩阵进行相乘,由于矩阵相乘规则可知,需要行和列的对应值相乘再相加(例如:第一个矩阵的第0行的值乘第2个矩阵的第0列的值,相加,之后是,第一个矩阵的第0行的值乘第2个矩阵的第1列的值,相加,如此往复),这需要通过三层嵌套循环来实现此功能。因后续不需要用这个结果,可以不需要用数组来储存结果,占据内存,可以相加后直接输出结果,并用k来判断这个输出结果是否需要换行,使得每行输出矩阵的一行元素,且元素之间以空格分隔。