矩阵的转置、加和乘法写入C++
  6DMaaPzJglxt 2023年12月05日 19 0


这是线代里面矩阵的基本运算

转置就是行和列的下标互换:b[i][j]=a[j]][i]
相加矩阵的行列必须相同:c[i][j]=a[i][j]+b[i][j]
相乘矩阵a的m行*n列与矩阵b的n行*k列相乘得一个m行*k列的矩阵
行乘列:c[i][j]=a[i][j]*b[j][i]
(c矩阵是m行k列)

我写了一个c++的小程序,很简单!

#include<iostream>
#define maxsize 100
using namespace std;
void trasmat(int a[][maxsize],int b[][maxsize],int m,int n){
	for(int i=0;i<m;++i){
		for(int j=0;j<n;++j){
			b[j][i]=a[i][j];//转置 
		}
	}
}
void addmat(int a[][maxsize],int b[][maxsize],int c[][maxsize],int m,int n){
	for(int i=0;i<m;++i){
		for(int j=0;j<n;++j){
			c[i][j]=a[i][j]+b[i][j];//相加 
		}
	}
}
void mutmat(int a[][maxsize],int b[][maxsize],int c[][maxsize],int m,int n,int k){
	for(int i=0;i<m;++i){
		for(int j=0;j<k;++j){
			c[i][j]=0;
			for(int l=0;l<n;++l){
				c[i][j]+=a[i][l]*b[l][j];//相乘 
			}
		}
	}
}
void printmat(int c[][maxsize],int m,int n){
	for(int i=0;i<m;++i){
		for(int j=0;j<n;++j){
			cout<<c[i][j]<<" ";
		}
		cout<<"\n";
	}
}
int main(){
	cout<<"矩阵转置相加相乘\n";
	int input,m,n;
	int a[maxsize][maxsize],b[maxsize][maxsize],c[maxsize][maxsize];
	bool flag=1;
	while(flag){
		cout<<"\n矩阵的装置请按1  两个矩阵相加请按2  进行矩阵相乘请按3\n";
		cin>>input;
		switch(input){
			case 1:
				cout<<"输入需要转置矩阵的行数m和列数n:"<<endl;
				cin>>m>>n;
				cout<<"输入数据:\n";
				for(int i=0;i<m;++i){
					for(int j=0;j<n;++j){
						cin>>a[i][j];//输入 
					}
				}
				trasmat(a,b,m,n);
				cout<<"转置结果:\n";
				printmat(b,n,m);
				break;
			case 2:
				cout<<"输入第一个矩阵的行数m和列数n:"<<endl;
				cin>>m>>n;
				cout<<"第一个矩阵数据:\n";
				for(int i=0;i<m;++i){
					for(int j=0;j<n;++j){
						cin>>a[i][j];//输入 
					}
				}
				cout<<"第二个矩阵数据:\n";
				for(int i=0;i<m;++i){
					for(int j=0;j<n;++j){
						cin>>b[i][j];//输入 
					}
				}
				cout<<"相加结果:\n";
				addmat(a,b,c,m,n);
				printmat(c,m,n);
				break;
			case 3:
				cout<<"输入第一个矩阵的行数m和列数n:"<<endl;
				cin>>m>>n;
				cout<<"第一个矩阵数据:\n";
				for(int i=0;i<m;++i){
					for(int j=0;j<n;++j){
						cin>>a[i][j];//输入 
					}
				}
				int k;
				cout<<"输入第二个矩阵的行数n和列数k:"<<endl;
				cin>>n>>k;
				cout<<"第二个矩阵数据:\n";
				for(int i=0;i<n;++i){
					for(int j=0;j<k;++j){
						cin>>b[i][j];//输入 
					}
				}
				cout<<"相乘结果:\n";
				mutmat(a,b,c,m,n,k);
				printmat(c,m,k);
				break;
			default:
				cout<<"输入错误!!!\n";
				break;
		}
		cout<<"退出程序输入end,继续请输入again"<<endl;
		string s;
		cin>>s;
		if(s!="again"&&s!="end"){
			cout<<"指令错误重新输入\n";
			cin>>s;
		}
		if(s=="again"){
			flag=true;
		}
		else if(s=="end"){
			flag=false;
		}
	}
	return 0;
}

?没问题!运行一下还可以.

矩阵的转置、加和乘法写入C++_数据


有问题欢迎留言。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月05日 0

暂无评论

推荐阅读
6DMaaPzJglxt