📄 自顶向下.txt
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define al 10
void factor(); //F → P F1
void factor_1(); //F1 → ^F F1 | ε
void power(); //P → n|(E)
void term_1(); //T1 → *T T1 | /T T1 | ε
void term(); //T → F T1
void expr_1();
void expr();
void statement();
// 定义全局数据结构用于计算
char *p;
double stack[100] ;
int top=0 ;
// var用于记录要赋值的变量字符串
char var[al+1];
void expr() // E → T E1
{
term();
expr_1();
}
void error() // error
{
printf("error!!!\n");
}
int getsym() // 读取数字
{
int num;
if( *p<='9' && *p>='0' )
{ // 整常数的处理
num=0;
do{
num=10 * num + *p - '0' ;
p++;
}while( *p<='9' && *p>='0' ) ;
}
return num;
}
void power() //P → n|(E)
{
if( *p<='9' && *p>='0' )
{
int num=0;
//读入的数压入栈中
num=getsym();
stack[top++]=num ;
}
else if(*p == '(')
{
p++;
expr();
if(*p != ')' )
error();
p++;
}
else error();
}
void factor() //F → P F1
{
power();
factor_1();
}
void factor_1() //F1 → ^F F1 | ε
{
if( *p== '^' )
{
p++;
factor();
stack[top-2]=pow(double(stack[top-2]),int(stack[top-1])); // ^运算
top-- ; // 调整栈指针
factor_1();
}
}
void term_1() //T1 → *T T1 | /T T1 | ε
{
if(*p=='*' )
{
p++;
term() ;
stack[top-2]=stack[top-2]*stack[top-1]; // * 运算
top-- ; // 调整栈指针
expr_1() ;
}
else if( *p=='/' )
{
p++;
term() ;
stack[top-2]=stack[top-2]/stack[top-1]; // / 运算
top-- ; // 调整栈指针
expr_1() ;
}
}
void term() //T → F T1
{
factor();
term_1();
}
void expr_1()
{
if(*p=='+' )
{
p++;
term() ;
stack[top-2]=stack[top-2] + stack[top-1]; // + 运算
top-- ; // 调整栈指针
expr_1() ;
}
else if( *p=='-' )
{
p++;
term() ;
stack[top-2]=stack[top-2] - stack[top-1]; // - 运算
top-- ; // 调整栈指针
expr_1() ;
}
}
void statement()
{
expr();
}
void main()
{
char *s;
p=(char *)malloc(100*sizeof(char));
printf("输入表达式:\n");
cin>>p;
s=p;
statement();
printf( "%s=%f\n", s,stack[0] ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -