作者:
网友PwlEast {输入方程个数n,再输入n个方程}
{例如方程3x+2y=1,2x+7y=0,则输入:
2
3 2 1
2 7 0
}
{使用了高斯消元法}
program p1052;{解线性方程组}
const maxn=100;
type float=real;
int=integer;
var a:array[1..maxn,1..maxn]of float;
b:array[1..maxn]of float;
d,t,sum:float;
k,l,iii,j,m,n,ii,jj,loop:int;
ch:char;
begin
readln(n);
m:=n;
for ii:=1 to n do begin
for jj:=1 to m do read(a[ii][jj]);
read(b[ii]);
end;
k:=1;
d:=0;
l:=0;
while(k<=n)do begin
d:=a[k][k];
l:=k;
for iii:=k+1 to n do begin
if(abs(a[iii][k])>abs(d)) then begin
d:=a[iii][k];
l:=iii;
end;
end;
if(l<>k)then begin
for j:=k to n do begin
t:=a[l,j];
a[l,j]:=a[k,j];
a[k,j]:=t;
end;
t:=b[k];
b[k]:=b[l];
b[l]:=t;
end;
for j:=k+1 to n do a[k,j]:=a[k][j]/a[k][k];
b[k]:=b[k]/a[k,k];
for iii:=k+1 to n do begin
for j:=k+1 to n do a[iii,j]:=a[iii,j]-a[iii,k]*a[k,j];
j:=1;
b[iii]:=b[iii]-a[iii,k]*b[k];
end;
inc(k);
end;
for iii:=n-1 downto 1 do begin
sum:=0;
for j:=iii+1 to n do sum:=sum+a[iii,j]*b[j];
b[iii]:=b[iii]-sum;
end;
for loop:=1 to n do begin
if loop=n then ch:=chr(13) else ch:=' ';
write(round(b[loop]),ch);
end;
readln;
readln;
end.
文中将所有“i”换成“iii”。(修改:Crystal)[ 此贴被crystal在2006-08-07 21:22重新编辑 ]