當前位置:首頁 » 編程語言 » 三元一次方程組c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

三元一次方程組c語言

發布時間: 2022-05-02 09:34:52

1. c語言解三元一次方程(源代碼)

#include"stdio.h"
intmain()
{
inta,b,c,d,e=0;
intx,y,z;

printf("請輸入a:");
scanf("%d",&a);
printf("請輸入b:");
scanf("%d",&b);
printf("請輸入c:");
scanf("%d",&c);
printf("請輸入d:");
scanf("%d",&d);

for(x=-1000;x<=1000;x++)
for(y=-1000;y<=1000;y++)
for(z=-1000;z<1000;z++)
if(a*x+b*y+c*z==d)
{
e++;
if(e==2)
{
printf("ohmygod! ");
return0;
}
printf("x=%dy=%dz=%d ",x,y,z);
}
if(e==0)
printf("方程無解 ");
}

2. 解三元一次方程的c語言程序

#include <stdio.h>#define EPSINON 0.000001void main(){
float a[3][3],detA,detA1,detA2,detA3;float b[3],x,y,z;int i,j;printf("3元一次方程組的格式如下:\n");printf("a[0][0]x+a[0][1]y+a[0][2]z = b[0]\n");printf("a[1][0]x+a[1][1]y+a[1][2]z = b[1]\n");printf("a[2][0]x+a[2][1]y+a[2][2]z = b[2]\n");printf("請依次輸入方程系數:\n");
for(i=0; i<3; i++){ for(j=0; j<3; j++) { printf("a[%d][%d]=", i, j); scanf("%f", &a[i][j]); }}printf("依次輸入方式右邊參數:\n");for(i=0; i<3; i++){ printf("b[%d]=",i); scanf("%f",&b[i]);}
detA = a[0][0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*a[2][0]+ a[0][2]*a[1][0]*a[2][1]-a[0][0]*a[1][2]*a[2][1]- a[0][1]*a[1][0]*a[2][2]-a[0][2]*a[1][1]*a[2][0];
detA1 = b[0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*b[2]+ a[0][2]*b[1]*a[2][1]-b[0]*a[1][2]*a[2][1]- a[0][1]*b[1]*a[2][2]-a[0][2]*a[1][1]*b[2];
detA2 = a[0][0]*b[1]*a[2][2]+b[0]*a[1][2]*a[2][0]+ a[0][2]*a[1][0]*b[2]-a[0][0]*a[1][2]*b[2]- b[0]*a[1][0]*a[2][2]-a[0][2]*b[1]*a[2][0];
detA3 = a[0][0]*a[1][1]*b[2]+a[0][1]*b[1]*a[2][0]+ b[0]*a[1][0]*a[2][1]-a[0][0]*b[1]*a[2][1]- a[0][1]*a[1][0]*b[2]-b[0]*a[1][1]*a[2][0];
x = detA1/detA;y = detA2/detA;z = detA3/detA;if ((detA >= -EPSINON) && (detA <= EPSINON)){ printf("方程無唯一解!\n"); }else{ printf("方程組的根為:x=%f,y=%f,z=%f\n", x, y, z); }}

網上搜的用法是:3x-y+z=3 方程系數依次是輸入3-11 方式右邊參數是輸入3

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

試驗一下,不行再問。其實你的變數設置不大好,為了盡量保持原貌,未做改動。

4. 用C語言怎樣解三元一次方程組

不知道學過計算方法沒有,其中有好多方法呢!
例如:高斯消去法,高斯列主元消去法,矩陣分解法以及解線性方程組的迭代法
不好意思,演算法不好往上寫,請自己上網搜這幾種中的一種演算法到底是怎樣的吧,還可能搜到源程序加以參考呢.
例如:http://www2.gliet.e.cn/person/xan/krocpstudio/sy/sy2/2-3.htm

5. c語言解三元一次方程組!接著我的代碼寫!盡快~

//用克萊姆法則
float d=a[0,0]*a[1,1]*a[2,2]+a[0,1]*a[1,2]*a[2,0]+a[0,2]*a[1,0]*a[2,1]-a[0,0]*a[1,2]*a[2,1]-a[0,1]*a[1,0]*a[2,2]-a[0,2]*a[1,1]*a[2,0];
if(d==0)printf("無解\n");
else{
float p=a[0,3]*a[1,1]*a[2,2]+a[0,1]*a[1,2]*a[2,3]+a[0,2]*a[1,3]*a[2,1]-a[0,3]*a[1,2]*a[2,1]-a[0,1]*a[1,3]*a[2,2]-a[0,2]*a[1,1]*a[2,3];
float q=a[0,0]*a[1,3]*a[2,2]+a[0,3]*a[1,2]*a[2,0]+a[0,2]*a[1,0]*a[2,3]-a[0,0]*a[1,2]*a[2,3]-a[0,3]*a[1,0]*a[2,2]-a[0,2]*a[1,3]*a[2,0];
float r=a[0,0]*a[1,1]*a[2,3]+a[0,1]*a[1,3]*a[2,0]+a[0,3]*a[1,0]*a[2,1]-a[0,0]*a[1,3]*a[2,1]-a[0,1]*a[1,0]*a[2,3]-a[0,3]*a[1,1]*a[2,0];
printf("x1=%f\n",p/d);
printf("x2=%f\n",q/d);
printf("x3=%f\n",r/d);
}
}

