求用C语言解三元一次线性方程组

老师要求的课题,我实在搞不定,所以请高手解决

第1个回答  2012-03-01
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#define N 3 /* 3个未知数,3个方程组 */
float **p = NULL;
float b[N * (N + 1)] ={2,1,1,28,
5,2,2,66,
10,5,4,137};
/* 3元方程组的数据, 自己可以随意修改数值, 还可以修改N 和浮点数组实现任意多阶方程组求解*/

float ** build_array(int r, int c)
{
int i = 0;
float *p1 = malloc(r * c * sizeof(float));
float **p2 = malloc( r * sizeof(float *));
for(i = 0; i < r; i++)
{
p2[i] = &p1[i * c];
}
return p2;
}

void free_room(float **p)
{
free(*p);
free(p);
}

void init(int row, int cul)
{
int i, j;
int cnt = 0;
for(i = 0; i < row; i++)
{
for(j = 0; j < cul; j++)
{
p[i][j] = b[cnt++];
}
}
}

void gs(float **p, int row, int cul) /* 高斯消元法*/
{
int i = 0;
int j = 0;
float tmp1,tmp2;
for(i = 0; i < row; i++)
{
tmp1 = p[i][i];
for(j = 0; j < cul; j++)
{
p[i][j] /= tmp1;
}
int k;
for(k = i + 1; k < row; k++)
{
tmp2 = p[k][i];
for(j = 0; j < cul; j++)
{
p[k][j] -= tmp2 * p[i][j];
}
}
}

}

void qiujie(int hang)
{
float y[hang];
int m = 0;
float tmp3;
int z = 0;
for(m = hang-1; m >= 0; m--)
{
tmp3 = 0;
for(z = hang-1; z > m; z--)
{
tmp3 += p[m][z] * y[z];
}
printf("y[%d] = %f\n", m, y[m] = (p[m][hang] - tmp3));
}
}

int main(void)
{
int m = 0;
int x = 0;
p = build_array(N, N+1);
init(N, N+1);
gs(p, N, N+1);
for(m = 0; m < N; m++)
{
for(x = 0; x < N + 1; x++)
{
printf(" %2f ", p[m][x]);
}
printf("\n");
}
qiujie(N);
free_room(p);
}
第2个回答  2010-03-09
输入数据以后判定一下解的情况,然后用克莱姆法则算一下.本回答被提问者采纳
第3个回答  2010-03-11
也要