C语言实现计算器功能
C语言计算器实现是一种基本的编程练习,可以结合简单的数学表达
式解析和计算功能来实现一个基本的计算器。
以下是一个简单的示例,它
可以接受用户输入的数学表达式并返回计算结果。
首先,我们需要包含标准输入/输出库(stdio.h)和字符串处理库(string.h)。
我们还需要定义一些函数来处理数学表达式的解析和计算。
```c
#include <stdio.h>
#include <string.h>
//返回运算符的优先级
int precedence(char op)
if (op == '+' , op == '-')
return 1;
if (op == '*' , op == '/')
return 2;
return 0;
//执行四则运算
int calculate(int a, int b, char op)
switch (op)
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return 0;
//解析数学表达式并计算结果
int evaluate(char *expression)
int i;
//创建两个空栈,用于操作数和运算符int values[100];
int top_values = -1;
char ops[100];
int top_ops = -1;
//遍历表达式的每个字符
for (i = 0; i < strlen(expression); i++)
//如果字符是一个数字,将其解析为整数,并将其推到操作数栈中if (expression[i] >= '0' && expression[i] <= '9')
int value = 0;
while (i < strlen(expression) && expression[i] >= '0' && expression[i] <= '9')
value = value * 10 + (expression[i] - '0');
i++;
}
values[++top_values] = value;
}
//如果字符是一个左括号,将其推到运算符栈中
else if (expression[i] == '(')
ops[++top_ops] = expression[i];
}
//如果字符是一个右括号,执行所有高优先级的运算
else if (expression[i] == ')')
while (top_ops > -1 && ops[top_ops] != '(')
int b = values[top_values--];
int a = values[top_values--];
char op = ops[top_ops--];
values[++top_values] = calculate(a, b, op);
}
top_ops--;
}
//如果字符是一个运算符,执行所有高优先级的运算
else
while (top_ops > -1 && precedence(ops[top_ops]) >= precedence(expression[i]))
int b = values[top_values--];
int a = values[top_values--];
char op = ops[top_ops--];
values[++top_values] = calculate(a, b, op);
}
ops[++top_ops] = expression[i];
}
}
//执行剩余的运算
while (top_ops > -1)
int b = values[top_values--];
int a = values[top_values--];
char op = ops[top_ops--];
values[++top_values] = calculate(a, b, op);
}
//返回最终结果
return values[top_values];
int main
char expression[100];
printf("请输入数学表达式:");
scanf("%s", expression);
int result = evaluate(expression);
printf("结果:%d\n", result);
return 0;
```
上面的代码使用了栈来解析和计算数学表达式。
首先,我们定义两个整数数组来表示操作数和运算符的栈。
我们还定义了两个整数来记录栈顶的索引。
在处理表达式的字符时,我们按照以下步骤进行操作:
1.如果遇到一个数字符号,我们将其解析为整数,并将其推入操作数栈中。
2.如果遇到左括号,我们将其推入运算符栈中。
3.如果遇到右括号,我们会执行所有高优先级的运算,直到遇到左括号为止。
4.如果遇到一个运算符,我们将其推入运算符栈中。
然后,我们执行所有高优先级的运算,直到没有高优先级的运算为止。
5.最后,我们执行剩余的运算,并返回结果。
在主函数中,我们首先获取用户输入的数学表达式。
然后,我们调用evaluate函数来计算表达式的结果,并将结果打印出来。
此计算器实现只是一个简单的示例,可以进一步进行改进和扩展。
例如,可以添加更多的数学运算(如平方根、幂等运算)或处理更复杂的表达式(如带有多个嵌套括号的表达式)。
同时,需要注意输入的数学表达式必须是合法的,否则可能导致计算结果错误或程序崩溃。
因此,务必在实际应用中添加错误处理和输入验证机制,以确保程序的可靠性和安全性。