C语言实现四则运算(小型计算器)
来源:互联网 发布:周思成网络课程百度云 编辑:程序博客网 时间:2024/05/18 21:39
如果有更好的想法,随时欢迎私我!
#include <stdio.h>#include <stdlib.h>#define MAX 20//定义两个栈,分别存放运算数和运算符struct SNode_Num{ int datas[MAX]; int top;};typedef struct SNode_Num OperateNum;struct SNode_Symbol{ char symbol[MAX]; int top;};typedef struct SNode_Symbol OperateSymbol;//取出相应的数int GetOperateNum(OperateNum *StackNum){ return StackNum->datas[StackNum->top];}//取出相应运算符char GetOperateSymbol(OperateSymbol *StackSymbol){ return StackSymbol->symbol[StackSymbol->top];}//运算数进栈void PushOperateNum(OperateNum *StackNum, int x){ StackNum->top++; StackNum->datas[StackNum->top] = x;}//运算符进栈void PushOperateSymbol(OperateSymbol *StackSymbol, char ch){ StackSymbol->top++; StackSymbol->symbol[StackSymbol->top] = ch;}//运算数退栈int PopOperateNum(OperateNum *StackNum){ int num; num = StackNum->datas[StackNum->top]; StackNum->top--; return num;}//运算符退栈char PopOperateSymbol(OperateSymbol *StackSymbol){ char ch; ch = StackSymbol->symbol[StackSymbol->top]; StackSymbol->top--; return ch;}//判断输入的符号是否是四则运算符号int IsOperateSymbolOrNum(char ch){ if(ch == '+' || ch == '-' || ch == '*'|| ch == '/' || ch == '\n') return 1; else return 0;}//判断符号的优先级char Priority(char inputnum, char ch){ switch(inputnum) { //加减在同一个优先级上 case '+': case '-': { if(ch == '+' || ch == '-') return '>'; else if(ch == '*' || ch == '/') return '<'; else return '>'; } break; //乘除在同一优先级 case '*': case '/': { if(ch == '+' || ch == '-') return '>'; else if(ch == '*' || ch == '/') return '>'; else return '>'; } break; case '\n': { if(ch == '\n') return '='; else return '<'; } break; }}//两数运算int Calculate(int num1, char ch, int num2){ int result; switch(ch) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; } return result;}//用于用户输入和计算结果int MainCalc(){ //主函数进行计算 OperateNum datas; OperateSymbol symbol; int num1, num2, result, num; char ch, sign;//初始化顺序栈datas.top=-1;//操作数栈顶指针symbol.top=-1;//操作符栈顶指针 //把回车计算的操作符放在栈中 PushOperateSymbol(&symbol, '\n'); ch = getchar(); while((ch != '\n') || (GetOperateSymbol(&symbol) != '\n')) { if(!IsOperateSymbolOrNum(ch)) { num = atoi(&ch); //将字符转换为整数 ch = getchar(); //获取输入 while(!IsOperateSymbolOrNum(ch)) { num = num * 10 + atoi(&ch); ch = getchar(); //当没有输入回车时,继续获取输入 } PushOperateNum(&datas, num); } else {//考虑第一个数是负数的情况if(ch=='-'&&symbol.top==0&&datas.top==-1)PushOperateNum(&datas, 0); switch(Priority(GetOperateSymbol(&symbol), ch)) { //判断优先级后进行计算 case '<': PushOperateSymbol(&symbol, ch); ch = getchar(); break; case '=': sign = PopOperateSymbol(&symbol); ch = getchar(); //获取输入 break; case '>': sign = PopOperateSymbol(&symbol); num2 = PopOperateNum(&datas); num1 = PopOperateNum(&datas); result = Calculate(num1, sign, num2); PushOperateNum(&datas, result); break; } } } result = GetOperateNum(&datas); return result;}int main(int argc, char *argv[]){ int result; result = MainCalc(); printf("%d", result); //输出结果 return 0;}
阅读全文
0 0
- C语言实现四则运算(小型计算器)
- C语言 实现四则运算简单计算器
- C语言实现四则运算
- 四则运算计算器 C 语言完美版源码
- C语言实现 加减乘除四则运算(小数)
- 数据结构,C语言实现四则运算
- [C++]分数计算器(四则运算)class
- Object-C,四则运算计算器
- c语言实现计算器
- C语言实现计算器
- IOS实现小型计算器
- iOS实现小型计算器
- 小型计算器的实现
- 简易四则运算计算器(C51单片机实现)
- js实现简单计算器(四则运算)
- 小型图书馆管理系统(C语言实现)
- PAT Basic 1034. 有理数四则运算(20)(C语言实现)
- 分数的四则运算及化简(C语言实现)
- Python的marshal模块简介
- 字面值(常量)到底是什么数据类型
- 后缀表达式
- Scrapy
- 2017-10-25 2周3次课
- C语言实现四则运算(小型计算器)
- 制作 shell 脚本压缩 Android 8.0代码
- java模式—装饰者模式
- LeetCode基础-排序-合并排序
- Velocity 在Spring中的配置
- Java技术——你真的了解String类的intern()方法吗
- Oracle 数据库 Record is locked by another user 问题解决办法
- Spring mvc HandlerMapping 实现机制
- CSS进阶