c语言计算行列式
A. 用c语言 编写计算N阶行列式值得程序
#define N 4
#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;i<N;i++)
for (j=0;j<N;j++)
scanf ("%lf",&a[i][j]);
for (i=0,j=0;i<N&&j<N;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;n<N;n++)
{
c=a[i][n];
a[i][n]=a[m][n];
a[m][n]=c;
}
k*=(-1);
}
for (s=N-1;s>i;s--)
{
x=a[s][j];
for (t=j;t<N;t++)
a[s][t]-=a[i][t]*(x/a[i][j]);
}
}
for (i=0;i<N;i++)
f*=a[i][i];
sn=k*f;
printf ("detA=%lf\n",sn);
}
B. 如何用c语言来求一个四阶行列式的值
#include <stdio.h>
#include <stdlib.h>
#define MAX 9 /*定义最大为9阶行列式*/
int Fun(int n, int a[MAX][MAX] ); /*函数声明*/
int main()
{
int n = 0; /*初始化阶数n*/
int i = 0, j = 0; /*i,j分别表示行与列*/
int a[MAX][MAX] = {{0}}; /*定义行列式*/
scanf("%d",&n); /*读入阶数*/
while( n != 0) /*输入为0时退出程序*/
{
for( i = 0; i < n; i++) /*此处2次循环将行列式存入数组中*/
{
for( j = 0; j < n; j++)
scanf("%d", &a[i][j]);
}
printf("%d\n", Fun( n, a ) );
scanf("%d", &n);
}
return 0;
}
/*以下为计算行列式值的递归函数*/
int Fun( int n, int a[MAX][MAX] )
{
int b[MAX][MAX] = {{0}}; /*定义数组b并初始化*/
int i = 0, j = 0, sum = 0; /*i,j为行与列,sum为行列式的值*/
int x = 0,c = 0,p=0; /*用x判断加与减,c,p为中间变量*/
if(n == 1)
return a[0][0];
for(i = 0;i < n; i++) /*此处大循环实现将余子式存入数组b中*/
{
for(c = 0;c < n-1; c++)
{
for(j = 0;j < n-1;j++)
{
if (c < i){ /*借助c判断每行的移动方法*/
p = 0; /*当p=0时,行列式只向左移,即消去对应的第一列的数*/
}
else{ /*否则行列式左移后再上移*/
p = 1;
}
b[c][j] = a[c+p][j+1];
}
}
if(i % 2 == 0){ /*i+j(此时j=0,故只考虑i)为偶数,加法预算*/
x = 1;
}
else{ /*i+j为奇数,减法运算*/
x = (-1);
}
sum += a[i][0] * Fun(n - 1, b ) * x; /*计算行列式的值*/
}
return sum; /*将值返回*/
}
C. 用C语言写行列式运算程序
#include <stdio.h>
#include <stdlib.h>
void fun3(float *,int);
float fun4(float *,int);
void main()
{
int i,j,n;
float *a,answer;
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
printf(" 欢迎进入*雒森*行列式计算程序,请准确输入以便我为您正确计算! \n");
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
do
{
printf("请输入您要计算的行列式的行数或列数n(n>1):");
scanf("%d",&n);
}while(n<2);
a=(float *)malloc(n*n*sizeof(float));
for(i=0;i<n;i++)
{
printf("请输入您要计算的行列式的:\n");
for(j=0;j<n;j++)
{
printf("第%d行%d列:",i+1,j+1);
scanf("%f",&a[i*n+j]);
}
}
fun3(a,n);
answer=fun4(a,n);
printf("您要计算的行列式的值为:%.3f\n\n\n",answer);
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
printf(" 欢迎进入*雒森*行列式计算程序,请准确输入以便我为您正确计算! \n");
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
}
void fun3(float a[],int n)
{
int i,j,d,f;
float m=1,w;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
if(a[j*n+j]==0)
{
for(d=j+1;d<n;d++)
{
if(a[d*n+j]!=0)
break;
}
for(f=j;f<n;f++)
a[j*n+f]+=a[d*n+f]*m;
}
if(i!=j)
{
w=-(a[i*n+j]/a[j*n+j]);
for(f=j;f<n;f++)
a[i*n+f]+=a[j*n+f]*w;
}
}
}
}
float fun4(float a[],int n)
{
int i;
float answer=1;
for(i=0;i<n;i++)
answer*=a[i*n+i];
return answer;
}
D. 求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(n>2) {for(z=0;z<n;z++)
{for(j=0;j<n-1;j++)
for(k=0;k<n-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;z<n;z++)
{l=z;
for(j=0;j<n;j++)
{ m=j;
for (k=0;k<n-1;k++)
for(g=0;g<n-1;g++)
{ if(g>=m&&k<l) a[k][g]=s[k][g+1];
else if(k>=l&&g<m) a[k][g]=s[k+1][g];
else if(k>=l&&g>=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;z<N;z++) /*输入所需要的数据,为整型数据*/
for(j=0;j<N;j++)
scanf("%d",&a[z][j]);
printf("\nPress Enter continue......");
getchar();
//gotoxy(1,1);
printf("The original matrix is:\n");
for(z=0;z<N;z++)/*打印原矩阵*/
{for(j=0;j<N;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;z<N;z++) /*求代数余子式,此时b[N][N]中存放的为原矩阵各元素对应的"代数余子式"*/
for(j=0;j<N;j++)
if((z+j)%2!=0 && b[z][j]!=0) b[z][j]=-b[z][j];
for(z=0;z<N;z++) /*对b[N][N]转置,此时b[N][N]中存放的为原矩阵的伴随矩阵*/
for(j=z+2;j<N;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;z<N;z++)/* 打印伴随矩阵A* */
{for(j=0;j<N;j++)
printf("%4.0f\t",b[z][j]);
printf("\n");
}
for(z=0;z<N;z++) /*求逆矩阵,此时b[N][N]中存放的是原矩阵的逆矩阵*/
for(j=0;j<N;j++)
b[z][j]=b[z][j]/r;
printf("\nThe nijuzhen is:(A*)/|A|(|A|=%d)\n",r); /*打印逆矩阵*/
for(z=0;z<N;z++)
{for(j=0;j<N;j++)
printf("%8.3f",b[z][j]);
printf("\n");
}
}
}
E. 用c语言编程 求n阶行列式
#include<stdio.h>
void main()
{
int n,a,b,y[10],x[10],i,j,temp;
float m[10][10],k=1;
printf("Input \"n\"");
scanf("%d",&n);
printf("input the matrix:\n");
for(b=1;b<=n;b++)
{
printf("next row:\n");
for(a=1;a<=n;a++)scanf("%f",&m[a][b]);
}
for(b=1;b<=n;b++)
{
for(a=1;a<=n;a++)printf("%10f",m[a][b]);
printf("\n");
}
printf("\n");
for(i=1;i<=n;i++){x[i]=1;y[i]=i;}
for(j=1;j<=n;j++)while(m[x[j]][j]==0)x[j]++;
for(b=n;b>=1;b--)
for(a=1;a<=b-1;a++)
if(x[a]>x[a+1])
{
temp=x[a];x[a]=x[a+1];x[a+1]=temp;
temp=y[a];y[a]=y[a+1];y[a+1]=temp;
k*=-1;
}
for(b=1;b<=n;b++)
{
for(a=1;a<=n;a++)printf("%10f",m[a][y[b]]);
printf("\n");
}
printf("\n");
for(a=1;a<=n;a++)
for(b=a+1;b<=n;b++)
if(m[a][y[b]]!=0)
for(i=a+1;i<=n;i++)
m[i][y[b]]-=m[a][y[b]]*m[i][y[b-1]]/m[a][y[b-1]];
for(b=1;b<=n;b++)
{
for(a=1;a<=n;a++)printf("%10f",m[a][y[b]]);
printf("\n");
}
for(i=1;i<=n;i++)k*=m[i][y[i]];
printf("the matrix is %f \n",k);
scanf("%d",i);
}
我在刚学c那会写的一个程序,算法不是很优秀,而且有漏洞,希望能给你提供大体思路。
我也帮你找了个别人写的程序,你也去看看吧。也是网络上的。
F. C语言计算行列式
你好,我用C#写过计算行列式值的winform程序,不过算法应该一样,你可以看看
//按钮事件
privatevoidbtnResult_Click(objectsender,EventArgse)
{
stringsInfo=txtInfo.Text.Trim();
string[]R=sInfo.Replace(" ","※").Split('※');
intn=R.Length;//维数
string[,]A=newstring[n,n];
for(inti=0;i<n;i++)
{
for(intj=0;j<n;j++)
{
string[]C=R[i].Split('');
if(C.Length!=n)
{
MessageBox.Show("请输入n阶行列式");
return;
}
A[i,j]=C[j];
}
}
try
{
lblResult.Text=DGRowLayout(A).ToString();
}
catch
{
MessageBox.Show("本程序只支持一般的数字形式,不支持特殊的数字形式");
return;
}
}
//递归算法
privatedoubleDGRowLayout(string[,]A)
{
if(A.Length==1)
{
returndouble.Parse(A[0,0]);
}
doubles=0;
intm=0,n=0;
intN=int.Parse(Math.Sqrt(A.Length).ToString());
for(inti=0;i<N;i++)
{
string[,]B=newstring[N-1,N-1];
m=0;
for(intj=1;j<N;j++)
{
n=0;
for(intk=0;k<N;k++)
{
if(k!=i)
{
B[m,n]=A[j,k];
n++;
}
}
m++;
}
intO=0;
if(i%2==0)
{
O=1;
}
else
{
O=-1;
}
s+=double.Parse(A[0,i])*O*DGRowLayout(B);
}
returns;
}
G. C语言求行列式的值
C语言程序如下:
#include<stdio.h>
#include<math.h>
#defineMAX100
doubleD(doublearr[][MAX],intn);
voidDisplay(doublearr[][MAX],intn);
voidmain()
{
doublearr[MAX][MAX];
doublebak[MAX][MAX];
doublevalue;
intn;
inti,j,k,c;
printf("Pleaseentermatrixsizen(1<=n<20):");
scanf("%d",&n);
printf("Pleaseinputmatrixlinebyline: ");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%lf",&arr[i][j]);
}
}
printf("matrixa: ");
Display(arr,n);
/*保存D(0,i)的值到bak中*/
for(i=0;i<n;i++) /*处理第1行的每一列元素*/
{
for(j=1;j<n;j++) /*逐行处理*/
{
for(c=0,k=0;k<n;k++) /*逐列处理*/
{
if(k==i)
{
continue;
}
bak[j-1][c++]=arr[j][k];
}
}
value=D(bak,n-1);
printf("Submatrix: ");
Display(bak,n-1);
printf("DValueoftheSubmatrixis%f ",D(bak,n-1));
}
value=D(arr,n);
printf("result=%f ",value);
}
doubleD(doublearr[][MAX],intn)
{
doublebak[MAX][MAX];
inti,j,k,c,d;
doublesum=0;
if(n==1)
{
returnarr[0][0];
}
for(i=0;i<n;i++) /*处理第1行的每一列元素*/
{
for(j=1;j<n;j++) /*逐行处理*/
{
for(c=0,k=0;k<n;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);
}
returnsum;
}
voidDisplay(doublearr[][MAX],intn)
{
inti,j;
printf("");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%10.1lf",arr[i][j]);
}
printf(" ");
}
}
运行测试:
H. 求行列式的值,用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;i<n;i++)
for (j=0;j<n;j++)
scanf ("%lf",&a[i][j]);
for (i=0,j=0;i<n&&j<n;i++,j++)
{
if (a[i][j]==0)
{
for (m=i;a[m][j]==0;m++);
if (m==n)
{
sn=0;
printf("deta=%lf ",sn);
exit(0);
}
else
for (n=j;n<n;n++)
{
c=a[i][n];
a[i][n]=a[m][n];
a[m][n]=c;
}
k*=(-1);
}
for (s=n-1;s>i;s--)
{
x=a[s][j];
for (t=j;t<n;t++)
a[s][t]-=a[i][t]*(x/a[i][j]);
}
for (i=0;i<n;i++)
f*=a[i][i];
sn=k*f;
printf ("deta=%lf ",sn);
}
(8)c语言计算行列式扩展阅读
1、每个C语言程序中main函数是有且只有一个。
2、C语言程序写完后,都是先编译,后连接,最后运行。(.c-->.obj-->.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行
I. 浅析用c语言编程求解线性代数中行列式值
include <iostream>
#include <stdio.h>
int jc(int m){
if(m!=1) return m*jc(m-1);
else return 1;
}
int c(int m,int n){
if(m>=n) return jc(m)/(jc(n)*jc(m-n));
}
int main(void){
int m,n;
scanf("%d%d",&m,&n);
printf("%d\n",c(m,n));
return 0;
}
J. C语言 计算行列式
利用一定的固定方法把他化成上三角或者下三角,然后用一个新数组储存对角线上,连乘,得结果