求多元方程组的C语言算法

#include

#include

struct order

{ int *q;

struct order *next;

};

struct rank

{ int n;

struct order *head;

}perm;

int i,j;

void main()

{

void s(int m);

void print(int m);

void root(int m);

int m;

puts("请输入方程组元的个数:");

scanf("%d",&m);

if(m>0)

{

s(m);

root(m);

}

else puts("元的个数输入有误!!!!\n");

}

void s(int m)

{

if(m==1)

{

struct order *p1;

perm.n=m;

p1=(struct order *)malloc(sizeof(struct order));

p1->q=(int *)calloc(1,sizeof(int));

*p1->q=1;

p1->next=NULL;

perm.head=p1;

}

else

{

{s(m-1);}

{

struct order *p1,*p2,*g,*g1,*h;

perm.n=m;

g=perm.head;

h=p1=(struct order *)malloc(sizeof(struct order));

while(g!=NULL)

{

g1=g;

for(i=0;i

{

p1->q=(int *)calloc(m,sizeof(int));

p1->q[i]=m;

for(j=0;j

{

if(i>j)p1->q[j]=g->q[j];

else p1->q[j+1]=g->q[j];

}

p2=p1;

p2->next=p1=(struct order *)malloc(sizeof(struct order));

}

g=g->next,free(g1);

}

p2->next=NULL;

free(p1);

perm.head=h;

}

}

}

void root(int m)

{

int c,y,k;

struct order *p1;

float **x,*B,d;

x=(float **)calloc(m,sizeof(float *));

B=(float *)calloc(m+1,sizeof(float));

puts("按增广矩阵的排列方式按行输入方程组的系数和常数,系数为0的别忘了输入0:\n");

for(i=0;i

{

float *x1;

x1=(float *)calloc((m+1),sizeof(float));

for(j=0;j

{printf("元素D(%d,%d)=",i+1,j+1);scanf("%f",x1+j);}

x[i]=x1;

}

printf("方程组按增广矩阵的排列方式如下\n*********************************************************************\n");

for(i=0;i

{

for(j=0;j

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

printf("\n");

}

printf("*********************************************************************\n");

p1=perm.head;B[0]=0;y=m*(m+1)/2;

for(c=0;p1!=NULL;c++)

{

for(j=0;j

{

d=1;

for(i=0;i

{

d=x[i][p1->q[i]-1]*d;

}

if((y+c+j)%2==0);

else

d=-d;B[0]=B[0]+d;p1=p1->next;

}

}

if(B[0]==0)

puts("能用以上增广矩阵表示的方程组无解或者有多解,对不起,本程序无法的求出该种方程组的解!");

else

{

puts("能用以上增广矩阵表示的方程组有唯一解,解如下:");

for(k=1;k

{

p1=perm.head;B[k]=0;y=m*(m+1)/2;

for(c=0;p1!=NULL;c++)

{

for(j=0;j

{

d=1;

for(i=0;i

{

if(p1->q[i]==k)d=x[i][m]*d;

else

d=x[i][p1->q[i]-1]*d;

}

} } } if((y+c+j)%2==0); else d=-d;B[k]=B[k]+d;p1=p1->next; } } printf("x%d=%f\n",k,B[k]/B[0]);

#include

#include

struct order

{ int *q;

struct order *next;

};

struct rank

{ int n;

struct order *head;

}perm;

int i,j;

void main()

{

void s(int m);

void print(int m);

void root(int m);

int m;

puts("请输入方程组元的个数:");

scanf("%d",&m);

if(m>0)

{

s(m);

root(m);

}

else puts("元的个数输入有误!!!!\n");

}

void s(int m)

{

if(m==1)

{

struct order *p1;

perm.n=m;

p1=(struct order *)malloc(sizeof(struct order));

p1->q=(int *)calloc(1,sizeof(int));

*p1->q=1;

p1->next=NULL;

perm.head=p1;

}

else

{

{s(m-1);}

{

struct order *p1,*p2,*g,*g1,*h;

perm.n=m;

g=perm.head;

h=p1=(struct order *)malloc(sizeof(struct order));

while(g!=NULL)

{

g1=g;

for(i=0;i

{

p1->q=(int *)calloc(m,sizeof(int));

p1->q[i]=m;

for(j=0;j

{

if(i>j)p1->q[j]=g->q[j];

else p1->q[j+1]=g->q[j];

}

p2=p1;

p2->next=p1=(struct order *)malloc(sizeof(struct order));

}

g=g->next,free(g1);

}

p2->next=NULL;

free(p1);

perm.head=h;

}

}

}

void root(int m)

{

int c,y,k;

struct order *p1;

float **x,*B,d;

x=(float **)calloc(m,sizeof(float *));

B=(float *)calloc(m+1,sizeof(float));

puts("按增广矩阵的排列方式按行输入方程组的系数和常数,系数为0的别忘了输入0:\n");

for(i=0;i

{

float *x1;

x1=(float *)calloc((m+1),sizeof(float));

for(j=0;j

{printf("元素D(%d,%d)=",i+1,j+1);scanf("%f",x1+j);}

x[i]=x1;

}

printf("方程组按增广矩阵的排列方式如下\n*********************************************************************\n");

for(i=0;i

{

for(j=0;j

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

printf("\n");

}

printf("*********************************************************************\n");

p1=perm.head;B[0]=0;y=m*(m+1)/2;

for(c=0;p1!=NULL;c++)

{

for(j=0;j

{

d=1;

for(i=0;i

{

d=x[i][p1->q[i]-1]*d;

}

if((y+c+j)%2==0);

else

d=-d;B[0]=B[0]+d;p1=p1->next;

}

}

if(B[0]==0)

puts("能用以上增广矩阵表示的方程组无解或者有多解,对不起,本程序无法的求出该种方程组的解!");

else

{

puts("能用以上增广矩阵表示的方程组有唯一解,解如下:");

for(k=1;k

{

p1=perm.head;B[k]=0;y=m*(m+1)/2;

for(c=0;p1!=NULL;c++)

{

for(j=0;j

{

d=1;

for(i=0;i

{

if(p1->q[i]==k)d=x[i][m]*d;

else

d=x[i][p1->q[i]-1]*d;

}

} } } if((y+c+j)%2==0); else d=-d;B[k]=B[k]+d;p1=p1->next; } } printf("x%d=%f\n",k,B[k]/B[0]);


相关文章

  • 神经网络在数据拟合方面的应用
  • 神经网络在数据拟合方面的应用 摘要 本文将讲述人工神经网络及其数据拟合中的应用.人工神经网络是从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络.它在模式识别.智能机器人.自动控制.预测估计.生物.医学 ...查看


  • 专升本考试大纲
  • 重庆市普通高等学校 专 升 本 考 试 大 纲 重庆市教育委员会高等教育处 重庆市普通高等学校专升本大学英语考试大纲 一.考试大纲适用对象 本大纲适用于重庆市各普通高等学校英语专业和非英语专业申请专升本的高职高专学生. 参加本考试的英语专业 ...查看


  • 重庆市专升本考试大纲
  • 2011年重庆市普通高等学校 学长总结的资料和成功心得: 专 升 本 考 试 大 纲 重庆市教育委员会高等教育处 二○一○年三月 重庆市普通高等学校专升本大学英语考试大纲 (2011年) 一.考试大纲适用对象 本大纲适用于重庆市各普通高等学 ...查看


  • 十大经典数学模型
  • 十大经典数学模型 1.蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,是比赛时必用的方法) 2.数据拟合.参数估计.插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而 ...查看


  • 如何写好一篇优秀的建模论文(经验谈)
  • 如何写好建模论文 一.写好数模答卷的重要性 1. 评定参赛队的成绩好坏.高低,获奖级别, 数模答卷, 是唯一依据. 2. 答卷是竞赛活动的成绩结晶的书面形式. 3. 写好答卷的训练,是科技写作的一种基本训练. 二.答卷的基本内容,需要重视的 ...查看


  • 多元线性回归的MATLAB实现
  • 第28卷第2 2014年3月常熟理工学院学报(自然科学)Vol. 28No. 2 Mar.,2014 多元线性回归的MATLAB 实现 李艳娇1,李瑞敏2,陈经伟2 (1.沈阳建筑大学建筑设计研究院,辽宁沈阳110015: 2. 沈阳机床( ...查看


  • 1.1算法的含义
  • (第1课时) §1.1 算法的含义 教学目标:1.通过实例体会算法思想,了解算法的含义与主要特点: 2.能按步骤用自然语言写出简单问题的算法过程学: 3.培养学生逻辑思维能力与表达能力. 教学重点:将问题的解决过程用自然语言表示为算法过程. ...查看


  • 线性方程组的解法
  • 线性方程组的解法 1 引言 在科学研究和大型工程设计中出现了越来越多的数学问题,而这些问题往往需要求数值解.在进行数值求解时,经离散后,常常归结为求解形如Ax= b的大型线性方程组.而如插值公式,拟合公式等的建立,微分方程差分格式的构造等, ...查看


  • [算法与程序设计]中兴趣教学的初探
  • [摘要]<算法与程序设计>教学中,如何调动和激发学生的学习兴趣,是信息技术教师应该努力探索的教学方法和目标.就<算法与程序设计>教学中如何调动和激发学生的学习兴趣,结合具体教学实践来谈谈本人一些粗浅的看法. [关键词 ...查看


热门内容