22 楼
yj1221 [专家分:20] 发布于 2008-11-28 22:17:00
本以为提交的人这么多,很高兴,结果真正参加比赛的也就 “两个人”,不过,我自己也没编写出完整的程序,不过这都是我自己编的。为了奖励我,我把自己的程序也发到上面。
#include <iostream>
#include <stack>
#include <math.h>
using namespace std;
char prog[80]; // 存储用户输入的表达式
int syn, p; // syn 是得到单词 的种别码,p 是读字符数组的 下标
double sum; // 计算表达式中的数字的值
#define BOUND 13
//参加运算的运算符
char symbol[BOUND] = { '+', '-', '*', '/', '^', '{', '}', '[', ']', '(', ')', 'D', '#'};
// syn = 0 1 2 3 4 5 6 7 8 9 10 11 12 D 代表数字
//每两种运算符之间的关系, 若两者之间不存在比较关系, 为'$'
char prior[BOUND][BOUND] = {
// + - * / ^ { } [ ] ( ) digit #
/* + */ {'>', '>', '<', '<', '<', '<', '>', '<', '>', '<', '>', '<', '>'},
/* - */ {'>', '>', '<', '<', '<', '<', '>', '<', '>', '<', '>', '<', '>'},
/* * */ {'>', '>', '>', '>', '<', '<', '>', '<', '>', '<', '>', '<', '>'},
/* / */ {'>', '>', '>', '>', '<', '<', '>', '<', '>', '<', '>', '<', '>'},
/* ^ */ {'>', '>', '>', '>', '>', '<', '>', '<', '>', '<', '>', '<', '>'},
/* { */ {'<', '<', '<', '<', '<', '<', '=', '<', '$', '<', '$', '<', '$'},
/* } */ {'>', '>', '>', '>', '>', '$', '$', '$', '$', '$', '>', '$', '>'},
/* [ */ {'<', '<', '<', '<', '<', '<', '$', '$', '=', '<', '$', '<', '$'},
/* ] */ {'>', '>', '>', '>', '>', '$', '>', '$', '$', '$', '>', '$', '>'},
/* ( */ {'<', '<', '<', '<', '<', '<', '$', '<', '$', '<', '=', '<', '$'},
/* ) */ {'>', '>', '>', '>', '>', '$', '>', '$', '>', '$', '>', '$', '>'},
/* digit */ {'>', '>', '>', '>', '>', '$', '>', '$', '>', '$', '>', '$', '>'},
/* # */ {'<', '<', '<', '<', '<', '<', '$', '<', '$', '<', '$', '<', '='}
};
int isDigit(char chElem)
{ // if chElem is char or Didit, return 1; else return 0
if( (chElem >= '0' && chElem <= '9') )
return 1;
else
return 0;
}
28 楼
deuson [专家分:70] 发布于 2008-12-13 18:33:00
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define PLUS 0
#define MINUS 1
#define POWER 2
#define DIVIDE 3
#define LEFTP 4
#define RIGHP 5
#define STARTEND 6
#define DIGIT 7
#define POINT 8
#define NUM 7
#define NO 32767
#define STACKSIZE 20
//运算符
char a[] = {'+', '-', '*', '/', '(', ')', '#'};
//优先关系矩阵,规定:=为0,>为1,<为-1, 空为NO
int PriorityTables[7][7] = {{ 1, 1, -1, -1, -1, 1, 1},
{ 1, 1, -1, -1, -1, 1, 1},
{ 1, 1, 1, 1, -1, 1, 1},
{ 1, 1, 1, 1, -1, 1, 1},
{-1,-1, -1, -1, -1, 0, NO},
{ 1, 1, 1, 1, NO, 1, 1 },
{-1,-1, -1, -1, -1, NO, 0}
};
int menu(void);
/*--------------------------------------------*/
/* 输入表达式函数 */
/*--------------------------------------------*/
void InputExpression(char str[])
{ int len;
printf("Input expression string:\n");
scanf("%s",str);
len = strlen(str);
str[len]='#';
str[len+1]='\0';
}
/*--------------------------------------------*/
/* 确定当前字符类型 */
/*--------------------------------------------*/
/*--------------------------------------------*/
/*若为运算符,则返回运算符在运算符数组中的序号 */
/* 若为数字字符,则返回DIGIT */
/* 若为小数点字符,则返回POINT */
/* 否则为非法字符,返回-1 */
/*--------------------------------------------*/
int GetCharType(char ch)
{int i;
for(i=0;i<NUM;i++) if(ch==a[i]) return (i);
if(ch>='0' && ch<='9') return (DIGIT);
if(ch=='.')return(POINT);
return (-1);
}