C语言字符计算器
这又是以前的一篇文章,觉得有纪念价值。就发过来了。
去年暑假自己下了C语言实战105例,看了几个基础的,其中有一个是关于字符计算器的
我看起来蛮简单的,不过自己做起来我觉得还是做得少了,懵懵懂懂的。
现在想起那个觉得蛮有趣的(想想以前跟老大学做按钮计算器没做成,失败啊!~~~)
于是又重新写了一下,不过还是忍不住看了下源码,呵呵,真菜
不过发现里面有一点点错误,例如:不能计算 6 /4;只能计算 6/4 。
也许作者当时只想把原理展示出来,而把更多的细节留给了我们,不错的办法。
然后我自己也尝试着赶紧了一下:
#include
#include
#include
char token; //保存操作符
int error = 1;//error 为0表示计算中有错误
int mid();
int high();
int Match(char c)
{
//匹配成功则读入下一个字符并返回1
if(c == token)
{
while((token = getchar()) == ' ')
;
return 1;
}
//失败则返回0
else
return -1;
}
int low()
{
int result;
result = mid(); //读入操作数
while('+' == token || '-' == token) //计算多个加法与减法
if('+' == token) //计算加法
{
Match('+');
result += mid();
}
else if('-' == token) //计算减法
{
Match('-');
result -= mid();
}
return result;
}
int mid()
{
int result;
int div; //除数
result = high(); //读入操作数
while('*' == token || '/' == token) //计算多个乘法和除法
if('*' == token) //乘法
{
Match('*'); //匹配获取下一个字符
result *=high();
}
else if('/' == token) //除法
{
Match('/');
div = high(); //先读入除数
if(div) //除数不能为0
{
result /= div;
}
else
error = 0;
}
return result; //返回结果
}
int high()
{
int result;
if('(' == token)
{
Match('('); //获取输入中的下一个字符
result = low(); //计算括号内的表达式
Match(')'); //获取输入中的下一个字符
}
else if(token >= '0' && token <= '9')
{
ungetc(token,stdin); //如果token是数字,返还给输入流
scanf("%d",&result); //从输入中获取数字
while((token = getchar()) == ' ')
; // 消除空格符并读入下一个字符
}
else
error = 0;
return result; //返回结果
}
int main()
{
int result;
char title[] = "小小程序菜鸟野兔 qq:371514614 欢迎大家加我"; //做个小广告
SetConsoleTitle(title); //设置窗口标题
printf("*****************************************\n");
printf("**Welcome to use this simple calculator**\n");
printf("**Please input a multinomial like **\n");
printf("** 6-3*(5-1)/2+14/7 **\n");
printf("*****************************************\n");
while((token = getchar()) == ' ')
; //载入第一个字符
result = low(); //从低到高进行计算
if('\n' == token && (error != 0)) //按下回车则开始计算结果并判断计算过程中是否出错
printf("The answer is:%d\n",result);
else
printf("出错了\n");
getch(); //让屏幕停留一会
return 0;
}
我很佩服写出这个程序的人,刚开始拿到这程序的时候,我根本
就不相信它可以正确执行,后来直到自己运行了一下。然后我又想着它的工作
原理是什么呢(没办法,我就喜欢刨根问底。嘻嘻)。就自己看源码,根据注释慢慢看
。可那时候我刚学,递归都不是很懂,遇到不理解的,就把这里改一下在运行
看看有什么不同。就这样跌跌撞撞的弄懂了其中的原理,也让我自己成了一回计算机,
执行了一下这个程序。不过我真觉得自己模拟计算机执行代码很好。很能锻炼能力。
看看以前写的代码,心里还是挺有感触的。以前自己不怕死,不弄明白饭也不吃。
现在呢?我跟自己说想通了,不会就不会呗。锐气也就被磨掉了。
带着这样的想法,很久没有接触过编程了。昨天在群里被他们说成是“大牛”其实我
只是一个小菜鸟。
有个朋友说他以前是这个专业的,现在要重新拾起来。我也是这么想的,重新拾起来。
加油,大笨兔!!! :)
原文出自:http://www.dabentu.com
转载于:https://blog.51cto.com/dabentu/829338
相关文章:

一文看尽目标检测:从YOLO v1到v3的进化之路
本文转载自:http://www.mamicode.com/info-detail-2314392.html导语:如今基于深度学习的目标检测已经逐渐成为自动驾驶、视频监控、机械加工、智能机器人等领域的核心技术,而现存的大多数精度高的目标检测算法,速度较慢࿰…

【EMC】EMC屏蔽设计
1、屏蔽设计的基本原则: 蔽体结构简洁,尽可能减少不必要的孔洞,尽可能不要增加额外的缝隙;避免开细长孔,通风孔尽量采用圆孔并阵列排放。屏蔽和散热有矛盾时尽可能开小孔,多开孔,避免开大孔&am…

