当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言代码补全:前缀表达式求值

更新:02-23 整理:39baobao.com
字体:

[求C语言投票系统源代码代码的注释]#include<stdio.h> #include<conio.h> struct hxr { int m; int point; } hxr[3]; //选票结构体 void main() { int i=0,j=0,k,temp=0; char x,y,z; struct hxr hxr[3]; for(...+阅读

思路:这里实际是把前缀表达式逆序输出转化为类似后序表达式求值: 比如: 输入:+ + 2 * 3 - 7 4 / 8 4 处理成 4 8 / 4 7 - 3 * 2 + + 链表,放到后缀表达式求值程序 postFixEval计算得 13.0 #include #include #include #include #define MAXSIZE 100 //用链表实现前缀表达式, typedef struct Node { union {char exp; int a; } data; struct Node *next; struct Node *prev; }Node; int isExpression(int tmpExp){ if(tmpExp=='+'||tmpExp=='-'||tmpExp=='/'||tmpExp=='*'||tmpExp=='('||tmpExp==')') return 1; else return 0; } int isSuperior(int tmpExp,int tmpExp2){ if(tmpExp2=='('||(tmpExp=='/'||tmpExp=='*')) //tmpExp2=='('||(tmpExp=='/'||tmpExp=='*')&(tmpExp2=='+'||tmpExp2=='-') return 1; else return 0; } void printNode(Node* node) { if(node) {char tmpExp=node->data.exp; if(isExpression(tmpExp)) printf("%c",node->data.exp); else printf("%d",node->data.a); if(node) printNode(node->next); } } typedef struct Stack2 {double arr[MAXSIZE]; int top; }Stack2; void push(double num,Stack2 *stack) {if( stack->top>=MAXSIZE) return ; else {stack->top++; (stack->arr[stack->top]=num); } } double pop(Stack2 *stack) { double ret; if( stack->toparr[stack->top]; stack->top--;} return ret; } // 后缀表达式求值程序 double postFixEval(Node * head) { double val=0; Node * node=head; Stack2 stack2; stack2.top=-1; while(node) { if(!isExpression(node->data.exp)) { push(node->data.a,&stack2); } else { double op1=pop(&stack2); double op2=pop(&stack2); switch (node->data.exp) { case '+': val = op1 + op2; break; case '-': val = op1 - op2; //注意是op1 /op2 break; case '*': val = op1 * op2; break; case '/': val = op1 / op2; //注意是op1 /op2 break; } push(val,&stack2); } node=node->next; } return val=pop(&stack2); } int main(int argc, char* argv[]) { Node * head=0; int i=0,length=0; char buf[1024]; char* tmpExp,sep[]=" "; char *p=NULL; // head=(Node*)malloc(sizeof(Node)); // head->data.exp=' '; // head->data.a=0; // head->next=0; gets(buf); tmpExp=buf; Node* tmpExpNode=head; //输入为前缀表达式 while(p=strtok(tmpExp,sep)) { Node * node=(Node*)malloc(sizeof(Node)); node->next=0; // printf("%s",p); p is a point to string (not a point to a char) if(strcmp(p,"+")==0||strcmp(p,"+")==0||strcmp(p,"-")==0||strcmp(p,"*")==0||strcmp(p,"/")==0||strcmp(p,"(")==0||strcmp(p,")")==0) sscanf(p,"%c",&node->data.exp); else sscanf(p,"%d",&node->data.a); node->next=tmpExpNode; //逆转输入的前序表达式,即后输入的在前 tmpExpNode=node; tmpExp=0; } printf("%0.1f\n",postFixEval(tmpExpNode)); //0.1f表示一位小数 return 0; }

本文地址:https://www.39baobao.com/show/29_46179.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

C语言关机代码其实这个程序是调用了C:\windows\system32\shutdown.exe 这个文件的 Windows XP系统通过一个名为Shutdown.exe的程序来完成关机操作(位置在Windows\System32下),一般情况下XP的...

C语言计算工资的代码你为什么要用;if(y<5,t<=40),建议你看看逗号运算符的用法,、 int main() { int y,t; double m; scanf("%d %d",&y,&t); if(y<5 & t<=40) //且的关系 printf("%.2f",m=t*30); else i...

c语言程序代码注释int driver=EGA,mode=1;\\将来要设置显示模式是EGA模式1,现在只是把模式定下来 int data[]={7,3,12,6,9,5,8,11};\\数组 int i,j,xstep=70,ystep=20;\\i j是循环计数器 剩下2个...

c语言告白代码带音乐用C语言播放音乐,一般需要额外的库或者调用系统的API函数。 以Windows为例,可以通过PlaySound函数播放wav格式的音乐。示例如下: #include<stdio.h> #include<windows.h> #incl...

C语言编程代码加密例如:简单的移位加密可以这样 FILE *fp=fopen("test.txt","r"); FILE *fp1=fopen("new.txt","w"); while((c=fgetc(fp))!=EOF) fputc(c+1,fp1);//逐个读取全部字符,ASCII值+1并保存到另...

如何在C语言中使用正则表达式看到大家讨论这方面的东西,作点贡献聊表各位高手对这个版快的无私奉献 :oops: 如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极...

C语言判断给定表达式的括号是否匹配#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char c; int i=0,n; int output[100]; int lefts=0,leftm=0,leftb=0; int rights=0,rightm=0...

贪吃蛇c语言代码#define N 200 #include#include#include#define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0;/*...

c语言中常量表达式有哪些C语言中的常量与常量表达式与变量 在程序运行过程中,其值不能被改变的量,称为常量。 整型常量:1,0,-1 实型常量:8.2,-3.55 字符常量:'a', 'c'。 常量一般从其字面形式即可判断。...