一个计算器的C语言实现

article/2025/11/7 18:45:20

今天在读《编译原理及实践》时,看到了一个简单的整数计算器的实现。

按照书上的思路,我稍微进行了扩展:

1、从整数计算器扩展到小数计算器。

2、支持除法

3、支持空字符。

运行效果如下:


代码很简单,如下:

cal.c:

#include <stdio.h>
#include <stdlib.h>char token;double exp(void);
double term(void);
double factor(void);
char getPrintableChar(void);void match(char expectedToken);
void error(void);int main(void)
{double result;for (;;){token = getPrintableChar();if (token == 'q')break;result = exp();if (token == '\n')printf("Result is: %g\n", result);elseerror();}return 0;
}double exp(void)
{double temp = term();while (token == '+' || token == '-')switch(token){case '+': match('+');temp += term();break;case '-': match('-');temp -= term();break;}return temp;
}double term(void)
{double temp = factor();while (token == '*' || token == '/')switch(token){case '*': match('*');temp *= factor();break;case '/': match('/');temp /= factor();break;}return temp;
}double factor(void)
{double temp;if (token == '('){match('(');temp = exp();match(')');} else if (isdigit(token)){ungetc(token, stdin);scanf("%lf", &temp);token = getPrintableChar();} elseerror();return temp;
}void error(void)
{fprintf(stderr, "Error!\n");exit(EXIT_FAILURE);
}void match(char expectedToken)
{if (expectedToken == token)token = getPrintableChar();elseerror();
}char getPrintableChar(void)
{char temp;dotemp = getchar();while (isblank(temp));return temp;
}

程序实现的思路是按照EBNF规则实现,即:

<exp> -> <term> { <addop> <term> }
<addop> -> + | -
<term> -> <factor> { <mulop> <factor> }
<mulop> -> * | /
<factor> -> ( <exp> ) | Number

关于EBNF, 可以参考书上的内容,在这里就不赘述了。


http://chatgpt.dhexx.cn/article/hiUgxqF7.shtml

相关文章

简易计算器(C语言实现)

算法核心&#xff1a; 一般表达式都采用的中缀表达式&#xff0c;而中缀表达式不仅要依赖运算符优先级&#xff0c;还要处理括号。所以&#xff0c;对于中缀表达式&#xff0c;一般是先将其化作后缀表达式&#xff0c;在后缀表达式中只有操作符和运算符&#xff0c;而且越放在…

如何用C语言写出一个简单的计算器(简单实现)

计算器的要求&#xff1a; 1.能够对整数进行加减乘除运算 2.能够重复运算 3.能够显示错误 实现1&#xff1a; // //写一个计算器 //整数的加、减、乘、除int Add(int x, int y) {return x y; }int Sub(int x, int y) {return x - y; }int Mul(int x, int y) {return x * y…

C语言写的一个简单的计算器

大学的第一学期就这样结束了。前阵子临近放假&#xff0c;不知道该干嘛&#xff0c;就分别用java和C语言写了两个东西。java写了个文件查找的程序。C语言写了个简易的计算器。至于为什么写计算器~因为刚学C语言的时候&#xff0c;还没摸过VC&#xff0c;还没碰过编译器就看了几…

用C语言实现一个简易的计算器

