实用标准文案
精彩文档
#include
#define M 20
#define N 21
int k,l;
void main()
{
int i,i1,i2,i3,j,j1,j2,m,n,n1,min,min1,imax,*p,(*q)[N],a[M][N];
char c;
do
{
printf("请输入方程个数,不大于20个:");
scanf("%d",&k);
if(k>M)
printf("error!");
}
while(k>M);//如果大于20则重新输入
do
{
printf("请输入未知数个数,不大于20个:");
scanf("%d",&l);
if(l>N-1)
printf("error!");
}
while(l>N-1);//如果大于20则重新输入
for(i=0;i
{
printf("请输入第%d个方程系数包括等号右边的常数按下回车键进入下一步(必须是整数且各方程的第一个系数为正整数)\n请输入",i+1);
for(j=0;j
{
printf("第%d个未知数系数:",j+1);
scanf("%d",&a[i][j]);
}
if(j==l)
{
printf("请输入第%d个方程等号右边的常数:",i+1);
scanf("%d",&a[i][j]);
}
p=&a[0][0];
q=a;
}
p=&a[0][0];
q=a;
for(i=0;i
{
for(j=0,p=*q;j<=l;j++,p++)
printf("%d ",*p);
printf("\n");
}
printf("下一步:\n");
for(i=0;i
{
m=a[i][0];
for(i1=i;i1
if(a[i1][0]>m)
{
m=a[i1][0];
a[i1][0]=a[i][0];
a[i][0]=m;
for(j=1;j<=l;j++)//交换其他系数
{
n=a[i1][j];
a[i1][j]=a[i][j];
a[i][j]=n;
}
}
}
for(i2=0;i2
{
imax=1;//初始化imax
for(i3=1,min=2;i3<=min;i3++)//min=2是为了保证第一次执行
{
for(j2=0;j2<=l;j2++)//寻找不为零的系数
if(a[i2][j2]!=0)
{
min=a[i2][j2];
break;
}
if(j2>l)//如果所有系数都为零
min=1;
else
{
for(j2=0;j2<=l;j2++)//找到绝对值最小的系数(零除外)
{
if(a[i2][j2]<0)
min1=-a[i2][j2];
else min1=a[i2][j2];
if(min1
min=min1;
}
for(j2=0,n1=0;j2<=l&&n1==0;j2++)//找到最大公约数
{
n1=a[i2][j2]%i3;
if(n1==0&&j2==l)
imax=i3;
}
}
if(i3>=min/2&&i3!=min)//减少循环次数
i3=min-1;
}
for(j2=0;j2<=l;j2++)//除以最大公约数
a[i2][j2]/=imax;
}
p=&a[0][0];
q=a;
for(i=0;i
{
for(j=0,p=*q;j<=l;j++,p++)
printf("%d ",*p);
printf("\n");
}
printf("下一步:\n");
for(i=0;i
{
for(i1=i+1;i1
if(a[i1][i]!=0)
{
for(j=0,m=a[i][i],n=a[i1][i];j<=l;j++)
a[i1][j]=a[i1][j]*m-a[i][j]*n;
for(i2=0;i2
{