?? 自頂向下.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 + -