龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

学数学也要学点偷懒的技术

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
我做这个微小软件其实是想在做线性代数作业偷懒,她很快帮你解出N阶行列式的值,N阶线性方程的解,还能进行矩阵的相乘。我拿它出来其实是让大家在学习其他课程是也能学C语言。

我做这个微小软件其实是想在做线性代数作业偷懒,她很快帮你解出N阶行列式的值,N阶线性方程的解,还能进行矩阵的相乘。我拿它出来其实是让大家在学习其他课程是也能学C语言。以后我还会对它升级。大家多多留意喔!

#include

  #define N 10

  #define M 10

  #define S 10

  

  void njie_valu();

  void njief_value();

  float Dvalue(float a[N][N],int n);

  void juzhench();

void juzhench()

  {

  int i,j,k,m,n,s,s1;

  float a[M][S],b[S][N],c[M][N];

  printf("矩阵A是m*n矩阵。

") ;

  printf("请分别输入m,s的值:");

  scanf("%d,%d",&m,&s);

  printf("矩阵B是s*n矩阵

");

  printf("请分别输入s,n的值: ");

  scanf("%d,%d",&s1,&n);

  if(s!=s1) {

   printf("两次输入的s的值不一样,不能进行运算!

");

   exit(0);

   }

  for(i=0;i

   for(j=0;j

   c[i][j]=0;

   }

  printf("请输入矩阵A

");

  for(i=0;i

   for(j=0;j

   scanf("%f",&a[i][j]);

   }

  printf("请输入矩阵B:

");

  for(i=0;i

   for(j=0;j

   scanf("%f",&b[i][j]);

   }

  for(i=0;i

   for(j=0;j

   for(k=0;k

   c[i][j]=c[i][j]+a[i][k]*b[k][j];

   }

   }

  printf("相乘后的结果是:

");

  for(i=0;i

   for(j=0;j

   printf("%f ",c[i][j]);

   printf("

");

   }

  getch();

  }

void njie_valu()

  {

  int i,j,n,k,h=0;

  float x[N],a[N][N],D=1.0;

  printf("说明:输入的n阶行列式,必须保证主对角线上的前n-1个元素都不为零!

");

  printf("请输入是几阶行列式:

");

  scanf("%d",&n);

  printf("请以行列式的正确顺序输入个元素:

");

  for(i=0;i

   for(j=0;j

   scanf("%f",&a[i][j]);

   }

  for(i=0,j=i;i

   if(a[i][j]==0)

   h++;

  if(h==n-1) {

   printf("请确保主对角线上前n-1个元素都不为零,请您调整!☆

");

   printf("");

   exit(0);

   }

  for(k=0;k

   for(i=k+1;i

   x[i]=a[i][k]/a[k][k];

   for(i=k+1;i

   for(j=0;j

   a[i][j]=a[i][j]-a[k][j]*x[i];

   }

   }

  for(i=0;i

   for(j=0;j

   printf("%f ",a[i][j]);

   printf("

");

   }

  printf("

");

  for(i=0,j=0;i

   D=D*a[i][j];

  printf("D= %f",D);

  getch();

  }

  

void njief_value()

  {

  float D;

  float Dvalue(float [N][N],int n);

  int i,j,k,n,h,m;

  float a[N][N],x[N],b[N],D1[N],a1[N][N],vable[N];

  printf("说明::输入的n阶行列式,必须保证n阶线性方程的系数及系数和常数项构成的行列式主对角线上的前n-1个元素都不为零!

");

  printf("请输入是几阶线性方程: ");

   scanf("%d",&n);

  printf("请以行列式的正确顺序输入个元素:

");

  for(i=0;i

   for(j=0;j

   scanf("%f",&a[i][j]);

   }

  for(i=0;i

   for(j=0;j

   printf("%f ",a[i][j]);

   printf("

");

   }

  printf("按正确顺序输入常数项:

");

  for(i=0;i

   scanf("%f",&b[i]);

  for(i=0;i

   for(j=0;j

   a1[i][j]=a[i][j];

   }

  D=Dvalue(a1,n);

  printf("D= %f",D);

  getch();

  for(i=0;i

   for(j=0;j

   a1[i][j]=a[i][j];

   }

  for(i=0;i

   for(k=0;k

   a1[k][i]=b[k];

   for(m=0;m

   for(h=0;h

   printf("%f ",a1[m][h]);

   printf("

");

   }

   printf("

");

   D1[i]=Dvalue(a1,n);

   printf("D%d= %f

",i+1,D1[i]);

   getch();

   for(h=0;h

   for(m=0;m

   a1[h][m]=a[h][m];

   }

   }

   for(i=0;i

   vable[i]=D1[i]/D;

   for(i=0;i

   printf("x%d=%f",i+1,vable[i]);

   printf("

");

   }

  getch();

   }

float Dvalue(float a[N][N],int n)

  {

   int i,j,k;

   float x[N],D=1.0;

   for(k=0;k

   for(i=k+1;i

   x[i]=a[i][k]/a[k][k];

   for(i=k+1;i

   for(j=0;j

   a[i][j]=a[i][j]-a[k][j]*x[i];

   }

   }

   for(i=0;i

   for(j=0;j

   printf("%f ",a[i][j]);

   printf("

");

   }

  printf("

");

for(i=0,j=0;i

   D=D*a[i][j];

  return(D);

  }

  

void main()

  {

  int i,j=1;

  do {

  clrscr();

  printf("1.解n阶行列式2.解n阶线性方程3.求矩阵相乘0.退出

");

  printf("请输入所需功能的序号:");

  scanf("%d",&i);

  switch(i){

   case 1: njie_valu();break;

   case 2: njief_value();break;

   case 3: juzhench();break;

   case 0: j=0;break;

   }

   }while(j);

  }

  

  

  

精彩图集

赞助商链接