⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档 (9).txt

📁 C++高斯列主元削元法的程序代码
💻 TXT
字号:
#include<iostream> 
#include<conio.h>
#include<iomanip>
#include<conio.h>
#include<math.h>
using namespace std;
#define eps 0.0001  
int n; 
char m; 
void main() 
{
	int i,j,k,amax,m; 
	double t; 
	L:double a[11][11]={0,0,0,0,0,0,0,0,0,0,0},c[11][11]={0,0,0,0,0,0,0,0,0,0,0},x[11]={0,0,0,0,0,0,0,0,0,0,0},f[11]; 
	cout<<"请输入未知数个数n    "<<"     "<<"退出请输入0"<<endl;//输入矩阵大小  
	cin>>n; 
	 
	for(i=0;i<n;i++) 
	{ 
		for(j=0;j<n;j++)
			{
				cout<<"a["<<i<<"]"<<"["<<j<<"]="; 
			    cin>>a[i][j]; 
			}
		cout<<"b["<<i<<"]="; 
		cin>>a[i][j]; 

	} 
	///////
	cout<<"增广矩阵输出如下"<<endl;

	for(int kk=0;kk<n;kk++)
	{
		 for(int jj=0;jj<=n;jj++)
		{
	        cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][jj];//
		}
		cout<<endl;
	}
	for(i=0;i<n;i++) 
		 for(j=0;j<n+1;j++) 
	        {
				c[i][j]=a[i][j];
            } 

	for(i=0;i<n;i++) //找出列主元素并进行交换  
	{  
		amax=i; //记录列主元素的行号,初始值为 i  
		for(j=i;j<n;j++) //找出列主元素过程  
		{ 
			if(abs(a[j][i])>abs(a[amax][i]))
				amax=j; 
		} 
				for(j=i;j<=n;j++) // 将第i行与列主元素行交换 
		         { 
					t=a[amax][j]; 
					a[amax][j]=a[i][j]; 
					a[i][j]=t; 
		         } 
	}
	//for(i=0;i<n;i++)
			//max=(max>=fabs(a[i][j]))?max:(m=i,fabs(a[i][j]));//比较并记所在行号

		//{cout<<"无解 !";exit(1);}//列主元太小则停
	////////////
	cout<<"选出列主元变换后"<<endl;

	for(int kk=0;kk<n;kk++)
	{
		for(int jj=0;jj<=n;jj++)
		{

		cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][jj];
			

		}
		//cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][kk+1];
		cout<<endl;
	};
	//////////
	
	for(i=0;i<n-1;i++) //消元过程 
		{
			for(j=i+1;j<n;j++) 
			{
				t=-1*a[j][i]/a[i][i]; 
				for(k=i;k<=n;k++) 
					{ 
						a[j][k]=a[j][k]+t*a[i][k]; 
				        //cout<<a[j][k]<<"    ";////////
			        } 
		        //cout<<endl;
		    } 
			cout<<"--消元--"<<endl;
			for(int kk=0;kk<n;kk++)
				{
					for(int jj=0;jj<=n;jj++)
						{
							//cout<<resetiosflags(ios::left)<<a[kk][jj]<<"    ";
							cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][jj];
						}
					//cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][kk+1];
					cout<<endl;
				}
	    } 
	///////////////
	//cout<<"消元后"<<endl;
	//for(int kk=0;kk<n;kk++)
	//    {
	//		for(int jj=0;jj<=n;jj++)
	//			{
	//				//cout<<resetiosflags(ios::left)<<a[kk][jj]<<"    ";
	//				cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][jj];
	//		    }
	//		//cout<<setiosflags(ios::fixed)<<setw(15)<<a[kk][kk+1];
	//		cout<<endl;
	//	}
	////////////////
	for(i=n-1;i>=0;i--) //回代. 
		{ 
			for(j=n-1;j>i;j--) 
				{ 
					a[i][n]=a[i][n]-(a[j][j]*a[i][j]); 
				} 
			a[i][i]=a[i][n]/a[i][i];

	    } 
	cout<<endl; 
	cout<<"原方程:"<<endl; 

	for(i=0;i<n;i++) 

	{
		for(j=0;j<n;j++) 
			{
				if(c[i][j]>=0) 
					cout<<"+"<<c[i][j]<<"X("<<j+1<<") "; 
				else
					cout<<c[i][j]<<"X("<<j+1<<") ";
		    } 
		cout<<"="<<c[i][j]<<endl; 
	} 
	cout<<endl; 

	cout<<"方程的解为\n";//输出结果。

	for(i=0;i<n;i++) 
		{ 
			x[i+1]=a[i][i]; 
			cout<<"x("<<i+1<<")="<<x[i+1]<<" ";
	    } 
	cout<<endl;
	cout<<endl; 
	cout<<endl; 



	cout<<"还要继续计算高斯列主元消元吗?"<<endl;//循环控制 

	cout<<"输入'g'继续,输入任意键退出"<<endl; 

	cin>>m; 
	if(m=='g') 

	goto L; 
	else goto end; 
	end: ; 
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -