简易四则运算器(C语言)堆栈加寻找函数

  • 设置一个整数数组存放输入数字,一个字符数组存放运算符。

  • 按照乘除法优先先进行运算,而后进行加减运算。

#include<stdio.h>

#include<stdlib.h>

#define MAXNUM 10000 //最大的数不超过10000

int upnum(int x);//查找运算符号上面的数字

int dowmnum(int x);//查找运算符号下面的数字

int vali[100]={0};//数字栈

char valc[100];//符号栈

int upnum(int x)  上寻找函数

{

 int safe;//保存vali[x]的值,以便后面把值赋值为MAXNUM

 for(;vali[x]==MAXNUM;)

 {

  ++x;

 }

 safe=vali[x];

 vali[x]=MAXNUM;

 return safe;

}

int dowmnum(int x)

{

 int safe;

 for(;vali[x]==MAXNUM;)

 {

  --x;

 }

 safe=vali[x];

 vali[x]=MAXNUM;

 return safe;

}

i为循环用数,j为循环用数,k为栈层 ,n为临时数组

main()

{

 int i,k,j,n,i1;//i为循环用数,j为大循环 ,k为栈层 ,n为临时数组

 for(i=0;i<100;++i)

 {

  vali[i]=MAXNUM;

 }

 char a1[5];//临时存储待转化为i

 char a[100];

 scanf("%s",a);

 for(j=0,i=0,k=0;a[j]!='\0';++j)

 {

  if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')

  {

   valc[k]=a[i];

   ++k;

   ++i;

  }

  if(a[i]>47&&a[i]<58)

  {

   for(i1=0;i1<5;++i1)

   {

    a1[i1]=58;

   }

      for(n=0;a[i]>47&&a[i]<58;++i,++n)

         {

          a1[n]=a[i];

         }

         vali[k]=atoi(a1);

         ++k;

  }

 }

 valc[k]=EOF;

 k=0;

 while(1)//先算*,/

 {

  switch(valc[k])

  {

   case '*':

       vali[k]=upnum(k)*dowmnum(k);

       break;

            case '/':

                vali[k]=upnum(k)/dowmnum(k);

                break;

  }

  if(valc[k]==EOF)

  {

   break;

  }

        ++k;

 }

 k=0;

 while(1)//后算+,-

 {

  switch(valc[k])

  {

   case '+':

                vali[k]=upnum(k)+dowmnum(k);

                break;

            case '-':

                vali[k]=upnum(k)-dowmnum(k);

                break;

  }

  if(valc[k]==EOF)

  {

   break;

  }

        ++k;

 }

程序运算完后,整数数组就存在最终结果。以下为寻找结果并输出。

 for(i=0;vali[i]==MAXNUM;++i)//跳过MAXNUM,寻找结果输出i

 {

  ;

 }

 printf("%d\n",vali[i]);

 return(0);

}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomWaganW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值