if(ch=='.') return(POINT); return(-1); }
/*************************************************/ /* 表达式计算 */ /*************************************************/ /* 输入参数:char *str,表达式字符串 */ /* 输出参数:double *Result,表达式计算结果 */ /* 函数返回值:1 计算正确 */ /* 0 表达式有错 */ /*************************************************/ int EXCUTE(char *str,double *Result) {
int pp,strlength,topTr,topNd,CharType,OPTR[STACKSIZE]; double number,temp,OPND[STACKSIZE]; OPTR[0]=STARTEND; topTr=1; topNd=0; pp=0;
while((str[pp]))
{ CharType=GetCharType(str[pp]); //确定字符类型 switch(CharType)
{ case -1: //不是表达式中的字符,表达式有错 return(0);
case DIGIT: //数字字符,实数的开始字符 number=0;
while(str[pp]>='0' && str[pp]<='9') //处理实数的整数部分 { number=number*10+(str[pp]-48);
pp++; }
if(str[pp]=='.') //遇到小数点 { temp=10.0;
pp++;
while(str[pp]>='0' && str[pp]<='9') //处理实数的小数部分 { number=number+(str[pp]-48)/temp; temp=temp*10; pp++; }
}
OPND[topNd]=number; topNd++; break;
case POINT: //小数点,以小数点开头的实数 number=0; temp=10.0; pp++;
while(str[pp]>='0' && str[pp]<='9')
{ number=number+(str[pp]-48)/temp; temp=temp*10; pp++; }
OPND[topNd]=number; topNd++; break;
case PLUS: //+ case MINUS: //- case POWER: //* case DIVIDE: /// (学生自己完成) case LEFTP: //( (学生自己完成)
case RIGHP: //)
(学生自己完成)
case STARTEND: //遇到表达式结束符 (学生自己完成) if(topNd==1)
{ *Result=OPND[0]; return(1); }
else return(0); } } return(1); } void main() { int num,flag;
double result; char str[256]; str[0]=0; while(1) { num=menu(); switch(num) {
case 1: //输入表达式 InputExpression(str); flag=0;
printf(\ getchar(); break;
case 2: //计算表达式 if(str[0]==0)
{ printf(\
getchar(); }
{ printf(\ getchar(); break;
if(!eccute(str,&result))
} else
{ printf(\ getchar(); flag=1; } break;
case 3: //打印计算结果 if(flag)
{ printf(\
getchar(); }
break;
case 4: //退出系统 break; }
if(num==4) break; } }
int menu(void) { int num; clrscr();
printf(\ printf(\ printf(\ printf(\
printf(\ do{
scanf(\ }while(num<1 || num>4); return(num); }

