回 帖 发 新 帖 刷新版面

主题:[讨论]求助,急啊.快来帮忙.我的程序为什么会这种错...谢谢各位了

typedef char SElemType;
 #include<string.h>
 #include<ctype.h>
 #include<malloc.h> /* malloc()等 */
 #include<limits.h> /* INT_MAX等 */
 #include<stdio.h> /* EOF(=^Z或F6),NULL */
 #include<stdlib.h> /* atoi() */
 #include<io.h> /* eof() */
 #include<math.h> /* floor(),ceil(),abs() */
 #include<process.h> /* exit() */
 /* 函数结果状态代码 */
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
 typedef int Boolean; /* B*/


#define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */
#define STACKINCREMENT 2 /* 存储空间分配增量 */
typedef struct SqStack
                    {
                     SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */
                     SElemType *top; /* 栈顶指针 */
                     int stacksize; /* 当前已分配的存储空间,以元素为单位 */
                    }SqStack; /* 顺序栈 */
/*Status InitStack(SqStack *S)
                    { /* 构造一个空栈S */
                     (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
                     if(!(*S).base)
                     exit(OVERFLOW); /* 存储分配失败 */
                     (*S).top=(*S).base;
                     (*S).stacksize=STACK_INIT_SIZE;
                     return OK;
                     }*/
 Status Push(SqStack *S,SElemType e)
                     { /* 插入元素e为新的栈顶元素 */
                       if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间 */
                              {
                               (*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
                                     if(!(*S).base)
                                      exit(OVERFLOW); /* 存储分配失败 */
                                     (*S).top=(*S).base+(*S).stacksize;
                                      (*S).stacksize+=STACKINCREMENT;
                                 }
                           *((*S).top)++=e;
                        return OK;
                          }

 Status Pop(SqStack *S,SElemType *e)
                    { /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
                      if((*S).top==(*S).base)
                      return ERROR;
                       *e=*--(*S).top;
                          return OK;
                    }
 main()
 { int result;
   char str[]={"(((2*(1+(8-4)))-8)/2)"};
   result=process(str);
   printf("%d\n",result);
 }
 int process(char *str)
 {  SqStack S1,S2,S3;  /*存放右括号(,整数,计算符。*/
   InitStack(&S1);
   InitStack(&S2); 
   InitStack(&S3);
   SElemType theta; 
   int a,b;                
  for(int i=0;str[i]!='\n';i++)
    { char c;
        c=str[i];
        switch(c){ case'0': case'1': case'2': case'3': case'4':
              case'5': case'6': case'7': case'8': case'9':
                          int Cint(char c){return (c-48);
                                         };
                          push(&S2,c);break; 
              case'(':
                           push(&S1,c);break;
              case'+': case'-': case'*': case'/':
                           push(S3,c);break;
              case')':{ pop(&S1); pop(&S3,&theta);
                              pop(&S2,a);  pop(&S2,b);
                              switch(theta)
                                      {case'+': c=a+b;break;
                                       case'-': c=a-b;break;
                                       case'*': c=a*b;break;
                                       case'/': c=a/b;
                                       }
                              Push(&S2,c);
                             }
           return c;
              }
      }
   }
Turbo C For Windows 3.1 正在为您编译....

c:\docume~1\88\桌面\大作业3.c:
错误  c:\docume~1\88\桌面\大作业3.c 71: 不正确的使用在一个字符 在函数        
错误  c:\docume~1\88\桌面\大作业3.c 71: 语句缺少';' 在函数        
错误  c:\docume~1\88\桌面\大作业3.c 72: 表达式语法错 在函数        
错误  c:\docume~1\88\桌面\大作业3.c 73: 表达式语法错 在函数        
错误  c:\docume~1\88\桌面\大作业3.c 73: 未定义的符号'i' 在函数        
警告  c:\docume~1\88\桌面\大作业3.c 73: 无效操作代码 在函数        
错误  c:\docume~1\88\桌面\大作业3.c 73: 语句缺少';' 在函数        
***    6 个错误     ***

回复列表 (共1个回复)

沙发

这是我做这条题的>
要求用链表实现堆栈,并用堆栈进行四则求表达式 (((2*(1+(8-4)))-8)/2)值。可以设3个堆栈,分别存放右括号(,整数,计算符。
每读到‘)’,弹出堆栈栈顶元素,处理计算,中间计算结果再压栈。
这是头程序:下面的不会做了.帮忙喔 


 main()
 { int result;
   char str="(((2*(1+(8-4)))-8)/2)";
   result=process(str);
   printf("%d\n",result);
 }
 int process(char *str)
{.........

我来回复

您尚未登录,请登录后再回复。点此登录或注册