就这么简单!
程序清单:
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
#define MAX 255
int Guass(double a[],double b[],int n)
{int *js,l,k,i,j,is,p,q;
double d,t;
js=malloc(n*sizeof(int));
l=1;
for(k=0;k<=n-2;k++)
{d=0.0;
for(i=k;i<=n-1;i++)
for(j=k;j<=n-1;j++)
{t=fabs(a[i*n+j]);
if(t>d)
{d=t;js[k]=j;is=i;}
}
if(d+1.0==1.0)l=0;
else {if(js[k]!=k)
for(i=0;i<=n-1;i++)
{p=i*n+k;
q=i*n+js[k];
t=a[p];a[p]=a[q];a[q]=t;}
if(is!=k)
{for(j=k;j<=n-1;j++)
{p=k*n+j;
q=is*n+j;
t=a[p];a[p]=a[q];a[q]=t;}
t=b[k];b[k]=b[is];b[is]=t;}
}
if(l==0){free(js);
printf("该矩阵为奇异矩阵!\n");
return (0);}
d=a[k*n+k];
for(j=k+1;j<=n-1;j++)
{p=k*n+j;
a[p]=a[p]/d;}
b[k]=b[k]/d;
for(i=k+1;i<=n-1;i++)
{for(j=k+1;j<=n-1;j++)
{p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if(fabs(d)+1.0==1.0)
{free(js);
printf("该矩阵为奇异矩阵!\n");
return (0);}
b[n-1]=b[n-1]/d;
for(i=n-2;i>=0;i--)
{t=0.0;
for(j=i+1;j<=n-1;j++)t=t+a[i*n+j]*b[j];
b[i]=b[i]-t;}
js[n-1]=n-1;
for(k=n-1;k>=0;k--)
if(js[k]!=k)
{t=b[k];b[k]=b[js[k]];b[js[k]]=t;}
free(js);
return (1);}
void main()
{int q;
printf("
本程序分为两个功能请选择:\n");
do{printf("*******************************************************\n");
printf("|
1.求n介齐次线性方程组的解.
|\n");
printf("|
2.建立5*5矩阵,4角放最小数,矩阵中间为最大数依次存放.|\n");
printf("|
3.安退出全系统.
|\n");
printf("*******************************************************\n");
printf("请输入你的选择:");
scanf("%d",&q);
switch(q)
{case 1:
{int i,n;
double A[MAX],B[MAX];
clrscr();
printf("\n你选择的功能是求n介齐次线性方程组的解.\n");
printf("请输入要求解的齐次线性方程组的介数:n=");
scanf("%d",&n);
printf("请逐个输入%d介齐次线性方程组未知数的系数矩阵共%dX%d个:\n",n,n,n);
for(i=0;i<n*n;i++)
scanf("%lf",&A[i]);
printf("请逐个输入%d介齐次线性方程组右边的常量矩阵共%d个:\n",n,n);
for(i=0;i<n;i++)
scanf("%lf",&B[i]);
if(Guass(A,B,n)!=0)
{printf("要求解的%d介齐次线性方程组的解为:\n",n);
for(i=0;i<n;i++)
printf("X(%d)=%f\n",i+1,B[i]);
}
else printf("要求解的%d介齐次线性方程组无解.\n",n);break;}
case 2:
{static int a[25];
int i,k,t;
printf("你选择的功能是建立5*5矩阵,4角放最小数,矩阵中间为最大数依次存放.\n");
printf("请输入25个整数:\n");
for(i=0;i<25;i++) scanf("%d",&a[i]);
for(i=0;i<25;i++)
for(k=i+1;k<25;k++)
if(a[i]>=a[k])
{t=a[i];a[i]=a[k];a[k]=t;}
printf("\n********************************\n");
printf("|%4d
%4d
%4d
%4d
%4d
|\n",a[0],a[4],a[5],a[6],a[1]);
printf("|%4d
%4d
%4d
%4d
%4d
|\n",a[7],a[8],a[9],a[10],a[11]);
printf("|%4d
%4d
%4d
%4d
%4d
|\n",a[12],a[13],a[24],a[14],a[15]);
printf("|%4d
%4d
%4d
%4d
%4d
|\n",a[16],a[17],a[18],a[19],a[20]);
printf("|%4d
%4d
%4d
%4d
%4d
|\n",a[3],a[21],a[22],a[23],a[2]);
printf("********************************\n"); }
default:break;}
}while(q!=3);
}