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语言结课设计之计算器功能相关推荐

  1. c语言有关循环结构运用的题,应用C语言循环结构解决等差数列求和问题微课设计研究...

    高妍 [摘 要]本文以应用C语言循环结构解决等差数列求和问题作为微课主要内容,阐述了对微课设计进行的研究与探索. [关键词]C语言:循环结构:微课 当今,信息化高速发展,数字技术正在影响和改变着我们生 ...

  2. JavaWeb网上书城 结课设计

    这是个网上书城项目,采用mvc的设计模式编写,前后端都分离,代码比较易懂,每一行都有注释 可用于结课设计 如果需要请联系QQ1573606285 环境:jdk1.8以上+eclipse+jsp+htm ...

  3. ui设计现状与意义_想转行UI设计?你必须要了解以下内容

    @AALina邹琳 原创文章,转载请标注来源 https://www.zcool.com.cn/article/ZMTE3MDY2MA==.html ------------------------- ...

  4. 计算机字体对于现代设计有何意义,创意字体在现代设计中的重要性

    创意字体在现代设计中的重要性 作者:张坚秋来源:原创日期:2014-03-11人气:514 从艺术设计的发展来看,新的艺术设计发展的趋势,是与整个社会和时代发展分不开的,也是同消费者生活方式及思想观念 ...

  5. ui设计现状与意义_浅述UI设计在中国的现状

    原标题:浅述UI设计在中国的现状 在国内UI还是一个相对陌生的词,即便是一些设计人员也对这个词不太了解.我们经常看到一些招聘广告写着:招聘界面美工.界面美术设计师等等.这表明在国内对UI的理解还停留在 ...

  6. c语言中特殊符号意义,C语言特殊符号意义Word版

    <C语言特殊符号意义Word版>由会员分享,可在线阅读,更多相关<C语言特殊符号意义Word版(18页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有 ...

  7. C语言结课设计:餐饮管理与点餐系统

    一.项目简介 1.本程序实现了用户的点餐功能,共包含五类菜品:凉菜.热菜.锅仔.主食.饮品.还有查看所点菜品与结束等功能. 2.后台管理员:按a可进入,主页面并未提示. 3.合理运用getch函数,清 ...

  8. 车辆违章信息管理系统c语言,车辆违章查询系统c语言结课设计.doc

    综合性程序设计报告 设计题目: 车辆违章查询系统 指导教师: 朱世敏 班 级: 21214 学 号: 2121416 设 计 者: 孙令朝 成 绩: _______________ 设计时间: 201 ...

  9. python结课设计力学方面_我对力学教案的评价

    这是来自某教学网站的高一物理力学教案: [高一物理教案1.1.1] 第一章  力 1.1 力 一.教学目标 1.知识目标 ⑴ 知道力是物体对物体的作用,力不能脱离物体而存在:能正确找出受力物体和施力物 ...

最新文章

  1. logstash mysql eror_Logstash安装记录(报错com.mysql.jdbc.Driver not loaded的解决)
  2. (0008) iOS 开发之iTunes Connect 显示可供销售,AppStore 不显示新版本
  3. ASP.NET MVC Framework 系列
  4. Android App自适应draw9patch不失真背景
  5. Leetcode 面试题 10.01. 合并排序的数组 (每日一题 20210616)
  6. php网站灰颜色代码,css取消Safari浏览器链接点击颜色变灰-webkit-tap-highlight-color_html/css_WEB-ITnose...
  7. AGPM(高级组策略管理)3.0之二操作
  8. 运行mapreduce程序yarn的web端显示进度
  9. 关于java中线程yield()方法问题
  10. RTT时钟管理篇——软硬定时器理解(一)
  11. (52)Verilog HDL下升沿检测
  12. 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
  13. 挑战性题目DSCT102:木板切割问题
  14. 火了!GitHub标星三万,Python抢票神器
  15. 分享五款好用的PDF编辑工具
  16. 【IOS逆向】基本环境配置和脱壳初体验
  17. ID3算法的Python实现
  18. PTA 7-1 输入名字,输出问候语
  19. 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
  20. 哪款文件比较软件适合程序员

热门文章

  1. Linux之安全最佳做法(未完成)
  2. 浙江大学ACM俱乐部 1036:镂空三角形
  3. 定位推送分享轻社交网络平台《足迹》——数据库设计
  4. 怎么装python的keras库_Keras教程:用Python进行深度学习的终极入门指南
  5. 第157篇 合约安全-随机数
  6. cscd期刊是c刊吗_核心期刊和C刊有什么区别
  7. 干货 | 超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
  8. 关于 RT-Thread 内核调度算法中 __rt_ffs函数为什么要检测 value值是否为0的疑问
  9. 互联网摸鱼日报(2023-03-17)
  10. 平实给力的写作指导入门手册——leo鉴书57