baidu_22539649 2015-06-21 08:40 采纳率: 0%
浏览 1842

求各位大神来看一道简单的C++题,

这里是题目,后面附上我码的程序
设计一个简单计算器。用户输入四则运算表达式,程序输出正确结果。当表达式中数据格式或运算符输入错误,程序给出错误信息。要求:

(1)表达式的左、右操作数可以为整数或实数。

(2)运算符限制为+,-,*,/

(3)输入表达式允许有前导空格,允许在运算符前后嵌入空格。

检测表达式由以下函数完成:

void check(char *input, int &a, double &y, int &op, char * &err);

其中参数意义如下:
input 输入表达式的字符串。

x 返回表达式的左操作数转换结果数值。此题为简单起见,把数据统一转换成double类型。

y 返回表达式的右操作数转换结果数值。

op 返回对运算式的判断结果。若输入表达式左、右操作数和运算符都正确,则返回值为1、2、3、4,分别表示做+、-、*、/运算。若返回-1,表示左操作数错;若返回-2,表示右操作数错;若返回-3,表示操作符错。

err 返回显示错误信息的字符串。

例如,

 用户输入:

 1.2*3

 程序输出为:

 =3.6

 用户输入:

 56#45

 程序输出为:

     运算符错误,请重新输入!
  • 写回答

3条回答 默认 最新

  • baidu_22539649 2015-06-21 08:41
    关注

    #include
    #include
    #include
    #include
    using namespace std;
    bool IsNumber(char str)//判断输入的x,y是不是符合要求的数
    {
    int nLen = strlen(str);
    int k = 0;
    int nCount = 0;//记录小数点个数
    for (int i = 0; i {
    if ((str[i] > 47 && str[i] < 58) || str[i] == '.')
    {
    if (str[i] > 47 && str[i] < 58)
    {
    k = k + 1;
    }
    if (str[i] == '.'&&nCount == 0)
    {
    k = k + 1;
    nCount++;
    }
    }
    }
    if (k == nLen)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    void check(char input, double&x, double&y, int&op, char
    &err)//输出等式
    {
    if (input == '+')
    op = 1;
    if (input == '-')
    op = 2;
    if (input == '*')
    op = 3;
    if (input == '/')
    op = 4;
    if (input != '+'&input != '-'&input != '*'&input != '/')
    op = -3;
    switch (op)
    {
    case 1:
    cout << x + y << endl;
    break;
    case 2:
    cout << x - y << endl;
    break;
    case 3:
    cout << x*y << endl;
    break;
    case 4:
    cout << x / y << endl;
    break;
    case -3:
    cout << err << endl;
    }
    }
    int main()
    {
    double x, y;
    int c, d,op;
    char input;
    char*err;
    err = "操作符错误";
    cin >> x;
    cin >> input;
    cin >> y;
    char str1[100], str2[100];
    sprintf(str1, "%d", x);//将x,y转化为字符串,输入检查数组
    sprintf(str2, "%d", y);
    c = IsNumber(str1);
    cout << c << endl;
    d = IsNumber(str2);
    cout << d << endl;
    if (c != 1 && d == 1)
    {
    cout << "左操作数错误" << endl;
    }
    if (c == 1 && d != 1)
    {
    cout << "右操作数错误" << endl;
    }
    if (c == 0 && d == 0)
    {
    cout << "左右操作数都错误" << endl;
    }
    if (c == 1 && d == 1)
    {
    check(input, x, y, op, err);
    }
    system("pause");
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