编写一个程序,可以实现输入一个 3x3 的矩阵,输出它的伴随矩阵、逆矩阵、转置矩阵。
要求如下:
1、要有菜单栏,即输入一个矩阵后,选择输出他的伴随矩阵或者转置矩阵或逆矩阵.
2、函数要封装好。
3、需要有可连续性,,即可再次输入下一个矩阵。
#include<iostream>
#include<string>
using namespace std;
int a[3][3]; // 全局变量,存储输入的矩阵
// 显示菜单
void showMenu()
{
cout << "1.输出伴随矩阵" << endl;
cout << "2.输出逆矩阵" << endl;
cout << "3.输出转置矩阵" << endl;
cout << "4.输入下一个矩阵" << endl;
cout << "0.退出" << endl;
}
// 输入矩阵
void inputMatrix()
{
cout << "请输入一个3x3矩阵(输入九个数字):" << endl;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cin >> a[i][j]; // 逐个输入矩阵中的元素
}
}
}
// 显示矩阵
void displayMatrix(int matrix[3][3])
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout << matrix[i][j] << " "; // 逐个输出矩阵中的元素
}
cout << endl; // 换行
}
}
// 计算伴随矩阵
void adjointMatrix()
{
int adj[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
adj[j][i] = a[(i+1)%3][(j+1)%3] * a[(i+2)%3][(j+2)%3] - a[(i+1)%3][(j+2)%3] * a[(i+2)%3][(j+1)%3]; // 根据伴随矩阵的计算公式计算伴随矩阵中每个元素的值
}
}
displayMatrix(adj); // 显示伴随矩阵
}
// 计算逆矩阵
void inverseMatrix()
{
int det = a[0][0] * (a[1][1] * a[2][2] - a[2][1] * a[1][2]) - a[0][1] * (a[1][0] * a[2][2] - a[1][2] * a[2][0]) + a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]); // 计算矩阵的行列式
if (det == 0) // 判断行列式是否为0,如果为0则矩阵不可逆
{
cout << "矩阵不可逆,行列式为0" << endl;
return;
}
// 计算伴随矩阵
int adj[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
adj[j][i] = a[(i+1)%3][(j+1)%3] * a[(i+2)%3][(j+2)%3] - a[(i+1)%3][(j+2)%3] * a[(i+2)%3][(j+1)%3]; // 根据伴随矩阵的计算公式计算伴随矩阵中每个元素的值
}
}
cout << "逆矩阵:" << endl;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout << static_cast<double>(adj[i][j]) / det << " ";
}
cout << endl;
}
}
// 计算转置矩阵
void transposeMatrix(){
int trans[3][3];
for (int i = 0; i < 3;i++){
for (int j = 0; j < 3; j++){
trans[i][j] = a[j][i]; // 将矩阵的行与列互换
}
}
displayMatrix(trans); // 显示转置矩阵
}
int main(){
inputMatrix(); // 输入第一个矩阵
int select = 0;
while (true){
showMenu();
cin >> select;
switch (select){
case 1:
cout << "伴随矩阵:" << endl;
adjointMatrix();
break;
case 2:
inverseMatrix();
break;
case 3:
cout << "转置矩阵:" << endl;
transposeMatrix();
break;
case 4:
inputMatrix();
break;
case 0:
cout << "欢迎下次使用" << endl;
return 0;
default:
cout << "无效选项,请重新选择。" << endl;
break;
}
}
return 0;
}