| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8098 人关注过本帖
标题:C语言计算器问题解决,要实现简单的四则运算,输入一个式子,可以返回运算结 ...
只看楼主 加入收藏
yshunq
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-17
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:13 
C语言计算器问题解决,要实现简单的四则运算,输入一个式子,可以返回运算结果
例如:输入:4+5=  或者  5*4=   然后输出结果       程序怎么写??
搜索更多相关主题的帖子: 计算器 C语言 
2011-09-18 03:53
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
用printf函数来输出,用scanf来输入。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-18 06:42
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
又是来求作业的

总有那身价贱的人给作业贴回复完整的代码
2011-09-18 06:56
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
作业贴???
2011-09-18 08:17
yshunq
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-17
收藏
得分:0 
我这不是作业贴,自己感兴趣学的
2011-09-18 11:13
yshunq
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-17
收藏
得分:0 
以下是引用pauljames在2011-9-18 06:42:53的发言:

用printf函数来输出,用scanf来输入。
晕。。。这个谁不知道。。。我不是问这个
2011-09-18 11:14
s627464610
Rank: 1
等 级:新手上路
帖 子:3
专家分:9
注 册:2011-6-8
收藏
得分:5 
大家看看哪错了???

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char z[80];
    const char * split1 = "+";
    const char * split2 = "-";
    const char * split3 = "*";
    const char * split4 = "/";
    char *p;
    int s=0;
    gets(z);
    for(int i;z[i]!='\0';i++)
    {
        if(z[i]=='+')
        {
            p=strtok(z,split1);
            while(p!=NULL)
            {
                s+=atoi(p);
                p = strtok(NULL,split1);
            }
        }
        if(z[i]=='-')
        {
            p=strtok(z,split1);
            while(p!=NULL)
            {
                s-=atoi(p);
                p = strtok(NULL,split1);
            }
        }
        if(z[i]=='*')
        {
            p=strtok(z,split1);
            while(p!=NULL)
            {
                s*=atoi(p);
                p = strtok(NULL,split1);
            }
        }
        if(z[i]=='/')
        {
            p=strtok(z,split1);
            while(p!=NULL)
            {
                s/=atoi(p);
                p = strtok(NULL,split1);
            }
        }
    }
    printf("%d",s);
    getchar();
    return 0;
}

