c语言设计计算器的意义,C语言结课设计之计算器功能
C语言结课设计之计算器功能
发布时间:2020-10-04 08:36:02
来源:脚本之家
阅读:103
作者:长风Qiu
本文实例为大家分享了C语言实现计算器的具体代码,供大家参考,具体内容如下
/*===============================================*\
** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值
** 简要原理:中缀式转逆波兰式(后缀式)
** IDE:Dev-Cpp 4.9.9.2
** 注意事项:括号必须是英文状态的
** 时间: 2014-6-17
\*===============================================*/
#include
#include
#include
#define maxn 1000
char buf[maxn], str[maxn], signStack[maxn], ch[2];
int len, id, idSign, idAns, i, n;
double ans[maxn];
void checkSign(char sign){
if(sign == '(') signStack[idSign++] = sign;
else if(sign == '*' || sign == '/'){
while(idSign && (signStack[idSign-1] == '*' || signStack[idSign-1] == '/'))
str[id++] = signStack[--idSign];
signStack[idSign++] = sign;
}else if(sign == ')'){
while(signStack[idSign-1] != '(') str[id++] = signStack[--idSign];
--idSign;
}else{
while(idSign && signStack[idSign-1] != '(') str[id++] = signStack[--idSign];
signStack[idSign++] = sign;
}
str[id++] = ' ';
}
int check(double a, char sign){
if(a == 0 && sign == '/'){
printf("除数不能为0!,程序结束。\n");
system("pause");
exit(EXIT_FAILURE);
}
return 1;
}
double cal(double a, double b, char sign){
switch(sign){
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
int main(){
printf("\t\t\t\t简单计算器\n\n");
printf("\t\t ======================================\n");
printf("\t\t || 支持+ - * / ( ) 等符号和负数输入 ||\n");
printf("\t\t ======================================\n");
printf("\t\t\t\t\t\t原创作者:邱正钢\n");
printf("\t\t\t\t\t\t完成时间:2014年6月17日\n");
printf("\t\t\t\t\t\tEmail:2276479303@qq.com\n");
printf("请输入一个表达式,如 -10*(20.2-30.6)+5.0/2\n以回车结束:\n");
do{
gets(buf); id = idSign = idAns = 0;
if((len = strlen(buf)) == 0) continue;
int flag = 0; //这个是用来判断'-'字符是负号还是减号的。1表示数字,0表示 +*/(
/*判断原理:如果第一次读取就碰到-,那么一定是负号,若最近一次读取是+*-/(那么
也一定是负号,如果是右括号或数字那么是减号*/
for(i = 0; i < len; ++i){
if(buf[i] == ' ') continue;
if(buf[i] >= '0' && buf[i] <= '9' || buf[i] == '.' || buf[i] == '-' && !flag){
str[id++] = buf[i]; flag = 1;
}
else {
str[id++] = ' '; checkSign(buf[i]);
if(buf[i] != ')') flag = 0;
else flag = 1;
}
}
while(idSign) str[id++] = signStack[--idSign];
for(i = 0, n = 0; i < id; ++i){
if(str[i] == ' ') continue;
/*用增加空格的方式判断‘-'字符是负号还是减号,若‘-'后面挨着数字或小数点,那么一定是负号*/
if(str[i] >= '0' && str[i] <= '9' || str[i] == '.' || str[i] == '-'
&& (str[i+1] >= '0' && str[i+1] <= '9' || str[i+1] == '.')){
sscanf(str + i, "%lf%n", &ans[idAns++], &n);
i += n - 1; continue;
}else if(check(ans[idAns-1], str[i])){
ans[idAns-2] = cal(ans[idAns-2], ans[idAns-1], str[i]);
--idAns;
}
}
printf("结果是 %.2lf\n", ans[0]);
printf("输入Y 继续, N 退出: ");
scanf("%s", ch);
}while(ch[0] == 'Y' || ch[0] == 'y');
printf("感谢您的使用!再见\n");
system("pause");
return 0;
}
关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
c语言设计计算器的意义,C语言结课设计之计算器功能相关推荐
- c语言有关循环结构运用的题,应用C语言循环结构解决等差数列求和问题微课设计研究...
高妍 [摘 要]本文以应用C语言循环结构解决等差数列求和问题作为微课主要内容,阐述了对微课设计进行的研究与探索. [关键词]C语言:循环结构:微课 当今,信息化高速发展,数字技术正在影响和改变着我们生 ...
- JavaWeb网上书城 结课设计
这是个网上书城项目,采用mvc的设计模式编写,前后端都分离,代码比较易懂,每一行都有注释 可用于结课设计 如果需要请联系QQ1573606285 环境:jdk1.8以上+eclipse+jsp+htm ...
- ui设计现状与意义_想转行UI设计?你必须要了解以下内容
@AALina邹琳 原创文章,转载请标注来源 https://www.zcool.com.cn/article/ZMTE3MDY2MA==.html ------------------------- ...
- 计算机字体对于现代设计有何意义,创意字体在现代设计中的重要性
创意字体在现代设计中的重要性 作者:张坚秋来源:原创日期:2014-03-11人气:514 从艺术设计的发展来看,新的艺术设计发展的趋势,是与整个社会和时代发展分不开的,也是同消费者生活方式及思想观念 ...
- ui设计现状与意义_浅述UI设计在中国的现状
原标题:浅述UI设计在中国的现状 在国内UI还是一个相对陌生的词,即便是一些设计人员也对这个词不太了解.我们经常看到一些招聘广告写着:招聘界面美工.界面美术设计师等等.这表明在国内对UI的理解还停留在 ...
- c语言中特殊符号意义,C语言特殊符号意义Word版
<C语言特殊符号意义Word版>由会员分享,可在线阅读,更多相关<C语言特殊符号意义Word版(18页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有 ...
- C语言结课设计:餐饮管理与点餐系统
一.项目简介 1.本程序实现了用户的点餐功能,共包含五类菜品:凉菜.热菜.锅仔.主食.饮品.还有查看所点菜品与结束等功能. 2.后台管理员:按a可进入,主页面并未提示. 3.合理运用getch函数,清 ...
- 车辆违章信息管理系统c语言,车辆违章查询系统c语言结课设计.doc
综合性程序设计报告 设计题目: 车辆违章查询系统 指导教师: 朱世敏 班 级: 21214 学 号: 2121416 设 计 者: 孙令朝 成 绩: _______________ 设计时间: 201 ...
- python结课设计力学方面_我对力学教案的评价
这是来自某教学网站的高一物理力学教案: [高一物理教案1.1.1] 第一章 力 1.1 力 一.教学目标 1.知识目标 ⑴ 知道力是物体对物体的作用,力不能脱离物体而存在:能正确找出受力物体和施力物 ...
最新文章
- logstash mysql eror_Logstash安装记录(报错com.mysql.jdbc.Driver not loaded的解决)
- (0008) iOS 开发之iTunes Connect 显示可供销售,AppStore 不显示新版本
- ASP.NET MVC Framework 系列
- Android App自适应draw9patch不失真背景
- Leetcode 面试题 10.01. 合并排序的数组 (每日一题 20210616)
- php网站灰颜色代码,css取消Safari浏览器链接点击颜色变灰-webkit-tap-highlight-color_html/css_WEB-ITnose...
- AGPM(高级组策略管理)3.0之二操作
- 运行mapreduce程序yarn的web端显示进度
- 关于java中线程yield()方法问题
- RTT时钟管理篇——软硬定时器理解(一)
- (52)Verilog HDL下升沿检测
- 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
- 挑战性题目DSCT102:木板切割问题
- 火了!GitHub标星三万,Python抢票神器
- 分享五款好用的PDF编辑工具
- 【IOS逆向】基本环境配置和脱壳初体验
- ID3算法的Python实现
- PTA 7-1 输入名字,输出问候语
- 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
- 哪款文件比较软件适合程序员
热门文章
- Linux之安全最佳做法(未完成)
- 浙江大学ACM俱乐部 1036:镂空三角形
- 定位推送分享轻社交网络平台《足迹》——数据库设计
- 怎么装python的keras库_Keras教程:用Python进行深度学习的终极入门指南
- 第157篇 合约安全-随机数
- cscd期刊是c刊吗_核心期刊和C刊有什么区别
- 干货 | 超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
- 关于 RT-Thread 内核调度算法中 __rt_ffs函数为什么要检测 value值是否为0的疑问
- 互联网摸鱼日报(2023-03-17)
- 平实给力的写作指导入门手册——leo鉴书57