C语言,求一元二次方程的解

 我来答
阿豪呦1
推荐于2019-08-02 · TA获得超过9958个赞
知道答主
回答量:2
采纳率:0%
帮助的人:441
展开全部

对于如下的一元二次方程:

ax*x+bx+c=0

设计C语言程序,输入一元二次方程的三个系数a、b、c,求解出该方程的两个根,并且允许用户在程序中多次输入不同的系数,以求解不同的一元二次方程的解。

编程思路分析:

对于该方程,令delta=b^2-4*a*c,从数学的角度来讲,我们需要根据delta的值来判断该方程的根情况:

当delta>=0时,其两个根为实数解,分别为(-b+sqrt(delta))/(2*a)和(-b-sqrt(delta))/(2*a);

当delta<0时,其两个根为复数解,实部皆为-b/(2*a),虚部分别为sqrt(-delta)/(2*a)和-sqrt(-delta)/(2*a)。

其中,sqrt(delta)代表对delta作开根号运算。

在代码设计中,可定义一个结构体Complex存储该方程的根,在该结构体中包括实部和虚部两个变
在程序中,定义两个Complex类型的根x1和x2,当delta>=0时,两个根的虚部为0,否则,分别求解两个根的虚部值。
具体编程如下:

#include "stdio.h" 
#include "math.h" 
/*求一元二次方程ax*x+bx+c=0的解*/ 
main() 
{float a,b,c,x1,x2,d;
printf("请输入a:");
scanf("%f",&a);
printf("请输入b:");
scanf("%f",&b);
printf("请输入c:");
scanf("%f",&c);
d=b*b-4*a*c;if(d < 0)
printf("方程没有实数解。\n");
if (d==0){x1=(-b)/(2*a);
printf("x1=%f\n",x1);}
if (d>0){x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);} }
请输入a:12
请输入b:34
请输入c:4
x1=-0.122985,x2=-2.710348
Press any key to continue

扩展资料:

一元二次方程还可以用迭代法的思想设计程序:

例  :一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第 12 个月时,该饲养场共有兔子多少只?

分析:这是一个典型的递推问题。我们不妨假设第 1 个月时兔子的只数为 u 1 ,第 2 个月时兔子的只数为 u 2 ,第 3 个月时兔子的只数为 u 3 ,……根据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有

u 1 = 1 , u 2 = u 1 + u 1 × 1 = 2 , u 3 = u 2 + u 2 × 1 = 4 ,……

根据这个规律,可以归纳出下面的递推公式:u n = u(n - 1)× 2 (n ≥ 2),对应 u n 和 u(n - 1),定义两个迭代变量 y 和 x ,可将上面的递推公式转换成如下迭代关系:

y=x*2,x=y

让计算机对这个迭代关系重复执行 11 次,就可以算出第 12 个月时的兔子数。参考程序如下:

cls  x=1   for i=2 to 12

y=x*2   x=y

next i   print y

end

迭代法是一类利用递推公式或循环算法通过构造序列来求问题近似解的方法。例如,对非线性方程  ,利用递推关系式,从  开始依次计算  ,来逼近方程的根  的方法,

若  仅与  有关,即  ,则称此迭代法为单步迭代法,一般称为多步迭代法;对于线性方程组  ,由关系  从  开始依次计算  来过近方程  的解的方法。

若对某一正整数  ,当  时,  与 k 无关,称该迭代法为定常迭代法,否则称之为非定常迭代法。称所构造的序列  为迭代序列。

参考资料:迭代法_百度百科

芭瑞丝猫CT
推荐于2019-08-05 · TA获得超过11.8万个赞
知道答主
回答量:90
采纳率:58%
帮助的人:4.2万
展开全部

#include 
#include 
using namespace std;
int main()
{
float a = 1,b = 0,c= 0;
couta;
coutb;
coutc;
if(a==0)
return 0;
float x1,x2 = 0;
float i;
i = b*b-4*a*c;

计算机语言包括机器语言、汇编语言、高级语言。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能,比如汇编语言(assembly language)。机器语言具有灵活、直接执行和速度快等特点。高级语言比较容易识记和理解,像C B语言等。

  • 中文名

  • 编程语言

  • 外文名

  • LANGUAGE

  • 机器语言

  • 二进制代码

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vicluo
推荐于2017-10-07 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1138
采纳率:0%
帮助的人:1307万
展开全部
#include "stdio.h"
#include "math.h"

/*求一元二次方程ax*x+bx+c=0的解*/
main()
{
float a,b,c,x1,x2,d;
printf("请输入a:");
scanf("%f",&a);
printf("请输入b:");
scanf("%f",&b);
printf("请输入c:");
scanf("%f",&c);
d=b*b-4*a*c;

if(d < 0)
printf("方程没有实数解。\n");

if (d==0)
{
x1=(-b)/(2*a);
printf("x1=%f\n",x1);
}
if (d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
溪贝0号123
2020-01-07 · TA获得超过426个赞
知道答主
回答量:228
采纳率:100%
帮助的人:5.8万
展开全部
#include<stdio.h>
#include<math.h>
int main(void)
{
double a, b, c;
double delta;
double x1, x2;
printf("此程序为求一元二次方程的解,请为一元二次方程ax*x+bx+c=0的系数赋值\n");
printf("请输入a的值,a=");
scanf_s("%lf", &a);
printf("请输入b的值,b=");
scanf_s("%lf", &b);
printf("请输入c的值,c=");
scanf_s("%lf", &c);
delta = b*b - 4 * a*c;
if (delta > 0)
{
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("该一元二次方程有两个解,x1=%lf,x2=%lf", x1, x2);
}
else if (delta == 0)
{
x1 = -b / (2*a);
x2 = x1;
printf("该一元二次方程有唯一解,x1=x2=%lf", x1);
}
else
{
printf("该一元二次方程无解\n");
}

getchar();
getchar();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a6312962
2013-01-05
知道答主
回答量:5
采纳率:0%
帮助的人:3万
展开全部
#include<stdio.h>
#include<math.h>
void main()
{
double a,b,c,disc,s,x1,x2,p,q,x;
printf("请输入a,b,c:");
scanf("%lf%lf%lf",&a,&b,&c);
disc=sqrt(b*b-4*a*c);
p=-b/(2*a);
q=sqrt(b*b-4*a*c)/(2*a);
x1=p+q;
x2=p-q;
x=-c/b;
if(a==0)
printf("x=%5.2lf\n",x);
else
{
if(disc<0)
printf("无实根");
else if(disc==0)
printf("x1=x2=%5.2lf\n",x1);
else
printf("x1=%5.2lf\nx2=%5.2lf\n",x1,x2);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式