有关简易计算器的问题
【问题描述】设计一个简单的计算器,一次性将所有的运算命令输入,先计算的后输入。首行输入一个数字,表示运算命令的总个数;其余各行输入,每行表示一个运算命令(包括运算操作符和操作数)。所有的输入及输出都为整数。运算操作符有只有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, size;
char x;
}node, *qnode;
int check(char *q)
{
if(q == 'A'&&q == 'd'&&q == 'd')
{
return 1;
}
if(q == 'S'&&q == 'u'&&q == 'b')
{
return 2;
}
if(q == 'M'&&q == 'u'&&q == 'l')
{
return 3;
}
}
int main()
{
int i, j, number, end=0, level, x1, x2, mid;
char go={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);
}
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 = x1;
list1.x = '+';
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 = x1;
list1.x = '-';
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 = x1;
list1.x = '*';
list1.size++;
}
}
}
list2.size = list1.size;
for(i=0; i<list1.size; i++)
{
list2.data = list1.data;
list2.x = list1.x;
}
for(i=0; i<list2.size; i++)
{
while(list2.x == '*'&&i!=list2.size-1)
{
mid = list2.data*list2.data;
list2.data = mid;
for(j=i+1; j<list2.size-1; j++)
{
list2.data = list2.data;
list2.x = list2.x;
}
list2.size--;
}
if(list2.x == '+')
{
end += list2.data;
}
if(list2.x == '-')
{
end -= list2.data;
}
if(list2.x == '*')
{
end *= list2.data;
}
}
printf("%d", end);
return 0;
}
本帖最后由 y290176346 于 2015-10-21 16:50 编辑
#include "stdafx.h"
#include "iostream"
#include "stdio.h"
typedef struct mingling
{
char zifu;
int shuzi;
};
int _tmain(int argc, _TCHAR* argv[])
{
int a=0,i=0, zongji=0,kongge,k;
char b='0';
mingling MLshuzu;
for (int i=0;i<10;i++)
{
MLshuzu.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.zifu=b;
}
if(b<=57&&b>=48)
{
MLshuzu.shuzi=MLshuzu.shuzi*10+(b-48);
}
scanf_s("%c",&b,1);
}
}
for (int i=1;i<=k;i++)//计算 根据字符判断计算方式
{
switch (MLshuzu.zifu)
{
case 'A':
zongji+=MLshuzu.shuzi;
continue;
case 'S':
zongji-=MLshuzu.shuzi;
continue;
case 'M':
zongji*=MLshuzu.shuzi;
continue;
}
}
printf_s("%d", zongji);
return 0;
}
我也是新手 挑战下自己 希望对你有帮助 看着像是自己学校平台的ACM试题
有这个题的网页么 路过......帮顶 ryxcaixia 发表于 2015-10-20 14:35
看着像是自己学校平台的ACM试题
有这个题的网页么
你进不去。。。 小甲鱼数据结构里面有教写简易计算器的可以看看!! 我的思路就是 吧每行命令如果是字母 就存入 结构体字符数组,如果是数字 就存入 整形变量 ,数字可以是两位以上, 最后遍历每个结构体数组,根据结构体数组的第一个字符判断是什么运算,最后得出结果,最复杂的是最后一行命令的 两组 数字,我把第二组数字直接存进zongji 变量,来进行运算 y290176346 发表于 2015-10-21 14:36
我也是新手 挑战下自己 希望对你有帮助
你那些前面的库函数声明是怎么回事?VC++里面没有 我用的是vs2008你就把主函数 和 输入输出函数 改改就行了 或者直接安装一个vs2008 一起研究一下呵呵 感谢分享 谢谢,学习了
页:
[1]