请为我生成一个代码,要求是1.用C语言实现2.输入一串字符串表达式求值3.使用栈来存储表达式4.字符表达式同时包括三角函数运算,加减乘除,括号
时间: 2024-10-05 18:04:13 浏览: 41
为了实现这个功能,我们可以创建一个简单的C程序,它使用递归下降解析器来处理嵌套的数学表达式,并利用栈来存储操作数和操作符。下面是一个基础的示例,仅包含基本的算术运算、加法、减法、乘法和除法,以及圆周率π的表示,但不包含三角函数。注意,完整的支持三角函数需要引入额外库,并且这里只是一个简化版本。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#define MAX_STACK_SIZE 100
char stack[MAX_STACK_SIZE];
int top = -1;
double evaluate_expression(char* expression);
bool is_number(char c) {
return '0' <= c && c <= '9';
}
double pop() {
if (top == -1) {
printf("Error: Stack underflow\n");
exit(1);
}
double num = stack[top--];
return num;
}
void push(double num) {
if (top >= MAX_STACK_SIZE - 1) {
printf("Error: Stack overflow\n");
exit(1);
}
stack[++top] = num;
}
double apply_operator(double a, char op, double b) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b != 0)
return a / b;
else {
printf("Error: Division by zero\n");
exit(1);
}
default:
printf("Unknown operator: %c\n", op);
exit(1);
}
}
double evaluate_expression_helper(char* token) {
double num = 0;
bool negative = false;
while (is_number(*token)) {
num = num * 10 + (*token - '0');
token++;
}
if (*token == '-') {
negative = true;
token++;
}
num *= negative ? -1 : 1;
push(num);
// Handle operators
while (true) {
if (!is_number(*token) && *token != '(' && *token != ')' && *token != '+' && *token != '-' && *token != '*' && *token != '/') {
break;
}
double b = pop();
char op = *token;
token++;
if (is_number(*token)) {
num = 0;
while (is_number(*token))
num = num * 10 + (*token - '0');
token++;
num *= negative ? -1 : 1;
push(num);
}
push(apply_operator(b, op, num));
}
// Pop the last result
return pop();
}
double evaluate_expression(char* expression) {
int i = 0;
while (expression[i] != '\0') {
if (expression[i] == ' ')
i++; // Skip spaces
else
break;
}
double result = evaluate_expression_helper(expression + i);
return result; // Add π for trigonometric functions (not implemented here)
}
int main() {
char input[] = "sin(2 * pi)";
printf("Result: %.2f\n", evaluate_expression(input));
return 0;
}
```
阅读全文