数据结构的课程设计。。
设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。
设计要求:
(1)要检查相关运算的限制条件,并对错误的条件产生报警。
(2)有图形用户界面。
#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"stack"
#include"algorithm"
#include"iostream"
#define Maxlen 500
using namespace std;
int Flag; //对于最终结果的标志变量
void menu() //菜单栏函数
{
printf(" -------------- 欢迎使用全球最低端的计算器 --------------\n");
printf(" | 1.本计算器合法符号为'+'、'-'、'*'、'/'、'('、')'、'.' |\n");
printf(" | 'ABS()'、'SQR()',字母不区分大小写且可进行任意迭代。 |\n");
printf(" | 2.本计算器可以实现浮点数的计算,计算结果将保留6位小数。|\n");
printf(" | 3.本计算器比较低端,所以数据范围不能超double。 |\n");
printf(" | 4.本计算器比较低端,所以计算表达式的长度上限为500。 |\n");
printf(" | 5.输入'END'不包括引号,结束本程序。 |\n");
printf(" ----------------------------------------------------------\n");
}
double fabs(double x) //求绝对值,因为原型处理数字超过9位会出现错误
{
if(x<0) return -x;
return x;
}
void false_printf() //对于不同的错误,输出提示信息。
{
switch(Flag)
{
case 2:
printf("您好,您输入的括号不匹配。\n");
break;
case 3:
printf("您好,您输入的表达式不符合逻辑。\n");
break;
case 4:
printf("您好,您的输入包含非法字符。\n");
break;
case 5:
printf("您好,您的运算过程中出现除数为零。\n");
break;
case 6:
printf("您好,您的运算过程中出现开方数小于零。\n");
break;
}
return;
}
void judge(char *p,char *q) //实现判断表达式并且将正确的表达式转换为后缀式
{
int i=0,j=0; //i表示p的下标,j代表q的下标
int f=1; //判断当前字符是否与左括号相邻,默认相邻,用于取正、取负的运算。
int sum=0; //判断括号是否匹配
for(i=0; p[i]; i++) //判断括号是否匹配以及是否有非法字符
{
if(p[i]=='s' || p[i]=='S') //判断是否是完整的SQR
{
if(p[i+1]!='q' && p[i+1]!='Q')
{
Flag=4;
return ;
}
if(p[i+2]!='r' && p[i+2]!='R')
{
Flag=4;
return ;
}
if(p[i+3]!='(')
{