c语言计算器程序代码 链栈,【C语言】简易科学计算器源代码(链栈应用)(原创).doc...
【C语言】简易科学计算器源代码(链栈应用)(原创)
用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:
(摘抄结束)
我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘!,正弦sin,余弦cos,正切tan,以10为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法)
#include
#include
#include
#include
#include
//引用请注明出处:/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html
#define MAX_TOKEN_LEN 100 //标记最大长度
#define EXPR_INCREMENT 20//表达式长度的增量
typedef struct {
double opnd; //操作数
char optr[11]; //运算符
int flag; //若为1,则为单目运算符,2则是双目运算符
} SElemType; //栈元素类型
typedef struct SNode { //栈
SElemType date;
struct SNode * next;
} SNode, *Stack;
struct { //用来存储一个操作数或运算符
char str[MAX_TOKEN_LEN];
int type; //类型,若为0,则为操作数,若为1则为运算符
} token;
struct { //expression,用来存储表达式
char *str;
int cur; //标记读取expr的当前位置
}expr;
Stack OPND, OPTR; //操作数栈operand,运算符栈operator
int expr_size; //表达式长度
void InitStack(Stack *S) { //初始化栈
*S = (Stack)malloc(sizeof(SNode));
if(!(*S)) {
printf("动态申请内存失败!\n");
exit(0);
} //if
(*S)->next = NULL;
} //InitStack
void DestroyStack(Stack *S) { //销毁栈
SNode *p;
while(p = *S) {
*S = p->next;
free(p);
} //while
} //DestroyStack
void Push(Stack S, SElemType e) { //入栈
SNode *p;
p = (SNode *)malloc(sizeof(SNode));
if(! p) {
printf("动态申请内存失败!\n");
exit(0);
} //if
strcpy(p->date.optr,e.optr);
p->date.opnd = e.opnd;
p->date.flag = e.flag;
p->next = S->next;
S->next = p;
} //Push
void Pop(Stack S,SElemType *e) { //出栈
SNode *p;
p = S->next;
if(! p) {
printf("栈为空,不能出栈!\n");
exit(0);
} //if
S->next = p->next;
strcpy(e->optr,p->date.optr);
e->opnd = p->date.opnd;
e->flag = p->date.flag;
free(p);
} //Pop
void get_expr() { //获取expr字符串
char *p;
int size;
expr.cur = 0;
expr_size = 100;
expr.str = (char*)malloc(expr_size * sizeof(char));
if(! expr.str) {
printf("内存分配失败!\n");
exit(0);
} //if
size = 0;
p = expr.str;
while((*p = getchar()) != '\n') {
if(*p != ' ') {
if((*p >= 'A') && (*p <= 'Z')) {
*p = *p + 32; //将大写转换成小写
} //if
p++;
size+
c语言计算器程序代码 链栈,【C语言】简易科学计算器源代码(链栈应用)(原创).doc...相关推荐
- java计算器程序代码实现加减乘除_Python+tkinter能实现计算器!太神奇了
听说Python很强大,有第三方库啥事儿都能干,不仅能写一个计算器框架,还能实现加减乘除运算,听着甚是崇拜啊! 废话不啰嗦了,让我们一起来看看Python是如何把计算器用一个个代码实现的. 这里我们用 ...
- 钢琴软件c语言源代码,C语言钢琴程序代码.doc
C语言钢琴程序代码.doc 把以下程序复制粘贴到Visual c++6.0,点编译与连接,不要点编译,不然会出错,这个程序就没用了,在强调一下:点编译与链接.然后点执行,就可以开始弹钢琴了.最后附有一 ...
- java编程计算器程序代码_即将步入大学的同学们注意了,初学编程,这些你需要认真铭记...
初学者要看懂代码首先从要需求分析了解,然后是系统分析,最后是块的理解.看懂代码其实不难,大抵不过是选择,分支,循环.语法如果看不懂,那就需要补补基础,先弄清楚这段代码要做什么,有说明最好,可以帮助理解 ...
- c语言程序代码_10道C语言笔试模拟题,来看看你掌握的怎么样?
C语言 1.分析下面的C代码,它的运行结果可能是: #include<stdio.h> int main(void) {int i = 0;if (i = 1)printf("i ...
- c语言中 程序各步作用,C语言学习网总结C语言学习五步曲
很多人对C语言的第一感觉就是太难了,很难理解这种语言,也不知道该如何来理解,书也看了,视频也看了,但就是没什么太大的作用,那么C语言究竟该如何来学? C语言作为一门计算机语言,想要真正的掌握并使用需要 ...
- 用c语言为程序分配内存,关于C语言程序的内存分配的入门知识学习
C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 代码段(Code or Text):代 ...
- 【初涉C语言】程序员欢迎来到C语言的世界!
计算机发展史 机器语言 所有的代码里面只有0和1 优点:直接对硬件产生作用,程序的执行效率非常高 缺点:指令又多又难记.可读性差.无可移植性 汇编语言 符号化的机器语言,用一个符号(英文单词.数字)来 ...
- 非专业c语言,非专业程序员如何学好C语言
原标题:非专业程序员如何学好C语言 什么是C语言?怎么学好C语言?C语言能做什么? 想到那些对C语言刚入门的朋友,对很多知识还一知半解,今天就给大家推荐一本书! 你以为我说的是这本? 骗你的,怎么可能 ...
- c语言300行代码大作业,C语言300行代码
<C语言300行代码>由会员分享,可在线阅读,更多相关<C语言300行代码(3页珍藏版)>请在人人文库网上搜索. 1.include #include #include #in ...
最新文章
- 双绞线是计算机网络的一种通信线路吗,计算机网络环境的信道传输技术分析
- Codemirror-开源在线代码编辑器
- S3C6410设备时钟源选择、启动方式选择和内存映射
- Oracle-修改用户密码为UNLIMITED
- Java13-day04【Integer、int和String的相转、自动装箱和拆箱、Date、SimpleDateFormat、Calendar、异常、try...catch、throws】
- ib课程计算机科学内容,新的IB计算机课程主要学习什么内容?有什么新的特点呢?...
- jvm什么是本地方法
- shell与常用命令
- pycharm的安装
- python请编写程序、生成随机密码_利用Python如何生成随机密码
- microsoft visual c++全家桶_Adobe 2020 MAC全家桶最新版不闪退
- SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
- 基于TCP和多线程实现无线鼠标键盘-Socket(1)
- 多分类的梯度以及logsumexp
- leetcode刷题笔记(3)(python)
- linux 与win共享文件夹
- python适用于什么系统_Python适合在什么系统
- RHCS集群 切换时defunct僵尸进程解决方案
- Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结
- differentiable rendering可微分渲染
热门文章
- 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...
- 软键盘遮挡住popupWindow问题
- Jquery 屏蔽右键菜单,识别右键事件
- 直方图均衡化 原理、流程、公式推导及matlab实现
- 华为机试HJ84:统计大写字母个数
- html 文章阅读次数,关于浏览次数和浏览次数缓存的问题
- js判断数组中重复元素并找出_javascript查找数组中重复元素的方法
- 华为怎么删除自带的音乐_华为手机独有的这个模式,让睡觉更舒畅
- 怎么只要小数部分C语言,如何得出一个浮点数的小数部分,要把各个位保存到一个数组里边。...
- 第0003 天:论团队分工、成长