6. C語言三元一次方程

#include <stdio.h>
#include <conio.h>
main()
{
int x,y,z;
x=0;
y=1-x;
z=1-x-y;
printf("x=%d\ny=%d\nz=%d",x,y,z);
getch();
return 0;
}

7. 求C語言編程解三元一次方程,可用則加100分!!!

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

main()
{
int i;
double p[3]={4.5,8.5,10.5},T[3]={72.245116 , 53.377527 , 40.407589},L=12;

double *x;
double c[3][4];

double *ColPivot(double *,int);
for(i=0;i<3;i++)
{c[0][i]=1-p[i]/L;c[1][i]=p[i]/L;c[2][i]=-sin(3.14*p[i]/L);c[i][3]=T[i];}
//12個數依次為A11,A12,A13,B1,A21,A22,A23,B2,A31,A32,A33,B3
x=ColPivot(c[0],3);
//clrscr();
for(i=0;i <=2;i++)
printf( "x[%d]=%f\n ",i,x[i]);
getch();
}
double *ColPivot(double *c,int n)
{
int i,j,t,k;
double *x,p;
x=(double *)malloc(n*sizeof(double));
for(i=0;i <=n-2;i++)
{
k=i;
for(j=i+1;j <=n-1;j++)
if(fabs(*(c+j*(n+1)+i))> (fabs(*(c+k*(n+1)+i)))) k=j;
if(k!=i)
for(j=i;j <=n;j++)
{
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j <=n-1;j++)
{
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t <=n;t++)
*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
}
}
for(i=n-1;i>=0;i--)
{
for(j=n-1;j>=i+1;j--)
(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));
}
return x;
}

8. 用c語言實現高斯消去法,解三元一次方程組。求具體程序!!

#include<iostream>

#include<cmath>

usingnamespacestd;

#defineMAX50

voidinput(doublea[MAX][MAX+1],intn)

{

cout<<"輸入原方程組的增廣矩陣"<<endl;

for(inti=0;i<n;i++)

for(intj=0;j<n+1;j++)

cin>>a[i][j];

}

voidoutput(doublex[],intn)

{

cout<<"Gauss消去法得到的原方程組的解為"<<endl;

for(intk=0;k<n;k++)

cout<<x[k]<<"";

}

intmain()

{

doublea[MAX][MAX+1],x[MAX],sum,max,t;

intn,i,j,k,max_i;

cout<<"輸入原方程組的階"<<endl;cin>>n;

input(a,n);

for(k=0;k<n-1;k++)//選主元素

{max=a[k][k];

max_i=k;

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

if(fabs(a[i][k])>fabs(max))

{

max=a[i][k];

max_i=i;

}

if(max==0)

break;

if(max_i!=k)//交換兩行

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

{

t=a[k][j];

a[k][j]=a[max_i][j];

a[max_i][j]=t;

}

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

{

a[i][k]=a[i][k]/-a[k][k];

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

a[i][j]=a[i][j]+a[i][k]*a[k][j];

}//消元

}

if(max==0)cout<<"原方程組無解"<<endl;

else

{

for(k=n-1;k>=0;k--)

{

sum=0;

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

sum=sum+a[k][j]*x[j];

x[k]=(a[k][n]-sum)/a[k][k];

}//回代

output(x,n);

cout<<endl;

}

return0;

}

9. c語言程序設計 三元一次方程組求解

不知道你知不知道行列式
演算法:
定義運算|a b c|
|d e f|=aei+bfg+cdh-afh-bdi-ceg
|g h i|
三元一次方程組
ax+by+cz=d
ex+fy+gz=h
ix+jy+kz=l
|a b c|
令M=|e f g|
|i j k|

|d b c|
M1=|h f g|
|l j k|

|a d c|
M2=|e h g|
|i l k|

