c语言计算器处理负数的计算
时间: 2023-07-13 10:08:43 浏览: 368
在C语言中,可以使用负号来表示负数,例如:-1表示负一。在计算器中处理负数的计算,需要注意以下几点:
1. 在输入表达式时,需要将负数用括号括起来,以便区分减法和负数。
2. 在计算表达式时,需要先处理乘法和除法,再处理加法和减法。如果表达式中有负数,需要先将负数的符号取反,然后再进行计算。
以下是一个简单的处理负数的计算器示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_EXPR_LEN 100
int get_num(char **expr)
{
int num = 0;
while (isdigit(**expr)) {
num = num * 10 + (**expr - '0');
(*expr)++;
}
return num;
}
int calc(char *expr)
{
int nums[MAX_EXPR_LEN];
char op;
int num_count = 0;
int op_count = 0;
int neg_flag = 0;
while (*expr) {
if (isdigit(*expr)) {
nums[num_count++] = neg_flag ? -get_num(&expr) : get_num(&expr);
neg_flag = 0;
} else if (*expr == '-') {
if (num_count == op_count) {
neg_flag = 1;
} else {
op = '-';
op_count++;
}
expr++;
} else if (*expr == '+') {
op = '+';
op_count++;
expr++;
} else if (*expr == '*') {
nums[num_count - 2] *= nums[num_count - 1];
num_count--;
expr++;
} else if (*expr == '/') {
nums[num_count - 2] /= nums[num_count - 1];
num_count--;
expr++;
} else {
printf("Invalid input\n");
return 0;
}
}
while (op_count > 0) {
if (op == '+') {
nums[1] += nums[0];
} else {
nums[1] -= nums[0];
}
nums[0] = nums[1];
num_count--;
op_count--;
}
return nums[0];
}
int main()
{
char expr[MAX_EXPR_LEN];
printf("Enter an expression: ");
fgets(expr, MAX_EXPR_LEN, stdin);
printf("Result: %d\n", calc(expr));
return 0;
}
```
运行示例:
```
Enter an expression: (1+-2)*3-4/2
Result: -1
```
阅读全文