.使用if-else 语句和 switch语句设计一个程序,使其可以识别有两个操作符(操作符可以是加、减、乘、除)的表达式。要注意操作符有优先级。运行时输入输出情况如下: 请输入一个表达式(eg.1+2*3):1+2*3,1+2*3=7用c语言给出
时间: 2024-11-06 16:24:47 浏览: 10
Java语言程序设计:JAVA_3-运算符、表达式和语句.ppt
在C语言中,我们可以设计一个简单的程序来处理这种包含两个操作符的简单算术表达式。首先,我们需要定义一个函数来计算表达式的值,考虑到优先级,这里我们将使用switch语句来判断运算符并应用相应的运算规则。下面是一个示例:
```c
#include <stdio.h>
int precedence(char op) {
switch (op) {
case '+':
case '-':
return 1; // 优先级为1
case '*':
case '/':
return 2; // 优先级为2
default:
return -1; // 非法字符,返回错误代码
}
}
double calculate_expression(char op1, char op2, double num1, double num2) {
if (precedence(op1) > precedence(op2)) {
return num1 + calculate_expression(op2, ' ', num2, 0); // 如果第一个运算符优先级高,先做第一个运算
} else if (precedence(op2) > precedence(op1)) {
return num1 * calculate_expression(op1, ' ', num2, 0); // 否则,先做第二个运算
} else {
switch (op1) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return num1 / num2;
default: return -1; // 遇到非法字符,返回错误
}
}
}
int main() {
char expression[50];
printf("请输入一个表达式(eg.1+2*3): ");
fgets(expression, sizeof(expression), stdin);
// 移除换行符
expression[strlen(expression) - 1] = '\0';
char* tokens[] = {"+", "-", "*", "/"};
char current_token[4]; // 存储当前token
int i;
for (i = 0; i < 4; ++i) {
if (strstr(expression, tokens[i])) {
strncpy(current_token, tokens[i], sizeof(current_token));
expression += strlen(tokens[i]);
break;
}
}
if (i == 4 || strlen(expression) != 0) {
printf("输入无效,请只输入两个操作符和数字\n");
return 1;
}
double result = calculate_expression(*current_token, expression[0], atof(expression + 1), 0);
if (result == -1) {
printf("无法解析表达式\n");
} else {
printf("%s %s %s = %.2f", current_token, expression[0], expression + 1, result);
}
return 0;
}
```
在这个程序中,用户会被提示输入一个表达式,然后我们遍历表达式寻找两个操作符。`calculate_expression`函数会根据优先级顺序计算表达式值。如果输入格式不正确,我们会给出错误信息。
阅读全文