c语言怎么求解一元二次方程

c语言怎么求解一元二次方程,第1张

c语言一元二次方程编程是#include <iostream>。#include <cmath>。using namespace std。int main()。{float a,b,cfloat x1,x2cin>a>>b>>cfloat dlt=b*b-4*a*cif(dlt>=0){x1=-b/2/a+sqrt(dlt)。/2/ax2=-b/2/a-sqrt(dlt)/2/a。

形如x=p或(nx+m)=p(p≥0)的一元二次方程可采用直接开平方的方法解一元二次方程.如果方程化成x²=p的形式,那么可得x=±p;(x²=p,x=±根号p)如果方程能化成(nx+m)=p(p≥0)的形式,那么nx+m=±p。

简洁的语言:

C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。

实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

提供的控制语句具有结构化特征,如for语句、if...else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。

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

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*cif(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 无关,称该迭代法为定常迭代法,否则称之为非定常迭代法。称所构造的序列  为迭代序列。

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

#include<stdio.h>

#include<math.h>

void m(float a,float b,float c)

{

double x1,x2

x1=(-b+sqrt(b*b-4*a*c))/(2*a)

x2=(-b-sqrt(b*b-4*a*c))/(2*a)

printf("方程的根是%.2lf和%.2lf",x1,x2)

}

void n(float a,float b,float c)

{

double x

x=(-b)/(2*a)

printf("方程的根为%.2lf",x)

}

void f(float a,float b,float c)

{

printf("方程无实数根\n")

}

main()

{

float a,b,c

printf("请输入a,b,c的值\n")

scanf("%f%f%f",&a,&b,&c)

if(b*b-4*a*c>0)

m(a,b,c)

if(b*b-4*a*c==0)

n(a,b,c)

if(b*b-4*a*c<0)

f(a,b,c)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7758636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存