废话不多说直接上代码
#include <iostream>
#include <cmath>
#include<bits/stdc++.h>
#include<ctime>
#define _CRT_SECURE_NO_WARNINGS
#include<windows.h>
using namespace std;
time_t timep;
// 四则运算函数
double performOperation(double num1, double num2, char op) {
double result;
switch(op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0)
result = num1 / num2;
else {
cout << "错误:除数不能为0!" << endl;
return NAN;
}
break;
default:
cout << "错误:无效的运算符!" << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "Error_invalid_calculator " << ctime(&timep) << endl;
return NAN;
}
cout << num1 << " " << op << " " << num2 << " = " << result << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << num1 << " " << op << " " << num2 << " = " << result << " " << ctime(&timep) << endl;
return result;
}
// 三角函数计算函数
void performTrigCalculation(char func, double angle) {
double result;
switch(func) {
case 's':
result = sin(angle);
cout << "sin(" << angle << ") = " << result << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "sin(" << angle << ") = " << result << " " << ctime(&timep) << endl;
break;
case 'c':
result = cos(angle);
cout << "cos(" << angle << ") = " << result << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "cos(" << angle << ") = " << result << " " << ctime(&timep) << endl;
break;
case 't':
result = tan(angle);
cout << "tan(" << angle << ") = " << result << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "tan(" << angle << ") = " << result << " " << ctime(&timep) << endl;
break;
default:
cout << "错误:无效的三角函数!" << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "Error_invalid_triangle_function"<< " " << ctime(&timep) << endl;
}
}
// 一元一次方程计算函数
void solveLinearEquation(double a, double b) {
if (a == 0) {
cout << "错误:方程不是一元一次方程!" << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "Error_non_yiyuanyici "<< ctime(&timep) << endl;
return;
}
double x = -b / a;
cout << a << "x + " << b << " = 0,解为 x = " << x << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << a << "x + " << b << " = 0, x = " << x << " " << ctime(&timep) <<endl;
}
// 一元二次方程计算函数
void solveQuadraticEquation(double a, double b, double c) {
if (a == 0) {
cout << "错误:方程系数a不能为0!" << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << "Error_invalid_fangchengxishu"<< " " << ctime(&timep) << endl;
return;
}
double discriminant = b*b - 4*a*c;
if (discriminant > 0) {
double x1 = (-b + sqrt(discriminant)) / (2*a);
double x2 = (-b - sqrt(discriminant)) / (2*a);
cout << a << "x^2 + " << b << "x + " << c << " = 0,解为 x1 = " << x1 << ",x2 = " << x2 << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << a << "x^2 + " << b << "x + " << c << " = 0, x1 = " << x1 << ",x2 = " << x2 << " " << ctime(&timep) << endl;
}
else if (discriminant == 0) {
double x = -b / (2*a);
cout << a << "x^2 + " << b << "x + " << c << " = 0,解为 x = " << x << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << a << "x^2 + " << b << "x + " << c << " = 0,解为 x = " << x << " " << ctime(&timep) << endl;
}
else {
cout << "错误:方程无实数解!" << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout <<"Error_fangcheng_no_answer" << ctime(&timep) << endl;
}
}
// 二元一次方程计算函数
void solveLinearSystem(double a1, double b1, double c1, double a2, double b2, double c2) {
double determinant = a1*b2 - a2*b1;
if (determinant == 0) {
cout << "错误:方程组无唯一解!" << endl;
time(&timep);
freopen("Calculate_results.log","a",stdout);
cout << "Error_fangcheng_non_only_answer " << ctime(&timep) << endl;
return;
}
double x = (c1*b2 - c2*b1) / determinant;
double y = (a1*c2 - a2*c1) / determinant;
cout << a1 << "x + " << b1 << "y = " << c1 << endl;
cout << a2 << "x + " << b2 << "y = " << c2 << endl;
cout << "解为 x = " << x << ",y = " << y << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << a1 << "x + " << b1 << "y = " << c1 <<"&&"<<a2 << "x + " << b2 << "y = " << c2 <<"&&"<< "x = " << x << ",y = " << y << " " << ctime(&timep) <<endl;
}
// 次方计算函数
double calculatePower(double base, double exponent) {
double result = pow(base, exponent);
cout << base << "^" << exponent << " = " << result << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << base << "^" << exponent << " = " << result <<" " << ctime(&timep) << endl;
return result;
}
// 阶乘计算函数
double calculateFactorial(int number) {
if (number < 0) {
cout << "错误:阶乘数不能为负数!" << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout<<"Error_jiecheng_nagetive"<<" " << ctime(&timep) << endl;
return NAN;
}
double result = 1;
for (int i = 1; i <= number; ++i) {
result *= i;
}
cout << number << "! = " << result << endl;
freopen("Calculate_results.log","a",stdout);
time(&timep);
cout << number << "! = " << result << " " << ctime(&timep) << endl;
return result;
}
int main() {
char choice;
do {
system("color 02");
freopen("CON", "a", stdout);
cout << "_________________________" << endl;
cout << "|请选择要进行的操作: |" << endl;
cout << "|1. 四则运算 |" << endl;
cout << "|2. 三角函数计算 |" << endl;
cout << "|3. 一元一次方程计算 |" << endl;
cout << "|4. 一元二次方程计算 |" << endl;
cout << "|5. 二元一次方程计算 |" << endl;
cout << "|6. 次方计算 |" << endl;
cout << "|7. 阶乘计算 |" << endl;
cout << "|8. 查看历史记录 |" << endl;
cout << "|0. 退出 |" << endl;
cout << "| |" << endl;
cout << "|-----------------------|" << endl;
cout << "|计算器InfDev1.0(2023)|" << endl;
cout << "-------------------------" << endl;
cout << ">>" ;
cin >> choice;
switch(choice) {
case '1': {
double num1, num2;
char op;
cout << "请输入两个数字和运算符(示例:5 + 3):" << endl;
cin >> num1 >> op >> num2;
performOperation(num1, num2, op);
break;
}
case '2': {
char func;
double angle;
cout << "请输入要计算的三角函数(sin, cos, tan)和角度(示例:s 30):" << endl;
cin >> func >> angle;
performTrigCalculation(func, angle);
break;
}
case '3': {
double a, b;
cout << "请输入一元一次方程ax+b=0的系数a和b(示例:2 -5):" << endl;
cin >> a >> b;
solveLinearEquation(a, b);
break;
}
case '4': {
double a, b, c;
cout << "请输入一元二次方程ax^2+bx+c=0的系数a、b和c(示例:1 -3 2):" << endl;
cin >> a >> b >> c;
solveQuadraticEquation(a, b, c);
break;
}
case '5': {
double a1, b1, c1, a2, b2, c2;
cout << "请输入二元一次方程组a1x+b1y=c1&&a2x+b2y=c2的系数a1、b1、c1、a2、b2和c2(示例:2 -3 7 4 1 -6):" << endl;
cin >> a1 >> b1 >> c1 >> a2 >> b2 >> c2;
solveLinearSystem(a1, b1, c1, a2, b2, c2);
break;
}
case '6': {
double base, exponent;
cout << "请输入x^y底数和指数(示例:2 3):" << endl;
cin >> base >> exponent;
calculatePower(base, exponent);
break;
}
case '7': {
int number;
cout << "请输入要计算阶乘x!的数(示例:5):" << endl;
cin >> number;
calculateFactorial(number);
break;
}
case '8': {
int number;
cout << "以下为历史记录:" << endl;
freopen("Calculate_results.log","r+",stdin);
for(int i=0;i<=10000;i++){
string history;
cin>>noskipws>>history;
cout<<history;
}
break;
}
case '0':
cout << "程序已退出。" << endl;
break;
default:
cout << "错误:无效的选择!" << endl;
}
cout << endl;
} while (choice != '0');
return 0;
}
这个代码我认为已经比较清晰了,不需要写注释,因为能从输出直接看出功能。这个计算器支持方程运算,三角函数,能保存历史记录到log日志文件,但是在程序中查看这个功能还未完善。
这里吐槽一下freopen的con功能,总是报错,受不了……