C语言程序解线性方程组

C语言程序解线性方程组,第1张

给,下面的代码已经编译运行确认,肯定好用了,试试吧:)

#include<conio.h>

#include<stdio.h>

#include<math.h>

#include<stdlib.h>

#define NUMBER 20

#define Esc 0x1b

#define Enter 0x0d

float A[NUMBER][NUMBER+1] ,ark

int flag,n

void exchange(int r,int k)

float max(int k)

void message()

int main()

{

float x[NUMBER] /*此数组用于存放方程解*/

int k,i,j

char celect

system("cls")

printf("\n用Gauss列主元消元法解线性方程组")

printf("\n1.解方程组请按Enter.")

printf("\n2.退出程式请按Esc.")

celect=getch()

if(celect==Esc)

exit(0)

printf("\n 输入方程组的维数:n=")

scanf("%d",&n)

printf("\n现在输入系数矩阵A和向量b:")

for(i=1i<=ni++)

{

printf("\n请输入a%d1--a%d%d系数和向量b%d: \n",i,i,n,i)

/*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/

for(j=1j<=n+1j++) /*将刚才输入的数存入数组*/

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

}

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

{

ark=max(k)

if(ark==0)/*判断方程是否为线性方程,即是否合法*/

{

printf("\n此方程组不合法!")message()

}

else if(flag!=k)

exchange(flag,k)

for(i=k+1i<=ni++)

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

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-1k>=1k--)

{

float me=0

for(j=k+1j<=nj++)

{

me=me+A[k][j]*x[j]

}

x[k]=(A[k][n+1]-me)/A[k][k]

}

for(i=1i<=ni++)

{

printf("\nx%d=%f",i,x[i])

}

message()

getch()

return 1

}

void exchange(int r,int k) /*交换行的矩函数*/

{

int i

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

A[0][i]=A[r][i]

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

A[r][i]=A[k][i]

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

A[k][i]=A[0][i]

}

float max(int k) /*比校系数大小的函数*/

{

int i

float temp=0

for(i=ki<=ni++)

if(fabs(A[i][k])>temp)

{

temp=fabs(A[i][k])

flag=i

}

return temp

}

void message() /*实现菜单选择的函数*/

{

printf("\n 继续运算按 Enter ,退出程式按 Esc!")

switch(getch())

{

case Enter: main()

case Esc: exit(0)

default:{printf("\n不合法的输入!")message()}

}

}

需要写下它的方程式:

ax+by=m

cx+dy=n

可以求得x,y的通解

x=(md-bn)/(ad-bc)

y=(mc-an)/(bc-ad)

#include<iostream>,#include<cmath>,usingnamespacestd,intmain()。

2.{doublea,b,c,root1,root2cout<<"请输入一元二次方程的系数(a,b,c)

3.<<endlcin>>a>>b>>cif(a==0)//判断系数a是否为0{cout<<"不是一个一元二次方程”<<endlreturn-1}。

4.doublet=b*b-4*a*cif(t<0)//判断议程是否有实根{cout<<"方程没有实根"<<endl

return-1}。

5.if(t==0)//判断议程是否有等根root1=root2=-b/(2*a)else{root1=(-b+sqrt(t))/(2*a)root2=(-b-sqrt(t))/(2*a)}。

6.cout<<"方程的根为:"<<root1<<"和"<<root2<<endlreturn0}。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11999683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存