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

c語言判斷方程組

發布時間: 2022-06-20 09:05:06

1. c語言解方程組..

#include<stdio.h>

int x,y,z;
int main()
{
for(x = 0;x <=20;x ++) {
for(y = 0;y<=33;y++) {
z = 100 -x-y;
if(z%3 == 0 && 5*x+3*y +z/3 == 100) printf("%d %d %d\n",x,y,z);
}
}
return 0;
}

2. 誰能幫我設計一個C語言程序,求解方程組的,急啊,哪位高手幫下咯,萬分感謝

假定你要的是線性方程組,下面的
float *GauseSeidel(float *a,int n)
是高斯賽德爾法求解線性方程組的通用子程序。
N 是 迭代次數極限。

main()里寫了調用的例子。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100
float *GauseSeidel(float *a,int n)
{
int i,j,nu=0;
float *x,dx;
x=(float *)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
x[i]=0.0;
do {
for(i=0;i<=n-1;i++) {
float d=0.0;
for(j=0;j<=n-1;j++)
d+=*(a+i*(n+1)+j)*x[j];
dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));
x[i]+=dx;
}
if(nu>=N)
{
printf("iter divergence\n");
exit(1);
}
nu++;
}
while(fabs(dx)>1e-6);
return x;
}
void main()
{
int i;
float *x;
float c[12]={5,2,1,8,2,8,-3,21,1,-3,-6,1};
float *GauseSeidel(float *,int);
x=GauseSeidel(c,3);
for(i=0;i<=2;i++)
printf("x[%d]=%f\n",i,x[i]);
getch();
}

3. 用c語言編程求線性方程組的解

