真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

eval函數(shù)c語(yǔ)言 eval函數(shù)用法

編寫(xiě)一段c程序,實(shí)現(xiàn)多項(xiàng)式的計(jì)算,誰(shuí)能幫我呀,

我可以寫(xiě)個(gè)簡(jiǎn)單的只有+ - * / 冪和括號(hào)的多項(xiàng)式的計(jì)算

創(chuàng)新互聯(lián)的客戶(hù)來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、電商網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā)。

/*

主要是堆棧的應(yīng)運(yùn),把多項(xiàng)式轉(zhuǎn)換為后綴表達(dá)式,再計(jì)算后綴表達(dá)式的值

*/

//中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式的程序

#include stdio.h

#include ctype.h

#include stdlib.h

typedef struct node

{

char data; int code; int pri;

struct node *link;

}NODE;

struct Tb1

{

char data; int code; int pri;

}opchTb1[]={{'*',1,4},{'/',2,4},{'+',3,2},{'-',4,2},{'(',5,5},{')',6,1},{'\0',7,0},{'#',-1,0}};

NODE *optop;

char num[200], *numtop;

char expStr[200];

void push(char x,int c,int p,NODE **toppt)

{

NODE *q=(NODE *)malloc(sizeof(NODE));

q-data=x;

q-code=c;

q-pri=p;

q-link=*toppt;

*toppt=q;

}

int pop(char *op,int *cp, NODE **toppt)

{

NODE *q=*toppt;

if(*toppt==NULL) return 1;

*op=q-data;

*cp=q-code;

*toppt=q-link;

free(q);

return 0;

}

int expr(char *pos)

