高斯消去法,列主元高斯法,Doolittle分解法C++程序,解方程组

    《数值分析》课的作业。查看了网上的别人编的程序,一般都先定义了矩阵的行数和列数。

    我这个程序使用了二维动态数组,可以在运行过程中输入行数列数。


//codey by Chen Zhen, 2014/10/17, Beihang University
//使用了二维动态数组

#include
#include
#include
using namespace std;

void Gauss(double **a, double *b,int);//顺序Gauss消去法
void lie_Gauss(double **a, double *b,int);//列主元素Gauss消去法
void Doolittle(double **a, double *b,int);//Doolittle分解法
void print( double **a, double *b,int);//打印方程

void main()
{
	//cout.setf(ios::fixed);
	cout.precision(4);//设置四位有效数字

	//输入矩阵A和b
	int n;
	cout<<"请输入系数矩阵的行数(或列数,列数等于行数):\n";
	cin>>n;
	cin.clear();//这3行代码重置输入
	while(cin.get()!='\n')
		continue;
	cout<<"请输入系数矩阵A:\n";
	
	//要用到二维动态数组
	double **a;
	a=new double *[n];  //申请行的空间
	for (int i=0;i>a[i][j]))
			{
				cin.clear();
				while(cin.get()!='\n')
					continue;
				cout<<"请输入数字";
			}	
		cin.clear();
		while(cin.get()!='\n')
			continue;
	}
	cout<<"请输入矩阵b:\n";
	 double *b=new  double[n];
	for (int j=0;j>b[j];
	cin.clear();
	while(cin.get()!='\n')
		continue;

	//将系数矩阵A与矩阵b存储在临时矩阵中,临时矩阵中的元素参与行列变换
	double **temp_a=new double *[n];
	double *temp_b=new double[n];
	for (int i=0;i>choice)
	{
		switch (choice)
		{
		case 1: Gauss(( double **)temp_a,temp_b,n);
			break;
		case 2: lie_Gauss(( double **)temp_a,temp_b,n);
			break;
		case 3:	Doolittle(( double **)temp_a,temp_b,n);
			break;
		case 0: return;
		}
		cout<<"请输入你选择的解方程方式(1-3的数),输入0退出:\n";
	}

	for (int i=0;i0;k--)
	{
		double temp=0;
		for (int j=k+1;j0;k--)
	{
		double temp=0;
		for (int j=k+1;j



你可能感兴趣的:(C++或,c,语言)