|a b d|
M3=|e f h|
|i j l|
則x=M1/M
y=M2/M
z=M3/M
程序:
#include<stdio.h>
int fx(int a,int b,int c,
int d,int e,int f,
int g,int h,int i);
void main()
{int a,b,c,d,e,f,g,h,i,j,k,l,x,y,z,m;
printf("a,b,c,d\n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("e,f,g,h\n");
scanf("%d,%d,%d,%d",&e,&f,&g,&h);
printf("i,j,k,l\n");
scanf("%d,%d,%d,%d",&i,&j,&k,&l);
m=fx(a,b,c,e,f,g,i,j,k);
if(m==0)
{printf("x=0,y=0,z=0\n");
return ;
}
x=fx(d,b,c,h,f,g,l,j,k)/(float)m;
y=fx(a,d,c,e,h,g,i,l,k)/(float)m;
z=fx(a,b,d,e,f,h,i,j,l)/(float)m;
printf("x=%d,y=%d,z=%d\n",x,y,z);
}

int fx(int a,int b,int c,
int d,int e,int f,
int g,int h,int i)
{int result;
result=a*e*i+b*f*g+c*d*h-a*f*h-b*d*i-c*e*g;
return result;
}

10. 用高斯消元法解三元一次方程組,C語言

參閱我的文章:http://wenku..com/view/d4ea2273650e52ea5418981d.html

#include "stdafx.h" //VS 預編譯頭文件,其他系統請刪除
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<math.h>
#include<time.h>

//VS 2013 否決了 scanf 等函數,為了使用,加上下句。
//其他系統請刪除
#pragma warning(disable:4996)
int GaussJordanElimination(int n, const double *pCoef, double *pOut);
//VS 主函數簽名格式。其他系統請改變簽名,如:
//int main()
int _tmain(int argc, _TCHAR* argv[])
{
double cf[3][4] = { {-0.02, 2.0, 2.0, 0.4}, {1.0, 0.78125, 0.0, 1.3816}, {3.996, 5.526, 4.0, 7.4178} };
double rs[3];
int i;
i = GaussJordanElimination(3, (double*)cf, rs);
printf("x1 = %lf, x2 = %lf, x3 = %lf\n", rs[0], rs[1], rs[2]);
system("pause"); //避免窗口一閃而退
return 0;
}
//絕對值函數
__inline double _abs(double v)
{
return v < 0 ? -v : v;
}

//線性方程組列主元高斯消元法
//n 方程元數;pCoef 系數,必須以行主序方式存放的二維數組;
//pOut 長度為 n 的一維數組(調用者負責維護),用於輸出數據
//返回值:0 成功,-1 無解,1 申請內存失敗, 2 不定解。
int GaussJordanElimination(int n, const double *pCoef, double *pOut)
{
double *pcf;
int rows = n, columns = n + 1;
//pcf = new double[rows * columns];
pcf = (double*)malloc(rows * columns * sizeof(double));
if (pcf == 0) return 1; //巧婦難為無米之炊,內存都申請不到,還能幹嘛!
memcpy(pcf, pCoef, (rows * columns) * sizeof(double)); //據說這個運行效率很高
int r, c, i; //循環變數
int a, b;
double x, y;
//開始消元,將 pcf 方陣區處理成到直角三角形(直角在右上角)矩陣
for (r = 0; r < rows - 1; r++)
{
//選取主元
a = r; x = _abs(pcf[r * columns + r]);
for (i = r + 1; i < rows; i++)
{ //查找主元在哪行
if (x < _abs(pcf[i * columns + r])) a = i;
}
if (a > r)
{ //主元不是當前行(r),比較麻煩,需要將第 a 行與第 r 行兌換
//第 r 列前面的就不要對換了,因為這些項已經被消元,變成 0 了
for (c = r; c < columns; c++)
{
x = pcf[r * columns + c];
pcf[r * columns + c] = pcf[a * columns + c];
pcf[a * columns + c] = x;
}
}
//開始消元
a = r * columns; //記住將主元的行地址偏移量,以提高程序運行效率
x = -pcf[a + r]; //要多次使用,記下她,以提高程序運行效率
if (x == 0) //主元居然為 0,純粹是想坑爹,豈能上當!
continue; //繼續後面的消元,以便最終判斷是無解還是任意解
for (i = r + 1; i < rows; i++)
{ //正在消元
b = i * columns;//記住將要消元的行地址偏移量,以提高程序運行效率
y = pcf[b + r]; //要多次使用,記下她,以提高程序運行效率
if (y != 0)
{ //y == 0,本行不需要消元
y /= x; //要多次使用,記下她,以提高程序運行效率
pcf[b + r] = 0; //肯定為 0,不用計算。
for (c = r + 1; c < columns; c++)
pcf[b + c] += pcf[a + c] * y;
}
}
}//至此,pcf 方陣區已經處理成到直角三角形(直角在右上角)矩陣
//回代,將 pcf 方陣區處理成主對角線為 1,其他為 0 的矩陣
int columns_1 = c = columns - 1; //多次用到,提高效率
for (r = rows - 1; r >= 1; r--)
{
b = r * columns;
if (pcf[b + r] == 0)
{ //經過前面的消元,除主元外,其他元應該都為 0
if (pcf[b + columns_1] == 0)
{ //常數項為 0,方程有不定解
free(pcf);
return 2;
}
else
{ //常數項為 0,方程有無解
free(pcf); //釋放內存
return -1;
}
}
pcf[b + columns_1] /= pcf[b + r];
pcf[b + r] = 1; //肯定為 1,不用計算。
y = -pcf[b + columns_1];
//回代
for (i = r - 1; i >= 0; i--)
{
pcf[i * columns + columns_1] += pcf[i * columns + r] * y;
pcf[i * columns + r] = 0; //已經回代,此項已消,置為 0。
}
}
//處理第一行數據
pcf[columns_1] /= pcf[0];
pcf[0] = 1;
//至此,回代過程結束,pcf 矩陣的最後一列就是結果
//返回結果
for (r = 0; r < rows; r++)
pOut[r] = pcf[r * columns + columns_1];
free(pcf);
return 0;
}