7-20 简单计算器

题目描述

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式

输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出格式

在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例

1+2*10-10/2=

输出样例

10

解题思路

刚开始写了好几遍,都没有通过。主要遇到的困难包括:
1、读取下一个数应该如何保存上次计算结果
2、无法提取题干所有信息

为了更好的理解题意,我把没用的话删除,并且将每一个要求单独列成一条,让自己在编程过程中有清晰的思路。我写的代码如下,欢迎交流。

/*加减乘除
运算数和结果都是整数
四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:
没有空格
至少有一个操作数
遇等号”=”说明输入结束。

输出格式:
在一行中输出算式的运算结果
或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:
1+2*10-10/2=
输出样例:
10
*/


#include <stdio.h>

int main()
{
	int opnum, res;
	char op;
	int flag = 0;  // 用来标记要输出ERROR的地方,使函数有单一出口
	scanf("%d", &res);  // 读取第一个数,并且用来保存计算结果
	scanf("%c", &op);  // 读取第一个操作符
	while (op != '=')  // 如果操作符是'='退出循环
	{
		scanf("%d", &opnum);  // 用于读取下一个操作数
		if (op == '+')
		{
			res = res + opnum;
		}
		else if (op == '-')
		{
			res = res - opnum;
		}
		else if (op == '*')
		{
			res = res * opnum;
		}
		else if (op == '/')
		{
			if (opnum == 0)
			{
				flag = 1;
				break;
			}
			else
			{
				res = res / opnum;
			}
		}
		else  // 非法运算符
		{
			flag = 1;
			break;
		}
		scanf("%c", &op);
	}

	if (flag == 0)
	{
		printf("%d\n", res);
	}
	else
	{
		printf("ERROR\n");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值