首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

计算器 /* HELP */解决思路

2012-02-16 
计算器/* HELP */做一个计算器例如输入623+-相当于6-(2+3)1再比如输入12+34-*相当于(1+2)*(3-4)-3思路:

计算器 /* HELP */
做一个计算器  
例如   输入   6   2   3   +   -
相当于   6-(2+3)=1
再比如   输入   1   2   +   3   4   -   *
相当于   (1+2)*(3-4)=-3

思路:建立一个int或者double栈,输入数字的话压入栈中;输入运算符号的话,从堆栈里面弹出两个数据做四则运算,然后把计算结果压入栈中。......依次类推。

基本功不好   有没有高手帮忙写一下?

[解决办法]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{
int iStack[100], j, k, iIn=0, iRlt=0;
size_t i;
char sIn[100], sTemp[10];

memset(sIn, 0, sizeof(sTemp));

printf( "请输入要计算的表达式,暂且只支持整数的加运算,且只能用一个空格分隔:\n ");
gets(sIn);

j = 0;//栈数组下标
k = 0;//操作数起始下标

printf( "\t-------------计算过程-------------\n ");
for(i=0; i <strlen(sIn); i++)
{
printf( "\tsIn[%d]=%c\n ", i, sIn[i]);
if(sIn[i] == ' ')
{
//操作数压栈
memset(sTemp, 0, sizeof(sTemp));
strncpy(sTemp, sIn+k, i-k);
iStack[j] = atoi(sTemp);
printf( "\tiStack[%d] %d\n ", j, iStack[j]);

//栈数组下标后移
j++;

//操作数起始下标赋值
k=i;
}
else if(sIn[i] == '+ ')
{
int i1, i2;

//操作数出栈
i1 = iStack[--j];
i2 = iStack[--j];

//运算并将结果压栈
iRlt = i1 + i2;
printf( "\t\tiRlt %d\n ", iRlt);

iStack[j++] = iRlt;

//跳过运算符后的空格
i++;
k=i;
}
}
printf( "\t-------------计算过程-------------\n\n ");
printf( "Input : %s\nResult : %d\n ", sIn, iRlt);
}

热点排行