【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...相关推荐

  1. java计算器程序代码实现加减乘除_Python+tkinter能实现计算器!太神奇了

    听说Python很强大,有第三方库啥事儿都能干,不仅能写一个计算器框架,还能实现加减乘除运算,听着甚是崇拜啊! 废话不啰嗦了,让我们一起来看看Python是如何把计算器用一个个代码实现的. 这里我们用 ...

  2. 钢琴软件c语言源代码,C语言钢琴程序代码.doc

    C语言钢琴程序代码.doc 把以下程序复制粘贴到Visual c++6.0,点编译与连接,不要点编译,不然会出错,这个程序就没用了,在强调一下:点编译与链接.然后点执行,就可以开始弹钢琴了.最后附有一 ...

  3. java编程计算器程序代码_即将步入大学的同学们注意了,初学编程,这些你需要认真铭记...

    初学者要看懂代码首先从要需求分析了解,然后是系统分析,最后是块的理解.看懂代码其实不难,大抵不过是选择,分支,循环.语法如果看不懂,那就需要补补基础,先弄清楚这段代码要做什么,有说明最好,可以帮助理解 ...

  4. c语言程序代码_10道C语言笔试模拟题,来看看你掌握的怎么样?

    C语言 1.分析下面的C代码,它的运行结果可能是: #include<stdio.h> int main(void) {int i = 0;if (i = 1)printf("i ...

  5. c语言中 程序各步作用,C语言学习网总结C语言学习五步曲

    很多人对C语言的第一感觉就是太难了,很难理解这种语言,也不知道该如何来理解,书也看了,视频也看了,但就是没什么太大的作用,那么C语言究竟该如何来学? C语言作为一门计算机语言,想要真正的掌握并使用需要 ...

  6. 用c语言为程序分配内存,关于C语言程序的内存分配的入门知识学习

    C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 代码段(Code or Text):代 ...

  7. 【初涉C语言】程序员欢迎来到C语言的世界!

    计算机发展史 机器语言 所有的代码里面只有0和1 优点:直接对硬件产生作用,程序的执行效率非常高 缺点:指令又多又难记.可读性差.无可移植性 汇编语言 符号化的机器语言,用一个符号(英文单词.数字)来 ...

  8. 非专业c语言,非专业程序员如何学好C语言

    原标题:非专业程序员如何学好C语言 什么是C语言?怎么学好C语言?C语言能做什么? 想到那些对C语言刚入门的朋友,对很多知识还一知半解,今天就给大家推荐一本书! 你以为我说的是这本? 骗你的,怎么可能 ...

  9. c语言300行代码大作业,C语言300行代码

    <C语言300行代码>由会员分享,可在线阅读,更多相关<C语言300行代码(3页珍藏版)>请在人人文库网上搜索. 1.include #include #include #in ...

最新文章

  1. 双绞线是计算机网络的一种通信线路吗,计算机网络环境的信道传输技术分析
  2. Codemirror-开源在线代码编辑器
  3. S3C6410设备时钟源选择、启动方式选择和内存映射
  4. Oracle-修改用户密码为UNLIMITED
  5. Java13-day04【Integer、int和String的相转、自动装箱和拆箱、Date、SimpleDateFormat、Calendar、异常、try...catch、throws】
  6. ib课程计算机科学内容,新的IB计算机课程主要学习什么内容?有什么新的特点呢?...
  7. jvm什么是本地方法
  8. shell与常用命令
  9. pycharm的安装
  10. python请编写程序、生成随机密码_利用Python如何生成随机密码
  11. microsoft visual c++全家桶_Adobe 2020 MAC全家桶最新版不闪退
  12. SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
  13. 基于TCP和多线程实现无线鼠标键盘-Socket(1)
  14. 多分类的梯度以及logsumexp
  15. leetcode刷题笔记(3)(python)
  16. linux 与win共享文件夹
  17. python适用于什么系统_Python适合在什么系统
  18. RHCS集群 切换时defunct僵尸进程解决方案
  19. Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结
  20. differentiable rendering可微分渲染

热门文章

  1. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...
  2. 软键盘遮挡住popupWindow问题
  3. Jquery 屏蔽右键菜单,识别右键事件
  4. 直方图均衡化 原理、流程、公式推导及matlab实现
  5. 华为机试HJ84:统计大写字母个数
  6. html 文章阅读次数,关于浏览次数和浏览次数缓存的问题
  7. js判断数组中重复元素并找出_javascript查找数组中重复元素的方法
  8. 华为怎么删除自带的音乐_华为手机独有的这个模式,让睡觉更舒畅
  9. 怎么只要小数部分C语言,如何得出一个浮点数的小数部分,要把各个位保存到一个数组里边。...
  10. 第0003 天:论团队分工、成长