Programming 板


LINE

第一个程式码:多项式相加 #include<iostream> using namespace std; struct PolyNode{ float coef; int exp; PolyNode *link; }; void createPolyA(PolyNode **); void createPolyB(PolyNode **); void listAll(PolyNode *); PolyNode* newTerm(float,int); PolyNode* padd(PolyNode *,PolyNode *); int main(void){ PolyNode *head_a=NULL; PolyNode *head_b=NULL; createPolyA(&head_a); createPolyB(&head_b); cout<<"多项式A为:"; listAll(head_a); cout<<"多项式B为:"; listAll(head_b); PolyNode *newpoly; newpoly=padd(head_a,head_b); system("pause"); return 0; } PolyNode* padd(PolyNode* x,PolyNode* y){ PolyNode *p,*q,*head,*tail,*final; float c; p=x;q=y; tail=new PolyNode; head=tail; while(p!=NULL&&q!=NULL){ if(p->exp==q->exp){ if((c=p->coef+q->coef)!=0){ tail->link=newTerm(c,p->exp); tail=tail->link; } p=p->link; q=q->link; } else if(p->exp<q->exp){ tail->link=newTerm(q->coef,q->exp); tail=tail->link; } else{ tail->link=newTerm(p->coef,p->exp); tail=tail->link; } } while(p!=NULL){ tail->link=newTerm(p->coef,p->exp); tail=tail->link; } while(q!=NULL){ tail->link=newTerm(q->coef,q->exp); tail=tail->link; } tail->link=NULL; final=head->link; free(head); return final; } void createPolyA(PolyNode **head){ PolyNode *ptr; ptr=new PolyNode; *head=ptr; ptr->coef=5; ptr->exp=4; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=3; ptr->exp=3; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=7; ptr->exp=1; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=3; ptr->exp=0; ptr->link=NULL; } void createPolyB(PolyNode **head){ PolyNode *ptr; ptr=new PolyNode; *head=ptr; ptr->coef=1; ptr->exp=5; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=10; ptr->exp=3; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=4; ptr->exp=2; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=-7; ptr->exp=1; ptr->link=new PolyNode; ptr=ptr->link; ptr->coef=3; ptr->exp=0; ptr->link=NULL; } void listAll(PolyNode *ptr){ while(ptr!=NULL){ cout<<ptr->coef<<"X"<<ptr->exp<<" "; ptr=ptr->link; } cout<<endl; } PolyNode* newTerm(float c,int e){ PolyNode *p=new PolyNode; p->coef=c; p->exp=e; return p; } 感觉没有写错,可是跑不出结果,不知道问题出在哪里 0.0 ? 第二个程式码:中序转後序求值 #include<iostream> #define N 100 #define operator(c) ((c=='+')||(c=='-')||(c=='*')||(c=='/'))?1:0 #define operands(c) ((c)>='0' && (c)<='9')?1:0 using namespace std; typedef struct{ int stackarray[N]; int sp; }Stack; int transform(char*,char*,Stack*); void push(Stack *,int); void pop(Stack *,int *); int in_stack_priority(int); int in_coming_priority(int); int evaluate(char *,Stack *); int cal(int,int,char); int pop2(Stack *); int main(void){ Stack s; s.sp=-1; char input[N]; char final[N]; cout<<"请输入中序运算式"; cin>>input; transform(input,final,&s); cout << "中序式 => " << input << " 後序式=> " <<final<<endl; cout<<"计算出来的值 => "<<evaluate(final,&s)<<endl; system("pause"); return 0; } int transform(char *infix,char *postfix,Stack *p){ int i=0,j=0; int element; char token; token=infix[i]; while(token!='\0'){ if(operands(token)) postfix[j++]=token; else if(token=='(') push(p,token); else if(token==')'){ while(p->sp>=0){ pop(p,&element); if(element=='(') break; postfix[j++]=element; } } else if(operator(token)){ while(p->sp!=-1){ element=p->stackarray[p->sp]; if((in_coming_priority(token))<=(in_stack_priority(element))){ pop(p,&element); postfix[j++]=element; } else break; } push(p,token); } i++; token=infix[i]; } while(p->sp!=-1){ pop(p,&element); postfix[j++]=element; } postfix[j]='\0'; } void push(Stack *p,int x){ p->sp++; p->stackarray[p->sp]=x; } void pop(Stack *p,int *x){ *x=p->stackarray[p->sp]; p->sp--; } int in_stack_priority(int c){ char op[5]={'(','+','-','*','/'}; char prio[5]={0,1,1,2,2}; for(int i=0;i<5;i++){ if(c==op[i]) return prio[i]; } } int in_coming_priority(int c){ char op[5]={'(','+','-','*','/'}; char prio[5]={4,1,1,2,2}; for(int i=0;i<5;i++){ if(c==op[i]) return prio[i]; } } int evaluate(char *postfix,Stack *p){ char token; int i=0; int result; int a,b; token=postfix[i]; char elem1[5],elem2[5]; while(token!='\0'){ if(operands(token)) push(p,token); else if(operator(token)) { a=pop2(p); b=pop2(p); result=cal(b,a,token); push(p,result); } i++; token=postfix[i]; } pop(p,&result); return result; } int cal(int x,int y,char c){ switch(c){ case '+': return x+y; break; case '-': return x-y; break; case '*': return x*y; break; case '/': return x/y; break; } } void push2(Stack *p,int x){ p->sp++; p->stackarray[p->sp]=x; } int pop2(Stack *p){ return p->stackarray[p->sp]; p->sp--; } 转後序没问题,但是转後序之後求值求不出来 0.0 跑出的答案不对 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.253.210.88
1F:→ MOONRAKER:水晶球,显出景象! 118.163.12.174 09/17 12:32







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP