當前位置:編程學習大全網 - 編程語言 - c語言中的運算符編程

c語言中的運算符編程

# include & ltstdio.h & gt

# include & ltstring.h & gt

#定義編號100

Typedef結構{ //操作數堆棧

浮點d[N];

int len//len相當於top

}棧,*列表;

Typedef結構{ //運算符堆棧

char c[N];

int len//len相當於top

}堆棧,*列表;

int init(list p);//堆棧初始化

int inits(列表p);//堆棧初始化

int pushs(列表p,浮點m);//堆棧到堆棧中

int push(list p,char c);//堆棧到堆棧中

int pops(list p,float * m);//堆棧中的堆棧

int pop(list p,char * c);//堆棧出堆棧

int in(char c);//如果判斷C是否為數據,則返回1;否則,將返回0。

char pre(char s,char c);//判斷s c s的優先級& gtc返回“>”;s & ltc return ' & lt';s=c返回' = ';

浮點運算(浮點a,char t,浮點b);//t(+-*/)對a b的操作返回a+b或a-b,a*b,a/b A * B,a/b。

浮點值(char s[]);//找到表達式s的值

void main(){

char s[N];int n;浮動f;

printf(" * * * * * * * * * * * * * * * * * * Express Evaluate * * * * * * * * * * * * * * * * * * * * * * \ n ");

while(1){

printf("請輸入壹個快遞\ n ");

scanf("%s ",s);//輸入壹個表達式

n = strlen(s);//查找表達式的長度

printf("快遞長度=%d\n ",n);//輸出表達式的長度

s[n]= ' # ';//在表達式的末尾插入“#”。註意:#表示操作結束。

f =值;//計算表達式的長度

printf("f=%.5f\n ",f);//表示值note時只輸出前五位小數。

printf("繼續輸入1,中斷輸入0 \ n ");

scanf("%d ",& ampn);printf(" \ n ");//判斷是否繼續操作,輸入1,否則輸入0。

如果(!n)斷開;}

}

int init(list p){

如果(!p) {printf("Error,init stack NULL \ n ");返回0;}

p->;len = 0;

返回1;

}

int inits(列表p){

如果(!p) {printf("Error,init stacks NULL \ n ");返回0;}

p->;len = 0;

返回1;

}

int pushs(列表p,浮點m){

如果(!p) {printf("Error,pushs stacks NULL \ n ");返回0;}

p->;d[p->;len++]= m;返回1;

}

int push(list p,char c){

如果(!p) {printf("Error,push stack NULL \ n ");返回0;}

p->;c[p->;len++]= c;返回1;

}

int pops(列表p,浮點*m){

如果(!p) {printf("Error,push stacks NULL \ n ");返回0;}

* m = p-& gt;d[-p->;len];返回1;

}

int pop(list p,char *c){

如果(!p) {printf("Error,push stack NULL \ n ");返回0;}

* c = p-& gt;c[-p->;len];返回1;

}

Int in(char c){ //如果C是數據,則返回1,否則返回0。

if(c & gt;= ' 0 ' & amp& ampc & lt='9'||c== ',')返回1;返回0;}

Char pre(char s,char c){ //判斷s c s >的優先級;c返回“>”;s & ltc return ' & lt';s=c返回' = ';

char m = ' & lt',n= '= ',k = ' & gt',r;

if((s = = '-')| |(s = = '+'){

if((c = = ' *)| |(c = = '(')| |(c = = '/'))

r = m;

else r = k;}

if((s = = ' *)| |(s = = '/'){

if((c = = '('))r = m;

else r = k;}

if(s=='('){

if(c = = ')')r = n;

else r = m;}

if(s== ')')

r = k;

if(s=='#') {

if(c = = ' # ')r = n;

else r = m;}

return r;

}

Float operate (float a,char t,float B){//對a b返回a+b或a-b,a*b,a/b A * B,a/b執行t(+-*/)運算。

if(t=='-')返回a-b;if(t=='+')返回a+b;

if(t=='* ')返回a * b;if(t=='/')返回a/b;}

浮點值(char s[]){

堆棧opnd堆棧optrchar *p,*pr,x,t;浮點a,b,m = 0;

inits(& amp;opnd);初始化(& ampoptr);int k=0,I,TP = 10;

推(& ampoptr,' # ');//在堆棧optr中按“#”標記結束。

p = pr = s;//初始化指針p pr,使pr p指向表達式。

while(*p!='#'||optr.c[optr.len-1]!= ' # '){//當p指向的運算符和optr中的top元素都是' # '時,運算結束。

If(in(*p)) //如果p指向壹個數字,則將數字字符串轉換為浮點數據並存儲在堆棧opnd中。

{

m = 0;k = 0;TP = 10;

while(in(* p))p++;//將p指向下壹個運算符

而(pr!=p)

{

如果(*pr!='.')//pr指向小數點就跳過。

m =(m+*(pr++)-0 ')* 10;//將單個字符轉換成數據,逐位求和。

Else{ //比如12.3-& gt;1230

k = p-pr;pr++;}

}

for(i=0,TP = 10;我& ltk;I++) //求除數tp使1230除以tp(100)等於12.3。

{

TP = TP * 10;

如果(i==k-1)

TP = TP/10;

}

推(& ampopnd,m/TP);//輸入到堆棧opnd中

}

else開關(pre(optr.c[optr.len-1],*p)){

大小寫' & lt':推(& ampoptr,* p);p++;pr = p;打破;

case ' = ':pop(& amp;optr & amp;x);p++;pr = p;打破;

大小寫“>”:pop(& amp;optr & amp;t);pops(& amp;opnd & amp;b);pops(& amp;opnd & amp;a);//輸出壹個運算符和兩個數據。

推(& ampopnd,operate(a,t,b));打破;}//操作

}

return opnd . d[opnd . len-1];//返回表達式的值

}

  • 上一篇:壹文讀懂BET測試常見問題(二)
  • 下一篇:十堰市高級技工學校有哪些專業
  • copyright 2024編程學習大全網