当前位置:首页 » 编程语言 » c语言求方程组

c语言求方程组

发布时间: 2022-10-01 18:07:34

‘壹’ c语言 解线性方程组

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

#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=1;i<=n;i++)
{
printf("\n请输入a%d1--a%d%d系数和向量b%d: \n",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此方程组不合法!");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("\nx%d=%f",i,x[i]);
}
message();

getch();
return 1;
}

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

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

‘贰’ 用c语言编写三元二次方程组的求解

你都已经把x y z的公式写出来了,我就直接用了。
#include <stdio.h>

int main(){
int a,b,c,d1,d2,d3,d4;
double x,y,z;
printf("请输入a b c d1 d2 d3 d4:\n");
scanf("%d %d %d %d %d %d %d",&a,&b,&c,&d1,&d2,&d3,&d4);

//乘以1.0是为了将整数转成浮点数,C语言的整数相除,结果只取整数部分
x=(d4*d4+a*a-d1*d1)*1.0/(a*2*1.0);
y=(d4*d4+b*b-d2*d2)*1.0/(b*2*1.0);
z=(d4*d4+c*c-d3*d3)*1.0/(2*c*1.0);

printf("x=%d y=%d z=%d\n",x,y,z);
return 0;
}

‘叁’ 如何用C语言解四元一次方程组

