输入一个数学计算表达式,如:1+2 * 然后输出计算后的结果:1+2=3 * 这里计算表达式只计算一次即可,可以使用加减乘除任意一个,可以进行小数运算。

本文介绍了一种使用正则表达式解析并计算简单数学表达式的方法,包括加、减、乘、除四种基本运算,支持整数及小数运算。通过读取用户输入的表达式,程序能够正确识别运算符并执行相应的计算。

正则表达式的应用:
输入一个数学计算表达式,如:1+2
然后输出计算后的结果:1+2=3
这里计算表达式只计算一次即可,可以使用加减乘除任意一个,可以进行小数运算。

public class Test07 {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.println("请输入一个数学计算表达式,如:1+2");
        String str = console.nextLine();
        if (str.contains("+")) {
            String[] num = str.split("\\+");
            double num1 = Double.parseDouble(num[0]);
            double num2 = Double.parseDouble(num[1]);
            System.out.println("运算结果是:" + num1 + "+" + num2 + "=" + (num1 + num2));
        } else if (str.contains("-")) {
            String[] num = str.split("\\-");
            double num1 = Double.parseDouble(num[0]);
            double num2 = Double.parseDouble(num[1]);
            System.out.println("运算结果是:" + num1 + "-" + num2 + "=" + (num1 - num2));
        } else if (str.contains("*")) {
            String[] num = str.split("\\*");
            double num1 = Double.parseDouble(num[0]);
            double num2 = Double.parseDouble(num[1]);
            System.out.println("运算结果是:" + num1 + "*" + num2 + "=" + (num1 * num2));
        } else {
            String[] num = str.split("\\/");
            double num1 = Double.parseDouble(num[0]);
            double num2 = Double.parseDouble(num[1]);
            System.out.println("运算结果是:" + num1 + "/" + num2 + "=" + (num1 / num2));
        }
    }
}
```markdown ### 题目重述 输入一个由三个整数和两个运算符组成的算术表达式(如 `6+3*11`),中间无空格。要求按照**数学运算优先级**(先乘除后加减)计算结果,并在原表达式输出 `=结果`。 --- ### 详解 #### 关键点分析: - 输入格式:`数字+运算+数字+运算+数字`,例如:`6+3*11` - 运算符包括:`+`, `-`, `*`, `/`,需支持混合运算; - 必须遵守**运算符优先级**:`*` 和 `/` 优先于 `+` 和 `-`; - 输入中没有空格,需解析字符串提取操作数与操作符; - 输出表达式并追加 `=结果` #### 示例解析(输入:6+3*11) - 表达式:$ 6 + 3 \times 11 = 6 + 33 = 39 $ - 输出:`6+3*11=39` ✅ #### 解题思路: 使用 `scanf` 的格式化输入直接解析: ```c scanf("%d%c%d%c%d", &a, &op1, &b, &op2, &c); ``` 然后根据两个运算符的优先级决定计算顺序: 1. **情况1:op1 是低优先级(+/-),op2 是高优先级(*/)** - 先算 `b op2 c`,再用 `a op1 result` 2. **情况2:op1 是高优先级,或两者同级** - 先算 `a op1 b`,再用结果与 `c` 计算 #### 优先级判断函数: - 定义:`*` 和 `/` 为高优先级(设为1),`+` 和 `-` 为低优先级(设为0) #### 特别注意: - 整数除法为截断整除(C语言默认); - 输出必须完整还原原表达式 + `=` + 结果。 --- ### 正确代码实现 ```c #include<stdio.h> // 返回运算符优先级:1表示乘除,0表示加减 int priority(char op) { return (op == &#39;*&#39; || op == &#39;/&#39;); } // 执行单个运算 int calc(int a, int b, char op) { switch(op) { case &#39;+&#39;: return a + b; case &#39;-&#39;: return a - b; case &#39;*&#39;: return a * b; case &#39;/&#39;: return a / b; // 整数除法 } return 0; } int main() { int a, b, c; char op1, op2; // 按格式读取:整数-字符-整数-字符-整数 scanf("%d%c%d%c%d", &a, &op1, &b, &op2, &c); int result; if (priority(op1) >= priority(op2)) { // 先算 a op1 b result = calc(a, b, op1); result = calc(result, c, op2); } else { // 先算 b op2 c int temp = calc(b, c, op2); result = calc(a, temp, op1); } // 原样输出表达式并附加结果 printf("%d%c%d%c%d=%d", a, op1, b, op2, c, result); return 0; } ``` --- ### 知识点 - **运算符优先级处理**:通过比较优先级决定计算顺序。 - **格式化解析输入**:`%d%c%d%c%d` 可精确提取无空格表达式元素。 - **分步表达式求值**:根据优先级选择先算前段还是后段。 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值