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

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 11:20
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
回复 1# 的帖子
#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 11:21
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
编译说是结构体声明错误
不知道怎么回事?
2008-03-23 11:22
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
编译说是结构体声明失误不知道怎么回事?
2008-03-23 11:23
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
用vc编译了下,,错误太多了
至少也因该是
NODE *p,*last....

[[it] 本帖最后由 qfyzy 于 2008-3-23 11:27 编辑 [/it]]

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-23 11:25
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
我用TC编错误就是结构体指针的问题
2008-03-23 11:27
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
NODE* head,last,p
等于 struct node *head,last,p;
不等于struct node *heas,*last,*p
怎么能不出错

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-23 11:29
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
原来是这样啊
2008-03-23 11:30
接过雷锋的枪
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2007-11-11
收藏
得分:0 
回复 7# 的帖子
谢谢了啊
2008-03-23 11:30
快速回复:编译失败
数据加载中...
 
   



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

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