题目

求解一元二次方程。
一元二次方程的定义为:
ax2+bx+c=0
(1)如果b2 -4ac>0,方程有两个不同的实根,分别是:

(2)如果b2 -4ac< 0,方程没有实根,但有虚根;
(3)如果b2 -4ac= 0,方程有一个实根。
请你编写一个程序,使其能求出多个二次方程的根。该程序要询问用户是否想继续解下一个方程。用户输入1来继续,输入其它数字,则终止程序。程序要求用户输入a,b和c,然后根据前面的条件计算,并输出答案。
要求:使用类实现,
(1)a,b,c为该类的私有成员变量;
(2)求根的实现为该类的成员函数,形式为:

//函数返回值:实根的个数;
//参数:x- 用以返回实根值的数组;
long CalResult(float x[]);

(3)该类还包含有参构造函数、析构函数。
(4)使用MFC工程实现,可酌情加分。

问题描述

题中要求我们编写一个程序,使其能求出多个二次方程的根,并要询问用户是否想继续解下一个方程,用户输入1来继续,输入其它数字,则终止程序。该程序还要求用户分别输入一元二次方程各项的系数a,b和c,然后经过计算,输出答案。

问题分析

对于本题,除了要从数学角度来解一元二次方程,还要用计算机语言表示出来。所以我们应定义一个求解类FindRoot,并使一元二次方程各项系数a,b,c为该类的私有成员变量,按照题中要求,求根的实现为该类的成员函数,其形式为long CalResult(float x[]),而询问客户是否继续计算一元二次方程则放在主函数部分。
但是在编写函数的过程中要注意两点:
1.当a = 0时的情况要考虑进去。
2.当Δ<0时,方程虽然没有实根,但又虚根,题目中没有要求说只求实根的个数,所以,当方程没有实根的情况下还要另外计算虚根的值。

设计思想

本题要求我们求解一元二次方程的解,在一元二次方程求解的过程中,需要考虑三种情况,即判别式Δ=b2 -4ac的大小问题。
(1)当Δ>0时,方程有两个不相等的实根

(2)当Δ=0时,方程有两个相等的实根x1=x2=(-b)/(2a),即一个实根;
(3)当Δ<0时,方程没有实根,但有虚根,虚根为(-b / 2 * a)±((sqrt(-m)) / 2 * a)
以上是我们解数学题的思路,可是如果我们用C++来解决一元二次方程组求解的问题该怎么处理呢?
首先要建立一个求解FindRoot类,并声明a,b,c三个float类型的数据成员。在类中我们构造了一个用于实现求根的成员函数,其形式为long CalResult(float x[]),在该函数中用数组x来储存该方程的根,按要求定义一个n表示根的个数,然后需要我们判断判别式的大小,当判别式大于0时则n=2,当判别式==0时则n=1,当判别式小于0时则n=0,最后返回n的值。
在主函数中要实现方程的循环计算,计算机要询问客户是否继续计算,当客户输入“1”时才可继续方程的计算,所以我运用了do-while语句来判断是否继续方程的计算,除此之外要考虑的如果客户输入的a的值如果为0的话,方程不是一元二次方程,则利用if语句判断a是否为0,如果a为0,则跳出循环,程序结束。

设计表示


