以下程序原本想解方程的Ax=b
但矩阵元的输入有错误。
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
main()
{
int i,j;
int n;
double *A,*x,*B; /*考虑将来作为一个函数,供调用。所以用一维数组*/
void inputn(int *n); /*方程的个数*/
void initiate(int n,double A[],double B[]); /*输入A,B的矩阵元*/
void solve_below(int n,double A[],double x[],double B[]); /*解下三角矩阵*/
inputn(&n);
A=calloc(n*n,sizeof(int)); /*A为n*n矩阵*/
B=calloc(n,sizeof(int));
x=calloc(n,sizeof(int));
if (A&&B&&x==0)
{
printf("calloc error:\nPress any key to exit:");
getch();
exit (1);
}
initiate(n,A,B);
printf("A=\n");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
printf("%g\t",A[i*n+j]);
printf("\nB=\n");
for (i=0;i<n;i++)
printf("%g\t",B[i]);
printf("\n"); /*输入与输出不符*/
solve_below(n,A,x,B);
for (i=0;i<n;i++)
printf("x[%d]=%.5lf\n",i,x[i]);
getch();
}
/*======inputn=====*/
/*输入方程的个数*/
void inputn(int *n)
{
double nn; /*考虑到浮点的输入链接,所以将方程的个数先以浮点形式进行输入,再返回整形数*/
system("cls");
printf("Please input the number of equation:");
scanf("%lf",&nn);
*n=nn;
}
/*====initiate=========*/
/*=====输入矩阵元======*/
void initiate(int n,double A[],double B[])
{
int i;
printf("input A\n");
for (i=0;i<n*n;i++)
scanf("%lf",&A[i]);
printf("input B\n");
for (i=0;i<n;i++)
scanf("%lf",&B[i]);
}
/*====solve_below======*/
/*===解下三角矩阵======*/
void solve_below(int n,double A[],double x[],double B[])
{
int i,j;
for (i=0;i<n;x[i]/=A[i*n+i],i++)
for (j=0,x[i]=B[i];j<=i-1;j++)
x[i]-=A[i*n+j]*x[j];
}