主题:[讨论]求助,急啊.快来帮忙.我的程序为什么会这种错...谢谢各位了
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 个错误 ***
#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 个错误 ***