四则运算算法栈代码C语言
时间: 2024-10-12 15:16:15 浏览: 40
四则运算算法(如加减乘除)在C语言中通常通过栈数据结构来实现。这是因为栈是一种“后进先出”(LIFO)的数据结构,非常适合处理运算顺序。以下是一个简单的C语言代码示例,它使用栈来解析并计算字符串形式的四则运算表达式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stack>
typedef struct {
int val;
} Token;
int isNumber(char c) {
return (c >= '0' && c <= '9');
}
Token readNumber(char* str) {
Token token;
token.val = 0;
while (isNumber(*str)) {
token.val *= 10;
token.val += *str - '0';
str++;
}
return token;
}
void calculate(char* expr) {
stack<Token> tokens;
char* num = strtok(expr, " ");
while (num != NULL) {
if (isNumber(num[0])) {
tokens.push(readNumber(num));
} else {
Token op1 = tokens.top();
tokens.pop();
Token op2 = tokens.top();
tokens.pop();
switch (*num++) {
case '+':
tokens.push({op1.val + op2.val});
break;
case '-':
tokens.push({op1.val - op2.val});
break;
case '*':
tokens.push({op1.val * op2.val});
break;
case '/':
if (op2.val == 0) {
printf("Error: Division by zero.\n");
return;
}
tokens.push({op1.val / op2.val});
break;
default:
printf("Invalid operator.\n");
return;
}
}
num = strtok(NULL, " ");
}
if (!tokens.empty()) {
printf("Error: Mismatched parentheses or invalid input.\n");
} else {
printf("Result: %d\n", tokens.top().val);
}
}
int main() {
char expr[] = "5 + 3 * 2";
calculate(expr);
return 0;
}
```
这个程序首先将输入的表达式按空格分割成单个数字或操作符,然后逐个处理。遇到数字就将其转换为Token存储到栈里,遇到操作符则弹出前两个操作数,进行相应的运算,并把结果压回栈中。最后,如果栈非空,则意味着表达式有误。
阅读全文