这是最近才做的一个c语言作业,想写篇稿子记录下过程,现在分享一下我的代码和思路。

一、介绍

/*作者:上头的zc时间:5.4开发软件:Dev-c++ 5.11
*/

二、代码实现

接下来为大家分段讲一下编写过程

(1)自定义函数

1.判断数字字符

int isNum(char ch)//判断数字字符
{int t=0;if(ch>='0'&&ch<='9')t=1;return t;
}

2.判断运算符

int isOp(char ch)//判断运算符
{int t=0;if(ch=='+'||ch=='-'||ch=='*'||ch=='/')t=1;return t;
}

3.判断优先级

int level(char ch)//判断优先级
{int t;if(ch=='+'||ch=='-')t=0;elset=1;return t;}

4.判断一个表达式是否正确

int isRight(char str[])//函数功能:判断一个表达式是否正确,若正确返回1,否则返回0{int t=1;int i,len;int count=0; //记录运符算个数len=strlen(str);for(i=0;i<=len-1;i++){if(isNum(str[i])==1||isOp(str[i])==1){//第1位不是数字if(i==0&&isOp(str[i])==1){ t=0;break;}else//最后1位不是数字if(i==len-1&&isOp(str[i])==1){t=0;break;}elseif(isOp(str[i])==1&&isOp(str[i+1])==1){t=0;break;}if(isOp(str[i])==1)count++;}else{t=0;break;}}if(count==0) //判断运算个数为零t=0;return t;}

5.乘除运算

float js1(float x,float y,char z)//乘除运算
{float sum;switch(z) {case '*':sum=x*y;break;case '/':sum=x/y;break;}return sum;
}

6.加减运算

float js2(float x,float y,char z)//加减运算
{float sum;switch(z){case '+':sum=x+y;break;case '-':sum=x-y;break;} return sum;
}

上面这些就是我用到的一些自定义函数

(2)主函数

main()
{char str[41];char op[20];//装运算符 float num[21];//装数字 char *p,*p1;float a,b,value;int i,j;printf("请输入计算表达式:");gets(str);p=str;while(isRight(str)==0)//排除输入错误 {system("cls");printf("you are wrong!!!\ninput again!!!\n");gets(str);}a=atof(str);//将第一个数取出 i=0;while(*p!='\0'){while(isNum(*p)==1)//找运算符 p++;if(*p=='\0')//排除最后是数字而后移的情况 break;elseif(level(*p)==1)//通过函数判断后先对乘除进行运算后加减{p1=p;//保留运算符 p++;b=atof(p);//转换数字 a=js1(a,b,*p1);//计算 }else{num[i]=a;op[i]=*p;i++;p++;a=atof(p);//取得运算符后一个数字 } }num[i]=a;value=num[0];for(j=0;j<i;j++)value=js2(value,num[j+1],op[j]);printf("%.2f",value);
}

三.完整代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h> int isNum(char ch);
int isOp(char ch);
int isRight(char str[]);
int level(char ch);
float js1(float x,float y,char z);
float js2(float x,float y,char z);int isNum(char ch)//判断数字字符
{int t=0;if(ch>='0'&&ch<='9')t=1;return t;
}int isOp(char ch)//判断运算符
{int t=0;if(ch=='+'||ch=='-'||ch=='*'||ch=='/')t=1;return t;
}int level(char ch)//判断优先级
{int t;if(ch=='+'||ch=='-')t=0;elset=1;return t;} int isRight(char str[])//函数功能:判断一个表达式是否正确,若正确返回1,否则返回0{int t=1;int i,len;int count=0; //记录运符算个数len=strlen(str);for(i=0;i<=len-1;i++){if(isNum(str[i])==1||isOp(str[i])==1){//第1位不是数字if(i==0&&isOp(str[i])==1){ t=0;break;}else//最后1位不是数字if(i==len-1&&isOp(str[i])==1){t=0;break;}elseif(isOp(str[i])==1&&isOp(str[i+1])==1){t=0;break;}if(isOp(str[i])==1)count++;}else{t=0;break;}}if(count==0) //判断运算个数为零t=0;return t;}float js1(float x,float y,char z)//乘除运算
{float sum;switch(z) {case '*':sum=x*y;break;case '/':sum=x/y;break;}return sum;
} float js2(float x,float y,char z)//加减运算
{float sum;switch(z){case '+':sum=x+y;break;case '-':sum=x-y;break;} return sum;
}main()
{char str[41];char op[20];//装运算符 float num[21];//装数字 char *p,*p1;float a,b,value;int i,j;printf("请输入计算表达式:");gets(str);p=str;while(isRight(str)==0)//排除输入错误 {system("cls");printf("you are wrong!!!\ninput again!!!\n");gets(str);}a=atof(str);//将第一个数取出 i=0;while(*p!='\0'){while(isNum(*p)==1)//找运算符 p++;if(*p=='\0')//排除最后是数字而后移的情况 break;elseif(level(*p)==1){p1=p;//保留运算符 p++;b=atof(p);//转换数字 a=js1(a,b,*p1);//计算 }else{num[i]=a;op[i]=*p;i++;p++;a=atof(p);//取得运算符后一个数字 } }num[i]=a;value=num[0];for(j=0;j<i;j++)value=js2(value,num[j+1],op[j]);printf("%.2f",value);
}