首先要找到二元一次方程组的通解,例如:
ax+by=m
cx+dy=n
不难算出
x=(md-bn)/(ad-bc)
y=(mc-an)/(bc-ad)
这相当于知道了算法,接下来就可以编程序了:
int main(){
int a,b,c,d,m,n;
double x=0,y=0;
scanf("%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&m,&n);
if(a*d==b*c||b*c==a*d)puts("无解");
else{
x=(m*d-b*n)/(a*d-b*c);
y=(m*c-a*n)/(b*c-a*d);
printf("x=%f,y=%f",x,y);
}
return 0;
} 输入系数,就可以计算了

‘肆’ 如何用c语言解线形方程组

#include <iostream.h>

#include <math.h>

void main(){

double A[36][5];//实验数据的系数矩阵

double mid_change[36]={1.23,1.06,0.99,1.08,0.95,1.12,1.23,1.05,1.30,0.98,0.87,0.94,1.10,1.14,1.20,0.89,1.25,1.20,0.98,0.99,1.01,0.99,0.96,0.87,0.88,0.83,0.90,0.96,0.85,1.01,1.05,1.09,0.95,1.25,0.84,0.95};

double x[5];//未知数矩阵,最后的解就放在这里

double b[36];//等式右边的全部为1的向量

double parA[5][5],parb[5];//最后用来计算的矩阵

int i,j,k;

int label;

double mid=0;

//在这里你需要做的是初始化的工作,对A矩阵进行初始化,下面用的A矩阵是已经赋值过的了,

//同样b向量也是初始化为1的向量,x向量初始化为0

for (i=0;i<36;i++){

A[i][0]=(cos(i/18.0*3.14159265758)*mid_change[i])*(cos(i/18.0*3.14159265758)*mid_change[i]);

}

for (i=0;i<36;i++){

A[i][1]=(sin(i/18.0*3.14159265758)*mid_change[i])*(sin(i/18.0*3.14159265758)*mid_change[i]);

}

for (i=0;i<36;i++){

A[i][2]=(cos(i/18.0*3.14159265758)*mid_change[i])*(sin(i/18.0*3.14159265758)*mid_change[i]);

}

for (i=0;i<36;i++){

A[i][3]=cos(i/18.0*3.14159265758)*mid_change[i];

}

for (i=0;i<36;i++){

A[i][4]=sin(i/18.0*3.14159265758)*mid_change[i];

b[i]=1;

}

for (i=0;i<5;i++) x[i]=0;

//下面对parA矩阵,parb向量进行初始化赋值

for (i=0;i<5;i++){

for (j=0;j<5;j++){

mid=0;

for (k=0;k<36;k++){

mid+=A[k][i]*A[k][j];

}

parA[i][j]=mid;

}

}

for (i=0;i<5;i++){

mid=0;

for (j=0;j<36;j++){

mid+=A[j][i]*b[j];

}

parb[i]=mid;

}

for (i=0;i<5;i++){

for (j=0;j<5;j++) cout<<parA[i][j]<<" ";

cout<<parb[i]<<endl;

}

/* for (i=0;i<5;i++){

mid=0;

for (j=0;j<36;j++) mid+=A[j][i]*2*b[j];

parb[i]=mid;

for (j=0;j<5;j++){

mid=0;

for (k=0;k<36;k++){

mid+=A[k][i]*A[k][j]*2;

}

parA[i][j]=mid;

}

}

*/

//对par和b组成的增广矩阵进行列主元消去法求解。

for (i=0;i<4;i++){

mid=fabs(parA[i][i]);

label=i;

//下面找列主元

for (k=i+1;k<5;k++){

if (fabs(parA[k][i])>mid){

label=k;

mid=fabs(parA[k][i]);

}

}

//判断矩阵的秩

if (mid<=0.000001){

cout<<"由于系数矩阵的秩小于行数,不能进行方程组的求解。\n";

return;

}

//交换主元

if (label!=i){

cout<<"change\n";

for (j=0;j<5;j++){

mid=parA[i][j];

parA[i][j]=parA[label][j];

parA[label][j]=mid;

}

mid=parb[i];

parb[i]=parb[label];

parb[label]=mid;

}

//开始消元

//标准化第i行

parb[i]=parb[i]/parA[i][i];

for (j=4;j>=0;j--){

parA[i][j]=parA[i][j]/parA[i][i];

}

//消b
for (j=i+1;j<5;j++) parb[j]=parb[j]-parb[i]*parA[j][i];

//消par

for (j=i+1;j<5;j++){

for (k=5;k>i;k--){

parA[j][k]=parA[j][k]-parA[i][k]*parA[j][i];

}

}

//列主元消元完成

}

for (i=0;i<5;i++){

for (j=0;j<5;j++) cout<<parA[i][j]<<" ";

cout<<parb[i]<<endl;

}

//下面回代求解

for (i=4;i>=0;i--){

mid=0;

for (j=4;j>i;j--) mid+=parA[i][j]*x[j];

x[i]=(parb[i]-mid)/parA[i][i];

}
//输出结果
for (i=0;i<5;i++) cout<<x[i]<<endl;

}

‘伍’ 如何用C语言程序解方程

#include"stdio.h"
#include"math.h"
/*求一元二次方程ax*x+bx+c=0的解*/
main()
{
floata,b,c,x1,x2,d;
printf("请输入a:");
scanf("%f",&a);
printf("请输入b:");
scanf("%f",&b);
printf("请输入c:");
scanf("%f",&c);
d=b*b-4*a*c;
if(d<0)
printf("方程没有实数解。 ");
if(d==0)
{
x1=(-b)/(2*a);
printf("x1=%f ",x1);
}
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f ",x1,x2);}
}
请输入a:12
请输入b:34
请输入c:4
x1=-0.122985,x2=-2.710348
Pressanykeytocontinue

‘陆’ 用C语言编程二分法求解方程组

#include<stdio.h>
#include<math.h>

#define EQUATION(A, B, m, n, x) (A*pow(x, m) + B*pow(x, n) - 1)/* 定义方程*/

double A, B, m, n;/*方程参数*/

void find_extent(double *x1, double *x2)/*找出根所在的区间*/
{
double i = 0, j = 0;
*x1 = 0;
if(EQUATION(A, B, m, n, 0) > 0)
{
while(EQUATION(A, B, m, n, ++i) > 0 && EQUATION(A, B, m, n, --j) > 0);
*x2 = EQUATION(A, B, m, n, i) <= 0 ? i : j;
}
else
{
while(EQUATION(A, B, m, n, ++i) < 0 && EQUATION(A, B, m, n, --j) < 0);
*x2 = EQUATION(A, B, m, n, i) >= 0 ? i : j;
}
}

/*二分法解方程*/
/*输入参数:根所在区间[x1, x2], 和精度*/
double get_result(double x1, double x2, double accuracy)
{
double x = (x1 + x2) / 2;
while(fabs(EQUATION(A, B, m, n, x)) > accuracy)
{
if(EQUATION(A, B, m, n, x) * EQUATION(A, B, m, n, x1) > 0)
x1 = x;
else
x2= x;
x = (x1 + x2)/2;
}
return x;
}

int main()
{
double x;
double x1,x2;
scanf("%lf%lf%lf%lf", &A, &B, &m, &n);
find_extent(&x1, &x2);
x = get_result(x1, x2, 0.00001);
printf("%lf", x);
return 0;
}

‘柒’ C语言计算这个方程组,怎么写

#include
<stdio.h>
int
main
()
{
double
a1,a2,a3;
double
b1,b2,b3;
char
cx1,cx2;
char
cy1,cy2;
char
dh;
double
sumx,sumy;
printf("请输入一个表达式:");
scanf("%lf%c%lf%c%c%lf",&a1,&cx1,&a2,&cy1,&dh,&a3);
printf("请输入另一个表达式:");
scanf("%lf%c%lf%c%c%lf",&b1,&cx2,&b2,&cy2,&dh,&b3);
printf("a1=%lf\na2=%lf\na3=%lf\nb1=%lf\nb2=%lf\nb3=%lf\n",a1,a2,a3,b1,b2,b3);
sumy=(b3*a1-a3*b1)/(a1*b2-a2*b1);
printf("y=%lf\n",sumy);
sumx=(a3-a2*sumy)/a1;
printf("x=%lf\n",sumx);
return
0;
}
/*
系数为1时,要写上
请输入一个表达式:1x-1y=22.5
请输入另一个表达式:10x-1y=0
a1=1.000000
a2=-1.000000
a3=22.500000
b1=10.000000
b2=-1.000000
b3=0.000000
y=-25.000000
x=-2.500000
*/

‘捌’ C语言编程题调用函数求解方程组,a1x+b1y=c1,a2x+b2y=c2

#include<stdio.h>
double
val(double
a00,double
a11,double
a01,double
a10)
{
return
a00*a11-a01*a10;
}
void
main()
{
double
a1,b1,c1,a2,b2,c2;
double
m1,m2,m3;
printf("Please
input
a1,b1,c1\n");
scanf("%lf%lf%lf",&a1,&b1,&c1);
printf("Please
input
a2,b2,c2\n");
scanf("%lf%lf%lf",&a2,&b2,&c2);
m1
=
val(a1,b2,a2,b1);
m2
=
val(c1,b2,c2,b1);
m3
=
val(c1,a2,c2,a1);
if(m1==0){
if(m2==0
&&
m3==0)
printf("无数解\n");
else
printf("无解\n");
}else
printf("x=%lf,y=%lf\n",m2/m1,-m3/m1);
}
这个是先求行列式的值,然后判断其是否为0,讨论解的情况,当有唯一解的时候,输出x和y的值。
val()函数用于计算2x2行列式的值。
有不明白的地方可以追问,望采纳:)

‘玖’ 如何用C语言解二元一次方程组

设计思路如下:

1、问题描述:

给定一个二元一次方程组,形如:

a * x + b * y = c;

d * x + e * y = f;

x,y代表未知数,a, b, c, d, e, f为参数。

求解x,y。

2、数据规模和约定:

0 <= a, b, c, d, e, f <= 2147483647。

3、设计思路:

二元一次方程组是由两个含有两个未知数的方程组成的,要求解,就要把二元转化为一元。由二元一次方程组的解法思想知,要把二元转化为一元.

实现的功能代码如下:

因为在求解过程中只有数之间的运算,而没有整个式子的运算,因此这种方法被广泛地用于计算机中。

‘拾’ 三元一次方程组 公式 c语言

不知你那公式怎么来的,建议采用线性代数的克莱姆方法来解:
为方便和完善期间,增加一个变量H,把x=,y=,z=那三行和后面那一行
替换为:
H=a*(B*g-C*f)-A*(b*g-c*f)+e*(b*C-c*B);
if(H==0) printf("次方程组无解!");
else
{x=(d*(B*g-C*f)-D*(b*g-c*f)+h*(b*C-c*B))/H;
y=(d*(A*g-C*e)-D*(a*g-c*e)+h*(a*C-c*A))/H;
z=(d*(A*f-B*e)-D*(a*f-b*e)+h*(a*B-b*A))/H;
printf("%lf\n%lf\n%lf",x,y,z);}

试验一下,不行再问。其实你的变量设置不大好,为了尽量保持原貌,未做改动。

热点内容
电脑服务器租赁平台 发布:2024-12-24 21:52:12 浏览:227
php7源码安装 发布:2024-12-24 21:38:10 浏览:903
linuxandroid 发布:2024-12-24 21:37:19 浏览:39
安卓手机不能自动锁屏怎么回事 发布:2024-12-24 21:37:08 浏览:865
脚本艾克 发布:2024-12-24 21:36:15 浏览:716
android单元测试studio 发布:2024-12-24 21:35:34 浏览:821
数控车床软件编程 发布:2024-12-24 21:26:16 浏览:525
如何对华为图库设置密码 发布:2024-12-24 21:16:20 浏览:501
scala反编译工具 发布:2024-12-24 21:03:26 浏览:770
安卓长按app怎么删除不了 发布:2024-12-24 20:57:44 浏览:718