表达式求值
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,这在读取数字的方法比较有效,之后就要注意碰到运算符是计算上一个表达式,需要用一个变量临时储存上一个运算符,调用的也是临时变量,结束一个运算中间变量要赋初值。

浙公网安备 33010602011771号