- 注册时间
- 2004-12-5
- 最后登录
- 1970-1-1
|
发表于 2008-6-9 11:40:35
|
显示全部楼层
这是以前刚学c时候写的 结构不怎么好 给楼主参考吧
这里采用的计算方法是对角化法 源程序:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define SIZE sizeof(double)
typedef double real;
int Nn;
real *p;
void main()
{
void inputm(real *,int);
void printm(real *,int);
real jisuan(int);
real *definem(int);
int n;
real answer;
printf("****determinant solver****\n");
printf(" by dragon\n");
do {
printf("input n please:");
scanf("%d",&n);
} while (n<=0);
Nn=n;
p=definem(n);
inputm(p,n);
answer=jisuan(n);
printf("the answer is %.2f\n",answer);
system("pause");
}
real *definem(int n)
{
real *pt;
pt=(real *)malloc(n*n*SIZE);
return(pt);
}
void inputm(real *pt,int n)
{
int i,j; double k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("a%d%d=",i,j);
scanf("%lf",&k);
*pt=(real)k;
pt++;
printf(" ");
}
printf("\n");
}
}
real jisuan(int n)
{
real a(int,int);
int swap(int);
int i,j;
real r,re,k=1;
if(n==1) return (*p);
if(a(n,n)==0)
{
k=-1;
if(swap(n)==0) return 0;
}
for(i=1;i<=(n-1);i++)
{
r=a(i,n)/a(n,n);
for(j=1;j<=(n-1);j++)
*(p+(i-1)*Nn+j-1)=a(i,j)-r*a(n,j);
}
k=k*a(n,n);
re=k*jisuan(n-1);
return re;
}
int swap(int n)
{
real a(int,int);
int i,j;
real t;
for(i=0;i<n;i++)
{
if(*(p+i*Nn+n-1)!=0)
{
for(j=0;j<=n;j++)
{
t=a(i+1,j+1);
*(p+i*Nn+j)=a(n,j+1);
*(p+(n-1)*Nn+j)=t;
}
return 1;
}
}
return 0;
}
real a(int x,int y)
{
real t;
t=*(p+(x-1)*Nn+y-1);
return(t);
} |
|