| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 539 人关注过本帖
标题:关于一个简单的计算器
只看楼主 加入收藏
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
结帖率:92.86%
收藏
已结贴  问题点数:70 回复次数:4 
关于一个简单的计算器
我想写一个输入格式例如A+B*C/D-E的计算器,暂时不考虑括号,思路如下图
图片附件: 游客没有浏览图片的权限,请 登录注册

代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 1024
typedef struct
{
    float data[maxsize];
    int top;
}SeqStack1;//储存数字的栈
typedef struct
{
    char data[maxsize];
    int top;
}SeqStack2;//储存符号的栈
void NumberDelete(SeqStack1 &L,int t)//对数字栈的元素删除
{
    int i;
    for(i=t;i<L.top;i++)
        L.data[i]=L.data[i+1];
    L.top--;
}
void NumberInsert(SeqStack1 &L,float x)//对数字栈的元素添加
{
    L.top++;
    L.data[L.top]=x;
}
void MarkDelete(SeqStack2 &L,int t)//对符号栈的元素删除
{
    int i;
    for(i=t;i<L.top;i++)
        L.data[i]=L.data[i+1];
    L.top--;
}
void MarkInsert(SeqStack1 &L,char x)//对符号栈的元素添加
{
    L.top++;
    L.data[L.top]=x;
}
void Counter(char a[])//计算器的函数
{
    SeqStack1 number;//number将输入的字符串中的数字字符转化为浮点型储存
    SeqStack2 mark;//mark储存字符串中的运算符号
    char p[100][100],x;
    int i,j;
    j=0;
    number.top=-1;/*初始化两个栈*/
    mark.top=-1;
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]>='0'&&a[i]<='9')
        {
            p[j][i]=a[i];
        }
        else
        {
            MarkDelete(mark,a[i]);
            j++;
        }
    }
    for(i=0;i<=j;i++)
    {
        x=atof(p[i]);
        NumberInsert(number,x);
    }
    i=0;
    while(i<mark.top)
    {
        if(mark.data[i]=='*')
        {
            number.data[i]=number.data[i]*number.data[i+1];
            NumberDelete(number,i+1);
            MarkDelete(mark,i);
        }
        if(mark.data[i]=='/')   
        {
            number.data[i]=number.data[i]/number.data[i+1];
            NumberDelete(number,i+1);
            MarkDelete(mark,i);
        }
        else i++;
    }
    i=0;
    while(number.top!=0)
    {
        if(mark.data[i]=='+')
        {
            number.data[i]=number.data[i]+number.data[i+1];
            NumberDelete(number,i+1);
            MarkDelete(mark,i);
        }
        if(mark.data[i]=='-')   
        {
            number.data[i]=number.data[i]-number.data[i+1];
            NumberDelete(number,i+1);
            MarkDelete(mark,i);
        }
    }
    printf("%f\n",number.data[0]);
}
int main()
{
    char a[100];
    gets(a);
    Counter(a);
    return 0;
}
不知道为什么是个死循环,送上70分求高手
搜索更多相关主题的帖子: 计算器 include 
2013-04-25 15:55
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:0 
对输入的要求是没有括号,输入的格式例如A+B/D*.........

printf("My goal is to be  good at computer")
2013-04-25 16:01
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:30 
过来
2013-04-25 16:41
qq23826868
Rank: 2
等 级:论坛游民
帖 子:57
专家分:94
注 册:2013-4-7
收藏
得分:40 
用switch()case循环。
2013-04-25 16:53
空白先生
Rank: 2
等 级:论坛游民
帖 子:115
专家分:95
注 册:2012-12-9
收藏
得分:0 
回复 3楼 小xiong
????

printf("My goal is to be  good at computer")
2013-04-27 15:28
快速回复:关于一个简单的计算器
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021878 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved