可以实现简单的加减乘除四则运算

#include<stdio.h>
#include<string.h>
#define MAX 10100
int main()
{
int j,i,s,t,top,wrong,a;
double n,m,sum;
char fu,kongge;
double zhan[MAX];
printf("-----------------------欢迎使用简单计算器-----------------------\n");
printf("输入1 开始计算\n\n");
printf("输入0 退出\n");
scanf("%d",&a);
if(a==1)
{
printf("------请输入所要求的式子-----------------------\n");
printf("------每个数据之间用空格隔开,例如1 + 2 + 3----\n");
printf("------点击回车代表输入结束,并输出结果---------\n");
while(scanf("%lf",&n)!=EOF)
{
memset(zhan,0,sizeof(zhan));
kongge=getchar();
top=0;
zhan[top++]=n;
if(zhan[0]==0&&kongge=='\n')
{
printf("------------------------谢谢使用--------------------------------\n");
break;
}
scanf("%c",&fu);
kongge=getchar();wrong=0;
while(scanf("%lf",&n)!=EOF)
{
if(fu!='*'&&fu!='/'&&fu!='+'&&fu!='-')
{
printf("您的输入有误,请重新输入\n");
wrong=1;
break;
}
if(fu=='*') //如果运算符是乘号或者除号则直接运算并且将参与运算的栈中的因式删去
{ //将得到的结果存入栈中
m=zhan[top-1];
m*=n;
zhan[top-1]=m;
}
else if(fu=='/')
{
m=zhan[top-1];
m/=n;
zhan[top-1]=m;
}
else if(fu=='+') //如果是加法则将其存入栈中
zhan[top++]=n;
else if(fu=='-')//如果是减法将其相反数存入栈中
zhan[top++]=-n;
kongge=getchar();
if(kongge=='\n')
break;
scanf("%c",&fu);
}
if(wrong)
continue;
sum=0;
for(i=0;i<=top;i++)
{
sum+=zhan[i];
}
printf("您所要求的结果为:\n");
printf("%.2lf\n",sum);
}
}
else if(a==0)
printf("------------------------谢谢使用--------------------------------\n");
return 0;
}

  通过调用子函数实现(感觉这样容易理解)

#include<stdio.h>
#include<string.h>
#define MAX 10100
double zhan[MAX];
int j,i,s,t,top,a;
double n,m,sum;
char fu,kongge;
int d,wrong;
void jieshao1()
{
printf("-----------------------欢迎使用简单计算器-----------------------\n\n");
printf("-------输入1 开始计算-------\n\n");
printf("-------输入0 退出-----------\n");
}
void jieshao2()
{
printf("------请输入所要求的式子-----------------------\n");
printf("------每个数据之间用空格隔开,例如1 + 2 + 3----\n");
printf("------点击回车代表输入结束,并输出结果---------\n");
}
void zhu1()
{
memset(zhan,0,sizeof(zhan));
kongge=getchar();
top=0;
zhan[top++]=n;
if(zhan[0]==0&&kongge=='\n')
{
printf("------------------------谢谢使用--------------------------------\n");
d=0;
return ;
}
}
void zhu2()
{
if(fu!='*'&&fu!='/'&&fu!='+'&&fu!='-')
{
printf("您的输入有误,请重新输入\n");
wrong=1;
d=0;
return ;
}
if(fu=='*') //如果运算符是乘号或者除号则直接运算并且将参与运算的栈中的因式删去
{ //将得到的结果存入栈中
m=zhan[top-1];
m*=n;
zhan[top-1]=m;
}
else if(fu=='/')
{
m=zhan[top-1];
m/=n;
zhan[top-1]=m;
}
else if(fu=='+') //如果是加法则将其存入栈中
zhan[top++]=n;
else if(fu=='-')//如果是减法将其相反数存入栈中
zhan[top++]=-n;
kongge=getchar();
if(kongge=='\n')
{
d=0;
return ;
}
}
void shuchu()
{
sum=0;
for(i=0;i<=top;i++)
{
sum+=zhan[i];
}
printf("您所要求的结果为:\n");
printf("%.2lf\n",sum);
}
int main()
{
jieshao1();//输出第一个描述 即如何使用
scanf("%d",&a);
if(a==1)
{
jieshao2();//介绍第二个描述 依然是如何使用
while(scanf("%lf",&n)!=EOF)
{
d=1;
zhu1();//对变量进行初始化
if(d==0)
break;
scanf("%c",&fu);
kongge=getchar();wrong=0;
while(scanf("%lf",&n)!=EOF)
{
d=1;
zhu2();//此题主结构 即计算过程
if(d==0)
break;
scanf("%c",&fu);
}
if(wrong)
continue;
shuchu();//输出结果
}
}
else if(a==0)
printf("------------------------谢谢使用--------------------------------\n");
return 0;
}

这个代码主函数里边比较简便 看起来感觉美观

