表达式求值

Enter an expression:2.5*3+1
Value of expressino:8.5
表达式中的操作都是浮点数,运算是加减乘除,表达式从左向右求值(所有运算符的优先级都一样)。

include <stdio.h>

int main()
{
char c;
char last; //储存上一个符号
double result; //计算过程的结果
double mid=0; //中间变量
int true_num; //转换字符为数字
int multiple=1; //计算有小数点应缩小的倍数

scanf("%lf",&result);
int dot=0;
while(c=getchar())
{
	if('0'<=c&&c<='9')
	{
		true_num=c-'0';
		mid=mid*10+true_num;
		if(dot)
		{
			multiple*=10;
		}	
		continue;	//用continue控制字符是代表数字的不会进行后面的运算
	}
	if(c=='.')
	{
		dot=1;
		continue;
	}	
		
	mid/=multiple;				
	if(last=='+') result+=mid;
 	if(last=='-') result-=mid;
	if(last=='*') result*=mid;
	if(last=='/') result/=mid;
	
	dot=mid=0;
	multiple=1;
	last=c;//运算到这一步的只有运算符
	if(c=='\n') 
	{
		break;	
	}
}	
printf("%g",result);

}
数字读取的方法可以学习,因为读入的有字符,只能用char,转换是c-'0',为了读入完整的数字,扩大10倍在加数,遇到小数点后每碰到一个数就要除以10,这在读取数字的方法比较有效,之后就要注意碰到运算符是计算上一个表达式,需要用一个变量临时储存上一个运算符,调用的也是临时变量,结束一个运算中间变量要赋初值。

posted @ 2020-11-21 23:55  empty_thought  阅读(135)  评论(0)    收藏  举报