庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>C语言>算法与数据结构>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

高斯列主无消去法解线性方程组

 作者:outstandingbull    日期:2005-8-4 14:02:50
字号选择〖 〗/ 双击滚屏 单击停止   

#include<math.h>
#include<stdio.h>
#define NUMBER 20
#define Esc   0x1b
#define Enter 0x0d

float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
exchange(int r,int k);
float max(int k);
message();

main()
{
   float x[NUMBER];      /*此数组用于存放方程解*/
   int r,k,i,j;
   char celect;
   clrscr();
  
   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();
}

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;
}

message()                                       /*实现菜单选择的函数*/
{
  printf("\n\n 继续运算按 Enter ,退出程式按 Esc!");
  switch(getch())
  {
   case Enter: main();
   case Esc: exit(0);
   default:{printf("\n\n不合法的输入!");message();}
  }
}

上一篇:俄罗斯方块程序的另类算法    下一篇:点灯游戏算法实现  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: outstandingbull
信息来源: 网络 录入时间: 2005-8-4 14:02:50
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