当前位置:首页 » 编程语言 » 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);//判断是否重试
}