输入波兰符号法算式,求出公式类型,c代码
时间: 2023-08-22 16:07:12 浏览: 87
对于输入的波兰符号法算式,可以通过判断每个符号的类型来确定公式的类型。可以使用栈来实现波兰符号法的计算。
以下是使用C语言实现判断波兰符号法算式类型的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_LENGTH 100
// 判断是否为数字
int isNumber(char c) {
return isdigit(c);
}
// 判断是否为运算符
int isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
// 判断是否为左括号
int isLeftBracket(char c) {
return c == '(';
}
// 判断是否为右括号
int isRightBracket(char c) {
return c == ')';
}
// 判断公式类型
int getFormulaType(char* formula) {
int i = 0;
int isPolishNotation = 1; // 是否为波兰符号法
int isReversePolishNotation = 1; // 是否为逆波兰符号法
int isNormalNotation = 1; // 是否为普通表达式
int bracketCount = 0; // 括号数量
// 遍历公式字符数组
while (formula[i] != '\0') {
if (isNumber(formula[i])) {
isPolishNotation = 0;
isReversePolishNotation = 0;
} else if (isOperator(formula[i])) {
isNormalNotation = 0;
} else if (isLeftBracket(formula[i])) {
isPolishNotation = 0;
isReversePolishNotation = 0;
bracketCount++;
} else if (isRightBracket(formula[i])) {
isPolishNotation = 0;
isReversePolishNotation = 0;
bracketCount--;
}
// 如果括号数量小于0,则说明括号不匹配
if (bracketCount < 0) {
isNormalNotation = 0;
break;
}
i++;
}
// 如果括号数量不为0,则说明括号不匹配
if (bracketCount != 0) {
isNormalNotation = 0;
}
// 如果只有一个数字和一个运算符,则为逆波兰符号法
if (i == 3 && isNumber(formula[0]) && isNumber(formula[1]) && isOperator(formula[2])) {
isPolishNotation = 0;
isReversePolishNotation = 1;
}
// 如果只有一个数字和一个运算符,则为逆波兰符号法
if (i == 3 && isOperator(formula[0]) && isNumber(formula[1]) && isNumber(formula[2])) {
isPolishNotation = 1;
isReversePolishNotation = 0;
}
// 判断公式类型
if (isPolishNotation) {
return 1; // 波兰符号法
} else if (isReversePolishNotation) {
return 2; // 逆波兰符号法
} else if (isNormalNotation) {
return 3; // 普通表达式
} else {
return 0; // 无法判断
}
}
int main() {
char formula[MAX_LENGTH];
scanf("%s", formula);
int formulaType = getFormulaType(formula);
printf("Formula Type: %d\n", formulaType);
return 0;
}
```
在上述代码中,分别定义了判断数字、运算符、左括号和右括号的函数,然后在 `getFormulaType` 函数中遍历公式字符数组,判断公式类型。如果只有一个数字和一个运算符,则为逆波兰符号法;如果只有一个运算符和一个数字,则为波兰符号法。如果最终无法判断公式类型,则返回0。
阅读全文