一、背景
自己希望通过这个处女帖,来互相学习、经验积累,故将本次课设的代码发到CSDN,希望可以得到网友们的指点。我用的是DEVC++,作出来后,能实现简单的整数加减乘除。
二、代码
1、数据结构
下面展示全部的头文件。
//简单的计算器
#include<iostream>
#include<cstring>
#include<math.h>
#include<windows.h>
#define E 10000000 //定义一个极大值,读取到加减乘除时将加减乘除+E,
//压入int类型栈里,表示加减乘除
#define MAXSIZE 100 //栈容量
using namespace std;
typedef char ElemType;
typedef struct {
//定义char栈
ElemType *base; //栈底指针
ElemType *top; //栈顶指针
int stacksize; //栈的容量
}SqStack;
typedef struct {
//定义int栈
int *base;
int *top;
int stacksize;
}SqStack_int;
//分别初始化char、int类型栈
int InitStack(SqStack &S); //S为要初始化的栈
int InitStack_int(SqStack_int &S);//S为要初始化的栈
//分别做char、int类型栈的入栈出栈
int Push_char(SqStack &S,ElemType e); //S为要初始化的栈 ,e为要入栈元素
int Push_int(SqStack_int &S,int e); //S为要初始化的栈 ,e为要入栈元素
char Pop_char(SqStack &S,ElemType &e);//S为要初始化的栈 ,e为要出栈元素
char Pop_int(SqStack_int &S,int &e);//S为要初始化的栈 ,e为要出栈元素
ElemType GetTop(SqStack S); //返回ElemType类型S栈顶元素
int Empty(SqStack S); //S栈判空
int Length(SqStack_int S); //返回int类型S栈元素个数
int replace(char a); //给运算符a赋值
int compare(char a,char b); //a为栈顶运算符,b为扫描到的运算符,返回他们优先级对比的结果
void count(int a[],int m); //计算 后缀表达式a的值并输出 ,m表示表达式位数
int jisuan(); //中缀转后缀,并且划分各个整数 ,返回运算状态,s值控制是否进行该操作
void xunhuan(int x);//循环函数,让用户循环多次使用 ,x值控制是否循环和判断用户输入正确与否
void rel(SqStack_int &S,SqStack &S_num,SqStack &S_fuhao,char x);//判断优先级并且入栈出栈
2、弟弟行为的编程
int main(){
//主函数
system("mode con cols=38 lines=25");//窗口宽度高度
char s; //char类型的s做判断用户是否进入计算器的控制元素
printf("欢迎使用简单计算器!\n该计算器可以运算多位的正负整数\n"); //使用指导
system("title 简单计算器"); //设置cmd窗口标题
system("color 0c"); // 设置窗口颜色
printf("是否使用计算器(Y/N):"); //用户输入Y/N进行选择是否进入计算器
cin>>s; //用户输入
if(s=='N') printf("已退出计算器!"); //N表示退出,执行退出
while(s!='N'){
//如果不是N,有两种情况进行判断和循环
if(s=='Y'){
//第一种情况:Y则进入计算器
xunhuan(jisuan()); //运用循环函数,进行递归循环,实现循环计算
break; //当上个循环只有用户选择退出时才会结束循环,之后直接break,结束程序
}
else
printf("输入错误,请重新输入,是否使用计算器(Y/N):");//第二种情况 :输入错误(不是Y也不是N),继续让用户选择
cin>>s; //输入s进行循环
}
return 0; //程序正常结束
}
int InitStack(SqStack &S) //SqStack类型S栈初始化
{
S.base=new ElemType[MAXSIZE]; //分配空间
if(!S.base) return -1; //如果分配失败返回-1
S.top=S.base; //初始化为空栈
S.stacksize=MAXSIZE; //S的容量设为MAXSIZE
return 1;
}
//同上个S栈的初始化 ,只不过这里是SqStack_int 类型的S栈
int InitStack_int(SqStack_int &S)
{
S.base=new int[MAXSIZE];
if(!S.base) return -1;
S.top=S.base;
S.stacksize=MAXSIZE;
return 1;
}
int Push_char(SqStack &S,ElemType e) //将元素e入SqStack类型的S栈
{
if(S.top-S.base==S.stacksize) return -1;