#include "stdlib.h"
#include "math.h"
#include "stdio.h"
int rgauss(n,a,b)
int n;
double a[],b[];
{ int *js,l,k,i,j,is,p,q;
double d,t;
js=malloc(n*sizeof(int));
l=1;
for (k=0;k<=n-2;k++)
{ d=0.0;
for (i=k;i<=n-1;i++)
for (j=k;j<=n-1;j++)
{ t=fabs(a[i*n+j]);
if (t>d) { d=t; js[k]=j; is=i;}
}
if (d+1.0==1.0) l=0;
else
{ if (js[k]!=k)
for (i=0;i<=n-1;i++)
{ p=i*n+k; q=i*n+js[k];
t=a[p]; a[p]=a[q]; a[q]=t;
}
if (is!=k)
{ for (j=k;j<=n-1;j++)
{ p=k*n+j; q=is*n+j;
t=a[p]; a[p]=a[q]; a[q]=t;
}
t=b[k]; b[k]=b[is]; b[is]=t;
}
}
if (l==0)
{ free(js); printf("fail\n");
return(0);
}
d=a[k*n+k];
for (j=k+1;j<=n-1;j++)
{ p=k*n+j; a[p]=a[p]/d;}
b[k]=b[k]/d;
for (i=k+1;i<=n-1;i++)
{ for (j=k+1;j<=n-1;j++)
{ p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if (fabs(d)+1.0==1.0)
{ free(js); printf("fail\n");
return(0);
}
b[n-1]=b[n-1]/d;
for (i=n-2;i>=0;i--)
{ t=0.0;
for (j=i+1;j<=n-1;j++)
t=t+a[i*n+j]*b[j];
b[i]=b[i]-t;
}
js[n-1]=n-1;
for (k=n-1;k>=0;k--)
if (js[k]!=k)
{ t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}
free(js);
return(1);
}

徐世良老師的.原地工作全選主元的高斯消元.用的符號有點詭異,而且將矩陣以線性表輸入的.
我也寫過一個,不過估計你不太喜歡用我的,這個用來解b也是矩陣的.

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

void swap(double *a,double *b){
double temp;
temp=*a;
*a=*b;
*b=temp;
}

void printMatrix(int n,int m,double **a){
int i,j;
for (i=0;i<n;i++){
for (j=0;j<m;j++) printf("%e\t",a[i][j]);
printf("\n");
}
}

int rgauss(int n,int m,double **a,double **b){//,double *det){
int *colex,rowex,s,i,j,k;
double d,t;
// *det=1;
s=0;
colex=malloc(n*sizeof(int));
for (k=0;k<n;k++){
d=0.0;
for (i=k;i<n;i++){
for (j=k;j<n;j++){
t=fabs(a[i][j]);
if (t>d){
d=t;
colex[k]=j;
rowex=i;
}
}
}
if (d+1.0==1.0){
free(colex);
printf("Singular Matrix!\n");
return 0;
}
else{
if (colex[k]!=k){
for (i=0;i<n;i++)
swap(a[i]+colex[k],a[i]+k);
s=s+colex[k]-k;
}
if (rowex!=k){
for (j=0;j<n;j++)
swap(a[rowex]+j,a[k]+j);
for (j=0;j<m;j++)
swap(b[rowex]+j,b[k]+j);
s=s+rowex-k;
}
}
d=a[k][k];
// *det=*det*d;
for (j=k+1;j<n;j++) a[k][j]/=d;
for (j=0;j<m;j++) b[k][j]/=d;
for (i=k+1;i<n;i++){
for (j=k+1;j<n;j++)
a[i][j]-=a[i][k]*a[k][j];
for (j=0;j<m;j++)
b[i][j]-=a[i][k]*b[k][j];
}
}

for (i=n-2;i>-1;i--)
for (j=i+1;j<n;j++)
for (k=0;k<m;k++)
b[i][k]-=a[i][j]*b[j][k];

colex[n-1]=n-1;

for (i=n-1;i>-1;i--)
if (colex[i]!=i)
for (j=0;j<m;j++) swap(b[colex[i]]+j,b[i]+j);

// if (s&1) *det=-*det;
return 1;
}

void main(){
#define N 2
#define M 1
double input_a[]={1,1,1,2};
double input_b[]={1,2};
double *a[N],*b[N];
int i;
for (i=0;i<N;i++){
a[i]=input_a+N*i;
b[i]=input_b+M*i;
}

rgauss(N,M,a,b);
printf("方程解為:\n");
printMatrix(N,M,b);
printf("\n");
}

4. c語言編程 如何判斷是否為一元二次方程

判別方法[編輯本段]一元二次方程的判斷式:b^2-4ac>0 方程有兩個不相等的實數根. b^2-4ac=0 方程有兩個相等的實數根. b^2-4ac<0 方程沒有實數根. 上述由左邊可推出右邊,反過來也可由右邊推出左邊.列一元二次方程解題的步驟[編輯本段](1)分析題意,找到題中未知數和題給條件的相等關系; (2)設未知數,並用所設的未知數的代數式表示其餘的未知數; (3)找出相等關系,並用它列出方程; (4)解方程求出題中未知數的值; (5)檢驗所求的答案是否符合題意,並做答.

5. 用c語言解方程組

/*

1 -2 1 -1 -2 4

交點坐標為(1.22,0.05),(-1.22,4.95)

Press any key to continue

*/

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

doubleValue(doublex,doublea,doubleb,doublec){
returna*x*x+b*x+c;
}

intmain(){
doublex1,y1,x2,y2;
doublea,b,c,d,e,f,delta;
scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f);
delta=(b-e)*(b-e)-4*(a-d)*(c-f);
if(delta<0){
printf("二拋物線無交點。 ");
return0;
}
x1=(-(b-e)+sqrt(delta))/(2.0*(a-d));
x2=(-(b-e)-sqrt(delta))/(2.0*(a-d));
y1=Value(x1,a,b,c);
y2=Value(x2,a,b,c);
printf("交點坐標為(%.2lf,%.2lf),(%.2lf,%.2lf) ",x1,y1,x2,y2);
return0;
}

6. 如何用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;

}

7. C語言線性方程組求解

我今天寫了一個,參考一下吧:
//作品:多元一次方程組的計算
//作者:與你看日出
//日期:2009年4月25日 星期六
//說明:輸出值只能是小數(最多六位),如x=1.876546
//Han: 初始設的最多未知數的個數,運行程序後只能比它的個數小
//hang:計算中途中自己改變的未知數的個數
//JUZHEN:初始的示例矩陣
#include <stdio.h>
#include <math.h>
#define Han 200//(可自設)多元一次方程組有n行n+1列(多的一列是等號右邊的值),給出行數就能確定矩陣,
#define JUZHEN {1,1,1,1,5},{1,2,-1,4,-2},{2,-3,-1,-5,-2},{3,1,2,11,0}//示例一個
main()
{
int i,j,k,m,n,t,cf,hang=4;
float temp;
float AA[Han][Han+1]={JUZHEN};//定義所要計算的數組
do//判斷是否重試
{
for(i=0;i<hang;i++)//輸出所定義的數組
{
printf("\n");
for(j=0;j<hang+1;j++)
{
printf("%g\t",AA[i][j]);
}
}
printf("\n");
printf("是否自己輸入?是:1;否:0");
scanf("%d",&t);
if(t==1)//判斷是否自己輸入數組
{

printf("輸入未知數的個數");
scanf("%d",&hang);
for(i=0;i<hang;i++)//輸入所定義的數組
{
for(j=0;j<hang+1;j++)
{
printf("第%d行第%d列的數為:",i+1,j+1);
scanf("%f",&AA[i][j]);
}
}
}
for(k=0;k<hang;k++)//這個大循環將數組的左下角轉化為0
{

while(AA[k][k]==0)//如果第K行K列的那個數為0,則加和重組一行。
{
for(m=k+1;m<hang;m++)
for(n=k;n<hang+1;n++)
{
AA[k][n]+=AA[m][n];
}
}
for(i=k;i<hang;i++)//將第K列下面變為1
{
temp=AA[i][k];
for(j=k;j<hang+1;j++)//將每列變為1
{
AA[i][j]/=temp;
}
}
for(i=k+1;i<hang;i++)//將下面的數列與上面的數列相減使其下面為0
{
for(j=0;j<hang+1;j++)
{
AA[i][j]-=AA[k][j];
}
}
}
for(k=hang-2;k>=0;k--)//這個大循環將數組的右上角轉化為0
{
for(i=k+1;i<hang+1-1;i++)//將第i列上面變為0
{
AA[k][hang+1-1]-=AA[k][i]*AA[i][hang+1-1];
AA[k][i]=0;
}
}
for(i=0;i<hang;i++)//輸出該矩陣(也就是多元一次方程組)的解
{
printf("\n");
for(j=0;j<hang+1;j++)
{
printf("%g\t",AA[i][j]);
}
}
printf("\n未知數的值為:\n");
for(i=0;i<hang;i++)//輸出該矩陣(也就是多元一次方程組)的解
{
printf("x(%d)=\t%g\n",i+1,AA[i][hang+1-1]);
}
printf("\n");
printf("是否再試一次?是:1;否:0");
scanf("%d",&cf);
}
while(cf==1);//判斷是否重試
}

8. 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();}
}
}

