求助: 我的解方程程序为什么不能用呢?
#include <stdio.h>#include <math.h>
int choose_max(double** matrix, int line_start, int line_end);
double substitute_line(double** matrix, int line_a, int line_b);
double** eliminate_line(double** matrix, int line_a);
double* huidai(double** matrix);
void print_result(double* result);
void print_matrix(double** matrix);
void solve_expression(double** matrix);
void main()
{
getch();
}
int choose_max(double** matrix, int line_start, int line_end)
{
int nol;
int i;
double mol;
nol=line_start;
mol=abs(*(*(matrix+line_start)+line_start));
for(i=line_start;i<=line_end;i++)
{
if(abs(*(*(matrix+i)+line_start))>mol)
{
nol=i;
mol=abs(*(*(matrix+i)+line_start));
}
}
return(nol);
}
double** substitte_line(double** matrix, int line_a, int line_b)
{
int i;
for(i=0;i<4;i++)
*(*(matrix+3)+i)=(*(*(matrix+line_a)+i));
for(i=0;i<4;i++)
*(*(matrix+line_a)+i)=(*(*(matrix+line_b)+i));
for(i=0;i<4;i++)
*(*(matrix+line_b)+i)=(*(*(matrix+3)+i));
return(matrix);
}
double** eliminate_line(double** matrix, int line_a)
{
double isn;
int i,j;
isn=(*(*(matrix+line_a)+line_a));
for(i=line_a+1;i<3;i++)
{
for(j=line_a+1;j<4;j++)
{
*(*(matrix+i)+j)=(*(*(matrix+i)+j))-(*(*(matrix+line_a)+j))*(*(*(matrix+i)+line_a))/isn;
}
}
return(matrix);
}
double* huidai(double** matrix)
{
double* result;
*(result+2)=(*(*(matrix+2)+3))/(*(*(matrix+2)+2));
*(result+1)=(*(*(matrix+1)+3)-(*(result+2))*(*(*(matrix+1)+2)))/(*(*(matrix+1)+1));
*(result+0)=(*(*(matrix+0)+3)-(*(result+2))*(*(*(matrix+0)+2))-(*(result+1))*(*(*(matrix+0)+1)))/(*(*(matrix+0)+0));
return(result);
}
void print_result(double* result)
{
int i;
for(i=0;i<3;i++)
printf("%lf\t",*(result+i));
}
void print_matrix(double** matrix)
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
printf("lf\t",*(*(matrix+i)+j));
if(j==3)
printf("\n");
}
}
void solve_expression(double** matrix)
{
int i,k;
double* result;
for(i=0;i<3;i++)
{
k=choose_max(matrix,i,2);
matrix=substitte_line(matrix,i,k);
matrix=eliminate_line(matrix,i);
}
result=huidai(matrix);
print_result(result);
}