用C语言实现一个计算器




这个计算器满足一元运算符(-)和二元运算符+,- ,*,/以及括号,支持浮点数,即输入以下字符串,能够算出正确结果:
1. 1+2+3*2*4
2. 2+3 * 4 + 4/2
3. -(3+ 4) / 2.5
4. -(3 * 4) + 2
5. 3.3 - 3


核心代码:


<span style="font-family:Courier New;">number_t exp()
{
	number_t num = term();
	number_t temp;
	while (token == '+' || token == '-') {
		switch (token)
		{
		case '+':
			match('+');
			temp = term();
			num = calc('+', num, temp);
			break;
		case '-':
			match('-');
			temp = term();
			num = calc('-', num, temp);
			break;
		default:
			break;
		}
	}
	return num;
}

number_t term()
{
	number_t num = factor();
	number_t temp;
	while (token == '*' || token == '/') {
		switch (token)
		{
		case '*':
			match('*');
			temp = term();
			num = calc('*', num, temp);
			break;
		case '/':
			match('/');
			temp = term();
			bool iszero = temp.isfloat ? temp.v.fval == 0 : temp.v.ival == 0;
			if (iszero) {
				error("divisor can't be 0");
			}
			num = calc('/', num, temp);
			break;
		default:
			break;
		}
	}
	return num;
}

number_t factor()
{
	number_t num;
	bool negtive = false;
	if (token == '-') {
		match('-');
		negtive = true;
	}
	num = value();
	if (negtive) {
		if (num.isfloat) {
			num.v.fval = 0 - num.v.fval;
		}
		else {
			num.v.ival = 0 - num.v.ival;
		}
	}
	return num;
}</span>

完整代码请看我的github:

https://github.com/booirror/toys











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值