the秒吧 关注:2贴子:317
  • 2回复贴,共1

这几天没上课,也没上游戏,没上Q,猫在宿舍干这个

只看楼主收藏回复

数据结构老师要求的作业,从8号中午到今天13号中午,整五天每天8点到晚11点研究C写代码,从完全不会到写出自己的东西,虽然很累但总算是有点小成果。下面放出两个程序代码,程序1功能:输入一个中缀计算表达式(加减乘除括号),可以有小数,如1.2+3*(4-5),将其转换为后缀表达式输出并计算出结果。程序2功能:输入一个中缀计算表达式(加减乘除括号),可以有小数,如1.2+3*(4-5),直接计算出结果。


IP属地:广东1楼2011-10-13 13:32回复
    程序1
    // hou.cpp : 定义控制台应用程序的入口点。
    //
    #include "stdafx.h"
    #include "stdlib.h"
    #include "stdio.h"
    #include "string.h"
    #include "conio.h"
    struct
    {
    int type;
    union
    {
    double num;
    char op;
    }community;
    }postexp[50];
    void transform(char *ch)
    {
    struct
    {
    char data[50];
    int top;
    }opstack;
    int i=-1;
    char number[50];
    opstack.top=-1;
    while(*ch!='\0')
    {
    if(*ch>='0'&&*ch<='9')
    {int m=-1;
    while(*ch>='0'&&*ch<='9'||*ch=='.')
    {
    number[++m]=*ch;
    ch++;
    }
    number[++m]='\0';
    double num=atof(number);
    postexp[++i].community.num=num;
    postexp[i].type=0;
    }
    else
    {
    switch(*ch)
    {
    case'+':
    case'-':while(opstack.top!=-1 && opstack.data[opstack.top]!='(')
    {
    postexp[++i].community.op=opstack.data[opstack.top];
    postexp[i].type=1;
    opstack.top--;
    }
    opstack.top++;
    opstack.data[opstack.top]=*ch;
    break;
    case'*':
    case'/':while(opstack.data[opstack.top]=='*'||opstack.data[opstack.top]=='/')
    {
    postexp[++i].community.op=opstack.data[opstack.top];
    postexp[i].type=1;
    opstack.top--;
    }
    opstack.top++;
    opstack.data[opstack.top]=*ch;
    break;
    case'(':
    opstack.top++;
    opstack.data[opstack.top]=*ch;
    break;
    case')':while(opstack.data[opstack.top]!='(')
    {
    postexp[++i].community.op=opstack.data[opstack.top];
    postexp[i].type=1;
    opstack.top--;
    }
    opstack.top--;
    break;
    }
    ch++;
    }
    }
    while(opstack.top>-1)
    {
    postexp[++i].community.op=opstack.data[opstack.top];
    postexp[i].type=1;
    opstack.top--;
    }
    for(int j=0;j<=i;j++)
    {if(postexp[j].type==1)
    printf("%c\t",postexp[j].community.op);
    else
    printf("%.2f\t",postexp[j].community.num);
    }
    struct
    {
    double data[50];
    int top;
    }value;
    value.top=-1;
    int n;
    double x,y,z;
    n=0;
    while(n<=i)
    {
    if(postexp[n].type==0)
    {
    value.top++;
    value.data[value.top]=postexp[n].community.num;
    }
    if(postexp[n].type==1)
    {
    x=value.data[value.top];
    value.top--;
    y=value.data[value.top];
    value.top--;
    switch(postexp[n].community.op)
    {
    case'+':
    z=y+x;break;
    case'-':
    z=y-x;break;
    case'*':
    z=y*x;break;
    case'/':
    z=y/x;break;
    }
    value.top++;value.data[value.top]=z;
    }
    n++;
    }
    double result=value.data[value.top];
    printf("计算结果为:%f\n",result);
    }
    void main()
    {
    char exp[50];
    printf("请输入计算表达式:\n");
    scanf("%s",exp);
    transform(exp);
    getch();
    }
    


    IP属地:广东2楼2011-10-13 13:33
    回复
      程序2
      #include "StdAfx.h"
      #include <stdlib.h>
      #include "stdio.h"
      #include "string.h"
      #include "conio.h"
      double calculate(double m,double n,char op)
      {
      switch(op)
      {
      case'+':return m+n;break;
      case'-':return m-n;break;
      case'*':return m*n;break;
      case'/':return m/n;break;
      }
      }
      void transform(char *ch)
      {
      struct
      {
      double data[50];
      int top;
      }value;
      struct
      {
      char data[50];
      int top;
      }opstack;
      int i=-1;
      double x,y;
      char number[50];
      opstack.top=-1;
      value.top=-1;
      while(*ch!='\0')
      {
      if(*ch>='0'&&*ch<='9')
      { int m=-1;
      while(*ch>='0'&&*ch<='9'||*ch=='.')
      {
      number[++m]=*ch;
      ch++;
      }
      number[++m]='\0';
      double num=atof(number);
      value.top++;
      value.data[value.top]=num;
      }
      else
      {
      switch(*ch)
      {
      case'+':while(opstack.top!=-1 && opstack.data[opstack.top]!='(')
      {
      x=value.data[value.top];
      value.top--;
      y=value.data[value.top];
      value.top--;
      value.top++;
      value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
      opstack.top--;
      }
      opstack.top++;
      opstack.data[opstack.top]=*ch;
      break;
      case'-':while(opstack.top!=-1 && opstack.data[opstack.top]!='(')
      {
      x=value.data[value.top];
      value.top--;
      y=value.data[value.top];
      value.top--;
      value.top++;
      value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
      opstack.top--;
      }
      opstack.top++;
      opstack.data[opstack.top]=*ch;
      break;
      case'*':while(opstack.data[opstack.top]=='*'||opstack.data[opstack.top]=='/')
      {
      x=value.data[value.top];
      value.top--;
      y=value.data[value.top];
      value.top--;
      value.top++;
      value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
      opstack.top--;
      }
      opstack.top++;
      opstack.data[opstack.top]=*ch;
      break;
      case'/':while(opstack.data[opstack.top]=='*'||opstack.data[opstack.top]=='/')
      {
      x=value.data[value.top];
      value.top--;
      y=value.data[value.top];
      value.top--;
      value.top++;
      value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
      opstack.top--;
      }
      opstack.top++;
      opstack.data[opstack.top]=*ch;
      break;
      case'(':
      opstack.top++;
      opstack.data[opstack.top]=*ch;
      break;
      case')':while(opstack.data[opstack.top]!='(')
      {
      x=value.data[value.top];
      value.top--;
      y=value.data[value.top];
      value.top--;
      value.top++;
      value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
      opstack.top--;
      }
      opstack.top--;
      break;
      }
      ch++;
      }
      }
      while(opstack.top!=-1)
      {
      x=value.data[value.top];
      value.top--;
      y=value.data[value.top];
      value.top--;
      value.top++;
      value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
      opstack.top--;
      }
      double result=value.data[value.top];
      printf("计算结果为:%f\n",result);
      }
      void main()
      {
      char exp[50];
      printf("请输入计算表达式:\n");
      scanf("%s",exp);
      transform(exp);
      getch();
      }


      IP属地:广东4楼2011-10-13 18:39
      回复