#include <stdio.h>
#include <string.h>
#include <stdlib.h>int Preemption(char a, char b)   //符号优先级比较,a为当前读入,b为栈顶元素
{int c;          //c反馈指令信息 0.结束 1.弹出 2.进栈 3.删除当前元素及栈顶元素 4.报错switch (a) {case '#':   //输入的符号位#,则程序开始运算结果,并输出出来,程序结束if (b == '#') c = 0;else c = 1;break;case '+':if (b == '#' || b == '(') c = 2;//字符为+号,则c为2,数值开始进栈else c = 1;break;case '-':if (b == '#' || b == '(') c = 2;//字符为-号,则c为2,数值开始进栈else c = 1;break;case '*':if (b == '*' || b == '/') c = 1;//字符为*号,则c为1,数值开始进栈else c = 2;break;case '/':if (b == '*' || b == '/') c = 1;//字符为/号,则c为1,数值开始进栈else c = 2;break;case '(':           //字符为(号,则c为2,优先开始运算( )字符c = 2;break;case ')':if (b == '(') c = 3;  //字符为()号,则c为3 小括号里的运算结束 ,弹出数值else c = 1;break;default :c = 4; //若都没有正确,则显示报错信息printf("输入信息错误,请重新开始输入!");break;}return c;  //返回数值C 看是否能进行下一步的程序运算
}//主函数运行调用
int main() {char str[50] = {"\0"};      //定义一个长度为50的字符变量数组char *p = str;              //定义字符串指针pdouble *p3, *p4, a = 0, b = 0;  //数字栈 指针栈底p3  栈顶p4  初始化栈为空char *p1, *p2;          //符号栈 指针 栈底p1  栈顶p2  表示char stack1[20];               //定义符号栈 栈顶指针p2,栈底指针p1double stack2[20];             //定义数字栈 栈顶指针p4,栈底指针p3p1 = p2 = stack1;               //  符号栈结合栈顶p1  栈低p2p3 = p4 = stack2;               //  数字栈结合 栈顶p3  栈低p4*p2++ = '#';            //符号栈 栈顶p2先被赋值为#,然后进行值得增加,知道#号出现才停止增加printf("请输入需要计算的算术表达式:");gets(str);      //获取输入的运算字符strcat(str, "#"); //输入的为#号时,则输入结束,开始输出结果while (*p != '\0') {     //当指针不为0时,开始循环if (*p <= '9' && *p >= '0') {   //输入的数值,需要是在0-9之间的个位数a = a * 10 + (*p - '0');    //if (*(p + 1) > '9' || *(p + 1) < '0') { //*p4++ = a;a = 0;}p++;} else {switch (Preemption(*p, *(p2 - 1))) {    //符号栈 栈顶指针为0,则输出结果,说明需要输入的运算已经输入完毕case 0:printf("计算结果为:%lf\n", *p3);p++;break;case 1:                         //栈顶值为1 ,则数字栈开始减少b = *--p4;switch (*(--p2)) {case '+':*(p4 - 1) = *(p4 - 1) + b;break;case '*':*(p4 - 1) = *(p4 - 1) * b;break;case '-':*(p4 - 1) = *(p4 - 1) - b;break;case '/':*(p4 - 1) = *(p4 - 1) / b;break;}break;case 2:*p2++ = *p++;break;case 3:p++;p2--;break;case 4:printf("程序读到了无法计算的符号,出错了\n");p++;break;}}}return 0;
}

实现一个简单的计算器,输入一个包含圆括号、加减乘除、求余等符号组成的算术表达式字符串,输出该算术表达式的值相关推荐

  1. android简易计算器(两位数的加减乘除求余)

      该项目是两年前刚学android时,课堂上老师布置的一个作业, 要求是:能够实现两位数(正数或负数)的加减乘除以及求余的功能. 一.简易计算器界面展示 1.两位数的加法 2.两位数的减法 3.两位 ...

  2. 用python编写一个简单的计算器

    计算器功能与组成部分 基本功能 创建简单的操作界面 键盘快捷键 屏幕和显示部分 数字按钮和功能键 负号和小数点的输入 在数据中插入逗号 核心计算部分 次方运算 返回和清除 自定义设置 基本功能 一个简 ...

  3. C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。

    设计一个简单的计算器,完成两个数的加.减.乘.除.取余.(根据输入的运算符,选择相应的运算,用switch语句实现. 实验代码: #include <stdio.h> #include & ...

  4. 编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式,操作数

    编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式,操作数 首先,先写出各类计算的函数,参数从主函数中提取,返回计算后所得的值 因计算器不只要求能计算加减乘除,所以所有函数类型都为doubl ...

  5. c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。

    题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...

  6. 用switch语句编程设计一个简单的计算器程序

    用switch语句编程设计一个简单的计算器程序. 要求根据用户从键盘输入的表达式(注意操作数与运算符之间没有空格): 操作数1 运算符op 操作数2 计算表达式的值,指定的算术运算符为加(+).减(- ...

  7. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  8. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  9. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  10. 正则表达式应用:实现一个简单的计算器

    实现一个简单的计算器,代码如下: 下面的函数用来检验数学表达式的合规性,当然此处只实现两个检验:(1)括号应该闭合 (2)不能出现字母 def check_expression(str):check_ ...

最新文章

  1. 其他发行版本安装深度音乐播放器
  2. Android/Java 获取一个byte[]的真实编码,用于解决乱码问题
  3. Flutter 动画全解析(动画四要素、动画组件、隐式动画组件原理等)
  4. ajax不执行_好程序员Java学习路线分享原生Ajax的使用
  5. VTK:离散行进立方体用法实战
  6. com.sec.android.app.smartclipservice,EPR Aerospace News
  7. 【POJ2774】Long Long Message,第一次的后缀数组
  8. 【Kafka】Kafka 增量 Rebalancing: Support and Policies
  9. 年总结(三):风雨征程一年机房路
  10. C# 数组转换为DataTable 的三个方法
  11. 求实数的整数部分和小数部分python_python求实数的整数部分
  12. 正则表达式与文件格式处理-Linux(笔记)
  13. swift Key Path Layer.borderColor/Layer.borderUIColor 设置边框为黑框 颜色无效
  14. 又一个吊打百度网盘的开源神器,还是99年妹子开发的
  15. RL策略梯度方法之(十八): Importance Weighted Actor-Learner Architecture (IMPALA)
  16. KMS命令激活office2016
  17. Ubuntu 18.04 安装Wine 微信
  18. oracle11g安装EM配置失败,oracle 11g Enterprise Manager配置失败
  19. VB6如何引用VBDX9.tlb-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(2)
  20. 考研英语前缀总结·十六

热门文章

  1. ELO(埃洛匹配分制度)Java篇
  2. BP神经网络通俗教程(matlab实现方法)
  3. 计算机等级考试二级 Python 语言程序设计考试大纲(2022 版)
  4. 请用SQL查询:昨天所有用户的签到和签退时间
  5. t3网络计算机是空白,用友T3登录界面服务器那一行是空白的?
  6. ai前世识别_AI人脸识别前世今生app-AI人脸识别前世今生软件下载v2.0-西西软件下载...
  7. 餐饮管理系统(JavaWeb+SSH+MySQL)
  8. react脚手架创建项目报错,ReactDOM.render is no longer supported in React 18.
  9. 文献阅读---玉米干旱响应和耐受性基因表达的调控变异定位
  10. 【TS】1552- 浅谈TS运行时类型检查