給,下面的程式碼已經編譯執行確認,肯定好用了,試試吧:)
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define
number
20
esc
0x1b
enter
0x0d
float
a[number][number+1]
,ark;
int
flag,n;
void
exchange(int
r,int
k);
max(int
message();
main()
{
x[number];
/*此陣列用於存放方程解*/
k,i,j;
char
celect;
system("cls");
printf("\n用gauss列主元消元法解線性方程組");
printf("\n1.解方程組請按enter.");
printf("\n2.退出程式請按esc.");
celect=getch();
if(celect==esc)
exit(0);
printf("\n
輸入方程組的維數:n=");
scanf("%d",&n);
printf("\n現在輸入係數矩陣a和向量b:");
for(i=1;i<=n;i++)
printf("\n請輸入a%d1--a%d%d係數和向量b%d:
\n",i,i,n,i);
/*實現將每一行中的係數和向量一次性輸入,數之間用空格格開,輸完後回車確定*/
for(j=1;j<=n+1;j++)
/*將剛才輸入的數存入陣列*/
scanf("%f",&a[i][j]);
}
for(k=1;k<=n-1;k++)
ark=max(k);
if(ark==0)
/*判斷方程是否為線性方程,即是否合法*/
printf("\n此方程組不合法!");message();
else
if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k];
x[n]=a[n][n+1]/a[n][n];
for(
k=n-1;k>=1;k--)
me=0;
for(j=k+1;j<=n;j++)
me=me+a[k][j]*x[j];
x[k]=(a[k][n+1]-me)/a[k][k];
printf("\nx%d=%f",i,x[i]);
getch();
return
1;
k)
/*交換行的矩函式*/
i;
for(i=1;i<=n+1;i++)
a[0][i]=a[r][i];
a[r][i]=a[k][i];
a[k][i]=a[0][i];
/*比校係數大小的函式*/
temp=0;
for(i=k;i<=n;i++)
if(fabs(a[i][k])>temp)
temp=fabs(a[i][k]);
flag=i;
temp;
message()
/*實現選單選擇的函式*/
繼續運算按
,退出程式按
esc!");
switch(getch())
case
enter:
main();
esc:
default:{printf("\n不合法的輸入!");message();}
給,下面的程式碼已經編譯執行確認,肯定好用了,試試吧:)
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define
number
20
#define
esc
0x1b
#define
enter
0x0d
float
a[number][number+1]
,ark;
int
flag,n;
void
exchange(int
r,int
k);
float
max(int
k);
void
message();
int
main()
{
float
x[number];
/*此陣列用於存放方程解*/
int
k,i,j;
char
celect;
system("cls");
printf("\n用gauss列主元消元法解線性方程組");
printf("\n1.解方程組請按enter.");
printf("\n2.退出程式請按esc.");
celect=getch();
if(celect==esc)
exit(0);
printf("\n
輸入方程組的維數:n=");
scanf("%d",&n);
printf("\n現在輸入係數矩陣a和向量b:");
for(i=1;i<=n;i++)
{
printf("\n請輸入a%d1--a%d%d係數和向量b%d:
\n",i,i,n,i);
/*實現將每一行中的係數和向量一次性輸入,數之間用空格格開,輸完後回車確定*/
for(j=1;j<=n+1;j++)
/*將剛才輸入的數存入陣列*/
scanf("%f",&a[i][j]);
}
for(k=1;k<=n-1;k++)
{
ark=max(k);
if(ark==0)
/*判斷方程是否為線性方程,即是否合法*/
{
printf("\n此方程組不合法!");message();
}
else
if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k];
}
x[n]=a[n][n+1]/a[n][n];
for(
k=n-1;k>=1;k--)
{
float
me=0;
for(j=k+1;j<=n;j++)
{
me=me+a[k][j]*x[j];
}
x[k]=(a[k][n+1]-me)/a[k][k];
}
for(i=1;i<=n;i++)
{
printf("\nx%d=%f",i,x[i]);
}
message();
getch();
return
1;
}
void
exchange(int
r,int
k)
/*交換行的矩函式*/
{
int
i;
for(i=1;i<=n+1;i++)
a[0][i]=a[r][i];
for(i=1;i<=n+1;i++)
a[r][i]=a[k][i];
for(i=1;i<=n+1;i++)
a[k][i]=a[0][i];
}
float
max(int
k)
/*比校係數大小的函式*/
{
int
i;
float
temp=0;
for(i=k;i<=n;i++)
if(fabs(a[i][k])>temp)
{
temp=fabs(a[i][k]);
flag=i;
}
return
temp;
}
void
message()
/*實現選單選擇的函式*/
{
printf("\n
繼續運算按
enter
,退出程式按
esc!");
switch(getch())
{
case
enter:
main();
case
esc:
exit(0);
default:{printf("\n不合法的輸入!");message();}
}
}