从左到右计算的计算器

int main()
{
    float num1, num2;
    scanf("%f", &num1);
    char sym;
    sym = getchar();
    while (sym == '\n')
    {
        sym = getchar();
    }
    while (sym!='=')
    {
        scanf("%f", &num2);
        if ((num2 == 0) && (sym == '/'))
        {
            printf("error\n");
                exit(0);
        }
        switch (sym)
        {
        case '+':
            num1 += num2;
            break;
        case '-':
            num1 -= num2;
            break;
        case '*':
            num1 *= num2;
            break;
        case'/':
            num1 /= num2;
            break;
        default:
            printf("error\n");
            exit(0);
        }sym = getchar();
        while (sym == '\n')
        {
            sym = getchar();
        }
    }
    printf("%f", num1);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,你需要创建一个 UI 布局来放置你的计算器按钮。在布局中,你可以使用 GridLayout 或者 TableLayout 来放置按钮。接着,你需要编写 Java 代码来实现计算器的逻辑。 以下是一个简单的实现,它使用了 GridLayout 布局和一个 Stack 来处理运算符的优先级: 1. 创建一个 GridLayout 布局,并在其中添加按钮。可以使用 Button 控件或者 TextView 控件来实现按钮。 2. 创建一个 Stack 来存储数字和运算符。在用户点击数字或者运算符按钮时,将它们推入 Stack 中。 3. 如果用户点击了一个运算符按钮,检查 Stack 中的顶部元素。如果它是一个运算符并且该运算符的优先级高于当前运算符,则从 Stack 中弹出顶部元素,并将该运算符推入 Stack 中。重复此过程直到 Stack 为空或者顶部元素的优先级不高于当前运算符。 4. 如果用户点击了等号按钮,则从 Stack 中弹出所有元素并按照它们在 Stack 中的顺序进行计算。 以下是示例代码: ``` public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView mTextView; private Stack<String> mStack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = findViewById(R.id.text_view); mStack = new Stack<>(); GridLayout gridLayout = findViewById(R.id.grid_layout); for (int i = 0; i < gridLayout.getChildCount(); i++) { View view = gridLayout.getChildAt(i); if (view instanceof Button) { view.setOnClickListener(this); } } } @Override public void onClick(View view) { if (view instanceof Button) { Button button = (Button) view; String text = button.getText().toString(); switch (text) { case "+": case "-": case "*": case "/": while (!mStack.empty() && isHigherPriority(mStack.peek(), text)) { String operator = mStack.pop(); String right = mStack.pop(); String left = mStack.pop(); String result = calculate(left, operator, right); mStack.push(result); } mStack.push(text); break; case "=": while (mStack.size() > 1) { String right = mStack.pop(); String operator = mStack.pop(); String left = mStack.pop(); String result = calculate(left, operator, right); mStack.push(result); } mTextView.setText(mStack.pop()); break; default: mStack.push(text); break; } } } private boolean isHigherPriority(String operator1, String operator2) { return (operator1.equals("*") || operator1.equals("/")) && (operator2.equals("+") || operator2.equals("-")); } private String calculate(String left, String operator, String right) { double leftValue = Double.parseDouble(left); double rightValue = Double.parseDouble(right); switch (operator) { case "+": return String.valueOf(leftValue + rightValue); case "-": return String.valueOf(leftValue - rightValue); case "*": return String.valueOf(leftValue * rightValue); case "/": return String.valueOf(leftValue / rightValue); default: return ""; } } } ``` 在这个示例中,布局文件中包含了一个 GridLayout 和若干个 Button 控件。通过 findViewById 方法获取 GridLayout 和 TextView 控件,并将按钮的点击事件监听器设置为当前 Activity。在 onClick 方法中,根据用户点击的按钮类型进行相应的处理。如果用户点击了数字按钮,则将数字推入 Stack 中;如果用户点击了运算符按钮,则根据运算符的优先级进行处理;如果用户点击了等号按钮,则从 Stack 中弹出所有元素并进行计算,最后将结果显示在 TextView 中。 当用户点击运算符按钮时,如果当前运算符的优先级高于 Stack 中顶部元素的优先级,则将运算符推入 Stack 中;否则,从 Stack 中弹出顶部元素并进行计算,并将计算结果推入 Stack 中。这个过程重复执行直到 Stack 为空或者顶部元素的优先级不高于当前运算符。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值