用c++编写简易计算器

废话不多说直接上代码

#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功能,总是报错,受不了……

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值