{

struct Tb1 *op;

char sop;

int type,code,n,m,i,c;

optop=NULL;

numtop=num;

n=m=0;

c=' ';

push('#',0,0,*optop);

while(1){

while(c==' '||c=='\t') c=*pos++;

if(isalpha(c)){

*numtop++=' ';

while(isalpha(c)||isdigit(c)) {*numtop++=c;c=*pos++;}

if(m) return 1;

m=1;

continue;

}

else {

for(i=0;opchTb1[i].code!=-1opchTb1[i].data!=c;i++)

if(opchTb1[i].code==-1) return 3;

op=opchTb1.[i];

type=opchTb1.[i].code;

c=*pos++;

}

if(type5){

if(m!=1) return 1;

m=0;

}

if(type==5) n++;

if(type==6){

if(n--==0) return 2;

if(op-prioptop-pri)

if(op-data=='(') push(op-code,1,*optop);

else push(op-data,op-code,op-pri,*optop);

else{

while(optop!=NULLop-pri=optop-pri) {

pop(sop,code,optop);

if(code5code0) {

*numtop++=' ';

*numtop++=sop;

}

}

if(op-data=='\0') return(n!=0||(m!=1numtopnum))?4:(*numtop='\0');

else if(op-data!=')') push(op-data,op-code,op-pri,optop);

}

}

}

void main()

{

int d;

printf("please input the string!\n");

gets(expStr);

if((d=expr(expStr))==0) printf("the postfix string is:%s\n",num);

else printf("The string error! the error is:%d\n",d);

getch();

}

//后綴表達(dá)式的計(jì)算

#include stdio.h

#include stdlib.h

#include math.h

#define MAXCOLS 80

#define TRUE 1

#define FLASE 0

double eval(char[]);

double pop(struct stack *ps);

void push(struct stack *ps,double x);

int empty(struct stack *ps);

int isdigit(char);

double oper(int,double,double);

void main()

{

char expr[MAXCOLS];

int position=0;

printf("\nPlease input the string:");

while((expr[position++]=getchar())!='\n');

expr[--position]='\0';

printf("%s%s","the original postfix expression is",expr);

printf("\n%f",eval(expr));

getch();

} /*end main*/

/*程序的主要部分eval函數(shù),這個(gè)函數(shù)只是計(jì)算算法的C語(yǔ)言實(shí)現(xiàn),同時(shí)考慮了特定的環(huán)境和數(shù)據(jù)的輸入*/

/*輸出格式。eval調(diào)用了一個(gè)isdigit函數(shù),它用來(lái)判斷其參數(shù)是不是一個(gè)操作數(shù)。在函數(shù)eval及其調(diào)用的*/

/*pop和push例程中都使用了下面的堆棧說(shuō)明。eval函數(shù)在聲明后給出*/

struct stack{

int top;

double items[MAXCOLS];

};

double eval(char expr[])

{

int c,position;

double opnd1,opnd2,value;

struct stack opndstk;

opndstk.top=-1;

for(position=0;(c=expr[position])!='\0';position++)

if(isdigit(c)) /*operand--convert the character representation of the digit into double and*/

/*push it onto the stack*/

push(opndstk,(double)(c-'0'));

else{ /*operator*/

opnd2=pop(opndstk);

opnd1=pop(opndstk);

value=oper(c,opnd1,opnd2);

push(opndstk,value);

} /*end else*/

return(pop(opndstk));

}/*end eval*/

/*下面的函數(shù)在許多C系統(tǒng)中都被預(yù)定義為一個(gè)宏*/

int isdigit(char symb)

{

return(symb='0'symb='9');

}

/*函數(shù)oper首先檢查它的第一個(gè)參數(shù)是不是一個(gè)合法的運(yùn)算符,如果是,則用另外兩個(gè)參數(shù)來(lái)決定運(yùn)算結(jié)果*/

/*對(duì)于求冪運(yùn)算,使用了math.h中定義的函數(shù)pow(op1,op2)。*/

double oper(int symb,double op1,double op2)

{

switch(symb){

case '+' : return(op1+op2);

case '-' : return(op1-op2);

case '*' : return(op1*op2);

case '/' : return(op1/op2);

case '$' : return(pow(op1,op2));

default:printf("%s","illegal operation");

exit(1);

}/*end switch*/

}/*end oper*/

double pop(struct stack *ps)

{

if(empty(ps)){

printf("%s","stack underflow");

exit(1);

} /*end if*/

return(ps-items[ps-top--]);

}/*end pop*/

void push(struct stack *ps,double x)

{

ps-items[++(ps-top)]=x;

return;

} /*end push*/

int empty(struct stack *ps)

{

return(ps-top==-1);

}/*end empty*/

vc中有類(lèi)似matlab中eval語(yǔ)句的函數(shù)嗎

matlab的代碼是解釋運(yùn)行的

所以可以在命令行用交互式地一句一句輸入命令和運(yùn)行命令

本身你在命令行輸入的命令就是一串字符串

matlab 負(fù)責(zé)解釋和執(zhí)行命令

而eval('str')就是執(zhí)行str字符串內(nèi)容的指令

實(shí)際上跟你在命令行輸入str內(nèi)容后按回車(chē)執(zhí)行命令是一樣的

而c語(yǔ)言運(yùn)行之前是需要先將代碼整體編譯再運(yùn)行的

不存在像matlab一樣解釋運(yùn)行的機(jī)制,所以沒(méi)有類(lèi)似的eval函數(shù)

用C語(yǔ)言實(shí)現(xiàn)類(lèi)似的功能就比較麻煩了

如何用C語(yǔ)言實(shí)現(xiàn)MATLAB中eval函數(shù)的功能

eval_r()函數(shù)的功能就是將括號(hào)內(nèi)的字符串視為語(yǔ)句并運(yùn)行

例如: eval_r('y1=sin(2)')就是相當(dāng)于在matlab命令窗口輸入了y1=sin(2)這條命令。

c++ eval

C和C++是沒(méi)有eval的,不過(guò)可以自己實(shí)現(xiàn)一個(gè)。一般的算式計(jì)算還是比較好實(shí)現(xiàn)的。C++的優(yōu)勢(shì)在別的地方,僅僅是沒(méi)有類(lèi)似eval的函數(shù)并不代表C語(yǔ)言就是一門(mén)差語(yǔ)言。


網(wǎng)站名稱(chēng):eval函數(shù)c語(yǔ)言 eval函數(shù)用法
文章地址:http://weahome.cn/article/dossihd.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部