帮我用C语言写一个程序实现表达式求值,如输入1+2*3-16/2,输出为-1
时间: 2024-10-17 15:03:42 浏览: 36
C语言程序设计-编程实现求数列1/2,3/4,5/8,9/32 的所有大于等于0.000001的数据项之和
5星 · 资源好评率100%
在C语言中,你可以使用递归函数和栈数据结构来实现简单的表达式求值。下面是一个简单的示例程序,它将解析和计算给定的算术表达式:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_TOKENS 100
#define TOKEN_PLUS 1
#define TOKEN_MINUS -1
#define TOKEN_MUL *1
#define TOKEN_DIV /1
typedef struct {
char type;
union {
int num;
char op;
} value;
} Token;
Token* tokenize(char* input);
double evaluate(Token* tokens);
int main() {
char expression[] = "1 + 2 * 3 - 16 / 2";
Token* tokens = tokenize(expression);
double result = evaluate(tokens);
printf("Result: %f\n", result);
free(tokens);
return 0;
}
Token* tokenize(char* input) {
Token* tokens = (Token*)malloc(sizeof(Token) * MAX_TOKENS);
int i = 0;
while (input[i]) {
if (isdigit(input[i])) {
tokens[i].type = TOKEN_NUM;
tokens[i].value.num = input[i] - '0';
++i;
while (isdigit(input[i])) {
tokens[i].value.num = tokens[i].value.num * 10 + (input[i] - '0');
++i;
}
} else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/') {
tokens[i].type = input[i];
tokens[i].value.op = input[i];
++i;
}
tokens[i].type = '\0'; // Null terminator
++i;
}
return tokens;
}
double evaluate(Token* tokens) {
int i = 0;
double left = tokens[i++].value.num; // Initialize with first token's number or treat it as 0 for an operator
while (tokens[i].type != '\0') {
double right = tokens[i++].value.num;
switch (tokens[i-1].value.op) {
case '+':
left += right;
break;
case '-':
left -= right;
break;
case '*':
left *= right;
break;
case '/':
left /= right;
break;
}
}
return left;
}
```
这个程序首先通过`tokenize`函数将输入的字符串分解成一系列的数字和运算符。然后,`evaluate`函数根据操作符依次处理这些数字,并更新结果。
阅读全文