最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

用C语言写的计算器源代码

来源:动视网 责编:小OO 时间:2025-10-01 01:58:49
文档

用C语言写的计算器源代码

用C语言写的计算器源代码.txt什么叫神话?请听男人向你表达爱意;什么叫传说?请听男人对你的承诺;什么叫梦境?请看你自己听到前两者时的反应。用C语言写的计算器源代码#include#include#include#include#includetypedeffloatDataType;typedefstruct{DataType*data;intmax;inttop;}Stack;voidSetStack(Stack*S,intn){S->data=(DataType*)malloc(n*si
推荐度:
导读用C语言写的计算器源代码.txt什么叫神话?请听男人向你表达爱意;什么叫传说?请听男人对你的承诺;什么叫梦境?请看你自己听到前两者时的反应。用C语言写的计算器源代码#include#include#include#include#includetypedeffloatDataType;typedefstruct{DataType*data;intmax;inttop;}Stack;voidSetStack(Stack*S,intn){S->data=(DataType*)malloc(n*si
用C语言写的计算器源代码.txt什么叫神话?请听男人向你表达爱意;什么叫传说?请听男人对你的承诺;什么叫梦境?请看你自己听到前两者时的反应。用C语言写的计算器源代码 

#include

#include

#include

#include

#include

typedef float DataType;

typedef struct

{

 DataType *data;

 int max;

 int top;

}Stack;

void SetStack(Stack *S,int n)

{

S->data=(DataType*)malloc(n*sizeof(DataType));

if(S->data==NULL)

 {

  printf("overflow");

   exit(1);

 }

S->max=n;

S->top=-1;

}

void FreeStack(Stack *S)

{

free(S->data);

}

int StackEmpty(Stack *S)

{

if(S->top==-1)

  return(1);

 return(0);

}

DataType Peek(Stack *S)

{

if(S->top==S->max-1)

 {

  printf("Stack is empty!\\n");

  exit(1);

 }

return(S->data[S->top]);

}

void Push(Stack *S,DataType item)

{

if(S->top==S->max-1)

 {

  printf("Stack is full!\\n");

  exit(1);

 }

S->top++;

S->data[S->top]=item;

}

DataType Pop(Stack *S)

{

if(S->top==-1)

 {

  printf("Pop an empty stack!\\n");

  exit(1);

 }

S->top--;

return(S->data[S->top+1]);

}

typedef struct

{

 char op;

 int inputprecedence;

 int stackprecedence;

}DataType1;

typedef struct

{

 DataType1 *data;

 int max;

 int top;

}Stack1;

void SetStack1(Stack1 *S,int n)

{

S->data=(DataType1*)malloc(n*sizeof(DataType1));

if(S->data==NULL)

 {

  printf("overflow");

   exit(1);

 }

S->max=n;

S->top=-1;

}

void FreeStack1(Stack1 *S)

{

free(S->data);

}

int StackEmpty1(Stack1 *S)

{

if(S->top==-1)

  return(1);

 return(0);

}

DataType1 Peek1(Stack1 *S)

{

if(S->top==S->max-1)

 {

  printf("Stack1 is empty!\\n");

  exit(1);

 }

return(S->data[S->top]);

}

void Push1(Stack1 *S,DataType1 item)

{

if(S->top==S->max-1)

 {

  printf("Stack is full!\\n");

  exit(1);

 }

S->top++;

S->data[S->top]=item;

}

DataType1 Pop1(Stack1 *S)

{

if(S->top==-1)

 {

  printf("Pop an empty stack!\\n");

  exit(1);

 }

S->top--;

return(S->data[S->top+1]);

}

DataType1 MathOptr(char ch)

{

 DataType1 optr;

 optr.op=ch;

 switch(optr.op)

 {

 case'+':

 case'-':

  optr.inputprecedence=1;

  optr.stackprecedence=1;

  break;

 case'*':

 case'/':

  optr.inputprecedence=2;

  optr.stackprecedence=2;

  break;

 case'(':

  optr.inputprecedence=3;

  optr.stackprecedence=-1;

  break;

 case')':

  optr.inputprecedence=0;

  optr.stackprecedence=0;

  break;

 }

 return(optr);

}

void Evaluate(Stack *OpndStack,DataType1 optr)

{

 DataType opnd1,opnd2;

 opnd1=Pop(OpndStack);

 opnd2=Pop(OpndStack);

 switch(optr.op)

 {

 case'+':

  Push(OpndStack,opnd2+opnd1);

  break;

 case'-':

  Push(OpndStack,opnd2-opnd1);

  break;

 case'*':

  Push(OpndStack,opnd2*opnd1);

  break;

 case'/':

  Push(OpndStack,opnd2/opnd1);

  break;

 }

}

int isoptr(char ch)

{

 if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')

  return(1);

 return(0);

}

void Infix(char *str)

{

 int i,k,n=strlen(str);

 char ch,numstr[10];

 DataType opnd;

 DataType1 optr;

 Stack OpndStack;

 Stack1 OptrStack;

 SetStack(&OpndStack,n);

 SetStack1(&OptrStack,n);

 k=0;

 ch=str[k];

 while(ch!='=')

  if(isdigit(ch)||ch=='.')

  {

   for(i=0;isdigit(ch)||ch=='.';i++)

   {

    numstr[i]=ch;

    k++;

    ch=str[k];

   }

   numstr[i]='\\0';

   opnd= atof(numstr);

   Push(&OpndStack,opnd);

  }

  else

   if(isoptr(ch))

   {

    optr=MathOptr(ch);

while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)

     Evaluate(&OpndStack,Pop1(&OptrStack));

    Push1(&OptrStack,optr);

    k++;

    ch=str[k];

   }

   else if(ch==')')

   {

    optr=MathOptr(ch);

while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)

     Evaluate(&OpndStack,Pop1(&OptrStack));

    Pop1(&OptrStack);

    k++;

    ch=str[k];

   }

   while(!StackEmpty1(&OptrStack))

    Evaluate(&OpndStack,Pop1(&OptrStack));

   opnd=Pop(&OpndStack);

cout<<"你输入表达式的计算结果为"<   printf("%-6.2f\\n",opnd);

   FreeStack(&OpndStack);

   FreeStack1(&OptrStack);

}

void main()

{

cout<<"请输入你要计算的表达式,并以“=”号结束。"< char str[50];

 gets(str);

 Infix(str);

文档

用C语言写的计算器源代码

用C语言写的计算器源代码.txt什么叫神话?请听男人向你表达爱意;什么叫传说?请听男人对你的承诺;什么叫梦境?请看你自己听到前两者时的反应。用C语言写的计算器源代码#include#include#include#include#includetypedeffloatDataType;typedefstruct{DataType*data;intmax;inttop;}Stack;voidSetStack(Stack*S,intn){S->data=(DataType*)malloc(n*si
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top