C语言,四则运算简易计算器。

问题描述:输入一个不含括号的四则运算表达式,输出计算结果。

方法:四则运算只有两种优先级,在输入两步计算(三个操作数)之后一定能得到一个结果。如1-2*3,无论3后的操作符是什么,2*3都可以先计算。则1-2*3=1-6,继续读取操作符,如1-6+2,继续重复上面操作。

编译环境:vc++6.0

#include <stdio.h>
#include <stdlib.h>

double get_oprand()                          //获取操作数
{
	double value;
	scanf("%lf", &value);
	return value;
}

char get_operator()                          //获取四则运算符
{
	char op;
	do
	{
		scanf("%c", &op);
	} while (op == ' ');
	return op;
}

int prior(char op1, char op2)              //判断运算符优先级
{
	int flag;
	if (op1 == '*' || op1 == '/')
		if (op2 == '+' || op2 == '-')
			flag = 1;
		else flag = 0;
	else if (op2 == '*' || op2 == '/')
		flag = -1;
	else flag = 0;
	return flag;
}

double evaluates(double left, char op, double right)       //四则运算
{
	{
		switch (op)
		{
		case '+':return left + right; break;
		case '-':return left - right; break;
		case '*':return left * right; break;
		case '/':
			if (right != 0)
				return left / right;
			else
			{              //除数为零
				printf("除数不合法,检查是否为零\n");
				exit(1);      //强制结束程序
			}
		default:return 0.0;
		}
	}
}


int main()
{
	double value1, value2, value3, result;
	char op1, op2;                         //四则运算符
	value1 = get_oprand();
	op1 = get_operator();
	value2 = get_oprand();
	op2 = get_operator();
	while (op2 != '\n')                    //没有结束时
	{
		value3 = get_oprand();
		if (prior(op2, op1))
			value2 = evaluates(value2, op2, value3);
		else
		{
			value1 = evaluates(value1, op1, value2);
			op1 = op2;
			value2 = value3;
		}
		op2 = get_operator();
	}
	result = evaluates(value1, op1, value2);      //最后两个数之和

	printf("结果为%lf\n", result);
	return 0;
}

测试案例:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章