C++系列实例篇1——简易一元二次方程求解器

网管2个月前未分类55

引言

在编程的世界里,数学算法的实现总是一个经典的话题。一元二次方程作为基础的数学问题,是学习编程时经常接触到的算法之一。今天,我们将通过C++来实现一个简易的一元二次方程求解器,并探讨如何优化代码以提高其效率和可读性。

一元二次方程简介

一元二次方程是形如ax² + bx + c = 0 的方程,其中 ab,和 c 是常数,且a≠0。解这个方程通常涉及到计算判别式 Δ=b24acΔ = b² + 4ac,根据 Δ 的值,我们可以确定方程的解的情况:

  • 如果 Δ>0,方程有两个不相等的实数解。

  • 如果 Δ=0,方程有两个相等的实数解。

  • 如果 Δ<0,方程没有实数解。

代码实现

首先,我们来看一个基础的一元二次方程求解器的实现:

#include <iostream>//引入输入输出流库
#include <cmath>//常用数学函数库
#include <windows.h>
using namespace std; //使用标准(std)命名空间,这样可以不用在之后的代码中加上std::前缀
int main() {
    float a, b, c; //定义浮点数a b c
    int s = 0;//记录运算次数
    cout << "一元二次方程求解器(适用于一般式且解值在实数范围内,一次运行支持计算15个方程)" << endl;//提示语
    while (true) { //循环开始
        s += 1;
        cout << "这是第 " << s << " 次计算" << endl; 
        cout << "请输入A(一般式Ax^2+Bx+C=0,退出请将A与B均输入0): ";
        cin >> a;
        if (a == 0 && cin.peek() == '\n') break; 
        cout << "请输入B(一般式Ax^2+Bx+C=0,退出请将A与B均输入0): ";
        cin >> b;
        cout << "请输入C(一般式Ax^2+Bx+C=0): ";
        cin >> c;
        cout << "正在计算,请稍等..." << endl;
        float delta = b * b - 4 * a * c;
        cout << "Delta=" << delta << endl;
        if (delta >= 0) {
            float sum1 = (-1 * b + sqrt(delta)) / (2 * a);
            float sum2 = (-1 * b - sqrt(delta)) / (2 * a);
            cout << "计算成功" << endl << "x1=" << sum1 << endl << "x2=" << sum2 << endl;
        } else {
            cout << "该方程解值不在实数范围内,无法计算!" << endl;
        }
        if (s == 15) break;
    }
    cout << "程序将在3秒后自动退出";
    Sleep(3000);
    return 0;
    }

或者 源代码下载链接:点此下载

代码优化

虽然上述代码已经能够实现基本功能,但我们可以通过以下方式进行优化:

  1. 初始化变量:在使用变量之前,确保它们已经被初始化。

  2. 代码风格:保持代码的可读性,比如使用空格、适当的缩进和换行。

  3. 循环控制:使用更清晰的循环控制逻辑。

  4. 异常处理:添加对输入异常的处理,比如用户输入非数字时的情况。

  5. 代码重用:将重复的代码块提取成函数,以提高代码的可维护性。

  6. 用户界面:提供更友好的用户界面,比如在退出前确认。

优化后的代码如下:

#include <iostream>
#include <cmath>
#include <windows.h>
using namespace std;

// 函数声明
float calculateDelta(float a, float b, float c);
void solveQuadraticEquation(float a, float b, float c);
void printBanner();

int main() {
    printBanner();
    int count = 0;
    float a, b, c;
    while (true) {
        cout << "请输入A(一般式Ax^2+Bx+C=0,退出请将A与B均输入0): ";
        cin >> a;
        if (a == 0) {
            cout << "请输入B(退出请将B也输入0): ";
            cin >> b;
            if (b == 0) break;
        }
        cout << "请输入B(一般式Ax^2+Bx+C=0): ";
        cin >> b;
        if (a == 0 && b == 0) break;
        cout << "请输入C(一般式Ax^2+Bx+C=0): ";
        cin >> c;

        solveQuadraticEquation(a, b, c);
        count++;
        if (count == 15) break;
    }
    cout << "程序将在3秒后自动退出";
    Sleep(3000);
    return 0;
}

// 计算判别式
float calculateDelta(float a, float b, float c) {
    return b * b - 4 * a * c;
}

// 解一元二次方程
void solveQuadraticEquation(float a, float b, float c) {
    float delta = calculateDelta(a, b, c);
    cout << "Delta=" << delta << endl;
    if (delta >= 0) {
        float sum1 = (-1 * b + sqrt(delta)) / (2 * a);
        float sum2 = (-1 * b - sqrt(delta)) / (2 * a);
        cout << "计算成功" << endl << "x1=" << sum1 << endl << "x2=" << sum2 << endl;
    } else {
        cout << "该方程解值不在实数范围内,无法计算!" << endl;
    }
}

// 打印欢迎信息
void printBanner() {
    cout << "一元二次方程求解器(适用于一般式且解值在实数范围内,一次运行支持计算15个方程)" << endl;
}

或者 源代码下载链接:点此下载

结语

通过这个实例,我们完成了一个简易的一元二次方程求解器的制作。编程是一个不断学习和改进的过程,希望这篇文章能够帮助你在编程的道路上更进一步。


返回列表

上一篇:一个好用的网盘测试——永硕e盘

没有最新的文章了...

相关文章

一个好用的网盘测试——永硕e盘

一个好用的网盘测试——永硕e盘

本文纯分享,我没有收永硕e盘一分钱相信大家都用过很多网盘...(特别是百度网盘)现在十分流行的还是百度网盘 阿里云盘 123云盘以及各大运营商推出的网盘,这些网盘都有个很鲜明的特征——限速或要求你下载...

Hello World!

    欢迎来到我的博客!    我将会在这里尝试找回以前的文章并且分享编程学习经验,敬请期待!~    网站已进行ICP备案并且...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。