c语言编程实现用户输入的任意表达式求值,并输出计算结果。要求只含二目运算符的加、减、乘、除算术表达式,并且操作数为一位字符表示的整数,不考虑括号。代码
时间: 2024-11-09 19:22:17 浏览: 13
在C语言中,实现这样一个简单的表达式求值器可以利用栈的数据结构。下面是一个基本的示例,它通过遍历输入字符串,逐个处理数字和运算符,然后计算结果。这个例子假设输入的表达式不会包含除法,因为除法可能导致精度丢失。
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct {
int num;
} Number;
Number pop(Number* stack);
char get_next_char(char* input);
int main() {
char input[100];
scanf("%s", input);
Stack numbers = { .top = -1 };
while (*input != '\0') {
if (isdigit(*input)) {
// 将连续的数字压入栈
while (isdigit(*input))
numbers.top++, numbers.data[numbers.top].num = numbers.data[numbers.top].num * 10 + *input - '0', input++;
} else {
// 当遇到运算符时,弹出两个数字做运算
int op1 = pop(&numbers);
int op2 = pop(&numbers);
switch (*input) {
case '+':
numbers.data[numbers.top] = op1 + op2;
break;
case '-':
numbers.data[numbers.top] = op1 - op2;
break;
// 在此示例中忽略了除法和其它运算符
// 案例添加完整的话需要处理除法和其他情况
}
input++;
}
}
// 如果栈顶还有剩余的操作数,计算一次最后的结果
if (numbers.top >= 0)
printf("结果: %d\n", numbers.data[numbers.top]);
return 0;
}
// 功能:从栈顶弹出一个数值
Number pop(Number* stack) {
if (stack->top == -1) return (Number){ 0 }; // 空栈处理
Number temp = stack->data[stack->top];
stack->top--;
return temp;
}
```
注意这只是一个基础版本,实际项目中可能需要更完善的错误检查(如空栈异常),并且对于除法等复杂运算,还需要更多的代码来处理。
阅读全文