#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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复