题记(41)--简易计算器

2024-02-14 22:20
文章标签 41 简易 计算器 题记

本文主要是介绍题记(41)--简易计算器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、题目内容

二、输入描述

三、输出描述

四、输入输出示例

五、完整C语言代码


一、题目内容

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

二、输入描述

  测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

三、输出描述

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

四、输入输出示例

输入:

1 + 2
4 + 2 * 5 - 7 / 11
0

输出:

3.00
13.36

五、完整C语言代码

AC代码~#include<stdio.h>
#include<string.h>int IsDigit(char s) {if ('0' <= s && s <= '9')return 1;return 0;
}int Isch(char s) {if (s == '+' || s == '-' || s == '*' || s == '/')return 1;return 0;
}double cal(double a, double b, char tmp) {if (tmp == '+')return a + b;else if (tmp == '-')return a - b;else if (tmp == '*')return a * b;elsereturn a / b;
}int main() {double s1[100]; // 数字栈char s2[100];   // 符号栈int top1, top2; // 二者指针char s[200];while (gets(s)) {if (strcmp(s, "0") == 0)break;top1 = top2 = -1;int i = 0;while (s[i] != '\0') {if (IsDigit(s[i])) {int num = 0;while (IsDigit(s[i])) {num = num * 10 + (s[i] - '0');i++;}top1++;s1[top1] = num * 1.0;} else if (Isch(s[i])) {if (top2 != -1) { // 符号栈不空情况if (s[i] == '+' || s[i] == '-') {while (top2 != -1) {char stmp = s2[top2];top2--;double n1 = s1[top1];double n2 = s1[top1 - 1];top1 = top1 - 1;       // 本应减2,后面加1,所以减1double tmp = cal(n2, n1, stmp);s1[top1] = tmp;}} else {while ((s2[top2] == '*' || s2[top2] == '/') && top2 != -1) {char stmp = s2[top2];top2--;double n1 = s1[top1];double n2 = s1[top1 - 1];top1 = top1 - 1;       // 本应减2,后面加1,所以减1double tmp = cal(n2, n1, stmp);s1[top1] = tmp;}}}top2++;s2[top2] = s[i];i++;} elsei++;}while (top2 != -1) {    // 结束后运算栈内剩余char stmp = s2[top2];top2--;double n1 = s1[top1];double n2 = s1[top1 - 1];top1 = top1 - 1;       // 本应减2,后面加1,所以减1double tmp = cal(n2, n1, stmp);s1[top1] = tmp;}printf("%.2f\n", s1[0]);}return 0;
}

这篇关于题记(41)--简易计算器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709726

相关文章

用Java打造简易计算器的实现步骤

《用Java打造简易计算器的实现步骤》:本文主要介绍如何设计和实现一个简单的Java命令行计算器程序,该程序能够执行基本的数学运算(加、减、乘、除),文中通过代码介绍的非常详细,需要的朋友可以参考... 目录目标:一、项目概述与功能规划二、代码实现步骤三、测试与优化四、总结与收获总结目标:简单计算器,设计

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

通过C#和RTSPClient实现简易音视频解码功能

《通过C#和RTSPClient实现简易音视频解码功能》在多媒体应用中,实时传输协议(RTSP)用于流媒体服务,特别是音视频监控系统,通过C#和RTSPClient库,可以轻松实现简易的音视... 目录前言正文关键特性解决方案实现步骤示例代码总结最后前言在多媒体应用中,实时传输协议(RTSP)用于流媒体服

海龟绘图简易教程|Turtle for Python

turtle 是 python 内置的一个比较有趣味的模块,俗称 海龟绘图,它是基于 tkinter 模块打造,提供一些简单的绘图工具,海龟作图最初源自 20 世纪 60 年代的 Logo 编程语言,之后一些很酷的 Python 程序员构建了 turtle 库,让其他程序员只需要 import turtle,就可以在 Python 中使用海龟作图。 原文链接|海龟绘图简易教程 1. 基本

使用jetty和mongodb做个简易文件系统

使用jetty和mongodb做个简易文件系统 - ciaos 时间 2014-03-09 21:21:00   博客园-所有随笔区 原文   http://www.cnblogs.com/ciaos/p/3590662.html 主题  MongoDB  Jetty  文件系统 依赖库: 1,jetty(提供http方式接口) 2,mongodb的java驱动(访问mo

HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题

本文旨在纪录自己对TextTimer使用过程的疑惑问题 我在查看教程时候,发现很多博客在onTimer(event: (utc: number, elapsedTime: number) => void) 这里提到elapsedTime:计时器经过的时间,单位为毫秒。我不清楚是否为版本问题。 在我查看version11和version10的api时候,说的都是设置格式的最小单位。 经过个人检验的

数据库系统 第41节 数据库分区简介

数据库分区是一种数据库设计技术,用于将大型表或索引的数据分布到不同的物理区域,以提高查询性能、优化数据管理、简化维护任务,并提高数据的可用性。下面我将详细介绍每种分区类型,并结合伪代码或概念性的源代码来说明其实现方式。 1. 范围分区 (Range Partitioning) 范围分区是根据某个列的值范围来划分数据。例如,可以按照日期或数值范围来分区。 示例场景:一个订单表,按年份分区。

QT学习之计算器

网格布局初尝试,快速构建计算器 项目结构: wident.h拖动建立界面,20个button,一个lineedit 布局好后整体网格布局调整,依次给每个案件输入文本,并改objectname方便后期辨识 为了在lineedit显示数字,转到槽,编辑点击事件,如显示“1” void Widget::on_pushButton1_clicked(){expression += "1";u

Arcgis字段计算器:随机生成规定范围内的数字

选择字段计算器在显示的字段计算器对话框内,解析程序选择Python,勾选上显示代码块, 半部分输入: import random; 可修改下半部分输入: random.randrange(3, 28) 表示生成3-28之间的随机数 字段计算器设置点击确定完成随机数的生成,生成的随机数如下图所示。

Vue初学-简易计算器

最近在学习Vue的指令,做了一个简易计算器,比较适合刚入门的人参考学习。用到的知识点有: 1.插值表达式 2.v-model,双向绑定+、-、*、/、**等操作符 3.v-show,控制操作数2是否显示,乘方时不显示操作数2 4.methods选项,定义了calculate ()方法,实现各种运算 5.watch选项,监听selected的值的变化。 下面是程序的执行效果: 如果选择的是**乘