简单计算器 (c语言课程设计)

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#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;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#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;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#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;
}

  

posted @   非我非非我  阅读(1611)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示