经典例题:求矩阵相乘
矩阵相乘
输入矩阵的行列,分别输入两个矩阵,输出矩阵相乘的结果
#include<bits/stdc++.h>
using namespace std;int main(){int a,b,c;cout<<"请输入两矩阵的行列:"<<endl;cin>>a>>b>>c; //分别录入第一个矩阵的行,两矩阵共同行列,第二个矩阵的列int X[a][b],Y[b][c],Z[a][c]; //开辟三个二维数组存储矩阵,注意相乘结果的行列值cout<<"请输入第一个矩阵:"<<endl;for(int i=0;i<a;i++){ //矩阵的行for(int j=0;j<b;j++){ //矩阵的列cin>>X[i][j];}}cout<<"请输入第二个矩阵:"<<endl;for(int i=0;i<b;i++){ //矩阵的行for(int j=0;j<c;j++){ //矩阵的列cin>>Y[i][j];}}memset(Z,0,sizeof(Z)); //将二维数组Z初始化为0//int temp=0;cout<<"矩阵相乘的结果为:"<<endl;for(int i=0;i<a;i++){for(int j=0;j<c;j++){for(int k=0;k<b;k++){Z[i][j]=Z[i][j]+X[i][k]*Y[k][j]; //行与列的乘积和为相应结果值//temp=temp+X[i][k]*Y[k][j];}cout<<Z[i][j]<<" "; //计算完一个后输出 //cout<<temp<<" ";//temp=0;}cout<<endl; //计算完一列后输出换行}return 0;
}//本程序也可以不开辟存放结果的二维数组矩阵,直接将结果累加到temp中进行输出,
//当输出后重新将temp中的值置0
注意memset函数:
memset函数实现对指定内存空间初始化的作用。
memset(Z,0,sizeof(Z)); //将二维数组Z初始化为0int float long string sizeof函数返回数组元素空间的4倍数(一元素占4字节)
char sizeof函数返回数组元素空间大小(一元素占1字节)
double sizeof函数返回数组元素空间8倍数(一元素占8字节)
将矩阵相乘的方法体拿出来
#include<bits/stdc++.h>
using namespace std;int jzcheng(int *q, int *w, int h, int l, int k) //定义两个指针,指向二维数组变为一维数组后的首地址
{int Z[h][k]; //h*k
// memset(Z, 0, sizeof(Z)); //将二维数组Z初始化为0//int temp=0;//cout<<"矩阵相乘的结果为:"<<endl;//cout<<'\n';for(int i = 0; i < h; i++){for(int j = 0; j < k; j++){Z[i][j]=0;for(int n = 0; n < l; n++){Z[i][j] = Z[i][j] + q[i * l + n] * w[n * k + j]; //行与列的乘积和为相应结果值,认真思考为什么是这样,看作一维数组//temp=temp+X[i][k]*Y[k][j];}cout << Z[i][j] << " "; //计算完一个后输出//cout<<temp<<" ";//temp=0;}cout<<'\n';}
}
int main()
{int a, b, c;cout << "请输入两矩阵的行列:" << endl;cin >> a >> b >> c; //分别录入第一个矩阵的行,两矩阵共同行列,第二个矩阵的列int X[a][b], Y[b][c]; //开辟三个二维数组存储矩阵,注意相乘结果的行列值cout << "请输入第一个矩阵:" << endl;for(int i = 0; i < a; i++) //矩阵的行{for(int j = 0; j < b; j++) //矩阵的列{cin >> X[i][j];}}cout << "请输入第二个矩阵:" << endl;for(int i = 0; i < b; i++) //矩阵的行{for(int j = 0; j < c; j++) //矩阵的列{cin >> Y[i][j];}}jzcheng(*X, *Y, a, b, c);//也可写作jzcheng(X[0], Y[0], a, b, c);均代表以a[0][0]为首元素的一维数组;可用作指针return 0;
}//本程序也可以不开辟存放结果的二维数组矩阵,直接将结果累加到temp中进行输出,
//当输出后重新将temp中的值置0
用vector定义二维数组,避免指针情况
#include<bits/stdc++.h>
using namespace std;int jzcheng(vector<vector<int> >X, vector<vector<int> >Y, int h, int l, int k)
{int Z[h][k];//h*kmemset(Z, 0, sizeof(Z)); //将二维数组Z初始化为0//int temp=0;cout<<"矩阵相乘的结果为:"<<endl;//cout<<'\n';for(int i = 0; i < h; i++){for(int j = 0; j < k; j++){//Z[i][j]=0;for(int n = 0; n < l; n++){Z[i][j] = Z[i][j] + X[i][n] * Y[n][j]; //行与列的乘积和为相应结果值//temp=temp+X[i][k]*Y[k][j];}cout << Z[i][j] << " "; //计算完一个后输出//cout<<temp<<" ";//temp=0;}cout<<'\n';}
}
int main()
{int a, b, c;cout << "请输入两矩阵的行列:" << endl;cin >> a >> b >> c; //分别录入第一个矩阵的行,两矩阵共同行列,第二个矩阵的列vector<vector<int> >X;vector<vector<int> >Y;X.resize(a);for(int i=0;i<X.size();i++){X[i].resize(b);}Y.resize(b);for(int i=0;i<Y.size();i++){Y[i].resize(c);} //开辟三个二维数组存储矩阵,注意相乘结果的行列值cout << "请输入第一个矩阵:" << endl;for(int i = 0; i < a; i++) //矩阵的行{for(int j = 0; j < b; j++) //矩阵的列{cin >> X[i][j];}}cout << "请输入第二个矩阵:" << endl;for(int i = 0; i < b; i++) //矩阵的行{for(int j = 0; j < c; j++) //矩阵的列{cin >> Y[i][j];}}jzcheng(X, Y, a, b, c);return 0;
}//本程序也可以不开辟存放结果的二维数组矩阵,直接将结果累加到temp中进行输出,
//当输出后重新将temp中的值置0
经典例题:求矩阵相乘相关推荐
- 矩阵的Frobenius范数及其经典例题求导
- python矩阵相乘例题_百道Python入门级练习题(新手友好)第一回合——矩阵乘法...
题目描述 [问题描述] 编写程序,完成3*4矩阵和4*3整数矩阵的乘法,输出结果矩阵. [输入形式] 一行,供24个整数.以先行后列顺序输入第一个矩阵,而后输入第二个矩阵. [输出形式] 先行后列顺序 ...
- python求1到n的乘积_Python实现矩阵相乘的三种方法小结
问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22∗2222∗22, 23∗2323∗23, 24∗2424∗24, 25∗2525∗25, 26∗2626∗26, 27∗2727 ...
- c语言 正整数 几位 逆序,c语言经典例题:正整数求位数and求顺、逆序位数
经典例题:正整数求位数and求顺.逆序位数 题目要求: 给出一个int整形正整数,要求: 1.求出它是几位数字 2.按照逆序分别输出每位数字,例如123输出为321 3.按正序输出每位数字 分析: 一 ...
- 复合函数求导经典例题_【2017年整理】多元函数求导经典例题.ppt
[2017年整理]多元函数求导经典例题 多元函数习题课;一 学习要求;(3) 理解偏导数和全微分的概念,会求全微分,了解全微分存在的必要和充分条件,了解全微分形式不变性;;偏导数的应用;二.主要内容; ...
- C++设计矩阵,实现矩阵相乘和求逆矩阵
矩阵变换是机器人学的基础,所以Jungle把这一节内容划分到"工业机器人"栏目.这一节Jungle用C++设计了矩阵的类Matrix,并设计了3个方法: 矩阵相加add 矩阵相乘m ...
- C语言求任意两个矩阵相乘的算法(初学尝试矩阵乘法)
C语言求任意两个矩阵相乘的算法(不同于大部分规格固定的矩阵乘法) 结果图如下 : 代码如下: //----- 任意两个矩阵相乘 # include <stdio.h> int main ...
- c++使用vector求两个矩阵相乘
c++使用vector求两个矩阵相乘 直接上代码 #include <vector> #include <iostream> using namespace std;vecto ...
- c中经典例题 用牛顿迭代法求实根
文章目录 前言 一.案例分析? 二.使用步骤 1.具体代码 2.读入数据 结果 总结 前言 c经典例题题目:用牛顿迭代法求根.方程为 ax3+bx2+cx+d=0,系数 a , b , c , d的值 ...
最新文章
- Ubuntu14.04下配置OpenGL及测试代码
- kafka与zookeeper关系
- BZOJ4196:[NOI2015]软件包管理器——题解
- 【Groovy】闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )
- 成本中心组和标准层次有何区别
- 冒泡排序python代码_Python-排序-冒泡排序-优化
- 官方野生蝇群流口水分数
- 推荐系统学习(三)SVD奇异值分解做推荐与python代码
- 【Java】String hashCode 这个数字 31
- ​php mysql教学管理系统计算机毕业设让网站作品
- 【IOS-COCOS2D游戏开发之十九】游戏数据存储的四种常用方式NSKEYEDARCHIVER/NSUSERDEFAULTS/WRITE写入/SQLITE3...
- 继电保护整定值计算软件_继电保护整定计算软件功能介绍
- 张国荣一生57部电影海报全集
- 2018千元内的UGP VR一体机开箱评测:ugp vr一体机怎么样真的好吗?
- NVIDIA RTX A6000深度学习训练基准
- 我的(此)电脑里面除了磁盘以外,多了一个CD驱动器,删除方法,亲测有效
- 怎么编辑PDF文件?分享三种好用的编辑方法
- 由freemarker毫秒级时间谈固定日期格式
- 规范的版权Copyright说明怎么写?
- 计算机进入桌面黑屏怎么办,电脑开机进入桌面就黑屏怎么解决??
热门文章
- element表格点击某一单元格,当前列变色,列变色
- matlab里excel汉字怎么显示,如果EXCEL里既有字母,汉字又有数据,在MATLAB中该如何读取?|excel提取重复项...
- 全球及中国汽车租赁行业投资规模及未来发展布局研究报告2021-2027年
- android 小米推送 no account,XiaomiPushDemo【小米推送集成,基于V3.6.12版本】
- 积木开发系列----Workspace的一些设定细节
- echarts水平柱状图滚动
- gitblit推送代码到远程仓库
- php jq 饼状图,jQuery插件FusionCharts绘制饼状图
- 沈阳工业大学计算机专业是一本吗,辽宁省第一类大学——沈阳工业大学
- OSChina 周日乱弹 —— 小云云生日快乐