洛谷p1449c语言
时间: 2023-12-21 13:31:07 浏览: 103
洛谷p1449是一个C语言题目,要求实现一个后缀表达式的计算器。后缀表达式是一种不使用括号,将运算符号放在运算对象之后的表达式。计算后缀表达式的方法是从左到右遍历表达式,遇到操作数就入栈,遇到运算符就从栈中弹出两个操作数进行运算,然后将结果再次入栈,直到遍历完整个表达式,最后栈中的唯一元素就是计算结果。
以下是一个C语言的示例代码,用于实现后缀表达式的计算器:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, int value) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full.\n");
exit(1);
}
s->data[++(s->top)] = value;
}
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[(s->top)--];
}
int calculate(int operand1, int operand2, char operator) {
switch (operator) {
case '+':
return operand1 + operand2;
case '-':
return operand1 - operand2;
case '*':
return operand1 * operand2;
case '/':
return operand1 / operand2;
default:
printf("Invalid operator.\n"); exit(1);
}
}
int evaluatePostfixExpression(char *expression) {
Stack stack;
initStack(&stack);
int i = 0;
while (expression[i] != '@') {
if (isdigit(expression[i])) {
push(&stack, expression[i] - '0');
} else if (expression[i] == '.') {
int operand2 = pop(&stack);
int operand1 = pop(&stack);
int result = calculate(operand1, operand2, expression[++i]);
push(&stack, result); }
i++;
}
return pop(&stack);
}
int main() {
char expression[] = "3.5.2.-*7.+@";
int result = evaluatePostfixExpression(expression);
printf("Result: %d\n", result);
return 0;
}
```
这段代码实现了一个后缀表达式的计算器,可以计算给定后缀表达式的结果。在示例代码中,后缀表达式"3.5.2.-*7.+"被转换为中缀表达式"3*(5-2)+7",最终计算结果为16。
阅读全文
相关推荐

