#include<stdio.h>
#include<string.h>
#define MAX 10100
double zhan[MAX];
int j,i,s,t,top,a;
double n,m,sum;
char fu,kongge;
int d,wrong;
void jieshao1()
{
printf("-----------------------欢迎使用简单计算器-----------------------\n\n");
printf("-------输入1 开始计算-------\n\n");
printf("-------输入0 退出-----------\n");
}
void jieshao2()
{
printf("------请输入所要求的式子-----------------------\n");
printf("------每个数据之间用空格隔开,例如1 + 2 + 3----\n");
printf("------点击回车代表输入结束,并输出结果---------\n");
}
void zhu()//这个是此题的主体部分
{
jieshao1();//输出第一个描述 即如何使用
scanf("%d",&a);
if(a==1)
{
jieshao2();//介绍第二个描述 依然是如何使用
while(scanf("%lf",&n)!=EOF)
{
memset(zhan,0,sizeof(zhan));
kongge=getchar();
top=0;
zhan[top++]=n;
if(zhan[0]==0&&kongge=='\n')
{
printf("------------------------谢谢使用--------------------------------\n");
break;
}
scanf("%c",&fu);
kongge=getchar();wrong=0;
while(scanf("%lf",&n)!=EOF)
{
if(fu!='*'&&fu!='/'&&fu!='+'&&fu!='-')
{
printf("您的输入有误,请重新输入\n");
wrong=1;
break;
}
if(fu=='*') //如果运算符是乘号或者除号则直接运算并且将参与运算的栈中的因式删去
{ //将得到的结果存入栈中
m=zhan[top-1];
m*=n;
zhan[top-1]=m;
}
else if(fu=='/')
{
m=zhan[top-1];
m/=n;
zhan[top-1]=m;
}
else if(fu=='+') //如果是加法则将其存入栈中
zhan[top++]=n;
else if(fu=='-')//如果是减法将其相反数存入栈中
zhan[top++]=-n;
kongge=getchar();
if(kongge=='\n')
break;
scanf("%c",&fu);
}
if(wrong)
continue;
sum=0;
for(i=0;i<=top;i++)
{
sum+=zhan[i];
}
printf("您所要求的结果为:\n");
printf("%.2lf\n",sum);
}
}
else if(a==0)
printf("------------------------谢谢使用--------------------------------\n");
}
int main()
{
zhu();
return 0;
}

  

简单计算器 (c语言课程设计)的更多相关文章

  1. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  2. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  3. C语言课程设计—图书管理系统

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...

  4. C语言课程设计(成绩管理系统)

    C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ...

  5. C语言课程设计

    目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...

  6. 大一C语言课程设计——班级档案管理系统

    记录我在大一第二学期期末做的C语言课程毕业设计 1. 班级档案管理系统运用到的主要结构体 typedef struct birthday //出生日期{int year;int month;int d ...

  7. C语言课程设计大整数运算

    该大整数运算系统用于对有符号的位数不超过500位的大整数进行加.减.乘.除四则运算和计算N(0<=N<=10000)的阶乘.注意事项 :    1.操作期间,进行四则运算时若大整数为正数请 ...

  8. C语言课程设计——电影院订票系统

    1. 课题简介 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户登录系统后,实现电影放映厅信息管理和电 ...

  9. C语言课程设计 Win32应用程序

    问题描述: 请设计一个职工信息管理程序,以方便人事部门对本单位职工的管理,该程序应该具有以下功 能: (1)能从键盘输入职工的信息 . (2)给定职工号,显示职工的信息. (3)给定工作部门,显示该部 ...

随机推荐

  1. 开发软件设计模型 visual studio UML

    http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/ http://msdn.microsoft ...

  2. sizeof()和strlen()在求字符串长度时的差别

    sizeof()函数输出字符串长度时会把结束符计算在内: strlen()函数输出字符串长度时不会把结束符计算在内. 如图:

  3. uva 1298 - Triathlon

    半平面交的题: 这个题目的亮点就是建模: #include<cstdio> #include<algorithm> #include<cmath> #define ...

  4. 关于Failed to convert property value of type [org.quartz.impl.StdScheduler] to required type [org.springframework.scheduling.quartz.SchedulerFactoryBean

    在一个业务类有下列属性 private SchedulerFactoryBeanscheduler; public SchedulerFactory BeangetScheduler() { retu ...

  5. Dojo Widget系统(转)

    Dojo 里所有的小部件(Widget)都会直接或间接的继承 dijit._Widget / dijit._WidgetBase dijit._Widget 是 dojo 1.6 和 1.6之前的版本 ...

  6. ArcGIS Engine Style文件操作

    对于一个GISer来说,地图,符号这些都应该有着比别人更深刻的理解和认识,作为平台软件都会提供一套自己的符号库,符号库里面根据类别和种类进行区分,因为点,线,面的自然存在和固有属性是不肯能让你用面状符 ...

  7. 学习笔记-[Maven实战]-第二章:Maven安装和配置

    在windows上安装Maven 1.检查JDK安装:在CMD下运行以下命令来检查JAVA安装情况: 命令: C:\Documents and Settings\Administrator>ec ...

  8. 手势识别官方教程(2)识别常见手势用GestureDetector+手势回调接口/手势抽象类

    简介 GestureDetector识别手势. GestureDetector.OnGestureListener是识别手势后的回调接口.GestureDetector.SimpleOnGesture ...

  9. 【HDOJ】2065 "红色病毒"问题

    刚开始看这道题目的时候,完全没看出来是递推.看了网上大牛的分析.立刻就明白了.其实无论字符串长度为多少,都可以将该长度下的组合分成四种情况S1(A偶数C偶数).S2(A偶数C奇数).S3(A奇数C偶数 ...

  10. FORM Save : ORA-01403 FRM-40735 ORA-06502

    症状: FORM开发后挂上服务器后,运行保存按键提示: ORA-01403: 未找到任何数据 ----------------------------------------------------- ...