• 大小: 305KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: C/C++
  • 标签: C语言  

资源简介

[问题描述] 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 [基本要求] (1) 从键盘读入一个合法的算术表达式,输出正确的结果。 (2) 显示输入序列和栈的变化过程。 [选作内容] (1) 扩充运算符集合。 (2) 引入变量操作数。 (3) 操作数类型扩充到实数。

资源截图

代码片段和文件信息


#include 
#include 
#include 
#include 
#include 

#define TRUE 1
#define FALSE 0
#define Stack_Size 50

char ops[7]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘#‘};  /*运算符数组*/

int  cmp[7][7]={{2211122}    /*用来进行比较运算符优先级的矩阵3代表‘=‘2代表‘>‘1代表‘<‘0代表不可比*/
                {2211122}
                {2222122}
                {2222122}
                {1111130}
                {2222022}
                {1111103}};

typedef struct

char elem[Stack_Size];
int top;
}SeqStack;     /*运算符栈的定义*/

typedef struct
{
int elem[Stack_Size];
int top;
}nSeqStack;   /* 运算数栈的定义*/


void InitStack(SeqStack *S)   /*初始化运算符栈*/
{
S->top =-1;
}

void InitStackn(nSeqStack *S)   /*初始化运算数栈*/
{
S->top =-1;
}

int IsEmpty(SeqStack *S)    /*判断栈S为空栈时返回值为真,反之为假*/
{
return(S->top==-1?TRUE:FALSE);
}

int IsEmptyn(nSeqStack *S)    /*判断栈S为空栈时返回值为真,反之为假*/
{
return(S->top==-1?TRUE:FALSE);
}

/*判栈满*/
int IsFull(SeqStack *S)     /*判断栈S为满栈时返回值为真,反之为假*/
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}

int IsFulln(nSeqStack *S)     /*判断栈S为满栈时返回值为真,反之为假*/
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}

int Push(SeqStack *S char x)   /*运算符栈入栈函数*/
{
if (S->top==Stack_Size-1)
{
printf(“Stack is full!\n“);
return FALSE;
}
else
{
S->top++;
S->elem[S->top]=x;
return TRUE;
}
}

int Pushn(nSeqStack *S int x)   /*运算数栈入栈函数*/
{
if (S->top==Stack_Size-1)
{
printf(“Stack is full!\n“);
return FALSE;
}
else
{
S->top++;
S->elem[S->top]=x;
return TRUE;
}
}
 
int Pop(SeqStack *S char *x)    /*运算符栈出栈函数*/
{
if (S->top==-1)
{
printf(“运算符栈空!\n“);
return FALSE;
}
else
{
*x=S->elem[S->top];
S->top--;
return TRUE;
}
}
 
int Popn(nSeqStack *S int *x)    /*运算数栈出栈函数*/
{
if (S->top==-1)
{
printf(“运算符栈空!\n“);
return FALSE;
}
else
{
*x=S->elem[S->top];
S->top--;
return TRUE;
}
}

char GetTop(SeqStack *S)    /*运算符栈取栈顶元素函数*/     
{
if (S->top ==-1)
{
printf(“运算符栈为空!\n“);
return FALSE;
}
else
{
return (S->elem[S->top]);
}
}

int GetTopn(nSeqStack *S)    /*运算数栈取栈顶元素函数*/     
{
if (S->top ==-1)
{
printf(“运算符栈为空!\n“);
return FALSE;
}
else
{
return (S->elem[S->top]);
}
}


int Isoperator(char ch)        /*判断输入字符是否为运算符函数是返回TRUE不是返回FALSE*/
{
int i;
for (i=0;i<7;i++)
{
if(ch==ops[i])
return TRUE;
}
return FALSE;
}

/*
int isvariable(char ch)
{ if (ch>=‘a‘&&ch<=‘z‘)
      return true;
   else 
   return false;
}*/


char Compare(char ch1 char ch2)   /*比较运算符优先级函数*/
{
int imn;
char pri;
int priority;
for(i=0;i<7;i++)              /*找到相比较的两个运算符在比较矩阵里的相对位置*/
{
if(ch1==ops[i])
m=i;
if (ch2==ops[i])
n=i;
}

priority = cmp[m][n];
switch(priority)
{
case 1:
pri=‘<‘;
break;
case 2:
pri=‘>‘;
break;
case 3:
pri=‘=‘;
break;
case 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     159799  2005-06-06 17:21  表达式求值_课程设计\Debug\expression.exe

     文件     167416  2005-06-06 17:21  表达式求值_课程设计\Debug\expression.ilk

     文件      14684  2005-06-06 17:21  表达式求值_课程设计\Debug\expression.obj

     文件     210892  2005-06-06 17:21  表达式求值_课程设计\Debug\expression.pch

     文件     328704  2005-06-06 17:21  表达式求值_课程设计\Debug\expression.pdb

     文件      41984  2005-06-06 17:21  表达式求值_课程设计\Debug\vc60.idb

     文件      53248  2005-06-06 17:21  表达式求值_课程设计\Debug\vc60.pdb

     文件     159799  2005-06-06 17:18  表达式求值_课程设计\Debug\表达式求值.exe

     文件     183292  2005-06-06 17:18  表达式求值_课程设计\Debug\表达式求值.ilk

     文件      14630  2005-06-06 17:18  表达式求值_课程设计\Debug\表达式求值.obj

     文件     181644  2005-06-06 15:02  表达式求值_课程设计\Debug\表达式求值.pch

     文件     451584  2005-06-06 17:18  表达式求值_课程设计\Debug\表达式求值.pdb

     文件       4904  2005-06-06 17:19  表达式求值_课程设计\expression.c

     文件       3447  2005-06-06 17:21  表达式求值_课程设计\expression.dsp

     文件        545  2005-06-06 17:21  表达式求值_课程设计\expression.dsw

     文件      33792  2005-06-06 17:21  表达式求值_课程设计\expression.ncb

     文件      48640  2005-06-06 17:21  表达式求值_课程设计\expression.opt

     文件        768  2005-06-06 17:21  表达式求值_课程设计\expression.plg

     目录          0  2005-06-09 21:30  表达式求值_课程设计\Debug

     目录          0  2005-06-09 21:30  表达式求值_课程设计

----------- ---------  ---------- -----  ----

              2059772                    20


评论

共有 条评论