#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语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:647 |
字符串问题 (C语言代码)浏览:1509 |
求圆的面积 (C语言代码)浏览:1270 |
母牛的故事 (C语言代码)浏览:930 |
简单的for循环浏览:1409 |
C语言程序设计教程(第三版)课后习题6.5 (C++代码)浏览:449 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:916 |
【计算直线的交点数】 (C语言代码)浏览:1449 |
Hello, world! (C++代码)浏览:1744 |
时间转换 (C语言代码)浏览:627 |