对称矩阵算法2
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
using namespace std;
///两个对称矩阵的加减乘除
void InIt(int **A,int n)///对一维矩阵(上三角或者是下三角)进行初始化
{
(*A)=(int*)malloc(sizeof(int)*(n*(n+1)/2));
}
void INIT(int ***C,int n)///初始化,两个***表示二维数组
{
*C=new int*[n]; ///初始一个m行n列的矩
for (int i=0;i<n;i++)
{
(*C)[i]=new int[n];
}
}
int ReturnElem(int A[],int i,int j)///返回A[M]z中的元素给对应B[i][j]中的值(这里最主要是下三角)
{
if(i>=j)
return A[(i*(i+1)/2+j)] ;
else
return A[(j*(j+1)/2+i)] ;
}
void AssignElem(int A[],int e,int i,int j)///返回A[M]z中的元素给对应B[i][j]中的值(这里最主要是下三角)
{
if(i>=j)
A[(i*(i+1)/2+j)]=e ;
else
A[(j*(j+1)/2+i)]=e;
}
void OutPut(int A[],int n)///通过输入压缩的下三角矩阵输出全部元素
{
for(int i=0;i<n;i++)///作为行
{
for(int j=0;j<n;j++)
cout<<setw(4)<<ReturnElem(A,i,j);
cout<<endl<<endl;
}
}
void ADDcolumn(int A[],int B[],int **C,int n)///计算两个对称矩阵的和
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
C[i][j]=ReturnElem(A,i,j)+ReturnElem(B,i,j);
}
void Multiply(int A[],int B[],int **C,int n)///两个矩阵的相乘
{
int sum;
for(int i=0;i<n;i++)///行
{
for(int j=0;j<n;j++)///列
{
sum=0;
for(int k=0;k<n;k++)///个数
{
sum+=ReturnElem(A,i,k)*ReturnElem(B,k,i);
}
C[i][j]=sum;
}
}
}
void OUTPUT(int A[],int n)///通过输入压缩的下三角矩阵输出全部元素
{
for(int i=0;i<n;i++)///作为行
{
for(int j=0;j<n;j++)
cout<<setw(4)<<ReturnElem(A,i,j);
cout<<endl;
}
}
void OUTput(int **C,int n)///通过输入压缩的下三角矩阵输出全部元素
{
for(int i=0;i<n;i++)///作为行
{
for(int j=0;j<n;j++)
cout<<setw(4)<<C[i][j];
cout<<endl;
}
}
void INput(int A[],int n,int e)///输入一个下三角
{
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"行的"<<i+1<<"个元素";
for(int j=0;j<=i;j++)
{
cin>>e;
AssignElem(A,e,i,j);
}
cout<<endl;
}
}
int main()
{
int e,*A,*B,**C,n=5;
InIt(&A,n);
InIt(&B,n);
INIT(&C,n);
cout<<"输入矩阵A的下三角"<<endl;
INput(A,n,e);
cout<<"输出对称矩阵A"<<endl;
OUTPUT(A,n);
cout<<endl<<endl<<"输入矩阵A的下三角"<<endl;
INput(B,n,e);
cout<<endl<<"输出对称矩阵B"<<endl;
OUTPUT(B,n);
ADDcolumn(A,B,C,n);
cout<<endl<<endl<<"输出两个对称矩阵A和对称矩阵B相加之后为矩阵C(C=A+B):"<<endl;
OUTput(C,n);
Multiply(A,B,C,n);
cout<<endl<<endl<<"输出两个对称矩阵A和对称矩阵B相乘之后为矩阵C(C=A*B):"<<endl;
OUTput(C,n);
return 0;
}
输出的结果