#include <stdio.h>
#include <ctype.h>
double factor_value();
double term_value();
double expression_value();
int main()
{
char ch;
while ((ch=getchar())!=EOF)
{
ungetc(ch,stdin);
printf("%.3lf\n",expression_value());
getchar();
}
}
//输入:(2+3)*(5+7)+9/3
//输出: 63
double expression_value() //求一个表达式的值 何为表达式:表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。
{
double result=term_value(); //求第一项的值
int more=1;
while (more)
{
char op=getchar(); //读取一个字符
if (op=='+'||op=='-')
{
double value=term_value();
if (op=='+')
result+=value;
else
result-=value;
}
else //如果不是字符就退回
{
ungetc(op,stdin); //把该参数的字符退回到缓冲区
more=0;
}
}
return result;
}
double term_value() //求一个项的值 何为项:数学式子中的某一项式
{
double result=factor_value(); //求第一个因子的值
while (1)
{
char op=getchar();
if (op=='*'||op=='/')
{
double value=factor_value();
if (op=='*')
result*=value;
else
result/=value;
}
else
{
ungetc(op,stdin);
break;
}
}
return result;
}
double factor_value() //求一个因子的值 何为因子:假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。
{
double result=0;
char c=getchar();
if (c=='(')
{
result=expression_value(); //'('里面还有表达式
c=getchar(); // 把')'拿走
}
else
{
while (isdigit(c))
{
result=10*result+c-'0'; //把字符转换为数字
c=getchar();
}
ungetc(c,stdin);
}
return result;
}描述:
计算一个带括号的整数表达式(结果保留三位小数)
样例输入
(75+10/4)*(50*(60+10))
(6*(6+6/(6*2)))
样例输出
271250.000
39.000
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复