2010年广州周立功单片机(致远电子) 机试题(4)答案

来源:互联网 发布:vmware linux 上网 编辑:程序博客网 时间:2024/05/16 03:14

答案不标准也不一定是最佳,仅供参考

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _STATE
{
 char data;
 struct _STATE *zero;//指向0跳转的下一个状态
 struct _STATE *one;//指向0跳转的下一个状态
}STATE,*pSTATE;

STATE charState[8];//八种状态
STATE beginNode;

void InitStateMachine(STATE charState[])
{
 charState[0].data='A';
 charState[1].data='B';
 charState[2].data='C';
 charState[3].data='D';
 charState[4].data='E';
 charState[5].data='F';
 charState[6].data='G';
 charState[7].data='H';
 charState[4].one=&charState[0];
 charState[4].zero=&charState[2];
 charState[0].one=&charState[2];
 charState[0].zero=&charState[1];
 charState[1].one=&charState[5];
 charState[1].zero=&charState[3];
 charState[2].one=&charState[3];
 charState[2].zero=&charState[3];
 charState[3].one=&charState[6];
 charState[3].zero=&charState[7];
 charState[5].one=NULL;
 charState[5].zero=NULL;
 charState[6].one=&charState[4];
 charState[6].zero=&charState[4];
 charState[7].one=&charState[5];
 charState[7].zero=&charState[5];

 beginNode.data=0;
 beginNode.one=&charState[0];
 beginNode.zero=&charState[2];
}

void StateMachine(const char *pStates,char *pOutput)
{
 pSTATE p=&beginNode;
 unsigned int length = strlen(pStates),i;
 for(i=0 ; i<length ; i++)
 {
  if(pStates[i] == '0')
  {
   if(p->zero == NULL)
   {
    printf("/n");
    return;
   }
   p=p->zero;
   printf("%c",p->data);
  }
  else
  {
   if(pStates[i] == '1')
   {
    if(p->one == NULL)
    {
     printf("/n");
     return;
    }
    p=p->one;
    printf("%c",p->data);
   }
  }
 }
 printf("/n");
}

void main()
{
 
 char States[50],Output[50];
 InitStateMachine(charState);
 printf("请输入01字串(最长50个字符) :");
 scanf("%s",States);
 StateMachine(States,Output);
}

完整内容所在目录:http://www.mythroad.net/tag/q_written_examination_and_interview_code_title/


更多精彩内容来自:魔豆之路 - 神秘前路,待拨迷雾http://www.mythroad.net
原创粉丝点击