9. 如何在c語言中判斷一元二次方程的根的數目

核心公式:b^2-4ac >= 0 時,方程有實根,=0時1個,>0時2個。
需要:方程的各項系數(只需要系數,可以按照降冪排列)
記錄輸入的系數,級聯式if else判斷上述公式的正負情況後即可輸出結果。

10. C語言用矩陣求解方程組

//作品:多元一次方程組的計算
//作者:與你看日出
//日期:2009年4月25日 星期六
//說明:輸出值只能是小數(最多六位),如x=1.876546
//Han: 初始設的最多未知數的個數,運行程序後只能比它的個數小
//hang:計算中途中自己改變的未知數的個數
//JUZHEN:初始的示例矩陣
#include <stdio.h>
#include <math.h>
#define Han 200//(可自設)多元一次方程組有n行n+1列(多的一列是等號右邊的值),給出行數就能確定矩陣,
#define JUZHEN {1,1,1,1,5},{1,2,-1,4,-2},{2,-3,-1,-5,-2},{3,1,2,11,0}//示例一個
main()
{
int i,j,k,m,n,t,cf,hang=4;
float temp;
float AA[Han][Han+1]={JUZHEN};//定義所要計算的數組
do//判斷是否重試
{
for(i=0;i<hang;i++)//輸出所定義的數組
{
printf("\n");
for(j=0;j<hang+1;j++)
{
printf("%g\t",AA[i][j]);
}
}
printf("\n");
printf("是否自己輸入?是:1;否:0");
scanf("%d",&t);
if(t==1)//判斷是否自己輸入數組
{

printf("輸入未知數的個數");
scanf("%d",&hang);
for(i=0;i<hang;i++)//輸入所定義的數組
{
for(j=0;j<hang+1;j++)
{
printf("第%d行第%d列的數為:",i+1,j+1);
scanf("%f",&AA[i][j]);
}
}
}
for(k=0;k<hang;k++)//這個大循環將數組的左下角轉化為0
{

while(AA[k][k]==0)//如果第K行K列的那個數為0,則加和重組一行。
{
for(m=k+1;m<hang;m++)
for(n=k;n<hang+1;n++)
{
AA[k][n]+=AA[m][n];
}
}
for(i=k;i<hang;i++)//將第K列下面變為1
{
temp=AA[i][k];
for(j=k;j<hang+1;j++)//將每列變為1
{
AA[i][j]/=temp;
}
}
for(i=k+1;i<hang;i++)//將下面的數列與上面的數列相減使其下面為0
{
for(j=0;j<hang+1;j++)
{
AA[i][j]-=AA[k][j];
}
}
}
for(k=hang-2;k>=0;k--)//這個大循環將數組的右上角轉化為0
{
for(i=k+1;i<hang+1-1;i++)//將第i列上面變為0
{
AA[k][hang+1-1]-=AA[k][i]*AA[i][hang+1-1];
AA[k][i]=0;
}
}
for(i=0;i<hang;i++)//輸出該矩陣(也就是多元一次方程組)的解
{
printf("\n");
for(j=0;j<hang+1;j++)
{
printf("%g\t",AA[i][j]);
}
}
printf("\n未知數的值為:\n");
for(i=0;i<hang;i++)//輸出該矩陣(也就是多元一次方程組)的解
{
printf("x(%d)=\t%g\n",i+1,AA[i][hang+1-1]);
}
printf("\n");
printf("是否再試一次?是:1;否:0");
scanf("%d",&cf);
}
while(cf==1);//判斷是否重試
}