用c语言编写程序,输入一个简单的表达式(只能做加减乘除4种运算,其中除数不能为0),输出计算结果
时间: 2024-10-12 21:09:30 浏览: 32
在C语言中,我们可以使用栈数据结构以及一些基本的数学操作符来解析并计算这种简单的表达式。这里是一个基于递归下降解析器的基本思路:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义运算符优先级
#define PRECEDENCE(op) ((op == '+' || op == '-') ? 1 : (op == '*' || op == '/') ? 2 : -1)
typedef struct {
double num; // 数字部分
char op; // 运算符
} Token;
int is_number(char* token);
Token next_token(char* str);
double apply_operator(double a, double b, char op);
double calculate(char* expression) {
Token current;
double value = next_token(expression)->num; // 移除第一个数字
while (expression[0] != '\0') {
if (is_number(&expression[0])) { // 如果还有数字
value += next_token(expression)->num;
} else { // 遇到运算符
value = apply_operator(value, next_token(expression)->num, next_token(expression)->op);
}
expression++;
}
return value;
}
// 辅助函数:检查字符串是否表示数字
int is_number(char* token) {
int i;
for (i = 0; *token && '0' <= *token && *token <= '9'; ++token)
;
return (*token == '\0');
}
// 从字符串中获取下一个Token,并返回其内容
Token next_token(char* str) {
if (!is_number(str)) {
str++; // 跳过空格
return (Token){str[0], str[0]};
} else {
int start = 0;
while (isdigit(*str))
start++;
return (Token){(double)(str[start] - '0'), str[start]};
}
}
// 应用运算符并返回计算后的值
double apply_operator(double a, double b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b != 0) // 防止除数为零错误
return a / b;
else
return 0; // 返回特殊值处理除以零的情况
default:
printf("Invalid operator\n");
exit(1);
}
}
int main() {
char expression[100];
printf("Enter a simple expression (only +,-,*,/:): ");
fgets(expression, sizeof(expression), stdin);
expression[strlen(expression) - 1] = '\0'; // 去掉换行符
double result = calculate(expression);
printf("Result: %.2lf\n", result);
return 0;
}
```
这个程序会提示用户输入一个表达式,然后计算并输出结果。注意,它不包含错误处理,如输入格式验证或异常处理。你可以根据实际需要添加相应的错误处理代码。
阅读全文