用C语言怎样实现计算器加减乘除功能?

 我来答
ignorallbutyou
2015-11-08 · TA获得超过270个赞
知道小有建树答主
回答量:72
采纳率:100%
帮助的人:78.8万
展开全部
  1. 我学c++时写的

    #include<iostream.h>
    #include "string"
     
       int    count(int a,int b,char c)
       {
          if(c=='+') return a+b;
          if(c=='-') return a-b;
          if(c=='/') return a/b;
          if(c=='*') return a*b;
     
             }
     
    void main()
    {
        char str[100];
        cin>>str;
        int number[10]={0};
        char sign[10];
         
        int i,j=0,k=0,m;
        int strlong=strlen(str);//#include "string"
        cout<<strlong;
        for(i=0;i<strlong;i++)
        {   
            if(str[i]>='0'&&str[i]<='9')
                number[j]=number[j]*10+str[i]-48;
     
            else
            {j++;
                sign[k]=str[i];
                k++;}
        }
        j++;
        //cout<<j<<k;
        for(i=0;i<j;i++)
            cout<<number[i]<<endl;
        for(i=0;i<k;i++)
            cout<<sign[i]<<endl;
         
    for( i=0;i<k;i++)
    {
      if(sign[i]=='/'||sign[i]=='*')
      {number[i]=count(number[i],number[i+1],sign[i]);
      cout<<number[i];
      for(m=i;m<k-i;m++)
      {sign[m]=sign[m+1];number[m+1]=number[m+2];}
      k--;i--;}
    }
    for( i=0;i<k;i++)
    { if(sign[i]=='+'||sign[i]=='-')
    {number[i]=count(number[i],number[i+1],sign[i]);
      cout<<number[i];
      for(m=i;m<k-i;m++)
      {sign[m]=sign[m+1];number[m+1]=number[m+2];}
      k--;i--;}
     
    }
     
    for (i=0;i<3;i++)
    {cout<<number[i];
    }
    cout<<k;
    }


 2.堆栈

#include "string"
#include "iostream"  
#include<vector>
#include<list>
#include<cstdlib>
using namespace std;
//自定义类型 用于存储 两种数据类型
class  newType
{
public:  
    bool flag;//true 为f  false 为 c
    union  
    {
    float f;
    char c;
    }data;
};
 
//将字符串转换为 数字数组和字符数组  (通用提取字符串中数字)
bool couvert(string str,vector<float>  &numbers,vector<char> &chars,vector<newType> &all)//这里要使用引用
{
    int len=str.length();
    bool flag=true;
    int pos=0;
 
    for(int i=0;i<len;i++)
    {
        if(str[i]>='0'&&str[i]<='9'||str[i]=='.')
        {  
            if (flag)
            {
                string substr=str.substr(i,len) ;
                float f=atof(substr.data());
                numbers.push_back(f);
                //添加f到all向量中
                newType n;
                n.data.f=f;
                n.flag=true;
                all.push_back(n);
                
            }
            flag=false;
        }
        else
        {
            //chars.push_back(str[i]);
            chars.push_back(str[i]);
            newType n;
            n.data.c=str[i];
            n.flag=false;
            all.push_back(n);
            flag=true;  
        }
    }//for
    return true;
}
 
//计算没有括号的表达式
bool  calculate(vector<float> numbers,
                vector<char>   chars,float &value)
{
    //计算四者表达式  无括号类型  1+2*3+4
    int ii=0;
    //先计算乘除
    while(ii<chars.size())
        //注意while(ii<(chars.size()-2)) 和while(ii<chars.size()-2) 区别
    {
        switch(chars[ii])
        {
        case '*':
            numbers[ii]=numbers[ii]*numbers[ii+1];
            numbers.erase(numbers.begin()+ii+1);  //移除number[ii]后面的数
            chars.erase(chars.begin()+ii);        //移除chars[ii]
            ii--;
            break;
        case '/':
            numbers[ii]=numbers[ii]/numbers[ii+1];
            numbers.erase(numbers.begin()+ii+1);
            chars.erase(chars.begin()+ii);
            ii--;
            break;
        }
        ii++;
    }
 
    //只剩下加减   计算加减
    ii=0;
    while(ii<chars.size())
        //注意while(ii<(chars.size()-2)) 和while(ii<chars.size()-2) 区别
    {
        switch(chars[ii])
        {
        case '+':
        //    cout<<"+::"<<numbers[ii]<<chars[ii]<<numbers[ii+1]<<endl;
            numbers[ii]=numbers[ii]+numbers[ii+1];
            numbers.erase(numbers.begin()+ii+1);  //移除number[ii]后面的数
            chars.erase(chars.begin()+ii);        //移除chars[ii]
            break;
        case '-':
        //    cout<<"-::"<<numbers[ii]<<chars[ii]<<numbers[ii+1]<<endl;
            numbers[ii]=numbers[ii]-numbers[ii+1];
            numbers.erase(numbers.begin()+ii+1);
            chars.erase(chars.begin()+ii);
            break;
        }
        // ii++;    
    }
     
    value=numbers[0];//得到值
    return true;
}
 