小结

我选择dev—v的原因主要是操作简单,然后这是第一次写这种稿子,后面应该还会分享我学习编程中的一些方法和一些代码记录,最后这个代码的运行结果我就不展示了,感兴趣的同学可以复制后自己运行。(能不能给个免费的点赞啊【doge】)

简单计算器(有优先级不考虑括号)相关推荐

  1. C语言简单计算器考虑优先级,利用你现有的c语言知识 设计开发一个简易计算器,可进行加、减、乘、除、求余运算。...

    满意答案 nxy_159 推荐于 2017.11.21 采纳率:52%    等级:9 已帮助:3561人 #include float numA = 0; float numB = 0; float ...

  2. 实验一(一)简单计算器项目准备

    目录 一. 简单计算器介绍 二. 开发工具 三. 实现原理 1.栈 2.List 三. 表达式 1.运算符优先级 2.中缀表达式 3.后缀表达式 算法作用: 4.中缀表达式转化为后缀表达式 5.后缀表 ...

  3. 初识安卓--简单计算器(上)

    声明: 1.本文章为原创文章,转载注明出处,蟹蟹~ 2.初学安卓,水平有限,还有很多不足和应当修正的地方,欢迎评论指点 先来最终效果图: 计算器效果图2 计算器效果图1 大二的java课程快结束前,想 ...

  4. 括号匹配,实现简单计算器(加减乘除,小括号)

    括号匹配算法 利用栈先进后出的特性,思路分三步: 1.遇到左括号,直接入栈,继续向后遍历: 2.遇到右括号, (1).如果栈为空,说明无对应左括号,则返回表达式不匹配: (2).如果栈不为为空,将栈顶 ...

  5. Android 房租计算器,简单计算器

    房租计算器 功能简介 1.根据入住时间,计算入住至今的月份间隔,x月x天: 2.自定义计算器,无括号,简单计算器: 3.使用SqLite存储计算结果,使用RecyclerView显示数据,实现刷新和加 ...

  6. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  7. 课程设计:简单计算器的实现

    一.设计目标 通过MFC应用程序创建基于对话框的简单计算器, 利用设计的按钮控件输入并实现算数表达式的运算(加.减.乘.除及括号),使表达式与运算结果在编辑框中显示,并保存历史记录. 二.算法思想 1 ...

  8. Android简单计算器实现

    Android简单计算器实现 前言 最近刚开始学习安卓,只是简单的看到布局那块,就开始上手写了,从布局那里就开始各种乱,还到处拖按钮,一开始的第一版只能实现两个数的运算,比较简单,就是简单的上了个手, ...

  9. C语言实现简单计算器

    C语言实现简单计算器 一.背景 二.代码 1.数据结构 2.弟弟行为的编程 三.基本逻辑 中缀转后缀 (1)为什么要转 (2)怎么转 (3)注意事项 四.演示图片 一.背景 自己希望通过这个处女帖,来 ...

  10. 编译原理公式计算器C语言,编译原理课程设计-简单计算器实现.doc

    编译原理课程设计-简单计算器实现 课程设计报告课程:编译原理学号:姓名:班级:11级嵌入式应用技术班教师:时间:2014年6月计算机科学与技术系 设计名称:简单计算器的实现设计内容.目的与要求:设计内 ...

最新文章

  1. 免费创办网站_足够好的工程来创办一家互联网公司
  2. 前端控制器html,DispatcherServlet(前端控制器)访问顺序和url匹配规则
  3. redis作为mysql的缓存服务器(读写分离)
  4. Oracle簇表介绍 (clustered table)
  5. pythonqt库_Python QT组件库qtwidgets的使用
  6. Django死活不跳转的问题
  7. gsm模块网站服务器,gsm模块是什么_gsm模块工作原理_gsm模块的应用
  8. C语言重难点:内存对齐和位段
  9. 菜鸟驿站发布“新成长计划” 未来三年要让站点平均收入翻倍
  10. Bmrxntfj.UIMapper界面对象映射
  11. sqlmap基本命令
  12. C# vb .net实现胶片效果滤镜
  13. 关于bp抓包挂代理127.0.0.1服务器出现“有软件正在阻止Firefox安全连接至网站”问题的解决方法
  14. Struts2 常用标签使用(三十九)
  15. 喜报丨京东科技主导的开源项目ShardingSphere荣登报告榜单国人主导开源项目中活跃度第五名!...
  16. 【数据结构】循环队列
  17. 全志R16_Camera支持列表芯片资料(Allwinner R16 Camera Support List)
  18. 计算机实训计划总结报告,计算机实训总结范文
  19. C型钢市场前景分析及行业研究报告
  20. 华三H3C GR1108-P 路由器试用以及问题解决

热门文章

  1. 即席查询——Presto
  2. VS2019常用快捷键
  3. 【HCIE-RS 天梯路】QoS
  4. 美国的人工智能企业在研发哪些有趣的AI产品?
  5. 用js制作一个新年倒计时
  6. 解决字符终端下fbterm打不开yong输入法的问题
  7. js脚本锁计算机软件,[计算机软件及应用]JS脚本大全各种常用脚本.doc
  8. flac格式怎么转换mp3?
  9. 个网工获得CCNP认证后的成功求职记
  10. 【前端】CSS:border