C语言:中缀表达式求值,输入9+3*6,输出27
时间: 2024-02-28 14:56:27 浏览: 70
以下是C语言代码实现:
```c
#include <stdio.h>
int main() {
char op; // 存储运算符
int num, result;
scanf("%d", &result);
while (scanf("%c%d", &op, &num) != EOF) {
if (op == '+') {
result += num;
} else if (op == '-') {
result -= num;
} else if (op == '*') {
result *= num;
} else if (op == '/') {
result /= num;
}
}
printf("%d\n", result);
return 0;
}
```
这段代码中,我们首先读入一个数字作为结果。然后使用一个循环,每次读入一个运算符和一个数字,根据运算符更新结果。最终输出结果即可。
相关问题
C语言:中缀表达式计算结果,只包含加法和乘法,例如输入9+3*6,输出27
可以通过栈来实现中缀表达式的计算。具体步骤如下:
1. 定义一个栈,用于存储数字和运算符。
2. 从左到右遍历中缀表达式中的每一个字符。
3. 如果当前字符是数字,则将其入栈。
4. 如果当前字符是运算符,则取出栈顶的两个数字进行运算,并将结果入栈。
5. 遍历完整个中缀表达式后,栈内只剩下一个元素,即为表达式的计算结果。
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define STACK_SIZE 100
typedef struct {
int data[STACK_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, int value) {
if (s->top >= STACK_SIZE - 1) {
printf("Stack overflow");
exit(1);
}
s->data[++s->top] = value;
}
int pop(Stack *s) {
if (s->top < 0) {
printf("Stack underflow");
exit(1);
}
return s->data[s->top--];
}
int main() {
Stack s;
char c;
int num1, num2;
init(&s);
while ((c = getchar()) != '\n') {
if (isdigit(c)) {
push(&s, c - '0');
} else if (c == '+') {
num2 = pop(&s);
num1 = pop(&s);
push(&s, num1 + num2);
} else if (c == '*') {
num2 = pop(&s);
num1 = pop(&s);
push(&s, num1 * num2);
}
}
printf("Result: %d", pop(&s));
return 0;
}
```
如果输入9+3*6,输出结果为27。
C语言:中缀表达式求值
中缀表达式求值需要使用栈来实现,以下是C语言实现中缀表达式求值的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
int stack[MAX_STACK_SIZE];
int top = -1;
void push(int value) {
if (top >= MAX_STACK_SIZE - 1) {
printf("栈已满\n");
exit(1);
}
top++;
stack[top] = value;
}
int pop() {
if (top < 0) {
printf("栈已空\n");
exit(1);
}
int value = stack[top];
top--;
return value;
}
int is_operator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
int precedence(char c) {
if (c == '*' || c == '/') {
return 2;
} else if (c == '+' || c == '-') {
return 1;
} else {
return 0;
}
}
int evaluate(char* expression) {
int i, num, num1, num2;
char c, op;
for (i = 0; expression[i] != '\0'; i++) {
c = expression[i];
if (isdigit(c)) {
num = 0;
while (isdigit(c)) {
num = num * 10 + c - '0';
i++;
c = expression[i];
}
i--;
push(num);
} else if (is_operator(c)) {
if (top < 1) {
printf("表达式错误\n");
exit(1);
}
num2 = pop();
num1 = pop();
op = c;
switch (op) {
case '+':
push(num1 + num2);
break;
case '-':
push(num1 - num2);
break;
case '*':
push(num1 * num2);
break;
case '/':
push(num1 / num2);
break;
}
}
}
if (top != 0) {
printf("表达式错误\n");
exit(1);
}
return pop();
}
int main() {
char expression[100];
int result;
printf("请输入中缀表达式:\n");
scanf("%s", expression);
result = evaluate(expression);
printf("结果为:%d\n", result);
return 0;
}
```
运行程序后,会提示用户输入中缀表达式,然后根据运算符优先级计算结果并输出。
阅读全文