当前位置: 代码迷 >> C语言 >> 编译失败
  详细解决方案

编译失败

热度:550   发布时间:2008-03-23 11:20:44.0
编译失败
背景
以下是几个标准的表达式:

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 个。

输出
对每个表达式输出其值。
搜索更多相关的解决方案: 波兰  操作符  编译  失败  符号  

----------------解决方案--------------------------------------------------------
回复 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;
}
----------------解决方案--------------------------------------------------------
编译说是结构体声明错误
不知道怎么回事?
----------------解决方案--------------------------------------------------------
编译说是结构体声明失误不知道怎么回事?
----------------解决方案--------------------------------------------------------
用vc编译了下,,错误太多了
至少也因该是
NODE *p,*last....

[[it] 本帖最后由 qfyzy 于 2008-3-23 11:27 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我用TC编错误就是结构体指针的问题
----------------解决方案--------------------------------------------------------
NODE* head,last,p
等于 struct node *head,last,p;
不等于struct node *heas,*last,*p
怎么能不出错
----------------解决方案--------------------------------------------------------
原来是这样啊
----------------解决方案--------------------------------------------------------
回复 7# 的帖子
谢谢了啊
----------------解决方案--------------------------------------------------------
  相关解决方案