【小超嵌入式】C++实现简单计算器详细分析

一、程序源码

#include <iostream>
using namespace std;
int main()
{
    char op;
    float num1, num2;
    cout << "输入运算符:+、-、*、/ : ";
    cin >> op;
    cout << "输入两个数: ";
    cin >> num1 >> num2;
    switch(op)
    {
        case '+':
            cout << num1+num2;
            break;
        case '-':
            cout << num1-num2;
            break;
        case '*':
            cout << num1*num2;
            break;
        case '/':
            if (num2 == 0)
            {
                cout << "error不能除以零";
                break;
            }
            else
            {
                cout << num1 / num2;
                break;
            }
        default:
            // 如果运算符不是 +, -, * 或 /, 提示错误信息
            cout << "Error!  请输入正确运算符。";
            break;
    }
    return 0;
}

二、代码分析

下面我们逐行分析代码:

#include <iostream>

这行代码包含了iostream头文件,它提供了输入输出流的功能,如cincout

using namespace std;

这行代码表示我们将在整个程序中使用std命名空间中的标识符,而无需每次都前缀std::

int main()
{

这是主函数的开始,每个C++程序都必须有一个main函数,它是程序的入口点。

    char op;
    float num1, num2;

这里声明了三个变量:

  • char op:一个字符型变量,用于存储用户输入的运算符。
  • float num1, num2:两个浮点型变量,用于存储用户输入的数值。
    cout << "输入运算符:+、-、*、/ : ";
    cin >> op;

这两行代码首先使用cout输出一个提示信息,告诉用户需要输入一个运算符。然后使用cin从标准输入读取一个字符并将其存储到op变量中。

    cout << "输入两个数: ";
    cin >> num1 >> num2;

同样的,先用cout输出一个提示信息让用户输入两个数字,再用cin读取这两个数字并将它们存储到num1num2变量中。

    switch(op)
    {
        case '+':
            cout << num1+num2;
            break;

        case '-':
            cout << num1-num2;
            break;

        case '*':
            cout << num1*num2;
            break;

        case '/':
            if (num2 == 0)
            {
                cout << "error不能除以零";
                break;
            }
            else
            {
                cout << num1 / num2;
                break;
            }

        default:
            // 如果运算符不是 +, -, * 或 /, 提示错误信息
            cout << "Error! 请输入正确运算符。";
            break;
    }

这部分代码使用switch语句根据op的值执行不同的操作:

  • 对于加法、减法和乘法,直接进行相应的运算并输出结果。
  • 对于除法,先检查num2是否为零,如果是零,则输出错误信息“error不能除以零”,否则执行除法运算并输出结果。
  • 如果op的值不是上述四种运算符之一,输出错误信息“Error! 请输入正确运算符。”。
    return 0;
}

这是主函数的结束部分,return 0;意味着程序正常终止,返回给操作系统一个值为0的状态码,通常表示成功。

三、基本步骤

定义功能:
明确计算器需要支持哪些基本功能,比如加法、减法、乘法和除法。
用户输入:
设计程序来接收用户的输入,这通常涉及到数值和操作符的选择。
解析输入:
解析用户的输入,确保输入有效并正确地识别数字和操作符。
计算结果:
根据输入的操作符执行相应的数学运算。
输出结果:
显示计算的结果给用户。
循环处理:
如果需要的话,可以让程序持续运行直到用户选择退出。

四、锻炼的能力

基本语法掌握:
学习和使用 C++ 的基本语法,如变量声明、数据类型、运算符等。
控制结构运用:
使用条件语句(如 if, else, switch)来根据用户输入选择不同的计算方法。
运用循环(如 while, for)来重复执行某些操作,例如让计算器持续运行直到用户选择退出。
函数设计:
学习如何定义和使用函数来封装重复或特定的任务,比如单独定义加法、减法等函数。
异常处理:
学习如何处理错误情况,比如除以零的错误、非法的用户输入等。
使用异常处理机制(如 try-catch)来增强程序的健壮性。
用户交互:
学习如何有效地与用户进行交互,比如提示用户输入数据、展示结果等。
算法理解:
虽然简单的计算器算法相对直接,但也可以借此机会学习更复杂的算法,比如处理更复杂的数学运算。
调试技巧:
练习使用调试工具来定位和修复程序中的错误。
模块化设计:
学习如何将程序分解成小的模块或组件,这有助于更好地组织代码并提高可维护性。
面向对象编程:
虽然简单的计算器可能不需要使用面向对象的概念,但可以尝试将其设计为类,以练习面向对象编程。
软件工程实践:
学习如何规划和设计程序结构,包括文档编写、版本控制等。

五、扩展应用

