#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)
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}。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)