首页 > 试题广场 >

简单计算器:模拟简单运算器的工作,输入一个算式(没有空格),

[问答题]

简单计算器:模拟简单运算器的工作,输入一个算式(没有空格),遇等号“=”说明输入结束,输出结果。假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例如,输人“1+2*10-10/2=”后,输出10。试编写相应程序。

推荐
#include <stdio.h>
int main(void)
{
char op;
int operand1, operand2, res;
scanf("%d", &operand1);
op = getchar();
while(op != '='){
scanf("%d", &operand2);
switch(op){
case '+': res = operand1 + operand2; break;
case '-': res = operand1 - operand2; break;
case '*': res = operand1 * operand2; break;
case '/': res = operand1 / operand2; break;
default: res = 0;
}
operand1 = res;
op = getchar();
}
printf("%d\n", res);
return 0;
}

发表于 2018-05-06 21:32:26 回复(0)
没有想到算式中的整数和运算符可以分别提取,直接把整个式子逐个提取字符来做了,比较麻烦
#include<stdio.h>
/*整体思路:设式子为 X0 op X1 op ...Xi op ... Xn =
先把式子中的第一个数 X0 找到,则剩下的工作就是不断的找 op 和 Xi 并与之前的结果进行运算,直到=出现
*/
int main(){
    int ret,num;    //ret为结果;设 A op B = C ,则A、C都是ret,B是num,op是sign
    char ch,sign;   //ch存储读取的式子中的一个字符;sign为运算符

    printf("input formula: ");

    ch = getchar();
    ret = 0;        /*变量用之前再赋初值。特别是对于循环使用的变量,用之前再赋初值(清零)可以避免错误*/
    while(ch>='0'&&ch<='9'){    //【循环1num】找到式子的 第一个 数
        ret += int(ch)-48; // 每次处理运算数的一位;‘0’对应的ASCII码是48,-48可以将数字字符的ASCII码变成对应数字
        ret *= 10;      // 运算数可能是多位的,所以每次提取出一个位就要让它扩大10倍,从而提取出多位的整数

        ch = getchar();
    }
    ret /= 10;  //跳出【循环1num】前的一次多乘了一个10
    sign = ch;  //跳出【循环1num】时,ch是式子中的 第一个 运算符

    while(ch!='='){ //【循环string】对式子中“=”前的字符进行处理
        ch = getchar(); //【循环1num】中的ch值已经给了sign,不会造成值丢失
        num = 0;        //参与运算的数,赋初值0;循环使用的变量用之前再赋值
        while(ch>='0'&&ch<='9'){    //【循环num】找到式子参与运算的数
            num += int(ch)-48; // 每次处理运算数的一位
            num *= 10;

            ch = getchar(); //当前【循环num】结束时ch是式子中的一个运算符
        }
        num /= 10;

        if(sign=='+')       //针对四个操作符对当前提取出的 A op B = C 分别计算
            ret += num;
        else if(sign=='-')
            ret -= num;
        else if(sign=='*')
            ret *= num;
        else if(sign=='/')
            ret /= num;

        sign = ch;   //运算符
        /*当跳出【循环num】时,ch存储的是下一次要用的运算符,故把ch的值直接作为运算符赋给sign*/
    }
    printf("result = %d\n",ret);

    return 0;
}

发表于 2022-01-21 16:33:18 回复(0)