js控制表格隔行变色
只是加载时候隔行变一个颜色,鼠标滑动上去时候没有变化 <table width"800" border"0" cellpadding"0" cellspacing"0"> <tr><td>不变色</td></tr><tbody id"goaler"><tr…

jQuery实例——仿京东仿淘宝列表导航菜单
以前看着京东,淘宝的导航做的真好,真想哪一天自己也能做出来这么漂亮功能全的导航菜单。今天弄了一下午终于自制成功,主要使用jQuery和CSS,实现功能基本和京东一样。 功能介绍: 1、鼠标停留导航; 2、根据子…

【Ubuntu】使用过的ubuntu工具记录
1、UnixBench UnixBench性能测试,和windows的鲁大师差不多。 2、smartctl 测试磁盘性能 sudo apt install smartmontools 3、cpufrequtils cpu频率查看、设置工具集:cpufreq-inf、cpufreq-set sudo apt install cpufrequtils 4、stress cpu满负荷…

解救被困传销女演员 助人减肥找老婆 蚂蚁森林又现神功能
近日,一篇《女演员被传销组织拘禁30多天 竟因蚂蚁森林幸运逃离》的报道引发了全网热议。网友纷纷表示:蚂蚁森林功能强大,不仅能帮人减肥、找老婆,还能在关键时刻保命! 珍惜偷你能量的好友 因为关键时刻能保命 据北京晨…

“智能+”时代,看见别人看不见的才是赢家
当科技、商业和社会均发生天翻地覆的变革,我们可以确定的是,“智能”时代的浪潮已掀起波澜。这将是智慧无处不在的时代,曾经无法解决的问题,都将在科技的发展下找到答案;这也是技术普惠万物的时代,创新型应…

CSS a控制超链接文字样式
超链接的代码<a href"http://www.divcss5.com/" target"_blank" title"关于div css的网站">DIVCSS</a>解析如下:href 后跟被链接地址目标网站地址这里是http://www.divcss5.com/target _blank -- 在新窗口中打开链接 _pa…

3分钟快速实现:9种经典排序算法的可视化
作者 | 爱笑的眼睛 来源 | 恋习Python(ID:sldata2017)最近在某网站上看到一个视频,是关于排序算法的可视化的,看着挺有意思的,也特别喜感。▼6分钟演示15种排序算法不知道作者是怎么做的,但是突然很想自己…

