C语言 | 计算器实现 version 2.
在之前版本中使用栈结构来实现,但由于51单片机不支持malloc函数,所以使用C语言又写了一个计算器版本。
通过数组存放值和操作符模拟栈操作。
实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define OK 1
#define ERROR 0
int InputJudge(char c); //判断函数是否为数字
float Calc(char optr, float num1, float num2);
char PriorityJudge(char optr1, char optr2);
int main()
{
char arrayChar[];
float arrayFloat[] = {};
char tempChar, optr, c;
float tempFloat, num1, num2;
int topChar = ;
int topFloat = ;
int i;
for (i = ; i < ; ++i)
{
arrayChar[i] = '';
}
arrayChar[topChar] = '#';
topChar++;
c = getchar();
while(c != '#' || arrayChar[topChar - ] != '#')
{
if (InputJudge(c))
{
arrayFloat[topFloat] = (float)(c - '');
topFloat++;
c = getchar();
/* 当连续输入数字时,计算十位数和百位数 */
while(InputJudge(c))
{
topFloat--;
tempFloat = arrayFloat[topFloat];
arrayFloat[topFloat] = (float)(tempFloat * + (c - ''));
topFloat++;
c = getchar();
}
if (c == '.')
{
i = ;
c = getchar();
do
{
topFloat--;
tempFloat = arrayFloat[topFloat];
tempFloat = tempFloat + ((c - '') / pow(, i));
i++;
arrayFloat[topFloat] = tempFloat;
topFloat++;
c = getchar();
}
while(InputJudge(c));
}
}
else
{
tempChar = arrayChar[topChar - ];
switch(PriorityJudge(tempChar, c))
{
case '<':
arrayChar[topChar] = c;
topChar++;
c = getchar();
break;
case '=':
topChar--;
c = arrayChar[topChar];
c = getchar();
break;
case '>':
topChar--;
optr = arrayChar[topChar];
topFloat--;
num2 = arrayFloat[topFloat];
topFloat--;
num1 = arrayFloat[topFloat];
arrayFloat[topFloat] = Calc(optr, num1, num2);
topFloat++;
break;
}
}
}
while(topFloat != )
{
topFloat--;
tempFloat = arrayFloat[topFloat];
printf("%f\n", tempFloat);
}
return OK;
}
float Calc(char optr, float num1, float num2)
{
switch(optr)
{
case '+':
return (num1 + num2);
break;
case '-':
return (num1 - num2);
break;
case '*':
return (num1 * num2);
break;
case '/':
return (num1 / num2);
break;
}
}
int InputJudge(char c)
{
switch(c)
{
case '':
case '':
case '':
case '':
case '':
case '':
case '':
case '':
case '':
case '':
return OK;
break;
case '.':
case '+':
case '-':
case '*':
case '/':
case '(':
case ')':
case '#':
return ERROR;
break;
default:
break;
}
}
char PriorityJudge(char optr1, char optr2)
{
int i, j;
char priorityTable[][] =
{
{'>', '>', '<', '<', '<', '>', '>'},
{'>', '>', '<', '<', '<', '>', '>'},
{'>', '>', '>', '>', '<', '>', '>'},
{'>', '>', '>', '>', '<', '>', '>'},
{'<', '<', '<', '<', '<', '=', ''},
{'>', '>', '>', '>', '', '>', '>'},
{'<', '<', '<', '<', '<', '', '='}
};
switch(optr1)
{
case '+':
i = ;
break;
case '-':
i = ;
break;
case '*':
i = ;
break;
case '/':
i = ;
break;
case '(':
i = ;
break;
case ')':
i = ;
break;
case '#':
i = ;
break;
}
switch(optr2)
{
case '+':
j = ;
break;
case '-':
j = ;
break;
case '*':
j = ;
break;
case '/':
j = ;
break;
case '(':
j = ;
break;
case ')':
j = ;
break;
case '#':
j = ;
break;
}
return priorityTable[i][j];
}
C语言 | 计算器实现 version 2.的更多相关文章
- 计算器(console version)
题目描述 请用python编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 输入描述 数字包括& ...
- C语言 | 计算器实现(中缀表示法/后缀表示法)
———————————————————————————————————————————— 实现原理: 每个操作数都被依次压入栈中,当一个运算符到达时,从栈中弹出相应数目的操作数(对于二元运算符来说是两 ...
- C语言计算器
地址: https://wenda.so.com/q/1371173683061754?src=140
- 用c语言写的简单计算器
这是自己在学习C语言,凭借自己的兴趣,将课本的知识运用后整理的关于C语言计算器的代码.计算器实现的功能有:加.减.乘.除.求余.功能简单,但对于初学者的我来说能把它写出来,排除每个错误依旧是个难题.前 ...
- 如何为Linux安装Go语言
导读 Go 语言又称为 golang, 是由 Google 最初开发的一种开源编程语言,其在设计时就遵循了简单.安全和速度的 3 大原则.Go 语言具有多种调试.测试.分析和代码审查工具,如今 Go ...
- go语言环境安装
Go 是一个开源的编程语言,被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言. 1. 准备环境并安装依赖包 创建centos 7.6 64bit的虚拟机. 安装 ...
- Go语言学习笔记1
1.Go语言环境搭建及基础知识 Go语言官方网站(http://golang.org) 代码包文档网站(http://godoc.org) Go语言中文网(http://studygolang.com ...
- android——实现多语言支持
我们知道,建好一个android 的项目后,默认的res下面 有layout.values.drawable等目录.这些都是程序默认的资源文件目录,如果要实现多语言版本的话,我们就要添加要实现语言的对 ...
- Android原生多语言切换方案,兼容Android10
前言 一个应用若需要国际化,至少需要支持中文和英语这两种语言,而同时随着谷歌的系统的更新,安卓系统可以设置当前语言的首选语言.因此,本文立足于此,多语言的切换方案为:App固定的文字内容,跟随系统,中 ...
随机推荐
- Ajax 生成流文件下载(实现代码)
// 绑定导出按钮 $("#btnExport").clickCheckLogin(function () { var form = $("<form> ...
- C、C++ static 的作用
1.隐藏 当同时编译多个文件时,所有未加static关键字的全局变量和函数都具有全局可见性. 例如:同时编译两个源文件 //ghz.c #include <stdio.h> char a ...
- 学习PHPCMS需要掌握的函数
路径:phpcms\libs\classes\model.class.php /** * 执行sql查询 * @param $where 查询条件[例`name`='$name'] * @param ...
- HDU 1556 Color the ball【差分数组裸题/模板】
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一 ...
- python3开发进阶-Django框架的中间件的五种用法和逻辑过程
阅读目录 什么是中间件 中间件的执行流程 中间件的逻辑过程 一.什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围 ...
- Problem U: 零起点学算法19——输出特殊值
#include<stdio.h> int main() { printf("%%d"); ; }
- Spark1.4安装问题
1)按照<大数据Spark企业级实战>第2章中的方法构建Spark集群,最后发现master可以正常启动,但是worker却都没有启动,原因是不能直接使用在slave模版文件 slaves ...
- Java高级架构师(一)第10节:Spring+Mybatis实现DAO
maven配置memcached.jar 由于目前java memcached client没有官方的maven repository可供使用,因此使用时需要手动将其安装到本地repository. ...
- 使用jQuery操作DOM(ppt练习)
<!DOCTYPE html> <html> <head> <title>test3.html</title> <meta http- ...
- java-List集合遍历,删除或增加特定的元素
1.for(int i=0; i<list.size(); i++) 2.for(Object object : list) 实质调用的 list.iterator() 3.list.iter ...