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

#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. css3360度旋转动画

    @-webkit-keyframes Parallaxs{ from { -webkit-transform: rotate(180deg) ; -moz-transform: rotate(180d ...

  2. CSS content内容生成技术以及应用(转)

    一.哗啦哗啦的简介 zxx://这里“哗啦哗啦”的作用是为了渲染一种氛围.content属性早在 CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容.此特性目前已被大部 ...

  3. asp.net中时间差的问题

    asp.net中时间差的问题 在asp中我们可以用datediff来处理,时间的差,相当的不错,可是在asp.net中C#语言中却没有.可是ASP.net给我们提供了一个TimeSpan,我们可以用它 ...

  4. M-JPEG和MPEG-4的区别 M-JPEG VS MPEG

    http://blog.sina.com.cn/s/blog_4b357b300100gre9.html M-JPEG VS MPEG http://blog.csdn.net/bluesky_sun ...

  5. SQL Server中时间段查询和数据类型转换

    不知道什么时候对数据独有情种,也许是因为所学专业的缘故,也许是在多年的工作中的亲身经历,无数据,很多事情干不了,数据精度不够,也很多事情干不了,有一次跟一个朋友开玩笑说,如果在写论文的时候,能有一份独 ...

  6. 匿名函数和Lambda表达式

    这个题目有点牵强,真不知道如何取一个比较中意的名称,写技术博客,我很少拘泥小节,但是注重细节,如果细节都出现问题了,那么这个博文也就失去了价值. 其实应该从委托说起,委托是C#中的一个重要的内容,记得 ...

  7. org.springframework.jdbc.datasource

    org.springframework.jdbc.datasource.DataSourceUtils /** * Actually obtain a JDBC Connection from the ...

  8. 2、RenderScript的计算(2013.05.07)

    一.官方文档翻译: Android Renderscript计算 参考网址: http://blog.csdn.net/fireofstar/article/details/7748143 http: ...

  9. 《linux程序设计》笔记 第一章 入门

    linux程序存放位置linux主要有一下几个存放程序的目录: /bin    系统启动程序目录 /usr/bin 用户使用的标准程序 /usr/local/bin   用于存放软件安装目录 /usr ...

  10. ORACLE查看锁(lock)情况

      SELECT /*+ RULE */         ls.osuser os_user_name,          ls.username user_name,          DECODE ...