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

📄

📁 编程序
💻
字号:
/*18.编程序,按如下要求来求解n元一次线性方程组(假设方程组具有唯一解)。
(1)方程个数n之值由用户通过键盘输入;
(2)方程组存放在"增广矩阵"A之中,而n行n+1列的A存储空间通过new来动态分配,且A的各元素值也由用户通过键盘输入;
(3)方程组的解存放于"向量"B之中,而具有n个元素的B存储空间也通过new来动态分配。
提示:将整个求解任务(总任务)进行"分解",设计出多个各负其责的自定义函数以完成各子任务。
求解n元一次线性方程组,实际上是要对增广矩阵A进行"同解变换",
并最终将求出的解存放于B数组之中。而所谓的"同解变换"主要使用如下的变换方法:
"将某一行的各数据乘以适当的倍数加到另一行的对应各元素上去",从而可首先将系数矩阵消为"上三角",
而后再进行所谓的"回代过程",最后完成求解任务。*/
#include<iostream.h>
#include<iomanip.h> 
void main()
{
	int n,i,j,k;
	cout<<"高斯顺序消去法求解n元一次线性方程组."<<endl<<endl;
	cout<<"请输入线性方程组的元数n:"<<endl;
	cin>>n;
	cout<<endl;
	cout<<"请输入增广矩阵a[n][n+1]:"<<endl;

	float **a;           //动态数组a[n][n+1],用于存放方程组的系数与方程的值
	a=new float*[n];
	for(int m=0;m<n;m++)
	{
		a[m]=new float[n+1];
	}

	float *x=new float[n]; //动态数组x[n],用于存放方程组的解

	for(int p=0;p<n;p++)   //两层循环,增广矩阵存于数组
	{
		for(int q=0;q<n+1;q++)
		{
			cin>>a[p][q];
		}
	}
    cout<<endl;
    cout<<"您刚才输入的矩阵为:"<<endl;  //按一定格式输出矩阵
    for(p=0;p<n;p++)   
	{
		for(int q=0;q<n+1;q++)
		{
			cout<<setw(6)<<a[p][q];
		}
		cout<<endl;
	}

	for(k=0;k<n-1;k++)     //高斯顺序消元,对增广矩阵进行初等行变换,使系数矩阵化为上三角形
	{   
		for(i=k+1;i<n;i++)
		{
			float m=-a[i][k]/a[k][k];
			for( j=k+1;j<n+1;j++)
			{   
				a[i][j]=a[i][j]+a[k][j]*m;
			}
		}
	}

	for(i=n-1;i>=0;i--)             //回代
	{
		for( j=i+1;j<n;j++)
		{
			a[i][n]-=a[i][j]*x[j];
		}
		x[i]=a[i][n]/a[i][i];
	}

cout<<endl;               //输出线性方程组的解
cout<<"该线性方程组的解为:"<<endl;
	for(int loop=1;loop<=n;loop++)
	{
		cout<<"X"<<loop<<"="<<x[loop-1]<<endl;
	}
}

⌨️ 快捷键说明

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