求助:用C语言编写Causs消去法
求助:用C语言编写Causs消去法程序代码:
#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();} } }···非本人写···网上下载···