用c语言编写一个程序,要求输入一个包含加减乘除的计算式,输出其结果
时间: 2024-09-21 19:01:48 浏览: 47
在 C 语言中,编写一个能够处理简单算术表达式的程序需要利用 stdio.h
文件中的输入输出函数,以及栈数据结构来存储操作数和运算符。这里是一个简单的示例,使用递归解析输入的字符串并计算结果:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// 定义操作数和运算符的优先级
enum {
PRECEDENCE_PLUS_MINUS = 1,
PRECEDENCE_MULTIPLY_DIVIDE = 2,
PRECEDENCE_POWER = 3
};
int precedence(char op) {
switch (op) {
case '+':
case '-':
return PRECEDENCE_PLUS_MINUS;
case '*':
case '/':
return PRECEDENCE_MULTIPLY_DIVIDE;
case '^':
return PRECEDENCE_POWER;
default:
return 0; // 非法运算符
}
}
double apply_operator(double num1, double num2, char op) {
switch (op) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return num1 / num2;
default: return num1; // 如果遇到非法运算符,直接返回第一个数
}
}
double calculate_expression(const char* expression) {
double result = 0.0;
bool is_num = false;
double num = 0.0;
for (const char* token = expression; *token != '\0'; ++token) {
if (isdigit(*token)) { // 处理数字部分
num = num * 10 + (*token - '0');
is_num = true;
} else if (is_num) { // 结束数字并应用操作
result = apply_operator(result, num, is_num ? ')' : *token);
is_num = false;
} else if (*token == '(') { // 递归处理嵌套表达式
double nested_result = calculate_expression(token + 1); // 跳过左括号
result = apply_operator(result, nested_result, *token);
// 指针移动到右括号位置
token += (strchr(token + 1, ')') - token);
}
}
if (is_num) { // 如果最后一个字符是数字,添加它
result = apply_operator(result, num, ')');
}
return result;
}
int main() {
char input[100];
printf("请输入一个包含加减乘除的表达式(例如: 1+2*3): ");
fgets(input, sizeof(input), stdin);
// 移除换行符
input[strlen(input) - 1] = '\0';
double result = calculate_expression(input);
printf("表达式 %s 的结果是: %.2f\n", input, result);
return 0;
}
**
阅读全文