增加科学计算功能:
实现指数、平方根、三角函数等功能。
图形用户界面:
使用 C++ GUI 库(如 Qt 或 wxWidgets)来创建一个图形化的计算器界面。
历史记录功能:
记录用户的计算历史,并允许用户查看之前的计算结果。
多线程支持:
对于更复杂的计算任务,可以利用多线程来提高性能。
网络支持:
创建一个可以在网络上运行的计算器,允许多个用户同时使用。

要在嵌入式Qt中实现一个简单的计算器,你需要以下步骤: 1. 在Qt Creator中创建一个新的嵌入式Qt项目。 2. 在项目中创建一个新的Qt Widget应用程序窗口。 3. 在窗口中添加显示器和按钮控件。 4. 为每个按钮设置一个点击事件,以便在单击时执行特定的操作。 5. 创建一个简单的计算器逻辑,使其能够执行加、减、乘、除等基本数学运算。 6. 将计算器逻辑与按钮点击事件连接起来,以便在用户单击按钮时计算结果并将其显示在显示器上。 以下是一个简单的嵌入式Qt计算器示例,它可以执行加、减、乘、除四种基本运算: ```c++ #include <QApplication> #include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget window; window.setWindowTitle("Calculator"); QLabel *display = new QLabel("0"); display->setAlignment(Qt::AlignRight); display->setMinimumSize(display->sizeHint()); QPushButton *button0 = new QPushButton("0"); QPushButton *button1 = new QPushButton("1"); QPushButton *button2 = new QPushButton("2"); QPushButton *button3 = new QPushButton("3"); QPushButton *button4 = new QPushButton("4"); QPushButton *button5 = new QPushButton("5"); QPushButton *button6 = new QPushButton("6"); QPushButton *button7 = new QPushButton("7"); QPushButton *button8 = new QPushButton("8"); QPushButton *button9 = new QPushButton("9"); QPushButton *buttonPlus = new QPushButton("+"); QPushButton *buttonMinus = new QPushButton("-"); QPushButton *buttonMultiply = new QPushButton("*"); QPushButton *buttonDivide = new QPushButton("/"); QPushButton *buttonEquals = new QPushButton("="); QGridLayout *layout = new QGridLayout; layout->addWidget(display, 0, 0, 1, 4); layout->addWidget(button7, 1, 0); layout->addWidget(button8, 1, 1); layout->addWidget(button9, 1, 2); layout->addWidget(buttonPlus, 1, 3); layout->addWidget(button4, 2, 0); layout->addWidget(button5, 2, 1); layout->addWidget(button6, 2, 2); layout->addWidget(buttonMinus, 2, 3); layout->addWidget(button1, 3, 0); layout->addWidget(button2, 3, 1); layout->addWidget(button3, 3, 2); layout->addWidget(buttonMultiply, 3, 3); layout->addWidget(button0, 4, 0, 1, 3); layout->addWidget(buttonDivide, 4, 3); layout->addWidget(buttonEquals, 5, 0, 1, 4); window.setLayout(layout); int num1 = 0; int num2 = 0; int result = 0; QString operation = ""; QObject::connect(button0, SIGNAL(clicked()), [&](){ display->setText(display->text() + "0"); }); QObject::connect(button1, SIGNAL(clicked()), [&](){ display->setText(display->text() + "1"); }); QObject::connect(button2, SIGNAL(clicked()), [&](){ display->setText(display->text() + "2"); }); QObject::connect(button3, SIGNAL(clicked()), [&](){ display->setText(display->text() + "3"); }); QObject::connect(button4, SIGNAL(clicked()), [&](){ display->setText(display->text() + "4"); }); QObject::connect(button5, SIGNAL(clicked()), [&](){ display->setText(display->text() + "5"); }); QObject::connect(button6, SIGNAL(clicked()), [&](){ display->setText(display->text() + "6"); }); QObject::connect(button7, SIGNAL(clicked()), [&](){ display->setText(display->text() + "7"); }); QObject::connect(button8, SIGNAL(clicked()), [&](){ display->setText(display->text() + "8"); }); QObject::connect(button9, SIGNAL(clicked()), [&](){ display->setText(display->text() + "9"); }); QObject::connect(buttonPlus, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "+"; display->setText(""); }); QObject::connect(buttonMinus, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "-"; display->setText(""); }); QObject::connect(buttonMultiply, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "*"; display->setText(""); }); QObject::connect(buttonDivide, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "/"; display->setText(""); }); QObject::connect(buttonEquals, SIGNAL(clicked()), [&](){ num2 = display->text().toInt(); if (operation == "+") result = num1 + num2; else if (operation == "-") result = num1 - num2; else if (operation == "*") result = num1 * num2; else if (operation == "/") result = num1 / num2; display->setText(QString::number(result)); }); window.show(); return a.exec(); } ``` 这个示例程序将创建一个嵌入式Qt窗口,其中包含一个带有数字按钮和四个操作按钮的简单计算器。当用户单击操作按钮时,将执行相应的计算操作,并在显示器上显示结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小超电子笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值