c语言实现四则混合运算
时间: 2023-07-13 22:16:03 浏览: 75
可以通过以下步骤实现c语言的四则混合运算:
1. 读取用户输入的表达式
2. 对表达式进行词法分析,将其拆分成数字和运算符等符号
3. 进行语法分析,生成运算树
4. 通过遍历运算树,计算表达式的值
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/* 定义运算符优先级 */
#define ADD 1
#define SUB 1
#define MUL 2
#define DIV 2
/* 定义运算符栈和数字栈 */
char op_stack[100];
int num_stack[100];
int op_top = -1;
int num_top = -1;
/* 定义计算函数 */
int calculate(int a, int b, char op) {
switch(op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
printf("Invalid operator!\n");
exit(1);
}
}
/* 定义入栈函数 */
void push_num(int num) {
num_stack[++num_top] = num;
}
void push_op(char op) {
op_stack[++op_top] = op;
}
/* 定义出栈函数 */
int pop_num() {
return num_stack[num_top--];
}
char pop_op() {
return op_stack[op_top--];
}
/* 定义获取运算符优先级函数 */
int get_priority(char op) {
switch(op) {
case '+':
return ADD;
case '-':
return SUB;
case '*':
return MUL;
case '/':
return DIV;
default:
printf("Invalid operator!\n");
exit(1);
}
}
/* 定义计算表达式函数 */
int eval(char* expr) {
int i, j, num = 0, temp = 0;
char op;
/* 遍历表达式 */
for(i = 0; expr[i] != '\0'; i++) {
if(isdigit(expr[i])) {
/* 如果是数字,累加到num中 */
num = num * 10 + (expr[i] - '0');
} else {
/* 如果是运算符,将num入数字栈 */
push_num(num);
num = 0;
/* 判断运算符优先级 */
while(op_top >= 0 && get_priority(op_stack[op_top]) >= get_priority(expr[i])) {
int b = pop_num();
int a = pop_num();
char op = pop_op();
temp = calculate(a, b, op);
push_num(temp);
}
/* 将运算符入栈 */
push_op(expr[i]);
}
}
/* 将最后一个数字入数字栈 */
push_num(num);
/* 计算表达式的值 */
while(op_top >= 0) {
int b = pop_num();
int a = pop_num();
char op = pop_op();
temp = calculate(a, b, op);
push_num(temp);
}
return num_stack[0];
}
int main() {
char expr[100];
printf("Enter an expression: ");
scanf("%s", expr);
printf("Result: %d\n", eval(expr));
return 0;
}
```
运行该程序,可以输入一个四则混合运算表达式,程序将计算表达式的值并输出。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)