2011-09-18 14:31
fotomaker
Rank: 2
等 级:论坛游民
帖 子:33
专家分:60
注 册:2009-2-20
收藏
得分:0 
既然知道用scanf输入,用printf输出,LZ想要什么结果,说清楚了,大家才能帮你啊
2011-09-18 14:47
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
写这个计算机实现复杂的话。要运用栈的使用。
实现括号的匹配 实现结果能够和windows 一样的结果。你看看他能实现多少位。
算法也不是很简单。。
要写稍微有点难度。。。
(1+2*4/2)-[123-(2342-34)]```````````这些问题。
我要是输入字母 呢 这些算法写在一起你要怎么办呢。
界面很难吗?只是分为好看和不好看。。
我以前的windows的计算器 写的很差 唯一特点能实现小数功能
现在想起来就丢人啊。。。

用心做一件事情就这么简单
2011-09-18 14:54
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:5 
有点乱,楼主见谅

//stack.h
#ifndef __STACK__
#define __STACK__
template<class T>
class Stack
{
private:
    T stack[100];
    int top;
public:
    Stack();
    ~Stack(){}
    T pop();
    void push(T);
    T get();
    int length();
};
template<class T> Stack<T>::Stack()
{
    top=-1;
}
template<class T> T Stack<T>::pop()
{
    T temp;
    if(top>0)
    {
        temp=stack[top];
        top--;
    }
    else
        return 0;
    return temp;
}
template<class T> void Stack<T>::push(T c)
{
    if(top<=99)
    {
        top++;
        stack[top]=c;
    }
    else
        cout<<"up range over"<<endl;
}
template<class T> T Stack<T>::get()
{
    if(top>=0)
        return stack[top];
    else
    {
        cout<<"over range"<<endl;
        return 0;
    }
}
template<class T> int Stack<T>::length()
{
    return top;
}
#endif

//function.cpp
#include<iostream>
#include<string>
using namespace std;
#include "stack.h"
char opchar[]={'(',')','+','-','*','/'};
int priority(char c,Stack<char>& op)//返回运算符的优先性
{
    int i=0;
    int m=-1,n=-1;
    while(i<6)
    {
        if(m!=-1&&n!=-1)
            break;
        if(c==opchar[i])
            m=i;
        if(op.get()==opchar[i])
            n=i;
        i++;
    }
    return m-n;
}
void count(Stack<float>& num,char c)//计算
{
    float temp=num.pop();
    switch(c)
    {
    case '+':
        temp+=num.pop();
        break;
    case '-':
        temp=num.pop()-temp;
        break;
    case '*':
        temp*=num.pop();
        break;
    case '/':
        temp=num.pop()/temp;
        break;
    default:
        return;
    }
    num.push(temp);
}
float get_n(const char *& p)//取数
{
    int t=0;
    float temp=0;
    while(*p>='0'&&*p<='9')
    {
        temp=temp*10+(*p-'0');
        p++;
    }
    if(*p=='.')
        p++;
    while(*p>='0'&&*p<='9')
    {
        int i;
        float m=*p-'0';
        for(i=0;i<=t;i++)
            m/=10;
        temp+=m;
        t++;
        p++;
    }
    return temp;
}
char get_c(const char *& p)//字符取词
{
    char c='\0';

    if(*p=='+')
        c='+';
    else if(*p=='-')
        c='-';
    else if(*p=='*')
        c='*';
    else if(*p=='/')
        c='/';
    else if(*p=='(')
        c='(';
    else if(*p==')')
        c=')';
    else
        cout<<"unknown char!"<<endl;
    p++;
    return c;
}
void token(const char * s,Stack<float>& num,Stack<char>& op)//取词
{
    const char *p=s;
    float temp=0;
    char c;

    while(*p!='\0')
    {
        while(*p=='(')
        {
            op.push(*p);
            p++;
        }
        if(*p=='-')
        {
            op.push('-');
            num.push(0);
            p++;
            continue;
        }
        if(*p>='0'&&*p<='9')
        {
            temp=get_n(p);
            num.push(temp);
        }
        if(*p=='\0')
            break;
        else
        {
            c=get_c(p);
            if(c==')')
            {
                while(priority(c,op)<0)
                    count(num,op.pop());
                if(priority(c,op)==1)
                {
                    op.pop();
                    if(*p!='\0')
                        c=get_c(p);
                    else
                        break;
                }
                else
                    cout<<"no '(' match ')'"<<endl;
            }
            while(priority(c,op)<=0)
                count(num,op.pop());
            op.push(c);
        }
    }
}

//main.cpp
#include<iostream>
#include<string>
using namespace std;
#include"stack.h"
int main()
{
    char s[100];
    char *p;
    Stack<float> num;
    Stack<char> op;
    extern int priority(char,Stack<char>&);
    void count(Stack<float>&,char);
    float get_n(const char *&);
    char get_c(const char *&);
    void token(const char*,Stack<float>&,Stack<char>&);
    num.push(0);
    op.push('(');
    cout<<"                                Ctrl+Z  退出"<<endl;
    cout<<"please enter your expression:"<<endl;
    while(cin>>s)
    {
        p=s;
        token(p,num,op);
        while(op.length()>0)
            count(num,op.pop());
        cout<<"="<<num.get()<<endl;
    }
    return 0;
}
2011-09-18 17:04
快速回复:C语言计算器问题解决,要实现简单的四则运算,输入一个式子,可以返回 ...
数据加载中...
 
   



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

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