c语言实现多位数带括号且能运算负数的计算器
时间: 2023-07-13 15:34:00 浏览: 256
好的,下面是一个基于 C 语言的实现多位数带括号且能运算负数的计算器的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_EXPR_LEN 100
int eval(char *expr);
int get_num(char *expr, int *idx);
int get_term(char *expr, int *idx);
get_factor(char *expr, int *idx);
int main() {
char expr[MAX_EXPR_LEN + 1];
printf("请输入表达式:\n");
fgets(expr, MAX_EXPR_LEN, stdin); // 从标准输入中获取表达式
printf("结果是:%d\n", eval(expr));
return 0;
}
// 计算表达式的值
int eval(char *expr) {
int idx = 0;
int result = get_term(expr, &idx);
while (expr[idx] != '\0') {
if (expr[idx] == '+') {
idx++;
result += get_term(expr, &idx);
} else if (expr[idx] == '-') {
idx++;
result -= get_term(expr, &idx);
} else {
break;
}
}
return result;
}
// 获取数字
int get_num(char *expr, int *idx) {
int num = 0;
int sign = 1;
if (expr[*idx] == '-') {
sign = -1;
(*idx)++;
}
while (isdigit(expr[*idx])) {
num = num * 10 + (expr[*idx] - '0');
(*idx)++;
}
return sign * num;
}
// 获取项
int get_term(char *expr, int *idx) {
int result = get_factor(expr, idx);
while (expr[*idx] != '\0') {
if (expr[*idx] == '*') {
(*idx)++;
result *= get_factor(expr, idx);
} else if (expr[*idx] == '/') {
(*idx)++;
result /= get_factor(expr, idx);
} else {
break;
}
}
return result;
}
// 获取因数
int get_factor(char *expr, int *idx) {
int result;
if (expr[*idx] == '(') {
(*idx)++;
result = eval(expr);
(*idx)++;
} else {
result = get_num(expr, idx);
}
return result;
}
```
这个计算器可以处理加、减、乘、除和带括号的多位数运算,同时还能处理负数。
阅读全文