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

📄 高斯消去法解n维的线性方程组的小程序.cpp

📁 高斯消去法解n维的线性方程组的小程序.rar
💻 CPP
字号:
//高斯消去法解n维的线性方程组的小程序


     
//运行时先输入阶数n,再输入系数行列式p[n][n],然后是输
//入常数列向量b[n].屏幕会输出消元前后的增广矩阵和解。
//该程序Turbo C2.0通过。
#include <stdlib.h>
double tabs(double x)
 {
  x=x>0?x:-x;
  return x;
 }
main()
 {
  int n,h,i,j,k;
  double *x,*b,**p,*temp,t,sum;
  do{ printf("\nInput n:");
     scanf("%d",&n);
   }while(n<=0||n>=200);
  b=(double*)malloc(sizeof(double)*n);
  x=(double*)malloc(sizeof(double)*n);
  p=(double**)malloc(sizeof(double*)*n);
  for(i=0;i<n;i++)
   p[i]=(double*)malloc(sizeof(double)*n);
  printf("Input p[i][j]:\n");
  for(i=0;i<n;i++)
   {
    for(j=0;j<n;j++)
     { printf("a[%d][%d]:",i+1,j+1);
      scanf("%lf",&t);
      p[i][j]=t; }/*偶这样写不是自找麻烦,这是turbo c的BUG*/
    printf("\n");/*直接写scanf("%lf",&p[i][j]);会出错*/
   }
  printf("Input b[n]:\n");
  for(i=0;i<n;i++)
   { printf("b[%d]:",i);
    scanf("%lf",&b[i]); }
  for(i=0;i<n;i++)
    { printf("\n");
     for(j=0;j<n;j++)
     printf("\t%g",p[i][j]);
printf("\t%g",b[i]); }
  for(i=0;i<n-1;i++)
   {
    k=i;
    for(j=i;j<n;j++)
     {
      if(tabs(p[k][i])<tabs(p[j][i]))
       k=j;
     }
    temp=p[i];p[i]=p[k];p[k]=temp;
    t=b[i];b[i]=b[k];b[k]=t;
    if(p[i][i]==0)
    {pintf("\nError!Can't be calculated!");
      exit(1);}
    for(j=i+1;j<n;j++)
{
b[j]=b[j]-b[i]*(p[j][i]/p[i][i]);
       for(h=n-1;h>=i;h--)
        p[j][h]-=p[i][h]*p[j][i]/p[i][i];}
     }
   printf("\n\n");
   printf("\n\n");
   for(i=0;i<n;i++)
    {printf("\n");
     for(j=0;j<n;j++)
      printf("\t%g",p[i][j]); printf("\t%g",b[i]); }
  for(i=n-1;i>=0;i--)
   {
    sum=b[i];
    for(j=i+1;j<n;j++)
     sum-=x[j]*(p[i][j]);
    if(p[i][i]==0)
   {printf("\nError!Can't be calculated! ");
      exit(1);}
    x[i]=sum/p[i][i];
   }
  for(i=0;i<n;i++)
 printf("%cx[%d]=%.8g",(i%3==0?'\n':'\t'),(i+1),x[i]);
free(p);free(x);free(b);
 }

⌨️ 快捷键说明

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