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");
    }

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?