Write a C language program that reads an expression in a line as input and prints out the result. Only integers and operators below are allowed in the expression: + - * / % ( ) 输入格式: A line of expression. 输出格式: The result.
时间: 2024-02-07 18:02:34 浏览: 101
好的,以下是基于 C 语言的解决方案。请注意,此程序仅适用于输入格式符合要求的表达式。
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// 定义算术运算函数
double arithmetic(char op, double a, double b) {
switch(op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
case '%':
return (int)a % (int)b;
default:
return 0.0;
}
}
// 定义运算符优先级
int precedence(char op) {
switch(op) {
case '+':
case '-':
return 1;
case '*':
case '/':
case '%':
return 2;
default:
return 0;
}
}
// 定义中缀表达式转后缀表达式函数
void infix_to_postfix(char *infix, char *postfix) {
char stack[100];
int top = -1;
char *p = infix, *q = postfix;
while (*p) {
if (isdigit(*p)) {
// 如果是数字,直接拷贝到后缀表达式中
*q++ = *p++;
} else if (*p == '(') {
// 如果是左括号,入栈
stack[++top] = *p++;
} else if (*p == ')') {
// 如果是右括号,依次将栈中元素弹出到后缀表达式中,直到遇到左括号
while (top >= 0 && stack[top] != '(') {
*q++ = stack[top--];
}
if (top >= 0 && stack[top] == '(') {
top--;
}
p++;
} else if (*p == '+' || *p == '-' || *p == '*' || *p == '/' || *p == '%') {
// 如果是运算符,将栈中优先级高于等于它的运算符弹出到后缀表达式中,然后将它入栈
while (top >= 0 && precedence(stack[top]) >= precedence(*p)) {
*q++ = stack[top--];
}
stack[++top] = *p++;
} else {
p++;
}
}
// 将栈中剩余的运算符弹出到后缀表达式中
while (top >= 0) {
*q++ = stack[top--];
}
*q = '\0';
}
// 定义计算后缀表达式函数
double evaluate_postfix(char *postfix) {
double stack[100];
int top = -1;
char *p = postfix;
while (*p) {
if (isdigit(*p)) {
// 如果是数字,转换成 double 类型并入栈
stack[++top] = atof(p);
while (isdigit(*p) || *p == '.') {
p++;
}
} else if (*p == '+' || *p == '-' || *p == '*' || *p == '/' || *p == '%') {
// 如果是运算符,取出栈中两个操作数进行运算,然后将结果入栈
double b = stack[top--];
double a = stack[top--];
stack[++top] = arithmetic(*p, a, b);
p++;
} else {
p++;
}
}
return stack[0];
}
int main() {
char infix[100], postfix[100];
printf("Please enter an expression: ");
fgets(infix, sizeof(infix), stdin);
infix_to_postfix(infix, postfix);
double result = evaluate_postfix(postfix);
printf("The result is: %g\n", result);
return 0;
}
```
您可以将上述代码复制粘贴到 C 语言编译器中,然后运行程序。程序将提示您输入表达式,并输出计算结果。例如,如果您输入 "2 + 3 * 4", 程序将输出 14。
阅读全文