c语言矩阵行列式函数 c语言 行列式

求c语言求矩阵的行列式和逆天天向哪儿

引用型参数应该在能被定义为const的情况下,尽量定义为const 。

创新互联公司专注于云溪网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供云溪营销型网站建设,云溪网站制作、云溪网页设计、云溪网站官网定制、成都小程序开发服务,打造云溪网络公司原创品牌,更为您提供云溪网站排名全网营销落地服务。

#define N 5 /*[注]:修改6为你所要的矩阵阶数*/

#include "stdio.h"

#include "conio.h"

/*js()函数用于计算行列式,通过递归算法实现*/

int js(s,n)

int s[][N],n;

{int z,j,k,r,total=0;

int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/

if(n2) {for(z=0;zn;z++)

{for(j=0;jn-1;j++)

for(k=0;kn-1;k++)

if(k=z) b[j][k]=s[j+1][k+1];

else b[j][k]=s[j+1][k];

if(z%2==0) r=s[0][z]*js(b,n-1); /*递归调用*/

else r=(-1)*s[0][z]*js(b,n-1);

total=total+r;

}

}

else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0];

return total;

}

/*n_1()函数用于求原矩阵各元素对应的余子式,存放在数组b[N][N]中,定义为float型*/

void n_1(s,b,n)

int s[][N],n;

float b[][N];

{int z,j,k,l,m,g,a[N][N];

for(z=0;zn;z++)

{l=z;

for(j=0;jn;j++)

{ m=j;

for (k=0;kn-1;k++)

for(g=0;gn-1;g++)

{ if(g=mkl) a[k][g]=s[k][g+1];

else if(k=lgm) a[k][g]=s[k+1][g];

else if(k=lg=m) a[k][g]=s[k+1][g+1];

else a[k][g]=s[k][g];

}

b[z][j]=js(a,n-1);

}

}

}

main()

{int a[N][N];

float b[N][N];

int r,z,j;

float temp;

//clrscr();

printf("Input original data:\n");

for(z=0;zN;z++) /*输入所需要的数据,为整型数据*/

for(j=0;jN;j++)

scanf("%d",a[z][j]);

printf("\nPress Enter continue......");

getchar();

//gotoxy(1,1);

printf("The original matrix is:\n");

for(z=0;zN;z++)/*打印原矩阵*/

{for(j=0;jN;j++)

printf("%5d",a[z][j]);

printf("\n");

}

r=js(a,N); /*调用js()函数计算原矩阵的行列式值*/

printf("\nThe original matrix hanglieshi is:|A|==%d\n",r);

if (r==0) printf("Because |A|==0,the original matrix have no nijuzhen!"); /*判断条件:若|A|==0,则原矩阵无逆矩阵,反之则存在逆矩阵*/

else

{n_1(a,b,N); /*调用n_1()函数,得到原矩阵各元素对应的"余子式",存放在数组b[N][N]中*/

for(z=0;zN;z++) /*求代数余子式,此时b[N][N]中存放的为原矩阵各元素对应的"代数余子式"*/

for(j=0;jN;j++)

if((z+j)%2!=0 b[z][j]!=0) b[z][j]=-b[z][j];

for(z=0;zN;z++) /*对b[N][N]转置,此时b[N][N]中存放的为原矩阵的伴随矩阵*/

for(j=z+2;jN;j++)

{temp=b[z][j];

b[z][j]=b[j][z];

b[j][z]=temp;

}

printf("Because |A|!=0,the original matrix have nijuzhen!\n");

printf("The bansuijuzhen A* is:\n");

for(z=0;zN;z++)/* 打印伴随矩阵A* */

{for(j=0;jN;j++)

printf("%4.0f\t",b[z][j]);

printf("\n");

}

for(z=0;zN;z++) /*求逆矩阵,此时b[N][N]中存放的是原矩阵的逆矩阵*/

for(j=0;jN;j++)

b[z][j]=b[z][j]/r;

printf("\nThe nijuzhen is:(A*)/|A|(|A|=%d)\n",r); /*打印逆矩阵*/

for(z=0;zN;z++)

{for(j=0;jN;j++)

printf("%8.3f",b[z][j]);

printf("\n");

}

}

}

C语言求行列式的值

C语言程序如下:

#include stdio.h

#include math.h

#define MAX 100

double D(double arr[][MAX], int n);

void Display(double arr[][MAX], int n);

void main()

