C++系列实例篇1——简易一元二次方程求解器
引言
一元二次方程简介
如果 ,方程有两个不相等的实数解。
如果 ,方程有两个相等的实数解。
如果 ,方程没有实数解。
代码实现
#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; }
或者 源代码下载链接:点此下载
代码优化
初始化变量:在使用变量之前,确保它们已经被初始化。
代码风格:保持代码的可读性,比如使用空格、适当的缩进和换行。
循环控制:使用更清晰的循环控制逻辑。
异常处理:添加对输入异常的处理,比如用户输入非数字时的情况。
代码重用:将重复的代码块提取成函数,以提高代码的可维护性。
用户界面:提供更友好的用户界面,比如在退出前确认。
#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; }