2. 用程序实现求解表达式的值,例如输入1+2*3-16/2,则输出为-1。
时间: 2024-10-18 13:10:09 浏览: 28
(x/1!)+(x*x*x/3!)+(5个x相乘/5!)+……+(2*n-1)个x相乘/(2*n-1)!)
实现一个求解简单表达式值的程序通常会涉及到字符串解析和基本数学运算。这里我们使用递归下降解析法(也称为自顶向下语法分析)来简化过程。下面是一个基于C语言的基础版本:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // 用于判断数字字符
double calculate(double num, const char op) {
switch(op) {
case '+':
return num + calculate(0, '+');
case '- calculate(0, '-');
case '*':
return num * calculate(0, '*');
case '/':
if(num == 0) return 0; // 防止除数为零
return num / calculate(0, '/');
default:
return num;
}
}
double parse_expression(const char *expression) {
double num = 0;
bool negative = false;
if(*expression == '-') {
negative = true;
++expression;
}
while(isdigit(*expression)) {
num = num * 10 + (*expression++ - '0');
}
if(negative) num = -num;
if(*expression == '(') {
++expression;
double result = parse_expression(expression);
expression++;
return calculate(num, ')') * result;
} else {
return calculate(num, '+');
}
}
int main() {
char expression[] = "1+2*3-16/2";
double result = parse_expression(expression);
printf("%.0f\n", result); // 输出结果
return 0;
}
阅读全文