用c语言写一个判断输入的加减等式是否正确的程序
时间: 2023-05-23 17:03:22 浏览: 297
可以使用栈来实现该程序。首先定义一个栈结构体,包含栈顶指针和栈大小。然后定义一个字符数组来存储输入的加减等式,通过循环读取每个字符,如果是数字或运算符,则将其入栈;如果是等于号,则弹出两个栈顶元素进行运算,并将结果入栈。最后判断栈是否为空,如果为空则说明输入的加减等式正确,否则不正确。
以下是伪代码:
typedef struct {
int top;
int size;
int *data;
} Stack;
Stack *init_stack(int size) {
Stack *stack = (Stack *)malloc(sizeof(Stack));
stack->top = -1;
stack->size = size;
stack->data = (int *)malloc(sizeof(int) * size);
return stack;
}
void push(Stack *stack, int value) {
if (stack->top == stack->size - 1) {
// 栈满了
return;
}
stack->top++;
stack->data[stack->top] = value;
}
int pop(Stack *stack) {
if (stack->top == -1) {
// 栈为空
return -1;
}
int value = stack->data[stack->top];
stack->top--;
return value;
}
int is_empty(Stack *stack) {
return stack->top == -1;
}
int is_correct_equation(char *equation) {
Stack *stack = init_stack(strlen(equation));
for (int i = 0; i < strlen(equation); i++) {
char ch = equation[i];
if (ch >= '0' && ch <= '9') {
push(stack, ch - '0');
} else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
if (is_empty(stack)) {
return 0;
}
int b = pop(stack);
if (is_empty(stack)) {
return 0;
}
int a = pop(stack);
int result;
switch (ch) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
}
push(stack, result);
} else if (ch == '=') {
if (stack->top != 0) {
// 栈中还有多余的元素,说明输入的加减等式不正确
return 0;
}
pop(stack);
} else {
// 非法的字符
return 0;
}
}
return 1;
}
int main() {
char equation[100];
scanf("%s", equation);
int result = is_correct_equation(equation);
if (result) {
printf("输入的加减等式正确\n");
} else {
printf("输入的加减等式不正确\n");
}
return 0;
}