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

📄 cpp1.cpp

📁 利用高斯列主元消去法 计算方程组 可以计算任意N介方程组
💻 CPP
字号:
#include<stdio.h>
#include<math.h>
#define N 3

//定义全局变量
int k;
//确定列主元,找出列主元标记k,对应的行数
float f(float a[N][N],int j)
{
    int i;
	k=j;
	for(i=j+1;i<N;i++)
		if(fabs(a[j][j])<fabs(a[i][j]))  k=i;
	return a[k][j];
}
//交换列主元,包括a[N][N],b[N]
void g(float a[N][N],float b[N],int j)
{
    int m;
	float temp1,temp2;
	for(m=0;m<N;m++)
	{temp1=a[k][m];a[k][m]=a[j][m];a[j][m]=temp1;}
	{temp2=b[j];b[j]=b[k];b[k]=temp2;}
}
//消元
void z(float a[N][N],float b[N],int j)
{
    float t;
	int i,m;
	for(i=j+1;i<N;i++)
	{
	    t=-a[i][j]/a[j][j];
		for(m=j;m<N;m++)
		{a[i][m]=a[i][m]+a[j][m]*t;}
		b[i]=b[i]+b[j]*t;
	}
}
//回代
void w(float a[N][N],float b[N],float c[N])
{
     float s;
	 int i,j;
	 for(i=N-1;i>=0;i--)
	 {
		 s=0;
	     for(j=i+1;j<N;j++)
			 s=s+a[i][j]*c[j];
		 c[i]=(b[i]-s)/a[i][i];
	 }
}
//子函数
int zf(float a[N][N],float b[N],float c[N],float ep)
{
     int flag=1;
	 int j;
     for(j=0;j<N;j++)
	 {
		 if(f(a,j)<ep)  {flag=0; break;}
         g(a,b,j);
		 z(a,b,j);
	 }
	 if(flag=1) w(a,b,c);
	 return(flag);
}
//主函数
void main()
{
     float ep;
	 float a[N][N],b[N],c[N];
	 int i,j;
	 i=N;
     
	 printf("请输入 ep:(如果列主元的绝对值小于ep,则退出)\n");
	 scanf("%f",&ep);

	 printf("请输入系数矩阵 a[%d][%d]:\n",i,i);
	 for(i=0;i<N;i++)
	 {
		 for(j=0;j<N;j++)
	         scanf("%f",&a[i][j]);
	 }
	 printf("请输入矩阵 b[%d]:\n",i);
     for(i=0;i<N;i++)
	 {
	      scanf("%f",&b[i]);
		  c[i]=0.0;
	 }


	 i=zf(a,b,c,ep);
	 if(i==0)  printf("error\n");
	 else 
	 { 
		printf("输出结果:\n");
	    for(j=0;j<N;j++)
			printf("%f\n",c[j]);
	 }
}

⌨️ 快捷键说明

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