永发信息网

C语言用高斯消元法解n元线性方程

答案:2  悬赏:60  手机版
解决时间 2021-11-30 01:12
C语言用高斯消元法解n元线性方程
最佳答案
#include
#include
#include
#include
#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 r,k,i,j;
char celect;
system("cls");

printf("\n\n用Gauss列主元消元法解线性方程组");
printf("\n\n1.解方程组请按Enter.");
printf("\n\n2.退出程式请按Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n 输入方程组的维数:n=");
scanf("%d",&n);
printf(" \n\n现在输入系数矩阵A和向量b:");
for(i=1;i<=n;i++)
{
printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",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\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(" \n\nx%d=%f",i,x[i]);
}
message();

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\n 继续运算按 Enter ,退出程式按 Esc!");
switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n\n不合法的输入!");message();}
}
}
全部回答
#include
#include
const int MAX=105;
double mat[MAX][MAX];
double EPS=1.0e-8;
int dblcmp(double x)//浮点型比较函数
{
if(fabs(x) return x<0?-1:1;
}

int find_(int s,int n)
{
int i;
for(i=s+1;i {
if(dblcmp(mat[i][s])!=0)
{
return i;
}
}
return -1;//没找到就返回-1;
}

void swapRow(int a,int b,int n)
{
int i;
double tmp;
for(i=0;i {
tmp=mat[a][i];
mat[a][i]=mat[b][i];
mat[b][i]=tmp;
}
}
void Gauss(int n,int m)
{
int i,j,k;
double tmp;
for(i=0;i {
if(dblcmp(mat[i][i])==0)//该位置为零,就要去找一个不为零的替换掉
{
k=find_(i,n);
if(k==-1)//没找到
{
continue;
}
else
{
swapRow(i,k,m);//找到了就交换i,k两列
}
}
tmp=mat[i][i];
for(j=0;j {
mat[i][j]/=tmp;
}
for(j=i+1;j {
if(dblcmp(mat[j][i])==0)continue;
tmp=mat[j][i];
for(k=0;k {
mat[j][k]-=mat[i][k]*tmp;
}
}
}

for(i=n-1;i>=0;i--)//往回代,得出结果,mat[i][m-1]就是x[i] 的值了
{
if(dblcmp(mat[i][i])==0)continue;
for(j=i-1;j>=0;j--)
{
if(dblcmp(mat[j][i])==0)continue;
tmp=mat[j][i]/mat[i][i];
for(k=0;k {
mat[j][k]-=tmp*mat[i][k];
}
}
}
}
int main()
{
int i,j;
int n;
while(scanf("%d",&n)!=EOF)//输入元的个数
{
for(i=0;i for(j=0;j<=n;j++)
{
scanf("%lf",&mat[i][j]);
}
Gauss(n,n+1);
for(i=0;i {
printf("x[%d]=%.2lf\n",i,mat[i][n]);
}
}
return 0;
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老年性耳聋适合戴哪种类型的助听器?
新人做电话销售如何快速成单呢?求有几年电话
绍兴柯红浴场地址在哪,我要去那里办事
高考全国一卷文综哪科最难
一批种子的发芽率是98%,要保证发芽180粒,至少
苹果手机能下载yy伴侣吗?
大家帮我看看这个半两钱值多少钱
闹格尔天祝白牦牛专卖店地址在哪,我要去那里
姓李祖字辈起名打分大全
在蒽酮比色法中,测定结果是样品中单糖,双糖
把“ネクタイ”翻译成平假名?
某一国的公共政策制定者想减少人们对香烟的需
请以“少年不知愁滋味”为题写一篇文章。(不
钢铁厂的干法除尘工种被列为特殊工种是在哪个
93平米木工刷漆,刮大白,全包多少钱
推荐资讯
武汉市真有换夫妻的吗?
哪首歌开头是嗷呜呜呜嗷呜呜唔嗷呜呜呜呜呜唔
我种的辣椒第一次结了好多过后不开花了什么原
蔗糖会不会使人发胖
如何开展“两学一做”
3万元放定期三年,一年有多少钱利息?
35硅锰可焊接吗
南瓜早餐包怎么做
我在养猪想问什么叫科学配料和全价饲料
夜相逢ktv地址在哪,我要去那里办事,
高质量耽美小说,类似有《谨言》的那种,不要
海洋红酵母跟其他的酵母有什么区别?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?