C++类模板实现所谓的反序输出问题
需求分析: 编写一个具有如下样式的类模板tmplt,用于实现所谓的反序输出问题,其中使用了类型参数T(使所处理的元素类型可变化)以及普通参数n(元素个数也可变化)。
6.2程序执行的结果:
6.3概要设计:
本程设计思路: 或得用户输入的数据保存与一个数组中,然后从数组末尾向前输出数组数据实现倒叙输出。
程序流程图(如左图):
6.3 详细设计与编码:
见上传程序。
6.4 调试分析:
本题难度不大,关键在于对模板的理解,泛型编程越来越受到人们的总是,他将C++的性能发挥到极致,需要很高的技巧,这里利用模板来实现对不同类型数据和不定数量的数据的逆向输出,给人以很大启发。
6.5 用户使用说明:
用户可以输入任意类型和数量的数据,程序逆向输出。
6.6 设计心得:
本题加深了我对模板的理解,是我加深了对C++的理解。
#include<iostream>
#include<iomanip>
using namespace std;
void main()
{
int n;
cout<<"请输入矩阵的阶数:";
cin>>n;
cout<<"您定义的矩阵共有"<<n*n<<"个元素!"<<endl;
int i,j,k;
double **a=new double*[n]; //分配二文数组的大小,矩阵为double型的
for(i=0;i<n;i++)
a[i]=new double[2*n]; //分配每一行数组的大小
cout<<"请输入要求逆矩阵的矩阵的元素!"<<endl;
cout<<"注意:请您每输入一个元素,按一次Enter键!"<<endl;
int b=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"第"<<++b<<"个元素为:"; //用户输入矩阵元素
cin>>a[i][j];
}
cout<<"您输入的矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<a[i][j]<<" "; //将矩阵元素反馈给用户
cout<<endl;
}
for(i=0;i<n;i++)
for(j=n;j<2*n;j++) //将矩阵有半部分置为单位阵
{
int c=j-n;
if(c==i)
a[i][j]=1;
else
a[i][j]=0;
}
cout<<"在原矩阵右边加上单位阵后所得矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<2*n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<"记原矩阵为A,A加上单位阵后所得的矩阵为B!"<<endl;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++) //将矩阵A变为上三角矩阵
{
double d=a[j][i];
for(k=i;k<2*n;k++)
a[j][k]-=a[i][k]*d/a[i][i];
}
}
cout<<"将矩阵B中的矩阵A变成上三角矩阵后,B变为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<2*n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(i=0;i<n;i++)
{
double f=a[i][i];
for(j=0;j<2*n;j++)
a[i][j]=a[i][j]/f; //将矩阵A对角线元素置1
}
if(a[n-1][n-1]==0) //判断矩阵是否有逆矩阵
{
cout<<"此矩阵没有逆矩阵!"<<endl;
exit(1);
}
cout<<"将矩阵B中的矩阵A的对角线元素都置1后,B变为:"<<endl;
for(i=0;i<n;i++)
{
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com cout<<endl;
for(i=0;i<n-1;i++)
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com 一步将A置为单位阵 }
cout<<"将矩阵B中的矩阵A变为单位阵后,B变为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<2*n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<"所以,矩阵A的逆矩阵即所求矩阵为:"<<endl;
cout<<fixed<<setprecision(6); //精确结果
for(i=0;i<n;i++)
{
for(j=n;j<2*n;j++)
cout<<a[i][j]<<" "; //输出逆矩阵
cout<<endl;
}
cout<<endl;}1812