当前位置:首页 » 编程语言 » c语言求函数的根
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言求函数的根

发布时间: 2022-08-05 10:02:15

c语言编程:求一元二次方程的根

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain()

{floata,b,c;floatx1,x2; cin>a>>b>>c;floatdlt=b*b-4*a*c;if(dlt>=0){x1=-b/2/a+sqrt(dlt)。

/2/ax2=-b/2/a-sqrt(dlt)/2/a。

cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有两个实根:";cout<<"x1="<<x1<<",x2="<<x2<<endl;}

else

{x1=-b/2/a;x2=sqrt(-dlt)/2/a;cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有两个虚根:"。

cout<<"x="<<x1<<"+/-"<<x2<<"i"<<endl;}

return0。

(1)c语言求函数的根扩展阅读:

成立条件:

一元二次方程成立必须同时满足三个条件:

①是整式方程,即等号两边都是整式,方程中如果有分母;且未知数在分母上,那么这个方程就是分式方程,不是一元二次方程,方程中如果有根号,且未知数在根号内,那么这个方程也不是一元二次方程(是无理方程)。

②只含有一个未知数;

③未知数项的最高次数是2。

② C语言求二元一次方程的根

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

void main()
{
double a,b,c;
double s;
double *e,*f;
void d(double a ,double b,double c,double s,double* e,double* f);
void de(double a ,double b,double c,double *e);
void x();
e=(double*)malloc(sizeof(double));
f=(double*)malloc(sizeof(double));
*e=0;
*f=0;

printf("Please input coefficient:\n");
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0)
{
if(b==0&&c==0)
printf("x is any number");
if(b==0&&c!=0)
x();
if(b!=0)
{
*e=-c/b;
printf("%lf",*e);
}
}
else
{
s=(b*b-4*a*c);
if(s<0)
x();
else
{
s=sqrt(s);
printf("The equation is %lf x^2 + %f x + %f\n",a,b,c);
printf("s=%lf\n",s);
if(s>0)
{
d(a,b,c,s,e,f);
printf("%lf\n",*e);
printf("%lf\n",*f);
}
else if(s==0)
{
de(a,b,c,e);
printf("%lf\n",*e);
}
}
}
}

void d(double a ,double b,double c,double s,double *e ,double *f)
{
double m,n;
m=-0.5*(b+s)/a;
n=-0.5*(b-s)/a;
*e=m;
*f=n;

}

void de(double a ,double b,double c,double *e)
{
double m;
m=-0.5*b/a;

*e=m;
}

void x()
{
printf("The equation has no root!\n");

}
这是改后正确的代码,以下是你代码的错误:
1.函数如果想在main中声明,不能在执行语句后声明。
2.当调用d(double a...)函数时,e和f作为参数穿过去只是他们的值,在函数内部对它们赋值是不能改变他们内存真正的值的。
3.if(s=0)是对s赋值使s=0,如果是判断应该是if(s==0)。
4.x函数中参数a、b、c没有用到,而且你已经把abc设为全局变量,就不需要把他们当成参数传递,所以我把所有变量都改为局部变量。
5.d函数的算法错误,应该是e=-(b+s)/2a;f=-(b-s)/2a;
6.你没有考虑当a=0,b=0,时的情况。
7.当b2-4ac<0时,用sqrt开方就已经错误啦。
写的有些乱,见谅~

③ c语言二分法求方程的根的算法

如果连续函数在给定区间不单调,很有可能中值*下界值和中值*上界值都大于0,那么会跳出认为没有根,而事实上很有可能这个中值点靠近函数极点。

而真正用二分法求给定区间的思路是:
首先为函数求导,算出导函数的零点,然后再判断零点性质,最后将函数区间分为单调递增和单调递减间隔的形式,对每一段进行二分法求根。

#include<stdio.h>
#include<math.h>
#defineDEFAULT_UPPER(10)
#defineDEFAULT_LOWER(-10)
#defineDEFAULT_E(0.00000001)
#define_MID(x,y)((x+y)/2)
#define_VALUE(x)(2*x*x*x-4*x*x+3*x-6)
double_e;
intgetRoot(doublelower,doubleupper,double*result);
main()
{
doubleroot;
printf("Enteradeviation:");
scanf("%lf",&_e);
if(_e==0.0)
_e=DEFAULT_E;
if(getRoot(DEFAULT_LOWER,DEFAULT_UPPER,&root))
printf("Root:%2.8lf ",root);
else
printf("Root:NoSolution. ");
}
intgetRoot(doublelower,doubleupper,double*result)
{
*result=_MID(lower,upper);
if(upper-lower<=_e)
return1;
if(_VALUE(lower)*_VALUE(*result)<=0)
returngetRoot(lower,*result,result);
elseif(_VALUE(*result)*_VALUE(upper)<=0)
returngetRoot(*result,upper,result);
else
return0;
}

④ c语言函数求方程的根

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
float a,b,c,x,x1,x2,d;

scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if(a==0)
{
if(b==0)
{
if(0==c)
{
printf("等式0!\n");
}
else
{
printf("输入错误!\n");
}
}
else
{
printf("只能构成一元一次方程,x=%.6f\n",0==-(float)c/b ? 0 : -(float)c/b);
}

}
else
{
if(d<0)
{
x1=(-b+sqrt(-d))/(2.0*a);
x2=(-b-sqrt(-d))/(2.0*a);
printf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi\n",(-b)/(2.0*a),sqrt(-d)/(2.0*a),(-b)/(2.0*a),sqrt(-d)/(2.0*a));
}
else if(d==0)
{
printf("x1=x2=%.6f\n",(-b)/(2.0*a));
}
else
{
x1=(-b+sqrt(d))/(2.0*a);
x2=(-b-sqrt(d))/(2.0*a);
printf("x1=%.6f\nx2=%.6f\n",x1,x2);
}
}
system("PAUSE");
return EXIT_SUCCESS;
}

⑤ C语言从键盘输入求方程根.

%1f写错了——float型时用%f,double型时用%lf。是LF的小写,你写成1f了。写成%1f后被解释为只接收一个数字的浮点型,即0~9,所以即便是float型,输入两位以上数字就要出错。

⑥ 用C语言编程怎么求一个数的根号

#include<stdio.h>

#include<math.h>

intmain()

{

floata=5,b;

b=sqrt(a);

printf("a的平方根为:%f ",b);

return0;

}

⑦ c语言求二次函数的根

#include <stdio.h>
int main(void)
{
double a,b,c,d,e;
double x1,x2;
printf("请输入ax^2+bx +c = 0中a,b,c的值");
scanf("%lf,%lf,%lf",&a,&b,&c);
e = b * b - 4 * a * c;
if (e<0) {
printf("无解,请重新输入\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
}
printf("输入正确,正在计算....\n");
d = sqrt(e);
x1 = (-b + d)/(2 * a);
x2 = (-b - d)/(2 * a);
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
return 0;
}

⑧ c语言中如何开根号运算

用math.h里封装好的函数,具体如下:

求平方根:double sqrt(double x)

例:

#include <math.h>

#include <stdio.h>

int main(void)

{

double x = 4.0, result;

result = sqrt(x);

printf("The square root of %lf is %lf

", x, result);

return 0;

}

(8)c语言求函数的根扩展阅读:

关于c语言的基本运算

1.加法运算符 +

int a = 10;

int b = a + 5;

在第3行利用加法运算符 + 进行了加法运算,再将和赋值给了变量b,最终变量b的值是15

2.减法运算符 或 负值运算符-

int b = 10 - 5;

int a = -10;

1> 在第1行利用减法运算符 - 进行了减法运算,再将差赋值给了变量b,最终变量b的值是5

2> 在第3行中,这个 - 并不是什么减法运算符,而算是一个负值运算符,-10代表的是负十

3.乘法运算符*

int b = 10 * 5;

注意:乘法运算符并不是x或者X,而是星号*。变量b最终的值是50。

4.除法运算符/

double a = 10.0 / 4;

double b = 10 / 4;

printf("a=%f, b=%f ", a, b);

注意:除法运算符并不是÷,而是一个正斜杠 /

1> 第1行中的10.0是浮点型,4是整型,因此会将4自动类型提升为浮点型后再进行运算,最后变量b的值是2.5

2> 第2行中的10和4都是整型,计算机中的运算有个原则:相同数据类型的值才能进行运算,而且运算结果依然是同一种数据类型。因此,整数除于整数,求出来的结果依然是整数,会损失小数部分。最后变量b的值是2。

5.模运算符或称取余运算符 %

注意:这个%并不是除号÷,它是一个取余运算符,或者叫做模运算符。取余的意思是,取得两个整数相除之后的余数。比如,5除于2的余数是1,5除于3的余数是2。因此使用这个%有个原则:%两侧必须都为整数。

错误的写法:1 int a = 5.0 % 2;

编译器会直接报错,因为5.0并非整数。

⑨ 用C语言求方程的根,用3个函数分别求当大于0、等于0和小于0时的根并输出结果。从主函数中输入abc的值。

给你重写一个你对照看——

#include"stdio.h"
#include"math.h"
voidzero(floata,floatb){
printf("x1=%f ",-b/2/a);
printf("x2=%f ",-b/2/a);
}
voidone(floata,floatb,floatd){
printf("x1=%f ",(-b+d)/2/a);
printf("x2=%f ",(-b-d)/2/a);
}
voidtwo(floata,floatb,floatd){
printf("x1=%f%+fi ",-b/2/a,d/2/a);
printf("x2=%f%+fi ",-b/2/a,-d/2/a);
}
intmain(intargc,char*argv[]){
floata,b,c,dlt;
printf("Inputa,b,c(R:all)... ");
scanf("%f%f%f",&a,&b,&c);
if((dlt=b*b-4*a*c)==0)
zero(a,b);
elseif(dlt>0){
one(a,b,sqrt(dlt));
}
else
two(a,b,sqrt(-dlt));
return0;
}

运行样例:

有问题续问。