//计算带括号的表达式
 
int calculate1(    vector<newType> all,float &value)
{   
    int pos=0;
    vector<float> numbers;
    vector<char>   chars;
    float va=0;
 
  for(int i=0;i<all.size();i++)
  {
    if (all[i].flag)//判断是数字还是字符
    {
        cout<<"数字"<<i<<":"<<all[i].data.f<<endl;
    }
    else
    {
        cout<<"字符"<<i<<":"<<all[i].data.c<<endl;
       if (all[i].data.c==')') //如果是右括号  将之前的()之间的括号内容
       {                       //用calculate计算 并替换
            
         for (int j=pos+1;j<i;j++) //参数转换
         {    
             if (all[j].flag)
             {
                 numbers.push_back(all[j].data.f);
             } else{
                 chars.push_back(all[j].data.c);
             }
         }
 
           calculate(numbers,chars,va);
           numbers.clear();
           chars.clear();
 
           newType ne;
           ne.data.f=va;
 
           all.erase(all.begin()+pos,all.begin()+i+1);
           all.insert(all.begin()+pos,ne);
 
           i=pos+1;
 
       }
       else if (all[i].data.c=='(')
       {
         pos=i;//记录此时左括号的位置
       }
    }//else
  }//for
  for(int kk=0;kk<all.size();kk++)
  {
      if (all[kk].flag)
      {
          numbers.push_back(all[kk].data.f);
      } else{
          chars.push_back(all[kk].data.c);
             }
  }
 
  for( i=0;i<all.size();i++)
  {  
      if (all[i].flag)
      {  
          cout<<all[i].data.f<<" ";
      } else
      {
          cout<<all[i].data.c<<" ";
      }
       
    }
  calculate(numbers,chars,value);
 
return 1;
}
 
 
 
void main()
{    
    //
    string str="10+(2*3+8)+(10*2)";
    vector<float>  numbers;
    vector<char> chars;
    vector<newType> all;
    couvert(str, numbers, chars,all);
    for(int i=0;i<all.size();i++)
    {  
        if (all[i].flag)
        {  
            cout<<all[i].data.f<<" ";
        } else
        {
            cout<<all[i].data.c<<" ";
        }
      
    }
    float value,value1;
//    calculate(numbers,chars,value);
    calculate1(all,value1);
    cout<<value1;
     
 
}


    这是我翻家底找到的 .

黄先生
2024-12-27 广告
矩阵切换器就是将一路或多路视音频信号分别传输给一个或者多个显示设备,如两台电脑主机要共用一个显示器,矩阵切换器可以将两台电脑主机上的内容renyi切换到同一个或多个显示器上;迈拓维矩矩阵切换器种类齐全,性价比高,支持多种控制方式,为工程商采... 点击进入详情页
本回答由黄先生提供
bingbing_zhou
2011-08-01 · TA获得超过112个赞
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
我有个VC++的 任意进制转换----栈的链接存储
/* 栈的链接存储----任意进制转换*/
#include <iostream.h>
#include <stdlib.h>

typedef int ElemType;
struct SNode {
ElemType data;
SNode* next;
};

void InitStack(SNode*& HS)
{
HS = NULL;
}

// 压栈 插入元素
void Push(SNode*& HS, const ElemType& item)
{

SNode* newptr = new SNode; /* 获取动态结点*/
newptr->data = item; /*给新分配的结点赋值*/
newptr->next = HS; /* 向栈顶压入新结点*/
HS = newptr;
}

