C语言实现简单计算器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
摘要由CSDN通过智能技术生成

一、背景

自己希望通过这个处女帖,来互相学习、经验积累,故将本次课设的代码发到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;	
  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值