【Qt】Qt再学习(一):Application Example
1、QCommandLineParser 命令行解析类 常用接口 QApplication app(argc, argv);QCommandLineParser parser;parser.setApplicationDescription(QCoreApplication::applicationName());parser.addHelpOption(

沃森世界研讨会前瞻:AI服务 了解客户情绪
科技讯10月19日消息,据国外媒体报道,“沃森世界”研讨会(World of Watson)将于10月24日至27日在拉斯维加斯曼德勒湾举办,与会者将能够了解沃森目前的进展,并深入了解将来沃森将从事的一些令人兴奋的事情。10月14日一整日的会谈中&…

《人月神话》——外科手术队伍——笔记!
本章讨论了一个问题“如何在有意义的时间进度内创建大型的系统?” 软件经理测试出来的数据显示“经验和实际的表现没有相互的联系”。 *需要协作沟通的人员的数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟…

直接上手!不容错过的Visual Studio Code十大扩展组件
作者 | David Neal译者 | 谭开朗,责编 | 屠敏转载自CSDN(ID:CSDNnews)各大平台与各种语言的开发人员都在使用Visual Studio Code,我对此感到惊讶。Stack Overflow发布的2019年开发者调查结果显示,VS Code占…

【Qt】Qt再学习(二):Bars Example(Q3DBars)
1、简介 Bars example显示了如何使用Q3DBars制作3D条形图,以及如何结合使用小部件来调整几种可调节的质量。该示例显示了如何: 使用Q3DBars和一些小部件创建应用程序 使用QBar3DSeries和QBarDataProxy将数据设置为图形 使用控件调整一些图形和系列属性…

记录错误信息的行数
1.try catch 记录错误信息的时候,如果报错了,我们只能粗略估算是什么错误,但如果能够具体知道是哪行错误的话,对错误的分析就能够快速定位问题。 2.只需要记录到错误的行号,就能快速定位问题。 3.ex.stackTrace 就可以…

android中PreferencesActivity的使用(一)
在使用android手机的时候,尤其是在操作软件设置时,我们经常见到这样的界面: 这是怎么来实现的的呢?其实android已经提供了相应的类和方法,当进行简单数据存储时(比如:软件配置参数)a…

吴恩达团队:神经网络如何正确初始化?
来源 | deeplearning.ai编译 | 刘静转载自图灵TOPIA(ID:turingtopia)初始化对训练深度神经网络的收敛性有重要影响。简单的初始化方案可以加速训练,但是它们需要小心避免常见的陷阱。近期,deeplearning.ai就如何有效地初始化神经网络参数发表了交互式文章…

【Qt】Qt再学习(三):Chart Themes Example(常用图表)
1、简介 该示例中展示了各种图表以及在不同内置主题下的外观。 2、使用到的类 QChart:图表抽象类,继承自QGraphicsWidget QChartView:显示图表窗口,继承自QGraphicsView QLineSeries:折线图 QAreaSeries:面积图 QStackedBarSeries:分段条状图 QScatterSeries:散点图…

eyoucms range 范围判断标签
【基础用法】名称:range功能:范围判断标签包括in notin between notbetween四个标签,都用于判断变量是否中某个范围。语法:{eyou:range name$eyou.field.typeid value1,2,3,4 typein}输出内容{/eyou:range}参数:name 变…

现实迷途 第七章 特殊客户
第七章 特殊客户 注:原创作品,请尊重原作者,未经同意,请勿转载,否则追究责任。 江北一般都是上午待在办公室里,搜集信息或整理以前做过的系统,下午才出去站街招客。 站街站了一段时间后…

BZOJ1396:识别子串(SAM)
Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长.Sample Input agoodcookcooksgoodfoodSample Output 1 2 3 3 2 2 3 3 2 2 3 3 2 1 2 3 3 2 1 2 3 4 Solution 1A挺开心的省…

【Qt】Qt再学习(四):Editable Tree Model Example
1、简介 这个示例,展示了如何编辑项目、自定义标题以及插入和删除行和列的功能。 项视图模型的标准用法是继承QAbstractItemModel,然后重载纯虚函数:flags()、data()、 headerData()、columnCount()、 rowCount()、 index() 、parent().等; 对于可编辑项目的实现需要重载接…

千亿级照片,毫秒间匹配最佳结果,微软开源Bing搜索背后的关键算法
【导读】随着互联网的普及,搜索成为人们最常用的基本功能之一,但这背后的秘密是什么呢?近日,微软公司介绍了他们是其如何应对用户搜索习惯的改变,并开源了支撑 Bing 搜索背后的算法。 作者 | Charlie Waldburger 译者 …

【Qt】Qt再学习(五):HTTP Example(HTTP下载文件的示例)
1、简介 此示例演示一个简单的HTTP客户端如何从远程主机获取文件。 2、说明 QUrl:url抽象类 QUrl::fromUserInput:从QString转换成QUrl QNetworkAccessManager:网络访问API围绕一个QNetworkAccessManager对象构造,该对象保存其发送的请求的通用配置和设置。创建QNetwork…

面对互联网一线大厂,这些技术你需要了解!
2019 年 5 月 26 - 27 日,由中国 IT 社区 CSDN 与数字经济人才发展中心联合主办的第一届 CTA 核心技术及应用峰会将在杭州国际博览中心召开。近 500 名开发者将齐聚于此,共同交流探讨机器学习和知识图谱的技术及行业落地趋势。会议将聚焦机器学习和知识图…

Android定制:修改开机启动画面
转自:https://blog.csdn.net/godiors_163/article/details/72529210 引言 Android系统在按下开机键之后就会进入启动流程,这个过程本身需要一些时间,而面向用户的往往是厂商定制的一些宣传用的比较绚丽的启动画面。我们在定制自己的系统时&am…

盛大游戏卷入“沙巴克”商标之争
4月12日上午消息,沸沸扬扬的“沙巴克”商标之争再次升级,盛大游戏(微博)也被卷入其中。美国咖啡连锁企业星巴克以“商标侵权”为由将国家商标评审委告上法庭,认为其批准的“沙巴克”商标和“星巴克”近似,要求法庭复审。[/p][p23,…

iOS开发经验总结
在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑)。 一、 iPhone Size 二、 给navigation Bar 设置 title 颜色 123UIColor *whiteColor [UIColor whiteColor];NSDictionary *dic [NSDictionary dictionaryWit…

焦虑的 BAT、不安的编程语言,揭秘程序员技术圈生存现状!
【编者按】在迭代不休的技术圈中,仅在过去的一个月期间,我们见证了有史以来第一张黑洞照片的诞生;经历了为让人义愤填膺的 996;思考了作为程序员的年龄之槛;膜拜了技术大神的成长历程;追逐了如编程语言、人…

【Qt】Qt再学习(六):Qt中JSON保存和加载的示例
1、简介 该示例演示如何保存和加载JSON格式文件,涉及到的类有:QJsonDocument, QJsonObject and QJsonArray. 2、说明 2.1 QJsonDocument QJsonDocument类提供了一种读取和写入JSON文档的方法。 使用QJsonDocument::fromJson()将JSON文档从其基于文本…