C语言用程序实现波兰符号法。 实现功能:输入波兰符号法公式,求出公式类型 输入:波兰符号法的数学计算公式或命题公式(如果是命题公式,输出公式类型) 输出:输出公式类型。
时间: 2024-02-23 21:00:57 浏览: 57
C语言实现逆波兰式实例
好的,以下是用C语言实现波兰符号法的程序,可以输入波兰符号法的数学计算公式或命题公式,并输出公式类型:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_SIZE 100
typedef struct Stack {
int top;
char data[MAX_SIZE];
} Stack;
void init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
int push(Stack *s, char c) {
if (is_full(s)) {
return 0;
}
s->data[++(s->top)] = c;
return 1;
}
char pop(Stack *s) {
if (is_empty(s)) {
return '\0';
}
return s->data[(s->top)--];
}
char peek(Stack *s) {
if (is_empty(s)) {
return '\0';
}
return s->data[s->top];
}
int is_operator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
int is_operand(char c) {
return isdigit(c);
}
int is_proposition(char c) {
return isalpha(c);
}
int is_valid(char *s) {
Stack stack;
init(&stack);
for (int i = 0; s[i] != '\0'; i++) {
if (is_operator(s[i])) {
if (is_empty(&stack)) {
return 0;
}
pop(&stack);
if (is_empty(&stack)) {
return 0;
}
pop(&stack);
push(&stack, '1');
} else if (is_operand(s[i]) || is_proposition(s[i])) {
push(&stack, s[i]);
} else {
return 0;
}
}
return stack.top == 0;
}
int main() {
char s[MAX_SIZE];
printf("请输入波兰符号法公式:\n");
scanf("%s", s);
if (is_valid(s)) {
if (is_proposition(s[0])) {
printf("公式类型为命题逻辑公式\n");
} else {
printf("公式类型为数学计算公式\n");
}
} else {
printf("输入的公式无效\n");
}
return 0;
}
```
程序使用栈来实现波兰符号法的计算,具体实现细节见代码注释。
阅读全文