解线性方程组1—消去法

#include<stdio.h>

#include<math.h>

#include<stdlib.h>

int n;



float** Initarry()

{

    int i,j;

    float **a;

    a=(float **)malloc((n+1)*sizeof(float*));

    for(i=0;i<=n;i++)

        a[i]=(float *)malloc((n+2)*sizeof(float));

    for(i=0;i<=n;i++)

        for(j=0;j<=n+1;j++)

            a[i][j]=0;

    return a;

}



void print(float **p)

{

    int i,j;

    printf("---------------------------------/n");

    for(i=1;i<=n;i++){

        for(j=1;j<=n+1;j++)

            printf("%f ",p[i][j]);

        printf(" ");

    }

    printf("/n---------------------------------/n");

}



void scanarry(float **p)

{

    int i,j;

    for(i=1;i<=n;i++){

        for(j=1;j<=n+1;j++)

        scanf("%f",&p[i][j]);

    }

}



void work1(float **a)

{

    int i,j,k;

    float D,sum=0;

    D=1;

    for(k=1;k<=n-1;k++){

        if(a[k][k]==0)

            exit(1);

        for(i=k+1;i<=n;i++){

            a[i][k]/=a[k][k];//计算l[i][k]

            for(j=k+1;j<=n+1;j++)

                a[i][j]-=(a[i][k]*a[k][j]);//消元

        }

        //print(a);

        D*=a[k][k];

        if(a[n][n]==0)

            exit(1);

        else

            D*=a[n][n];

    }

    for(k=n;k>=1;k--){

        if(k!=n)

        for(j=k+1;j<=n;j++)

            sum+=a[k][j]*a[j][n+1];

        else

            sum=0;

        a[k][n+1]=(a[k][n+1]-sum)/a[k][k];//求X[k]

        sum=0;

    }

}



int main()

{

    //freopen("in.txt","r",stdin);

    //freopen("out.txt","w",stdout);

    float **p;

    int i,j;

    printf("请输入线性方程组的阶 ");

    scanf("%d",&n);

    p=Initarry();

    printf("请输入线性方程组的矩阵形式 /n");

    scanarry(p);

    //读入矩阵

	//print(p);

    work1(p);

    //print(p);

    for(i=1;i<=n;i++)

        printf("X[%d]= %f/n",i,p[i][n+1]);

    return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值