用C语言编写程序四则运算共有加(+)、减(-)、乘(*)、除(/)4种运算,要做出判断需使用switch语句。并且在输入时可以输入括号,以此来优先计算某些数字
时间: 2024-09-28 18:08:19 浏览: 73
c语言四则运算的一个例子
在C语言中,你可以创建一个函数来处理这种四则运算,包括支持括号的优先级计算。这通常涉及到解析表达式,也就是所谓的逆波兰表示法(RPN),也称为后缀表示法。使用栈数据结构来模拟括号的嵌套和运算顺序。
下面是一个基本的框架,展示了如何使用switch和栈来处理这样的操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 假设我们有一个stack结构体和两个辅助函数push和pop
typedef struct Node {
char operator;
double number;
} Node;
void push(double num, Stack *s) {
s->top = (Node *)malloc(sizeof(Node));
s->top->number = num;
s->top->operator = '\0';
s->size++;
}
double pop(Stack *s) {
if(s-1;
double val = s->top->number;
s->top = s->top->next;
s->size--;
return val;
}
int calculate(char op1, char op2, double num1, double num2) {
switch(op2) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
if(num2 != 0)
return num1 / num2;
else
return -1; // 防止除以零错误
default:
return -1; // 非法运算符
}
}
double evaluateExpression(char *expression, Stack *s) {
int i = 0;
while(expression[i] != '\0') {
if(expression[i] == ' ') continue; // 忽略空格
if(expression[i] >= '0' && expression[i] <= '9') {
double num = 0;
while(i < strlen(expression) && expression[i] >= '0' && expression[i] <= '9') {
num = num * 10 + expression[i] - '0';
i++;
}
push(num, s);
} else if(expression[i] == '(') {
i++; // 跳过左括号
} else if(expression[i] == ')') {
double result = pop(s);
double second = pop(s);
double first = pop(s);
double res = calculate(first, expression[i], second, result);
push(res, s); // 把结果压回栈里
i++; // 跳过右括号
} else {
double second = pop(s);
double first = pop(s);
push(calculate(first, expression[i], second, 0), s); // 对于非乘除的运算,第二个数设为0
}
i++;
}
return pop(s);
}
int main() {
char expression[] = "3 + 5 * (7 - 2)";
Stack *s = createStack(); // 创建一个初始为空的栈
printf("%.2f\n", evaluateExpression(expression, s)); // 打印计算结果
destroyStack(s);
return 0;
}
```
注意,这里仅做演示,实际项目中可能需要更复杂的解析库来处理真正的括号表达式。另外,上述代码没有处理非法输入,实际应用中应加入错误检查和异常处理。
阅读全文