题目33:试编写一个根据用户输入的两个操作数和一个运算符( 只包含+、-、*、/ )由计算机输出运算结果的程序。

题目转载:http://python.wzms.com/s/1/27

题目描述:

试编写一个根据用户输入的两个操作数和一个运算符( 只包含+、-、*、/ ),由计算机输出运算结果的程序。当操作数是除号("/")时,运算结果是整除的结果,如10/3=3;并且当除数为0时,输出“Error!”。操作数都是整数。

输入格式:

输入的第一行是两个操作数由一个空格隔开,第二行是一个运算符。

输出格式:

输出一个数,表示运算的结果。


代码:

first_number, second_number = (input('请输入两个操作数:').split())
operator = input('请输入操作符(+、-、*、/):')
first_number, second_number = int(first_number), int(second_number)
if operator == '/' and second_number == 0:
    print('Error!')
elif operator == '+':
    operation_result = first_number + second_number
    print(operation_result)
elif operator 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用栈来实现表达式求值。具体步骤如下: 1. 定义一个操作数栈(用于存储数字)和一个操作符栈(用于存储运算符)。 2. 从键盘读入一个表达式字符串,逐个字符进行处理。 3. 如果当前字符是数字,则将其转换为整型数值并压入操作数栈中。 4. 如果当前字符是左括号,直接将其压入操作符栈中。 5. 如果当前字符是右括号,则从操作符栈中弹出运算符进行运算,直至遇到左括号为止。 6. 如果当前字符是运算符,则比较其与操作符栈顶元素的优先级,如果当前运算符优先级较低,则从操作符栈中弹出运算符进行运算,直至当前运算符优先级不低于栈顶元素的优先级。 7. 最后,当表达式扫描完毕后,如果操作符栈中还有运算符,则依次弹出进行运算,最终得到表达式的值。 下面是示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <ctype.h> typedef struct { int top; int data[100]; } Stack; void initStack(Stack *s) { s->top = -1; } int isEmpty(Stack *s) { return s->top == -1; } void push(Stack *s, int x) { s->data[++(s->top)] = x; } int pop(Stack *s) { return s->data[(s->top)--]; } int getTop(Stack *s) { return s->data[s->top]; } int priority(char op) { switch(op) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } int calculate(int a, int b, char op) { switch(op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; default: return 0; } } int evaluate(char *expr) { Stack numStack, opStack; initStack(&numStack); initStack(&opStack); while (*expr != '\0') { if (isdigit(*expr) || (*expr == '-' && isdigit(*(expr+1)))) { int num = 0, sign = 1; if (*expr == '-') { sign = -1; ++expr; } while (isdigit(*expr)) { num = num * 10 + (*expr - '0'); ++expr; } push(&numStack, sign * num); } else if (*expr == '(') { push(&opStack, '('); ++expr; } else if (*expr == ')') { while (getTop(&opStack) != '(') { char op = (char)pop(&opStack); int b = pop(&numStack); int a = pop(&numStack); push(&numStack, calculate(a, b, op)); } pop(&opStack); ++expr; } else if (*expr == '+' || *expr == '-' || *expr == '*' || *expr == '/') { while (!isEmpty(&opStack) && priority(getTop(&opStack)) >= priority(*expr)) { char op = (char)pop(&opStack); int b = pop(&numStack); int a = pop(&numStack); push(&numStack, calculate(a, b, op)); } push(&opStack, *expr); ++expr; } else { ++expr; } } while (!isEmpty(&opStack)) { char op = (char)pop(&opStack); int b = pop(&numStack); int a = pop(&numStack); push(&numStack, calculate(a, b, op)); } return pop(&numStack); } int main() { char expr[100]; printf("请输入算术表达式:\n"); scanf("%s", expr); int result = evaluate(expr); printf("表达式求值结果为:%d\n", result); return 0; } ``` 注意:此处假设输入的表达式是合法的,未作错误处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值