使用ege库实现复杂计算器的代码:
时间: 2024-05-10 16:15:54 浏览: 105
以下是使用 ege 库实现复杂计算器的代码,支持加减乘除、括号和优先级计算:
```cpp
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAXLEN 1000 // 输入表达式的最大长度
int x, y; // 当前绘图位置
char input[MAXLEN]; // 输入表达式
// 获取下一个数字或小数点
double getNextNumber(char *str, int *i) {
double result = 0.0;
int digits = 0;
int point = 0;
while (str[*i] >= '0' && str[*i] <= '9' || str[*i] == '.') {
if (str[*i] == '.') {
point = 1;
} else if (point) {
result += (str[*i] - '0') * pow(0.1, ++digits);
} else {
result = result * 10 + (str[*i] - '0');
}
(*i)++;
}
return result;
}
// 获取下一个符号
char getNextOperator(char *str, int *i) {
while (str[*i] == ' ') {
(*i)++;
}
return str[(*i)++];
}
// 计算表达式
double calculate(char *str, int len) {
double result = 0.0;
int i = 0;
char op = '+';
while (i < len) {
double num;
if (str[i] >= '0' && str[i] <= '9' || str[i] == '.') {
num = getNextNumber(str, &i);
switch (op) {
case '+': result += num; break;
case '-': result -= num; break;
case '*': result *= num; break;
case '/': result /= num; break;
}
} else if (str[i] == '(') {
i++;
num = calculate(str + i, len - i);
switch (op) {
case '+': result += num; break;
case '-': result -= num; break;
case '*': result *= num; break;
case '/': result /= num; break;
}
while (str[i] != ')') {
i++;
}
i++;
} else {
op = getNextOperator(str, &i);
}
}
return result;
}
// 绘制文本
void drawText(char *text) {
outtextxy(x, y, text);
x += textwidth(text);
}
// 绘制数字
void drawNumber(double num) {
char str[20];
sprintf(str, "%.2f", num);
drawText(str);
}
// 解析输入表达式并绘制结果
void parseAndDraw() {
cleardevice();
x = 10;
y = 10;
double result = calculate(input, strlen(input));
drawText(input);
drawText("=");
drawNumber(result);
}
int main() {
initgraph(640, 480);
setbkcolor(WHITE);
settextcolor(BLACK);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 20);
while (1) {
printf("请输入表达式:");
gets(input);
parseAndDraw();
getch();
}
closegraph();
return 0;
}
```
在绘图界面中,你可以输入任何合法的表达式并按下回车键以计算结果。该程序支持加减乘除、括号和优先级计算。
阅读全文