范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C编程案例入门计算器之一般实现

  上一节我们基本完成了界面设计和事件响应,这次我们继续来丰富功能。
  我先讲按正常的思路来实现。
  比如这样的字符输入1+1+1-1
  用我们人眼+人脑来计算,一看就是连加连减,而且还可以做简便运算,1-1=0就消了,结果就是1+1=2,非常容易。
  但要想让程序读懂并且能够计算正确,却不是一件容易的事,它就相当于是个刚出生的婴儿,你得教它怎么做。
  仅针对这个输入,我的思路是设置一个结果变量分别为result,初始值为0,还要记录一个上一次的符号变量last_operator,然后不断循环,找到每一个数字,用result和last_operator去跟这个数字做运算。大概需要这样的步骤:循环处理每个字符;如果是数字,则附加到一个变量保存;如果是运算符,将前面保存的变量转换成数字,然后用last_operator跟result做运算,更新result值,重置变量为空;继续循环,直到所有字符处理完毕;
  按照这个思路,我编写了下面的代码:                string input = tbxInput.Text;                  double result = 0;                 string temp = "";                 char last_operator = "+";                 foreach (char c in input)  //循环遍历每个字符                 {                     if (char.IsDigit(c))   //如果是数字                     {                         temp += c;                     }                     else                     {                         if (!string.IsNullOrEmpty(temp))  //如果不是空字符                         {                             switch (last_operator)                             {                                 case "+":                                     result += int.Parse(temp);                                     break;                                 case "-":                                     result -= int.Parse(temp);                                     break;                             }                         }                         last_operator = c;                         temp = "";                     }                 }                  if (!string.IsNullOrEmpty(temp))                 {                     switch (last_operator)                     {                         case "+":                             result += int.Parse(temp);                             break;                         case "-":                             result -= int.Parse(temp);                             break;                     }                 }
  逻辑倒是挺简单,之前没遇到过的函数我加了注释,应该不难理解。
  运行效果:
  细心的学员可能注意到,上面的代码中switch部分是一样的。对于代码相同或者是功能相似的部分,我们就提倡用函数进行封装,这样以后再使用的时候,直接调用这个函数就好了。比如,我们把上面用于计算的代码封装成下面的函数:        double calc_normal(double result, char op, string temp)         {             if (!string.IsNullOrEmpty(temp))  //如果不是空字符             {                 switch (op)                 {                     case "+":                         result += int.Parse(temp);                         break;                     case "-":                         result -= int.Parse(temp);                         break;                 }             }             return result;         }
  函数的声明:double calc_normal(double result, char op, string temp) 返回类型     函数名     变量类型及变量名
  这样在程序中,我们直接调用函数名的方式就好了。优化后的代码:                string input = tbxInput.Text;                  double result = 0;                 string temp = "";                 char last_operator = "+";                 foreach (char c in input)  //循环遍历每个字符                 {                     if (char.IsDigit(c))   //如果是数字                     {                         temp += c;                     }                     else                     {                         result = calc_normal(result, last_operator, temp);                         last_operator = c;                         temp = "";                     }                 }                  result = calc_normal(result, last_operator, temp);
  代码精简了不少,看起来也很清晰。实际执行结果,跟之前一样。
  函数,可以说是编程中的重中之重。我们经常听说很多经验丰富的老程序员,开发效率胜过十个新手,就是因为老程序员积累了丰富的类库,里面涵盖了各种各样的函数,这些函数都是经历过几年甚至十几年千万次的调用,通过无数次修改与Bug修复千锤百炼过的。想要什么功能就是一堆函数的组合,效率当然高了。拿我来说,我用C#开发了10多年,从一开始就慢慢建设并丰富自己的开发库,以前我开发出一个产品,可能需要1-2年的时间才能成型。现在,基于类库,开发出类似的产品,可能只需要2个月。当然类库的磨练也不是一蹴而就的,我现在的类库,至少经历了3次架构级别的调整。有点扯远了,归根结底一句话,编程也要学会积累。
  回到我们的功能。虽然有了一些进展,能够实现了连加连减,但是乘法和除法我们并没有涉及到,并且还有更复杂的,比如括号嵌套,这种:(1+2*(2+2/2))*2-2*2
  加减乘除外加括号嵌套,常规的字符串处理复杂度太高了。想要完美解决,可能相当于要做一个小型的编译器了。
  那要如何来解决呢?我们下节继续。

成都今起恢复普通护照办理!下午四点现场已排至299号今日(12月28日),记者从成都市出入境管理局获悉,目前成都全市各区(市县)出入境办证点已恢复受理审批公民因出国旅游访友申请普通护照。同时,开放办理澳门旅游签注。香港旅游签注自1月讣告!超快光学技术知名专家陈国夫逝世我国超快光学技术领域的知名专家陈国夫同志,因病医治无效,于2022年12月25日在西安逝世,享年82岁。陈国夫同志1940年10月出生于广东省,1968年毕业于北京大学。曾任中国科武汉是否需要扩容?面积仅约杭州12,GDP比成都少了2000余亿!说到湖北省的情况,相信大家都不会感到陌生,这个省份可以说处于祖国的心脏地带,是一个交通条件相当优越的区域。除此之外,湖北也是一个地方文化迷人经济发展快速的省份,境内拥有众多知名城市全球知名童星到哈佛学霸最后到奥斯卡影后她的人生是如何反转的?大家都知道娱乐圈有很多明星都是童星出身,这就意味着他们有更大的发展空间但是也不是每一个人都能走到最后,今天小编要说的也算是童星里发展比较好比较传奇的一位那就是娜塔莉波特曼1981年曹璋夫妇基业连亏3年改炒抗病毒概念安奈儿销售费16倍营销曹璋夫妇基业连亏3年改炒抗病毒概念安奈儿销售费为研发16倍靠营销谋突围据深交所消息,12月19日至12月23日,深交所对近期涨幅异常的安奈儿进行重点监控。抗病毒面料遭爆炒,11月中成都逛商场,又一波消费新场景来咯成都日报锦观新闻记者陈超成都逛商场又有新选择。连日来,记者走访多家商场发现,新场景带来了新体验有的商场另辟蹊径,打造美妆集合区,丰富爱美人士的消费选择有的商场聚焦新能源汽车,为购车欧文新战靴上那些奇怪文字令人费解的鸡汤文致敬电影爆裂鼓手北京时间12月28日,就在篮网队拿下9连胜之后,欧文再次成为球迷关注的焦点,不仅是因为他的球技,也因为他的球鞋,还有球鞋上那些奇怪的文字。在经历了一年多的分歧和戏剧性的事件之后,耐2022年值得一看的韩国电影盘点头条创作挑战赛韩国电影的粉丝们度过了美好的一年。随着像Netflix这样的流媒体继续投资韩国内容,以及演员阵容强大的项目在美国发行,2022年的韩国新电影从甜蜜的爱情喜剧到惊心动魄产业互联网的下半场,如何从C端转B端?消费互联网VS产业互联网1995年,中国正式开始进入互联网的时代,最早PC互联网的门户网站时代,诞生了新浪网易搜狐和腾讯四大门户网站的web1。0时代。随后随着BlogSNSWIK和上网课的孩子斗智斗勇,不妨试试这一招图片来自网络,侵删我终于在跟孩子上网课的斗智斗勇中扳回一局。前几天,女儿严肃地说妈妈,你给俺老师说一下我手机的摄像头坏了。我不假思索地说道那你用电脑吧,竟然忘了,我家的电脑没配摄像让明星家长都如此重视,给孩子做感统训练,家长要清楚这几点之前林志颖晒过带他儿子模拟过山车的视频,这个训练可以让孩子大脑前庭受到适当的刺激,有效地锻炼前庭平衡感。有效补充现代孩子缺乏的前庭刺激,除此之外,还能看见地上的感统教具过河石平衡桥
迷雾侦探电脑版下载电脑畅玩迷雾侦探模拟器钢筋水泥铸成的都市,在时间里逐渐苍老。新的城市从旧的残躯中发芽,生长成一片天空上的岛屿。十年前的悲剧似乎已被遗忘,或者被隐藏在心底深处,剩下伤痛者独自在黑暗里舔舐伤口。市长大选在即最新资讯丨元旦狂欢福利活动前瞻,限时召唤活动即将开启各位队长好呀歌子又和大家见面啦!新年将至,新世纪主城解锁元旦主题场景,街道和建筑都更换节日元素装饰,为大家营造欢快喜庆的元旦氛围。不仅如此,朱庇特兽限时召唤活动即将火热开启,策划大登录白拿英雄无归联动橙卡!漫威对决X蜘蛛侠3联动进行中由漫威正版授权,网易游戏与漫威娱乐联合开发的电影级卡牌竞技手游漫威对决于今日开启S4赛季,战斗女神希娜携全新机制振奋闪亮登场。与此同时,漫威对决X蜘蛛侠英雄无归电影联动仍在火热进行燃烧意志可以,憋了那么久的保底是一点都不改,就是头铁看到最新的官宣内容了吗,之前那么多人一直反馈的2。0保底,结果是一丢丢都没改。甚至还贴心地为玩家介绍起2。0的保底机制。可以可以,头铁这一块也是2。0级别的。1保底机制再提一下这个凌晨下火车时,游人为何宁愿入住洗浴中心,也不去酒店客房住出门在外的时候,多数人们都会遇到火车晚点的情况,原本是下午抵达目的地,也会因为各种原因,使得列车在凌晨在抵达目的地。(此处已添加小程序,请到今日头条客户端查看)一般来说,在凌晨下火印度最残酷的门,隔离出不同世界,一边是富人,一边是穷人提到印度,多数人都会自动贴上脏乱差的标签,我们对它的印象还停留在几十年前,还以为他们坐火车都是用挂票,其实,这些年来,印度发展速度是非常迅速的,虽说整体经济还比不上我们国家,但相对林书豪亲弟弟,1米83,自称模板库里!打了6年台湾联赛,水平如何2019年,林书豪参加一档篮球综艺节目时,曾谈到了自己的亲弟弟林书纬,并直言他很能打,比很多CBA联赛的后卫都更强,与外援相比的话,就是太瘦了。从未在内陆任何职业联赛露相,却能得到朱婷又有新消息!起诉5名网友诽谤,并要求追究他们的刑事责任文篮郭先生提及朱婷,对球迷们来说,自然是熟悉的,甚至可以说,是非常熟悉的。因为,朱婷是很多人心目中的女神,是很多人心目中中国女排,乃至是世界女排的第一人。这样的运动员,具备绝对的实孔令辉难回归!刘国梁曾派恩师邀请他出山,却被他婉拒近日,国内某体育品牌巨头迎来了30周年纪念日,孔令辉身为他家的首席代言人,曾给该集团以及众多国人带来过深刻的影响,值此特殊纪念日,孔令辉也受邀参与了纪念活动,并且与嘉宾们豪爽干杯,LOL令人失望选手公布,Nuguri失业Rekkles被抛弃,蛇蛇重返LPL前言年终岁尾,外媒对LOL一整年各战队引援进行评价,其中公布了2021年LOL战队令人失望的签约,大家熟悉的NuguriSwordArt以及Rekkles纷纷上榜。或许是受到上榜选LPL春季赛1月10日开启!揭幕战令人期待,这三组对决看点颇多北京时间12月30日,LPL官方宣布了一则大家非常感兴趣的消息,那就是明年春季赛的开赛时间已经敲定,将于2022年1月10日17点正式开启。17支战队跃跃欲试,经过转会期的阵容调整