鱼C论坛

 找回密码
 立即注册
查看: 6520|回复: 11

有关简易计算器的问题

[复制链接]
发表于 2015-10-20 13:53:07 | 显示全部楼层 |阅读模式
100鱼币
【问题描述】
设计一个简单的计算器,一次性将所有的运算命令输入,先计算的后输入。首行输入一个数字,表示运算命令的总个数;其余各行输入,每行表示一个运算命令(包括运算操作符和操作数)。所有的输入及输出都为整数。运算操作符有只有Add、Sub、Mul,即加法、减法、乘法三种。

【输入形式】
首行:运算命令的总个数
其余各行:每次运算命令,包括运算操作符和操作数

【输出形式】
输出计算结果

【样例输入】
4
Add 1
Sub 2
Mul 4
Sub 4 5

【样例输出】
3

【样例说明】
计算表达式为(5-4)*4-2+1

有哪位大神能写一份好使的详细详细详细算法(算法就行,程序更好)
为啥我的程序老是有两个结果是错误的(这是作业),怎么调试也调不出来哪里错了,然后学校还不告诉我出错的事例






下面是我的程序:
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
        int data[1000], size;
        char x[1000];
}node, *qnode;




int check(char *q)
{
        if(q[0] == 'A'&&q[1] == 'd'&&q[2] == 'd')
        {
                return 1;
        }
        if(q[0] == 'S'&&q[1] == 'u'&&q[2] == 'b')
        {
                return 2;
        }
        if(q[0] == 'M'&&q[1] == 'u'&&q[2] == 'l')
        {
                return 3;
        }
}

int main()
{
        int i, j, number, end=0, level, x1, x2, mid;
        char go[3]={0}, c1, c2, y;
        node list1, list2;
        list1.size = 0;

        scanf("%d", &number);
        scanf("%c", &c1);

        for(i=0; i<number; i++)
        {
                for(j=0; j<3; j++)
                {
                        scanf("%c", &go[j]);
                }
                scanf("%c", &c1);
                level = check(go);
                if(level == 1)
                {
                        scanf("%d%c", &x1, &y);
                        if(y== ' ')
                        {
                                scanf("%d%c", &x2, &y);
                                mid = x1+x2;
                                end+=mid;
                        }
                        else
                        {
                                list1.data[i] = x1;
                                list1.x[i] = '+';
                                list1.size++;
                        }
                }

                if(level == 2)
                {
                        scanf("%d%c", &x1, &y);
                        if(y== ' ')
                        {
                                scanf("%d%c", &x2, &y);
                                mid = x2-x1;
                                end+=mid;
                        }
                        else
                        {
                                list1.data[i] = x1;
                                list1.x[i] = '-';
                                list1.size++;
                        }
                }

                if(level == 3)
                {
                        scanf("%d%c", &x1, &y);
                        if(y== ' ')
                        {
                                scanf("%d%c", &x2, &y);
                                mid = x1*x2;
                                end+=mid;
                        }
                        else
                        {
                                list1.data[i] = x1;
                                list1.x[i] = '*';
                                list1.size++;
                        }
                }
        }

        list2.size = list1.size;

        for(i=0; i<list1.size; i++)
        {
                list2.data[i] = list1.data[list1.size-1-i];
                list2.x[i] = list1.x[list1.size-1-i];
        }


        for(i=0; i<list2.size; i++)
        {
                while(list2.x[i+1] == '*'&&i!=list2.size-1)
                {
                        mid = list2.data[i+1]*list2.data[i];
                        list2.data[i] = mid;
                        for(j=i+1; j<list2.size-1; j++)
                        {
                                list2.data[j] = list2.data[j+1];
                                list2.x[j] = list2.x[j+1];
                        }
                        list2.size--;
                }
                if(list2.x[i] == '+')
                {
                        end += list2.data[i];
                }
                if(list2.x[i] == '-')
                {
                        end -= list2.data[i];
                }
                if(list2.x[i] == '*')
                {
                        end *= list2.data[i];
                }
        }

        printf("%d", end);

        return 0;
}


       

最佳答案

查看完整内容

我也是新手 挑战下自己 希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-20 13:53:08 | 显示全部楼层
本帖最后由 y290176346 于 2015-10-21 16:50 编辑
#include "stdafx.h"
#include "iostream"
#include "stdio.h"
typedef struct mingling
{
        char zifu[3];
        int shuzi;
};

int _tmain(int argc, _TCHAR* argv[])
{
        int a=0,i=0, zongji=0,kongge,k;
        char b='0';
         mingling MLshuzu[10];
         for (int i=0;i<10;i++)
         {
                 MLshuzu[i].shuzi=0;
         }
        scanf_s("%d",&k,1);

        getchar();
        a=k;
        for (;a>0;a--)       
        {
                kongge=0;
                scanf_s("%c",&b,1);
                i=0;
                
                for (;b!='\n';) 
                {
                        if (b==' ')
                        {
                                if (kongge==1)//处理最后一行命令的第二个数字
                                {
                                        
                                                scanf_s("%c",&b,1);
                                                while (b!='\n')
                                                {
                                                        zongji=zongji*10+(b-48);
                                                        scanf_s("%c",&b,1);
                                                }
                                                break;
                                        
                                }
                                scanf_s("%c",&b,1);
                                kongge++;
                        }
                        if (b<=122&&b>=65)//如果是字母 进结构体数组, 如果是数字 进结构体 int 类型
                        {
                                MLshuzu[a].zifu[i++]=b;
                        }
                        if(b<=57&&b>=48)
                        {
                                MLshuzu[a].shuzi=MLshuzu[a].shuzi*10+(b-48);
                        }
                        
                
                scanf_s("%c",&b,1);
        
                }
                
        }
        for (int i=1;i<=k;i++)//计算 根据字符判断计算方式
        {
                switch (MLshuzu[i].zifu[0])
                {
                case 'A':
                        zongji+=MLshuzu[i].shuzi;
                        continue;
                case 'S':
                        zongji-=MLshuzu[i].shuzi;
                        continue;
                case 'M':
                        zongji*=MLshuzu[i].shuzi;
                        continue;
                
                }
        }

        printf_s("%d", zongji);


        return 0;
}
我也是新手 挑战下自己 希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-20 14:35:43 | 显示全部楼层
看着像是自己学校平台的ACM试题
有这个题的网页么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-21 01:08:57 | 显示全部楼层
路过......帮顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-21 09:55:57 | 显示全部楼层
ryxcaixia 发表于 2015-10-20 14:35
看着像是自己学校平台的ACM试题
有这个题的网页么

你进不去。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-21 13:52:36 | 显示全部楼层
小甲鱼数据结构里面有教写简易计算器的可以看看!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-21 14:42:50 | 显示全部楼层
我的思路就是 吧每行命令  如果是字母 就存入 结构体字符数组,如果是数字 就存入 整形变量 ,数字可以是两位以上, 最后遍历每个结构体数组,根据结构体数组的第一个字符判断是什么运算,最后得出结果,最复杂的是最后一行命令的 两组 数字,我把第二组数字直接存进zongji 变量,来进行运算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-22 09:04:10 | 显示全部楼层
y290176346 发表于 2015-10-21 14:36
我也是新手 挑战下自己 希望对你有帮助

你那些前面的库函数声明是怎么回事?VC++里面没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-22 09:35:12 | 显示全部楼层
我用的是vs2008  你就把主函数 和 输入输出函数 改改就行了 或者直接安装一个vs2008
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-21 16:09:06 | 显示全部楼层
一起研究一下呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-24 16:47:56 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-7 15:34:34 | 显示全部楼层
谢谢,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-4 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表