| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 484 人关注过本帖
标题:求完整代码(自己写的没法看)
只看楼主 加入收藏
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
 问题点数:0 回复次数:2 
求完整代码(自己写的没法看)
背景
以下是几个标准的表达式:

5 * 2 + -3
5 * (2 + -3)
5 + ((-4 * -5) + (((5 + (6 - 2)) * 7 + ((4 + 2) * (3 - 1))))
与之等价的波兰表达式为

+ * 5 2 -3
* 5 + 2 -3
+ 5 + * -4 -5 + * + 5 - 6 2 7 * + 4 2 - 3 1
在普通的表达式中,符号是位于运算对象之间的,而在波兰表达式中,运算符号位于参与运算的对象之前。

波兰式在计算中的价值在于它不需要使用括号,之所以如此是由于波兰式的操作符的先后顺序是明确的。

如果我们用 P 表示波兰表达式,用 O 表示操作符,用 D 表示数字,则可以将波兰表达式定义为 P = O P P 或 P = D。


任务
编写程序计算波兰表达式的值。

输入
输入第一行是一个整数,表示输入文件中共有几个波兰式,之后每一行是一个波兰表达式。

每个表达式包含数字和二元操作符 +、-、*,操作数和运算结果都在 [-101000, 101000] 之间。

可以假设每行的数据(运算符号和数字)总共不超过 100 个。

输出
对每个表达式输出其值。
搜索更多相关主题的帖子: 代码 
2008-03-23 19:20
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
typedef struct node{
    char ch;
    int flag;
    long m;
    struct node*next;}NODE;
NODE* f1(char* point);
NODE* f2(NODE* head);
void main(void)
{int n;
int i;
NODE* HEAD;
char* pointer;
long mm;
printf("Please input BOLAN numbers:\n");
scanf("%ld",&n);
for(i=0;i<n;i++)
  {printf("Please input the %d BOLAN :\n",i);
   gets(pointer);
      HEAD=f1(pointer);
   while(HEAD->next)
  HEAD=f2(HEAD);
  mm=HEAD->m;
   printf("%s result is %ld\n",pointer,mm);
  }
   
    }
NODE* f1(char* point)
{NODE* head,last,p;
char* temp;
head=(NODE*)malloc(sizeof(NODE));
if(!head)
  exit(1);
last=head;
last->next=NULL;
while(*point)
  {switch(*point)
      {case '+' : {p=(NODE*)malloc(sizeof(NODE));
                   p->ch='+';
                   p->flag=0;
                   p->next=NULL;
                   last->next=p;
                   last=p;            
                   point=point+2;
                   break;}
        case '*' : {p=(NODE*)malloc(sizeof(NODE));
                   p->ch='*';
                   p->flag=0;
                   p->next=NULL;
                   last->next=p;
                   last=p;            
                   point=point+2;
                   break;}

        case '-' : {if(*(point+1)==' ')
                     {p=(NODE*)malloc(sizeof(NODE));
                   p->ch='+';
                   p->flag=0;
                   p->next=NULL;
                   last->next=p;
                   last=p;            
                   point=point+2;
                   break;}
                    else
                      {while(*point!=' ')
                       *temp++=*point++;
                       if(last->flag==0)
                         last->m=atol(temp);
                       else
                         {p=(NODE*)malloc(sizeof(NODE));
                          p->ch='\0';
                          p->flag=1;
                          p->m=atol(temp);
                          last->next=p;
                          last=p;p->next=NULL;}
                          point=point+1;
                          break;
                         }
          default:{while(*point!=' ')
                       *temp++=*point++;
                       if(last->flag==0;)
                         last->m=atol(temp);
                       else
                         {p=(NODE*)malloc(sizeof(NODE));
                          p->ch='\0';
                          p->flag=1;
                          p->m=atol(temp);
                          last->next=p;
                          last=p;p->next=NULL;}
                          point=point+1;
                          break;
                         }
   }
}
return head;
}
         
NODE* f2(NODE* head)
{
    NODE* p,l,q;
    l=p=head;
    while(p->next)
    {switch(p->ch)
      {case '+' : {if(p->flag==1&&!p->next->ch)
                     {p->m=p->m+p->next->m;
                      q=p->next;
                      p->next=q->next;
                      free(q);}
                    p=p->next;
                    break;
                   }
        case '*' : {if(p->flag==1&&!p->next->ch)
                     {p->m=p->m*p->next->m;
                      q=p->next;
                      p->next=q->next;
                      free(q);}
                    p=p->next;
                    break;
                   }
        case '-' : {if(p->flag==1&&!p->next->ch)
                     {p->m=p->m-p->next->m;
                      q=p->next;
                      p->next=q->next;
                      free(q);}
                    p=p->next;
                    break;
                   }
        default:{p=p->next;break;}
      
      }
     }
    return l;
}
2008-03-23 19:21
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
没人回
我顶
2008-03-23 19:39
快速回复:求完整代码(自己写的没法看)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027378 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved