c语言编程,求方程2X^2+3X-3=0 的根

 我来答
sun_siliang
2011-03-18 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4550万
展开全部
#include <stdio.h>
#include <math.h>
int main ( )
{
double a,b,c,disc,x1,x2,p,q;
//scanf("%lf%lf%lf",&a,&b,&c);
a=2.0;
b=3.0;
c=-3.0;
disc=b*b-4*a*c;
if (disc<0)
printf("has not real roots\n");
else
{ p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("real roots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2);
}
return 0;
}

//下面是运行结果:
real roots:
x1= 0.69
x2= -2.19
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cms466
2011-03-18 · TA获得超过1896个赞
知道小有建树答主
回答量:284
采纳率:100%
帮助的人:268万
展开全部
用求根公式:b^2-4ac就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
拥抱每一天哦
2023-03-19 · TA获得超过267个赞
知道小有建树答主
回答量:751
采纳率:79%
帮助的人:69万
展开全部
可以使用求根公式或者较简单的迭代求解方法来解决这个问题。下面分别介绍它们的实现方法。

方法一:使用求根公式

求根公式通常用来求解二次方程,形式如下:

![quadratic equation formula](https://gitee.com/heimu_xiong/pic-go-picture-bed/raw/master/img/20210816120121.png)

其中,a、b、c是常数,x是未知数,这个公式的条件是a不等于0。对于本题的方程2X^2+3X-3=0,我们可以使用以下代码求解它的根:

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

int main() {
double a = 2.0, b = 3.0, c = -3.0, x1, x2;
double delta = b * b - 4 * a * c;
if(delta < 0) {
printf("此方程没有实数根");
} else {
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("方程2X^2+3X-3=0的两个根为: x1 = %f, x2 = %f", x1, x2);
}
return 0;
}

```

在程序中,我们先声明了三个双精度浮点型的变量a、b、c,这些变量的值就是方程2X^2+3X-3=0中对应的系数。然后,我们使用之前提到的求根公式计算方程的两个根x1和x2,如果判别式delta小于0,说明此方程没有实数根,反之则计算出根并打印输出。

方法二:使用迭代法求解方程

本题中的方程是一个二次方程,使用迭代法来求解也是可行的。迭代法的基本思想是:从初始值出发,不断重复某个固定的计算过程,得到一个序列,当这个序列收敛时,迭代结果就是问题的解。我们可以根据二次函数的图像,写出该方程的函数式:

y = 2X^2 + 3X - 3

由于方程中只有一个未知数,即X,我们可以使用迭代法来逼近这个未知数的解。具体流程如下:

1. 设定一个初始值X0,例如X0=1;
2. 计算当前的函数值 f(X0),根据函数的单调性确定下一个迭代点 X1;
3. 使用新得到的点 X1,重新计算函数值 f(X1);
4. 重复2、3步骤,直到函数值收敛于0,或是达到预设的精度要求。

使用以上迭代方法结合代码实现如下:

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

#define MAX_ITERATION 1000 // 设置最多迭代次数
#define TOLERANCE 0.00001 // 设置迭代停止精度

double f(double x){
return (2.0 * x * x + 3.0 * x - 3.0); // 方程函数
}

int main(){
double x0 = 1.0, x1; // 设定初始点值
int itr_cnt = 0; // 设定迭代次数计数器

while (itr_cnt < MAX_ITERATION) {
itr_cnt++; // 每循环一次迭代次数+1
x1 = x0 - f(x0) / (4 * x0 + 3); // 根据迭代公式计算下一个迭代点
if (fabs(x1 - x0) < TOLERANCE){ // 如果两次迭代点之差小于设定精度TOLERANCE
printf("The root of the equation 2X^2+3X-3 is %lf
", x1);
printf("Iteration amount: %d
", itr_cnt); // 输出最终解和迭代次数
return 0;
}
x0 = x1; // 赋值当前迭代点
}

printf("Iteration failed."); // 如果达到最大迭代次数还未找到解,则迭代失败
return 0;
}

```

这个程序中共用到3个预定义变量,MAX_ITERATION定义了最多的迭代次数,TOLERANCE定义了迭代停止的精度条件。在f函数中定义了2X^2+3X-3的计算公式。接下来进入主函数,采用while循环进行迭代求解。在每一次迭代中,根据公式计算下一个迭代点,并检查两次迭代点之差是否小于精度TOLERANCE。若满足条件则停止迭代,输出解和迭代次数;否则就继续迭代,直到达到最大迭代次数itr_cnt为止。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式