C语言用程序实现波兰符号法。 实现功能:输入波兰符号法公式,求出公式类型 输入:波兰符号法的数学计算公式或命题公式 输出:输出公式类型。
时间: 2024-02-23 20:00:36 浏览: 135
好的,这里提供一个 C 语言的示例代码,可以实现波兰符号法的计算并判断公式类型:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_SIZE 100
struct Stack {
int top;
int data[MAX_SIZE];
};
void push(struct Stack *s, int value) {
if (s->top == MAX_SIZE - 1) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = value;
}
int pop(struct Stack *s) {
if (s->top == -1) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
int is_operator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/' || c == '^');
}
int is_operand(char c) {
return isdigit(c);
}
int evaluate(char *formula) {
struct Stack s;
s.top = -1;
int i, len = strlen(formula);
for (i = len - 1; i >= 0; i--) {
if (is_operand(formula[i])) {
push(&s, formula[i] - '0');
}
else if (is_operator(formula[i])) {
int op1 = pop(&s);
int op2 = pop(&s);
switch (formula[i]) {
case '+':
push(&s, op1 + op2);
break;
case '-':
push(&s, op1 - op2);
break;
case '*':
push(&s, op1 * op2);
break;
case '/':
push(&s, op1 / op2);
break;
case '^':
push(&s, (int) pow(op1, op2));
break;
}
}
}
return pop(&s);
}
char *get_formula_type(char *formula) {
if (is_operand(formula[0])) {
return "计算公式";
}
else if (is_operator(formula[0])) {
return "命题公式";
}
else {
return "未知公式类型";
}
}
int main() {
char formula[MAX_SIZE];
printf("请输入波兰符号法公式:");
fgets(formula, MAX_SIZE, stdin);
formula[strlen(formula) - 1] = '\0';
printf("公式类型:%s\n", get_formula_type(formula));
printf("计算结果:%d\n", evaluate(formula));
return 0;
}
```
在这个示例代码中,我们首先定义了一个 Stack 结构体来实现栈的功能。`push` 函数用于将元素推入栈中;`pop` 函数用于从栈中弹出元素。
在 `is_operator` 和 `is_operand` 函数中,我们使用了 `ctype.h` 库中的 `isdigit` 函数来判断字符是否为数字,从而确定当前元素是运算符还是运算数。
在 `evaluate` 函数中,我们首先创建一个空栈,并遍历输入的公式。如果当前元素是运算数,则将其转换为整数并推入栈中;如果当前元素是运算符,则从栈中取出两个运算数进行计算,并将结果推回栈中。最终,栈中唯一的元素就是公式的计算结果。
在 `get_formula_type` 函数中,我们首先判断公式的第一个元素是运算数还是运算符。如果是运算数,则说明这是一个计算公式;如果是运算符,则说明这是一个命题公式。
你可以运行这个示例代码,并输入你的波兰符号法公式来测试它。希望这个示例代码能对你有所帮助!
阅读全文