计算器可实现加减乘除的功能 首先写一个简单都菜单函数menu: void menu() {printf("*******************************************\n");printf("******1.add 2. sub *********\n");printf("******3.mul 4.div *****…

C语言实现简单的计算器(C语言入门1)

程序介绍 本程序是一个简易的计算器&#xff08;支持小数运算&#xff09;&#xff0c;计算能力是四则运算&#xff08;加减乘除&#xff09;。需要的知识内容&#xff1a;函数&#xff0c;选择语句&#xff0c;循环语句。 源码展示 #include <stdio.h> //加法模块 do…

C语言实现简易计算器

通过C语言实现一个简易的计算器 计算器可实现加减乘除等一系列运算 方法一&#xff1a; 1.程序总体使用switch语句实现多分支选择 switch (input) {case 1:printf("请输入两个操作数\n");scanf("%d%d", &x, &y);Add(x, y); break;case 2:print…

C语言学习:用C语言实现简单的计算器

用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法&#xff1a; # include <stdio.h>int main() {char operator;double firstNumber,secondNumber;printf("输入操作符 (, -, *,/): ");scanf("%c", &operator);printf("输…

用C语言写一个计算器

用C语言写一个计算器&#xff0c;除了四则混合运算之外&#xff0c;还支持三角函数和绝对值等函数。 PS E:\Code\PL\calc> .\a.exe abs(3*5-4^2) abs(3*5-4^2)1.000000 25-76*(4-5) 25-76*(4-5)12.000000文章目录 1. 加减法运算2. 加法和乘法3. 四则混合运算4. 浮点型…

使用C语言构造一个简单计算器

本节我们用小学生知识来制作一个简单的计算器&#xff0c;可以运算加&#xff0c;减&#xff0c;乘&#xff0c;除&#xff0c;以及余数的运算。 在这节代码中用到switch语句&#xff0c;因为要输入运算符&#xff0c;所以注意%c的对应 接下来上代码&#xff1a; #include &…

用c语言编写一个简易计算器

更高级的计算器移步http://t.csdn.cn/E2rVG 文章目录 前言一、原理是什么&#xff1f;二、使用步骤 1.代码总结 前言 利用C语言编写一个能够进行简单加减乘除的计算器 一、原理是什么&#xff1f; 利用C语言自带算法&#xff0c;进行简单的逻辑运算 二、使用步骤 1.代码 …

【C语言】计算器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5e;2…

通信行业研究宝典

文章大纲 哑铃型布局&#xff0c;从供应链、产业链到场景链端-智能硬件&#xff1a;万亿大市场&#xff0c;小米重兵布局管-物联网核心基础设施&#xff0c;小米重点布局芯片、模组、小基站云-应用服务布局&#xff1a;布局向家、车、天场景延伸&#xff0c;文娱迎来新增长 通信…

HTTP RPC Dubbo hsf Spring-cloud 图解比较

前言 HSF是一个分布式的远程服务调用框架&#xff0c;其实我更喜欢把分布式几个字去掉&#xff0c;因为HSF本身并不是一个单独的服务&#xff08;指一个进程&#xff09;&#xff0c;他是附属在你的应用里的一个组件&#xff0c;一个RPC组件(远程过程调用——Remote Procedure…

第五章:产品管理

本章索引&#xff1a; [第五章&#xff1a;产品管理(1) – 产品管理介绍] [第五章&#xff1a;产品管理(2) – 需求管理方法] [第五章&#xff1a;产品管理(3) – 目标管理 ] [第五章&#xff1a;产品管理(4) – 团队沟通] [第五章&#xff1a;产品管理(5) – 团队协同] …

5G时代,产业互联网新生态正在加速形成。

转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习网站 导 读 回顾整个移动通信发展史,有人说2G时代发短信是最时髦的通信方式,3G时代微信兴起,4G时代手机把衣食住行都“管起来”。 到了5G时代,已经突破传统通信技术人与人之间点对点的通信模式,大…

[已授权] 互联网定位技术小谈

​ 诚邀阿里云先知社区邀请&#xff0c;不胜感激&#xff01;今日小编在此为大家介绍一下互联网中所应用的定位技术。互联网的发展日新月异&#xff0c;技术迭代很快&#xff0c;各行各业的智慧在互联网这片蓝天下碰撞结晶&#xff0c;造福大众。今天要讲述的集中定位方式&…

5G承载网,到底有哪些关键技术?

戳蓝字“CSDN云计算”关注我们哦&#xff01; 作者 | 小枣君 来源 | 鲜枣课堂 之前小枣君给大家介绍了5G承载网的基本知识&#xff08;链接&#xff1a;5G承载网到底有什么不同&#xff1f;&#xff09;。今天&#xff0c;我们再来看看5G承载网中的常见关键技术。 首先&#x…

IDC报告称中国成为全球第二大公有云 IaaS 市场;腾讯牵手宝马在华设云计算中心;华为5G折叠屏手机通过入网许可:8月上市……...

关注并标星星CSDN云计算 极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01; 每周三次&#xff0c;打卡即read 更快、更全了解泛云圈精彩news go go go 海盗船已推出第一款32G…

中台架构的未来在哪—开放式架构

春节前应“技术琐话”之约&#xff0c;试图写一篇讨论架构方法论的文章&#xff0c;然而动笔之后&#xff0c;才发现&#xff0c;自己似乎陷入了Frederick P. Brooks先生在《设计原本》一书中指出的问题&#xff1a;“设计中最困难的部分在于决定要设计什么”。 2020年1月18日…

大多数人不知道的企业数据分析能力金字塔,你处在哪一级?

写这篇文章来源于两个故事&#xff1a; 故事一&#xff1a;一位在互联网行业做数据库架构多年的朋友一起吃饭&#xff0c;问起我现在在做什么&#xff0c;我说自己在做医疗方面的数据分析&#xff0c;朋友笑&#xff0c;说&#xff1a;你有很多资源啊&#xff0c;只要你能拿到…