{

double arr[MAX][MAX];

double bak[MAX][MAX];

double value;

int n;

int i, j, k, c;

printf("Please enter matrix size n(1=n20):");

scanf("%d", n);

printf("Please input matrix line by line:\n");

for(i=0; in; i++)

{

for(j=0; jn; j++)

{

scanf("%lf", arr[i][j]);

}

}

printf("matrix a:\n");

Display(arr, n);

/* 保存D(0,i)的值到bak中 */

for(i=0; in; i++) /* 处理第1行的每一列元素 */

{

for(j=1; jn; j++) /* 逐行处理 */

{

for(c=0,k=0; kn; k++) /* 逐列处理 */

{

if(k == i)

{

continue;

}

bak[j-1][c++] = arr[j][k];

}

}

value = D(bak, n-1);

printf("Submatrix:\n");

Display(bak, n-1);

printf("DValue of the Submatrix is   %f\n", D(bak, n-1));

}

value = D(arr, n);

printf("result = %f\n", value);

}

double D(double arr[][MAX], int n)

{

double bak[MAX][MAX];

int i, j, k, c, d;

double sum = 0;

if(n == 1)

{

return arr[0][0];

}

for(i=0; in; i++) /* 处理第1行的每一列元素 */

{

for(j=1; jn; j++) /* 逐行处理 */

{

for(c=0,k=0; kn; k++) /* 逐列处理 */

{

if(k == i)

{

continue;

}

bak[j-1][c++] = arr[j][k];

}

}

/* 计算arr(row, col) * D(row, col)的值 */

sum += (i % 2 == 0 ? 1 : -1) * arr[0][i] * D(bak, n-1);

}

return sum;

}

void Display(double arr[][MAX], int n)

{

int i, j;

printf("");

for(i=0; in; i++)

{

for(j=0; jn; j++)

{

printf("%10.1lf", arr[i][j]);

}

printf("\n");

}

}

运行测试:

如何用c语言来求一个四阶行列式的值

用递归写了一个求n阶行列式的算法。用4阶行列式举例:

1 2 3 4

5 6 7 8

4 3 2 1

8 7 6 5

为了方便计算,我没有用二维数组。

把矩阵用一维数组A存起来,并指出维数n。

第i行第j列的元素的下标是i*n+j

#include stdio.h

#include stdlib.h

//求余子式M的函数,参数是矩阵,维数,i行,j列

//比如M(A, 4, 0, 0)表示去掉第1列,第1列的元素后剩下的数组成一个数组

//6 7 8

//3 2 1

//7 6 5

//然后用A[i*n+j]和余子式的值相乘

int* M(int *A, int n, int i, int j)

{

int *B= (int*)malloc((n - 1)*sizeof(int));

int k = 0;

for (int k1 = 0; k1  n; ++k1)

{

if (k1 != i)

for (int k2 = 0; k2  n; ++k2)

if (k2 != j)

B[k++] = A[k1*n + k2];

}

return B;

}

int det(int A[], int n)

{

int sum = 0, N = n*n;

if (n == 1)

sum = A[0];

else

{

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

{

int *tmp = M(A, n, i, 0);

int Aij = A[i*n]*det(tmp, n - 1);

if (i%2 != 0)

Aij = -Aij;

sum = sum + Aij;

}

}

return sum;

}

int main()

{

int A[]={2,1,3,-1,1,-5,1,1,2,3,2,2,0,-1,4,2};

printf("%d\n", det(A, 4));

return 0;

}

求行列式的值,用C语言怎么写啊?

行列式的值的源代码如下:

#include stdio.h

#include stdlib.h

void main()

{

int i,j,m,n,s,t,k=1;

double a[n][n],f=1,c,x,sn;

for (i=0;in;i++)

for (j=0;jn;j++)

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

for (i=0,j=0;injn;i++,j++)

{

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

{

for (m=i;a[m][j]==0;m++);

if (m==n)

{

sn=0;

printf("deta=%lf\n",sn);

exit(0);

}

else

for (n=j;nn;n++)

{

c=a[i][n];

a[i][n]=a[m][n];

a[m][n]=c;

}

k*=(-1);

}

for (s=n-1;si;s--)

{

x=a[s][j];

for (t=j;tn;t++)

a[s][t]-=a[i][t]*(x/a[i][j]);

}

for (i=0;in;i++)

f*=a[i][i];

sn=k*f;

printf ("deta=%lf\n",sn);

}

扩展资料

1、每个C语言程序中main函数是有且只有一个。

2、C语言程序写完后,都是先编译,后连接,最后运行。(.c--.obj--.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行


当前文章:c语言矩阵行列式函数 c语言 行列式
分享URL:http://ybzwz.com/article/dogdhop.html