//从栈中删除一个元素并返回该元素
ElemType Pop(SNode*& HS)
{
if(HS==NULL)
{
cerr<<"无法从空栈中删除元素,退出运行 !"<<endl;
exit(1);
}
SNode* p = HS;
HS = HS->next;
ElemType temp = p->data;
delete p;
return temp;
}

//读取栈顶元素
ElemType Peek(SNode* HS)
{
if(HS==NULL)
{
cerr<<"无法从空链栈中读取元素,退出运行 !"<<endl;
exit(1);
}
return HS->data;
}

bool EmptyStack(SNode* HS)
{
return HS == NULL;
}

void ClearStack(SNode*& HS)
{
SNode *mp, *np;
mp = HS;
while(mp!=NULL)
{
np = mp->next;
delete mp;
mp = np;
}
HS = NULL;
}

void Transform(long number, int r)
{
SNode *a;
InitStack(a);
while(number!=0)
{
int k = number%r;
Push(a,k);
number = number/r;
}
while(!EmptyStack(a))
{
if(r!=16) cout<<Pop(a);
else
{
int x = Pop(a);
if(x<10) cout<<x;
else
{
switch(x)
{
case 10: cout<<'A'; break;
case 11: cout<<'B'; break;
case 12: cout<<'C'; break;
case 13: cout<<'D'; break;
case 14: cout<<'E'; break;
case 15: cout<<'F'; break;
}
}
}
}
cout<<endl;
}

void main()
{

cout<<"请输入一个长整数(最长十位有效数字): ";
long n;
cin>>n;
cout<<"长整数 "<<n<<" 的十六进制数为: ";
Transform(n,16);

cout<<"长整数 "<<n<<" 的十进制数为: ";
Transform(n,10);

cout<<"长整数 "<<n<<" 的八进制数为: ";
Transform(n,8);

cout<<"长整数 "<<n<<" 的六进制数为: ";
Transform(n,6);

cout<<"长整数 "<<n<<" 的四进制数为: ";
Transform(n,4);

cout<<"长整数 "<<n<<" 的二进制数为: ";
Transform(n,2);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tc280
推荐于2017-10-01 · TA获得超过437个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:294万
展开全部
#include<stdio.h>
void main()
{
int x,y;
char op;
int d;
printf("第一个整数:");
scanf("%d",&x);
printf("第二个整数:");
scanf("%d",&y);
printf("运算符 (+,—,*,/,%%):");
getchar();
op=getchar();
switch(op)
{
case '+':
printf("%d+%d=%d\n",x,y,x+y);
break;
case '-':
printf("%d-%d=%d\n",x,y,x-y);
break;
case '*':
printf("%d*%d=%d\n",x,y,x*y);
break;
case '/':
if(y==0)
printf("溢出\n");
else
printf("%d/%d=%d\n",x,y,x/y);
break;
case '%':
if(y==0)
printf("溢出\n");
else
printf("%d%%%d=%d\n",x,y,x%y);
break;
default:
printf("输入错误!\n");
break;
}
scanf("%d\n",&d);
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sky思念很浅
推荐于2017-09-06 · TA获得超过3694个赞
知道小有建树答主
回答量:1199
采纳率:69%
帮助的人:287万
展开全部
#include<stdio.h>
void main()
{
   float a,b;
   char  d;
   printf("请输入两个数a,b:");
   scanf("%f,%f"&a,&b);
   printf("请输入运算符号d");
   scanf("%c",d);
   switch(d)
   {
    case'+':printf("%f\n",a+b);break;
    case'-':printf("%f\n",a-b);break;
    case'*':printf("%f\n",a*b);break;
    case'/':printf("%f\n",a/b);break;
    default:printf("计算出错\n");
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沐星辰曦
高粉答主

推荐于2019-08-09 · 关注我不会让你失望
知道小有建树答主
回答量:3779
采纳率:100%
帮助的人:110万
展开全部
#include<stdio.h>
void main()
{
int a,b;
scanf("%d%d"&a,&b);
printf("%f\n",a+b);
printf("%f\n",a-b);
printf("%f\n",a*b);
printf("%f\n",a/b);
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式