源代码

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;class FindRoot{public:FindRoot(float aa = 0, float bb = 0, float cc = 0){a = aa;b = bb;c = cc;}~FindRoot(){}FindRoot(FindRoot&F);long CalResult(float x[]);
private:float a, b, c;                          //a,b,c为该类的私有成员变量
};FindRoot::FindRoot(FindRoot&F){a = F.a;b = F.b;c = F.c;
}long FindRoot::CalResult(float x[]){                        //参数x- 用以返回实根值的数组long n;float m = (b*b - 4 * a*c);int q, p;if (m > 0){n = 2;x[0] = (-b + sqrt(m)) / 2 * a;x[1] = (-b - sqrt(m)) / 2 * a;cout << "该方程有两个不同的实根,分别是:" << x[0] << " " << x[1] << endl;}else if (m < 0){n = 0;q = -b / 2 * a;                       //q为虚根的实部p = (sqrt(-m)) / 2 * a;               //p为虚根的虚部cout << "方程没有实根,但有虚根。" << endl;cout << "虚根x1为:" << q << "+" << p << "i" << endl;cout << "虚根x2为:" << q << "-" << p << "i" << endl;}else{n = 1;x[0] = (-b) / 2 * a;cout << "方程有一个实根,该根为:" << x[0] << endl;}return n;                         //函数返回值为实根的个数
}
int _tmain(int argc, _TCHAR* argv[])
{float a, b, c;float x[2];int m;do{cout << "请分别输入一元二次方程的三个系数a,b,c" << endl;cin >> a >> b >> c;if (a == 0){            //当a = 0时,方程没有二次项,即不是一元二次方程,则跳出循环,程序终止cout << "输入不规范。"<<endl;break;}FindRoot number(a, b, c);number.CalResult(x);cout << endl;cout << "是否想解一元二次方程?请输入“1”继续" << endl;cin >> m;cout << endl;} while (m == 1);                          //能求出多个二次方程的根,输入1继续,否则终止程序cout << "计算结束,程序终止。" << endl;return 0;
}

测试数据及运行结果


c++ 求解一元二次方程 全面考虑实根和虚根的情况相关推荐

  1. 【C语言】一元二次方程(求实根和虚根)

    求一元二次方程:ax2+bx+c=0 的根. 输入三个实数a,b,c的值,且a不等于0. #include<stdio.h> #include<math.h> int main ...

  2. 6-2 求解一元二次方程实根的函数

    6-2 求解一元二次方程实根的函数 (10 point(s)) 要求计算一元二次方程ax2+bx+c=0(a=0)的根. 主函数中给出3个浮点系数a.b.c,调用函数rootOfEquation() ...

  3. c# 求解一元二次方程实根

    for (int i = 0; i <10; i++) { Console.Title = "一元二次方程程序"; double a, b, c, d, x1, x2; Co ...

  4. 利用C++求解一元二次方程

    题目:求解一元二次方程:ax²+bx+c=0 的解,其中a=1,b=-3,c=2. 分析:大家都知道一元二次方程的解有三种情况,即考虑Δ=(b²-4ac)的算术平方根,当Δ>0时,方程有两个不相 ...

  5. c++求解一元二次方程的解

    实数解与复数解均可 #include<iostream>using namespace std;void Calculate(double a, double b, double c) { ...

  6. C#求解一元二次方程的根

    C#求解一元二次方程的根 数学知识 方程 ax2+bx+c=0ax^2 + bx + c = 0ax2+bx+c=0 的解有以下几种情况: a=0a = 0a=0 且 b=0b = 0b=0 ,无解. ...

  7. 第7关:求解一元二次方程

    import math a=float(input("请输入系数a:")) b=float(input("请输入系数b:")) c=float(input(&q ...

  8. Python编写程序求解一元二次方程,打印九九乘法表,判断三条边是否可以构成三角形,并求三角形面积

    目录 求解一元二次方程题目总体要求如下: 打印九九乘法表题目总体要求如下: 判断三条边是否可以构成三角形题目要求如下: 求解一元二次方程题目总体要求如下: 编写程序,输入一元二次方程的三个系数a.b. ...

  9. 【C++】求解一元二次方程的根

    问题描述 求解一元二次方程组 ax2+bx+c=0 的根,要求判断 b2-4ac 的值是否为非负值,若是非负值,则输出方程的实根,否则输出"该方程无实数根". 提示:需要自学求平方 ...

最新文章

  1. antd checkbox 默认选中_antd 开发的一些坑(一)
  2. 一个同步github上fork过来的项目的批处理脚本
  3. python3 urlencode_Python2和Python3中urllib库中urlencode的使用注意事项
  4. java nginx 例子_Nginx配置日志
  5. P2012-拯救世界2【EGF】
  6. C语言和其他语言的不得不说的差别!
  7. Ubuntu搭建安装svn
  8. jinja2模板注入_Flask(Jinja2) 服务端模板注入漏洞
  9. 如何使用JavaScript阻止关闭窗口
  10. PowerBuilder 生成条形码
  11. 雪球网 存入mysql
  12. 贴出最新整理的英语谚语大全 3267条
  13. HTB靶场 Shared
  14. 计算机word平均分怎么算,word怎么计算一列平均分
  15. windows时间与Internet时间不同步
  16. DOS下显示JPG/JPEG图像文件
  17. vue 通过接口实现前端登录页验证码功能
  18. performSelector系列方法的研究
  19. NISP(一级二级)介绍
  20. 软件测试高级技术-性能测试

热门文章

  1. Geospark电火花使用再记录
  2. 7-21 输出大写英文字母 (15分)
  3. 【ppt入门教程】PowerPoint课件发布全攻略
  4. 如何在C++里面加快运行速度
  5. EBS - FA资产剩余寿命计算脚本
  6. UC 浏览器曝中间人攻击漏洞,官方:已修复,国内版不受影响
  7. QAP-based Simulation-Extractable SNARK with a Single Verification及代码实现
  8. html点击打开word文档,javascript打开word文档的方法
  9. 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp
  10. 头歌 共享单车大数据项目数据分析