键盘输入三个整数和两个算术运算组成的表达式,计算结果。 运算符包括:加+,减-乘*,除/ 输入格式: 三个整数,两个运算符,组成算数表达式,输入的字符之间没有空格 输出格式: 在表达式的后边输出=计算结果 使用c语言
时间: 2024-10-24 14:05:05 浏览: 17
在 C 语言中,你可以使用栈数据结构和一些基本的遍历来处理这个任务。这里是一个简单的示例程序,它会读取用户输入的三个整数和两个运算符,并计算表达式的值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_OP_SIZE 5 // 可能的最大操作符数量
#define MAX_NUM_SIZE 10 // 可能的最大数字长度
typedef struct {
char op; // 运算符
int num; // 整数值
} Token;
int is_digit(char c) {
return (c >= '0' && c <= '9');
}
Token* tokenize_expression(char expression[]) {
Token tokens[MAX_OP_SIZE];
int i = 0;
for (int j = 0; j < strlen(expression); j++) {
if (is_digit(expression[j])) {
while (j + 1 < strlen(expression) && is_digit(expression[j + 1])) {
j++;
}
tokens[i].num = atoi(&expression[j]);
j++; // 跳过最后一个数字
i++;
} else if (expression[j] == '+' || expression[j] == '-' || expression[j] == '*' || expression[j] == '/') {
tokens[i].op = expression[j];
i++;
}
}
tokens[i] = (Token){'\0', 0}; // 添加结束标记
return tokens;
}
double calculate_expression(Token* tokens) {
double result = tokens[0].num;
Token* current = &tokens[1];
while (current->op != '\0') {
switch (current->op) {
case '+':
result += current->num;
break;
case '-':
result -= current->num;
break;
case '*':
result *= current->num;
break;
case '/':
if (current->num != 0)
result /= current->num;
else
return -1; // 避免除以零错误
break;
default:
return -1; // 操作符无效
}
current++;
}
return result;
}
int main() {
char expression[100];
printf("请输入三个整数和两个运算符组成的表达式(如:1+2*3): ");
fgets(expression, sizeof(expression), stdin);
// 去掉行尾的换行符
expression[strcspn(expression, "\n")] = '\0';
Token* tokens = tokenize_expression(expression);
double result = calculate_expression(tokens);
if (result == -1) {
printf("无效的表达式。\n");
} else {
printf("%s = %.2f\n", expression, result);
}
free(tokens);
return 0;
}
```
阅读全文