CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

中秋放分:给几个超过500行的简单C代码!就有分!

楼主RenderBoy(大伟)2002-09-20 22:56:53 在 C/C++ / C语言 提问

给几个超过500行的简单C代码!就有分!  
  练习一下!要C的哦!不要带复杂的。  
  问题点数:100、回复次数:12Top

1 楼JennyVenus()回复于 2002-09-20 23:05:22 得分 0

全部都是hello的算不算?Top

2 楼mylove0618(ADT)回复于 2002-09-20 23:14:01 得分 10

八皇后问题:  
  /************************************************************************  
    Stack.h       *  
    *                                     *  
    ************************************************************************/  
   
  const   int   SSize   =   8;  
  typedef   int   SType;  
   
  class   Stack   {  
    private:  
        SType   data[SSize];  
        int   Top;  
    public:  
        Stack()   {   Top   =   0;   }  
        ~Stack()   {   }  
        bool   isEmpty()   {   return   !Top;   }  
        int   Size()   {   return   Top;   }  
        bool   Push(SType);  
        bool   Pop(SType   &);  
        bool   StackTop(SType   &);  
  };  
  /******************************************************************  
    Stack.cpp                                                                                         *  
    ************************************************************************/  
   
  #include   "Stack.h"  
   
  bool   Stack::Push(SType   d)    
  {  
        if   (Top   ==   SSize)  
            return   false;  
        else   {  
              data[Top]   =   d;  
              Top++;  
              return   true;  
        }  
  }  
   
  bool   Stack::Pop(SType   &d)    
  {  
        if   (!Top)  
              return   false;  
        else   {  
              Top--;  
              d   =   data[Top];  
              return   true;  
        }  
  }  
   
  bool   Stack::StackTop(SType   &d)  
  {  
        if   (!Top)  
            return   false;  
        else   {  
              d   =   data[Top-1];  
              return   true;  
        }  
  }  
  /******************************************************************                                                 Board.h       *  
    ************************************************************************/  
   
  enum   States   {   used,   free   };  
   
  class   Board  
  {  
    private:  
        char   board[8][8];  
        States   Rows[8],   DiagsLR[15],   DiagsRL[15];  
         
    public:  
        Board();  
        ~Board(){}  
        bool   isAttacked(int,   int);  
        void   Print();  
        void   PlaceQueen(int,   int);  
        void   RemoveQueen(int,   int);  
  };  
  /******************************************************************     Board.cpp             ************************************************************************/    
   
  #include   <iostream.h>  
  #include   "Board.h"  
   
  Board::Board()  
  {  
        for(int   i=0;   i<8;   i++)  
        {  
              Rows[i]   =   free;  
   
              for(int   j=0;   j<8;   j++)  
                    board[i][j]   =   '.';  
        }  
         
        for(int   k=0;   k<15;   k++)  
            DiagsLR[k]   =   DiagsRL[k]   =   free;  
  }    
   
  void   Board::Print()  
  {  
        cout   <<   endl;  
        for(int   i=0;   i<8;   i++)  
        {  
              for(int   j=0;   j<8;   j++)  
    cout   <<   board[i][j]   <<   '   ';  
              cout   <<   endl;  
        }  
  }    
   
  bool   Board::isAttacked(int   row,   int   col)  
  {  
        int   diagLR   =   col-row+7;  
        int   diagRL   =   row+col;  
   
        if   (Rows[row]   ==   used   ||   DiagsLR[diagLR]   ==   used   ||   DiagsRL[diagRL]   ==   used)  
              return   true;  
         
        return   false;  
  }  
  void   Board::PlaceQueen(int   row,   int   col)  
  {  
        int   diagLR   =   col-row+7;  
        int   diagRL   =   row+col;  
         
        board[row][col]   =   'Q';  
        Rows[row]   =   used;  
        DiagsLR[diagLR]   =   used;  
        DiagsRL[diagRL]   =   used;  
  }  
   
  void   Board::RemoveQueen(int   row,   int   col)  
  {  
        int   diagLR   =   col-row+7;  
        int   diagRL   =   row+col;  
   
        board[row][col]   =   '.';  
        Rows[row]   =   free;  
        DiagsLR[diagLR]   =   free;  
        DiagsRL[diagRL]   =   free;  
  }  
  /******************************************************************  
    main.cpp   ************************************************************************/  
   
  #include   <iostream.h>  
  #include   "Stack.h"  
  #include   "Board.h"  
   
  int   main(void)  
  {  
        Stack   rowStack;  
        int   qRow,   qCol,   col,   row,   attacked,   exitLoop;  
        Board   myBoard;  
   
        cout   <<   "Enter   the   position   of   the   first   queen\nRow:   "   <<   flush;  
        cin   >>   qRow;  
        cout   <<   "Column:   "   <<     flush;  
        cin   >>   qCol;  
   
        myBoard.PlaceQueen(qRow,qCol);  
   
        if   (qCol   ==   0)  
            col   =   1;  
        else    
            col   =   0;        
   
        row   =   0;  
             
        do    
        {  
              while(row   <   8)  
              {  
                    exitLoop   =   0;  
                    if   (!(attacked   =   myBoard.isAttacked(row,col)))  
                    {  
          myBoard.PlaceQueen(row,col);      
          rowStack.Push(row);          
          row   =   0;          
          col++;          
          if   (col   ==   qCol)  
          col++;  
                          exitLoop   =   1;  
                    }      
   
                if   (exitLoop)  
    break;  
   
                row++;  
              }  
             
              if   (col   ==   8)  
              {                
                    myBoard.Print();  
                    row   =   8;            
              }  
       
              if   (row   ==   8)              
              {  
                    rowStack.Pop(row);              
                    col--;  
                    if   (col   ==   qCol)  
          col--;  
                    myBoard.RemoveQueen(row,col);  
                    row++;  
              }  
         
      }   while(col>=0);    
    return   1;  
  }  
  Top

3 楼sdav(ASP.net学习中)回复于 2002-09-20 23:20:55 得分 5

如果你真的要大型的代码的话,最好去用LINUX系统,代码多的是!你还可以随意编辑!是个好建议吧,比给你10000行代码更值得给分吧!Top

4 楼hslinux(幻世龙)回复于 2002-09-20 23:30:33 得分 10

#include   <dos.h>  
  #include   <stdio.>  
  #include   <stdlib.h>  
  #include   <conio.h>  
  #include   <bios.h>  
   
  /*将按字表示的字符串转换成可显示的ASCII字符串格式*/  
  char   *string(   unsigned   int   in_data[],   int   start,   int   end   )  
  {  
  static   char   ret_str[40];  
  int   loop,loopl;  
  for   (   loop   =   start,loopl   =   0;   loop   <=   end;   loop++   )  
  {  
  ret_str[loopl++]   =   (char)(in_data[loop]/256);/*取字的高字节*/  
  ret_str[loopl++]   =   (char)(in_data[loop]%256);/*取字的低字节*/  
  }  
  ret_str[loopl]   =   '   \0';       /*字符串以0结束*/  
  return(ret_str);  
  }  
   
  void   main(   void   )  
  {  
  unsigned   int   hd_info[256];   /*硬盘物理参数暂存区*/  
  unsigned   int   info_point;       /*信息缓冲区指针*/  
  unsigned   int   loop;                   /*循环指针*/  
  unsigned   int   hd_number   =   0;/*系统物理硬盘数*/  
  unsigned   int   hd_size;             /*硬盘容量*/  
  union   REGS   registers;  
  /*以下变量定义为CMOS   SETUP中设置的逻辑格式化柱面数,磁头数,扇区数   */  
  unsigned   int   cmos_xyl[2],   cmos_head[2],   cmos_sec[2];  
   
  clrscr();  
  printf("\n***IDE(EIDE)硬盘物理及逻辑格式化参数检测***\n");  
  for   (   loop   =   0;   loop   <   2;   loop++)  
  {  
  while   (inportb(0x1f7)   >=   0x80;   /*等待硬盘控制器准备好*/  
  /*   硬盘端口1F7读(状态寄存器)定义:  
        位0:=1   命令执行出错  
            1:   =1   收到索引(每当磁盘旋转一周,该位置1)  
            2:   =1   ECC检验错误(读取的数据被ECC算法改正)  
            3:   =1   服务请求(在读写时,扇区缓冲请求数据输入输出服务)  
            4:   =1   寻道结束(每当磁头完成一个寻道动作位置1)  
            5:   =1   故障(表示操作不当,读写或查找动作被禁止)  
            6:   =1   准备好(当该位和位4均为1时,硬盘准备好接受下一命令)  
            7:   =1   忙碌     */  
  outportb(0x1F6,(   loop   ==   0   ?   0xA0:0xB0   ));   /*选择硬盘0或1*/  
  /*   IDE(EIDE)硬盘端口1F6(磁头选择寄存器)定义:  
        位0~3:   磁头选择  
                4:   其值0为第一硬盘,其值为1为第二硬盘  
            5~7:   =101(不能为其他值)   */  
  outportb(0x1F7,   0x10);  
  /*   硬盘端口1F7写(状态寄存器),可输入IDE硬盘的控制命令有:  
                磁头回0道   1X             001xxxx  
                读扇区         20~23       001000LR     注:   L=0   正常ECC功能状态  
                写扇区         30~33       001100LR             L=1   长状态  
                读检验         40~41       0100000R             R=0   可使用错误重试  
                格式化磁道     50           01010000             R=1   不使用错误重试  
                查找               7X           0111xxxx  
                诊断               90           10010000  
                设置参数         91           10010001  
                读硬盘参数     EC           11101100   */  
                  while   (   inportb(0x1F7)   >=   0x80   );  
                  if   (   inportb(0x1F7)   !=   0x50   )  
                  {  
                  if   (   hd_number   ==   0   )  
                  {  
                  printf("\b\b&&&&&该系统没有安装硬盘&&&&&*\n");  
                  exit(0);  
                  }  
                  }  
                  else   hd_number++;  
  }  
  printf("---------------------------------\n");  
  printf("系统共安装有%lu个硬盘,取得物理参数如下:\n",hd_number);  
  printf("---------------------------------\n");  
   
  for   (   loop=0;   loop<hd_number;   loop++)  
          /*   取硬盘物理参数信息   */  
  {  
  outportb(   0x1F6,   (   loop   ==   0   ?   0xA0   :   0xB0   ));  
  outportb(   0x1F7,   0xEC   );                             /*   发送“读硬盘参数”指令*/  
  while   (   inportb(0x1F7)   !=   0x58   );           /*   等待控制送回参数   */  
  for   (info_point=0;   info_point!=256;   info_point++)  
      hd_info[info_point]   =   inport(0x1F0);/*   读取送回的512字节数据   */  
  /*   计算硬盘容量   */  
  hd_size   =     (int)(   (long)hd_info[1]   *   (long)hd_info[3]   *   (long)hd_inf[6]   *   512/1000000   );  
  printf("*********************************\n");  
  printf("第%u个IDE硬盘容量:   %6.2fMb\n\n",loop+1,(float)hd_size);  
  printf("产品型号--------:   %s\n",string(hd_info,27,46));  
  printf("产品序列号------:   %s\n",string(hd_info,10,19));  
  printf("控制器版本号----:   %s\n",string(hd_info,23,26));  
  printf("控制器类型------:   %04X\n",hd_info[20]);  
  printf("控制器缓冲区(Kb):   %6u\n",hd_info[21]*512/1024);  
  printf("能否双字传送----:   %6s\n",hd_info[48]   ==   0   ?   "不能"   :   "能够"   );  
  printf("ECC检验码长度(b):   %6u\n",hd_info[22]);  
  printf("每次传送扇区数---:   %6u\n",hd_info[47]);  
  printf("物理柱面数-------:   %6u\n",hd_info[1]);  
  printf("物理磁头数-------:   %6u\n",hd_info[3]);  
  printf("每道扇区数-------:   %6u\n",hd_info[6]);  
  /*   取CMOS中有关硬盘信息(INT   13   第8号功能)   */  
  registers.h.ah   =   0x8;  
  registers.h.dl   =   0x80   +   loop;  
  int86(   0x13,   &registers,   &registers   );  
  if   (   !registers.x.cflag   )               /*   如未置进位C,成功   */  
  {  
  cmos_head[loop]   =   registers.h.dh   +   1;           /*   返回CMOS中定义的磁头数   */  
  cmos_sec[loop]   =   registers.h.cl   &   0x3F;       /*   为0~5为每道扇区数   */  
  cmos_cyl[loop]   =   ((   registers.h.cl   &   0xC0   )   <<   2   )+registers.h.ch+2;  
      /*   柱面号从0开始,且FDISK保留了最后一个柱面,因而记数+2   */  
  printf("---------------------------------\n");  
  printf("CMOS中定义的逻辑柱面数;--:   %6u\n",cmos_cyl[loop]);  
  printf("CMOS中定义的逻辑磁头数;--:   %6u\n",cmos_head[loop]);  
  printf("CMOS中定义的逻辑扇区数;--:   %6u\n",cmos_sec[loop]);  
  printf("---------------------------------\n");  
  }  
  printf("*********************************\n");  
  }  
  }Top

5 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2002-09-20 23:38:52 得分 20

/*    
    *   System   Double   Sides   Management   C   File  
    *   Writed   by   BLH  
    *   Copyright   (c)   2002    
    */  
  #include   <stdlib.h>  
  #include   <string.h>  
  #include   <errno.h>  
  #include   <sys/systypes.h>  
  #include   <sys/sysevent.h>  
  #include   <sys/systimer.h>  
  #include   <sys/syssched.h>  
  #include   <sys/sysutil.h>  
  #include   <syssta/stamng.h>  
  #include   <syssta/stafsm.h>  
  #include   <syssta/stamsg.h>  
  #include   <syssta/stanet.h>  
  #include   <arch/patch.h>  
   
  #define   FILE_NAME CONFIG_DIR"/syssta.cfg"  
  struct   stamng_struct   stamng;  
  #define   MAX_RESEND_NUM stamng.resend_count  
  #define   TIME_MESSAGE_RESEND stamng.resend_time  
  #define   TIME_SEND_PENDING stamng.pending_time  
  #define   TIME_ODEAD0 stamng.dead0_time  
  #define   TIME_ODEAD1 stamng.dead1_time  
  #define   MAX_DEAD_TIME stamng.dead_limit  
  #define   MAX_SIDES_PENDING stamng.sides_pending_limit  
  ////////////////////////////////////////////////////////////////////  
  static   pword8   sidenames[]   =   {"DEAD",   "POWERON",   "STANDBY",   "ACTIVE",   "CONFIG"};  
  static   pword8   stanames[]   =   {"FS_POWERON",   "FS_STANDBY",   "FS_ACTIVE",   "FS_SWITCH",   "FS_OSWITCH",   "FS_ODEAD",   "FS_PENDING"};  
  static   pword8   eventnames[]   =   {"EI_STANDBY",   "EI_ACTIVE",   "EI_SWITCH",   "EI_OSWITCH",   "EI_ODEAD",   "EI_OACTIVE",   "EI_OSTANDBY",   "EI_PENDING",   "EI_CONFIG", "EI_OCONFIG"};  
  #define   PRINT_THIS() DEBUG("I   am   %s.",   sidenames[StamngGetThisSide()])  
  #define   PRINT_OTHER() DEBUG("The   other   is   %s.",   sidenames[StamngGetOtherSide()])  
  #define   PRINT_SIDES() PRINT_THIS();PRINT_OTHER();DEBUG("This   state   is   %s",   stanames[StamngGetThisState()])  
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   SetTimer   function    
  //   PARAMETERS    
  // event   <in>   :   the   event   of   timer  
  // time   <in>   :   the   interval   of   timer  
  // udata   <in>   :   assistant   parameter  
  // data   <in>   :   assistant   parameter  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  static   void   StamngSetTimer(uword32   event,   word16   time,   uword32   udata,   word32   data)  
  {  
  stamng.timer   =   SetTimer(event,   time,   udata,   data);  
  stamng.timer_event   =   event;  
  stamng.interval   =   time;  
  ASSERT(stamng.timer   !=   -1);  
  }  
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   Cancel   Timer   function    
  //   PARAMETERS    
  // None  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  static   void   StamngCancelTimer()  
  {  
  if   (stamng.timer   !=   -1)  
  {  
  CancelTimer(stamng.timer);  
  stamng.timer   =   -1;  
  }  
  }  
   
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   Cancel   Timer   function    
  //   PARAMETERS    
  // udata   <in>   :   assistant   parameter  
  // data   <in>   :   assistant   parameter  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  void   StamngResetTimer(uword32   udata,   word32   data)  
  {  
  StamngCancelTimer();  
  StamngSetTimer(stamng.timer_event,   stamng.interval,   udata,   data);  
  }  
   
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   Message   Send   function    
  //   PARAMETERS    
  // type   <in>   :   the   type   of   message  
  // cmd   <in>   :   the   command   of   message  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  static   void   StamngSendMessage(word32   type,   word32   cmd)  
  {  
  struct   stamsg   msg;  
   
  StamsgCreateMessage(&msg,   type,   cmd);  
  StamsgSendMessage(&msg);  
  }  
   
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   State   Transfer   function    
  //   PARAMETERS    
  // udata   <in>   :   the   id   of   event   that   inputed   into   FSM  
  // data   <in>   :   the   data   used   by   action   function  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  void   StamngStateTransfer(uword32   udata,   word32   data)  
  {  
  word32   ti;  
  word32   sn,   ei;  
   
  sn   =   StamngGetThisState();  
  ei   =   (word32)udata;  
  ti   =   (word32)stafsm[sn][ei];  
  DEBUG("TRANSFER   ==>   STAT:   %s   -     EI:   %s,   TI:   %d",   stanames[sn],   eventnames[ei],   ti);  
  if   (ti   !=   TI_INVALID)  
  {  
  StamngSetThisState(stafsmtab[ti].next_state);  
  if   (stafsmtab[ti].action   !=   SA_NULL)  
  stafsmtab[ti].action(data);  
  }  
  }Top

6 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2002-09-20 23:39:16 得分 10

////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   Request   Message   Timeout   function    
  //   PARAMETERS    
  // udata   <in>   :   assistant   parameter  
  // data   <in>   :   assistant   parameter  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  void   StamngRequestTimeout(uword32   udata,   word32   data)  
  {  
  if   (data   <   MAX_RESEND_NUM)  
  {  
  StamngResetTimer(udata,   (data   +   1));  
  StamngSendMessage(StamngGetLastType(),   StamngGetLastCmd());  
  }  
  else  
  {  
  PostMessage(STA_STATETRANSN,   EI_ODEAD,   0);  
  }  
  }  
   
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   Network   State   Testing   function    
  //   PARAMETERS    
  // None  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  void   StamngNetStatTesting()  
  {  
  if   (StamngGetNetState())  
  {  
  StamsgSendTestMessage();  
  if   (StamngGetDeadCount()   >   MAX_DEAD_TIME)  
  {  
  DEBUG("@@@@@@@@@@@@@@@   Found   Other   DEAD!!!   @@@   c:   %d,     max:   %d",   StamngGetDeadCount(),   MAX_DEAD_TIME);  
  StamngClearDeadCount();  
  PostMessage(STA_STATETRANSN,   EI_ODEAD,   0);  
  }  
  StamngAddDeadCount();  
  }  
  if   (stamng.this_led_count++   >   100)  
  {  
  stamng.this_led_count   =   0;  
  StamngSetThisLED();  
  if   (StamngGetThisLED())  
  {  
  //   light   USER   LED0  
  CPCI_SET_THIS_LED_GREEN();  
  }  
  else  
  {  
  CPCI_CLEAR_THIS_LED();  
  }  
  }  
  ////////////////////////////////////////  
  //   Reset   Watchdog  
  CPCI_RESET_WATCHDOG();  
  }  
   
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   Initialization   function    
  //   PARAMETERS    
  // None  
  //   RETURN  
  // None.  
  ////////////////////////////////////////////////////////////////////////////////////////  
  word32   StamngInitialize()  
  {  
  DEBUG("==============   StamngInitialize   ==============");  
  DEBUG("This   side   is   POWERON   ...");  
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   CPCI   HA   initialize  
  if   (CpciHAInitialize())  
  {  
  DEBUG("CPCI   HA   initialize   fail!");  
  return   -1;  
  }  
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   read   config   file  
  memset(&stamng,   0,   sizeof(stamng));  
  StamngSetThisState(-1);  
  DEBUG("This   side   is   reading   config   file...");  
  if   (OpenConfigFile(FILE_NAME)   ==   -1)  
  {  
  DEBUG("Open   syssta   config   file   :   %s",   strerror(errno));  
  return   -1;  
  }  
  ReadConfigFile("%d   %d   %d   %d   %d   %d   %d   %d   %d   %d   %d   %d   %s",    
  &stamng.side_no,    
  &stamng.default_side,    
  &stamng.dead_limit,  
  &stamng.sides_pending_limit,  
  &stamng.pending_time,  
  &stamng.pending_limit,  
  &stamng.resend_time,  
  &stamng.resend_count,  
  &stamng.dead0_time,  
  &stamng.dead1_time,  
  &stamng.port,  
  &stamng.oport,  
  stamng.oipaddr  
  );  
  CloseConfigFile();  
  /////////////////////////////////////////////  
  if   (StanetInitialize()   ==   -1)  
  return   -1;  
  SYSFSMINITIALIZE(stafsm,   stafsmtab,   FS_SM_MAX,   EI_SM_MAX);  
  StamngSetThisSide(SIDE_POWERON);  
  StamngSetOtherSide(SIDE_DEAD);  
  StamngSetThisState(FS_POWERON);  
  //////////////////////////////  
  //   Watchdog   Open   ...  
  CPCI_ENABLE_WATCHDOG();  
  ///////////////////////////////  
  PRINT_SIDES();  
  /////////////////////////////////////////////  
  PostMessage(STA_STATETRANSN,   EI_STANDBY,   0); //   FSM   running  
  return   0;  
  }  
   
   
  ////////////////////////////////////////////////////////////////////////////////////////  
  //   DESCRIPTION  
  //   Double   Sides   Management   FMS   Action   Functions  
  //   PARAMETERS    
  // data   <in>   :   assistant   parameter  
  //   RETURN  
  // None.  
  //////////////////////////////////////////////  
  void   StamngOnStandby(word32   data)  
  {  
  DEBUG("==============   StamngOnStandby   ==============");  
  if   (StamngGetThisSide()   !=   SIDE_STANDBY)  
  {  
  if   (StamngGetThisSide()   ==   SIDE_CONFIG)  
  {  
  DEBUG("=======   ACTIVE   to   STANDBY     =======   ");  
  CPCI_CONFIG_MODE_DISABLE();  
  }  
  //////////////////////////////////////  
  //standby   operating...  
  DEBUG("This   side   is   STANDBY   ...");  
  DEBUG("This   side   is   STANDBY   ...");  
  DEBUG("This   side   is   STANDBY   ...");  
  //////////////////////////////////////  
  if   (!StamngGetSwitchState());  
  {  
  StamngSetThisSide(SIDE_STANDBY);  
  StamngSetTimer(STA_REQUESTTIMEOUT,   TIME_MESSAGE_RESEND,   SMT_REQUEST,   0);  
  StamngSendMessage(SMT_REQUEST,   SMC_STANDBY);  
  }  
  StamngSetSwitchState(0);  
  }  
  else  
  {  
  StamngCancelTimer();  
  StamngSetOtherSide(SIDE_ACTIVE);  
  StamngSetSwitchState(0);  
  if   (!StamngGetNetState())  
  {  
  StanetNetConfig(CONFIG_OPEN,   0);  
  }  
  }  
  PRINT_SIDES();  
  }  
   
  void   StamngOnOStandby(word32   data)  
  {  
  DEBUG("==============   StamngOnOStandby   ==============");  
  DEBUG("The   other   side   is   STANDBY   ...");  
  StamngClearSidesPending();  
  StamngCancelTimer();  
  if   (StamngGetOtherSide()   !=   SIDE_STANDBY)  
  {  
  StamngSetOtherSide(SIDE_STANDBY);  
  }  
  if   (StamngGetThisSide()   ==   SIDE_ACTIVE)  
  {  
  CPCI_CLEAR_OTHER_LED();  
  StamngSendMessage(SMT_REPLY,   SMC_ACTIVE);  
  if   (!StamngGetNetState())  
  {  
  StanetNetConfig(CONFIG_OPEN,   0);  
  }  
  }  
  else   if   (StamngGetThisSide()   ==   SIDE_STANDBY)  
  {  
  StamngSendMessage(SMT_REPLY,   SMC_STANDBY);  
  if   (StamngIsDefaultSide())  
  {  
  DEBUG("!!!!!!!   RESET   other   Side,   I   am   a   STANDBY   !!!!!!");  
  StamngSetResetFlag();  
  //CpciHAResetOtherSide();  
  StanetSendReset();  
  PostMessage(STA_STATETRANSN,   EI_ODEAD,   0);  
  }  
  }  
  PRINT_SIDES();  
  }Top

7 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2002-09-20 23:39:30 得分 0

void   StamngOnActive(word32   data)  
  {  
  DEBUG("==============   StamngOnActive   ==============");  
  if   (StamngGetThisSide()   !=   SIDE_ACTIVE)  
  {  
  if   (data   ==   0)  
  {  
  DEBUG("%%%%%%%%%%%   This   side   will   be   chaging   ACTIVE   ...");  
  StamngSetThisSide(SIDE_ACTIVE);  
  if   (StamngGetSwitchState())  
  StamngSetOtherSide(SIDE_STANDBY);  
  StamngSetSwitchState(0);  
  StamngClearPendingFlag();  
  DEBUG("%%%%%%%%%%%%%%   Wait   3   seconds   to   ACTIVE   ...");  
  StamngSetTimer(STA_STATETRANSN,   TIME_ODEAD1,   EI_ACTIVE,   1);  
   
  }  
  }  
  else   if   (StamngGetThisSide()   ==   SIDE_ACTIVE)  
  {  
  if   (data   >=   1)  
  {  
  DEBUG("###############   Takeover   BEGIN   ...");  
  CpciHATakeover();  
  DEBUG("###############   Takeover   END");  
  //////////////////////////////////////  
  DEBUG("This   side   is   ACTIVE   ...");  
  DEBUG("This   side   is   ACTIVE   ...");  
  DEBUG("This   side   is   ACTIVE   ...");  
  //////////////////////////////////////  
  StamngSendMessage(SMT_REPLY,   SMC_ACTIVE);  
  }  
  }  
  PRINT_SIDES();  
  }  
   
  void   StamngOnOActive(word32   data)  
  {  
  DEBUG("==============   StamngOnOActive   ==============");  
  DEBUG("The   other   side   is   ACTIVE   ...");  
  StamngClearSidesPending();  
  StamngCancelTimer();  
  if   (StamngGetOtherSide()   !=   SIDE_ACTIVE)  
  {  
  StamngSetOtherSide(SIDE_ACTIVE);  
  }  
  if   (StamngGetThisSide()   ==   SIDE_ACTIVE) //   Double   sides   are   both   ACTIVE!!!  
  {  
  StamngSendMessage(SMT_REPLY,   SMC_STANDBY);  
  if   (StamngIsDefaultSide())  
  {  
  ///////////////////////////////////////  
  //   Reset   other   side    
  DEBUG("!!!!!!!   RESET   other   Side,   I   am   a   ACTIVE   !!!!!!");  
  //CpciHAResetOtherSide();  
  StanetSendReset();  
  }  
  }  
  else   if   (StamngGetThisSide()   ==   SIDE_STANDBY)  
  {  
  if   (!StamngGetSwitchState())  
  StamngSendMessage(SMT_REPLY,   SMC_STANDBY);  
  StamngSetSwitchState(0);  
  if   (!StamngGetNetState())  
  {  
  StanetNetConfig(CONFIG_OPEN,   0);  
  }  
  }  
  PRINT_SIDES();  
  }  
   
  void   StamngOnSwitch(word32   data)  
  {  
  DEBUG("==============   StamngOnSwitch   ==============");  
  StamngCancelTimer();  
  if   (StamngGetThisSide()   ==   SIDE_ACTIVE)  
  {  
  StamngSetSwitchState(1);  
  //////////////////////////////////////  
  //   switch   operating...  
   
  DEBUG("This   side   is   SWITCHING   ...");  
  DEBUG("This   side   is   SWITCHING   ...");  
  DEBUG("This   side   is   SWITCHING   ...");  
  //////////////////////////////////////  
  StamngSetThisSide(SIDE_STANDBY);  
  StamngSendMessage(SMT_REPLY,   SMC_STANDBY);  
  StamngSetOtherSide(SIDE_ACTIVE);  
  }  
  else   if   (StamngGetThisSide()   ==   SIDE_STANDBY)  
  {  
  DEBUG("The   other   side   is   SWITCHING   ...");  
  StamngSendMessage(SMT_REPLY,   SMC_SWITCH);  
  StamngSetSwitchState(1);  
  }  
  PRINT_SIDES();  
  }  
   
  void   StamngOnODead(word32   data)  
  {  
  DEBUG("==============   StamngOnODead   ==============");  
  DEBUG("The   other   side   is   DEAD   ...");  
  if   (data   ==   0)  
  {  
  ////////////////////////////  
  //   light   other   LED   red  
  CPCI_SET_OTHER_LED_RED();  
  /////////////////////////////  
  StamngSetSwitchState(0);  
  StanetNetConfig(CONFIG_CLOSE,   0);  
  StamngSetOtherSide(SIDE_DEAD);  
  StamngSetTimer(STA_STATETRANSN,   TIME_ODEAD0,   EI_ODEAD,   1);  
  }  
  else   if   (data   ==   1)  
  {  
  ///////////////////////////////  
  if   (!StamngGetResetFlag())  
  {  
  StamngSetResetFlag();  
  /////////////////////////////////////  
  //   Reset   Other   Side  
  DEBUG("Reset   the   other   side!!!!!!!");  
  //CpciHAResetOtherSide();  
  StanetSendReset();  
  }  
  StamngClearResetFlag();  
  ///////////////////////////////  
  StamngSetTimer(STA_STATETRANSN,   TIME_ODEAD1,   EI_ODEAD,   2);  
  }  
  else   if   (data   >=   2)  
  {  
  if   (StamngGetThisSide()   ==   SIDE_STANDBY)  
  {  
  DEBUG("#############   I   change   to   ACTIVE   !!!!!!!");  
  PostMessage(STA_STATETRANSN,   EI_ACTIVE,   0);  
  }  
  else   if(StamngGetThisSide()   ==   SIDE_ACTIVE)  
  {  
  StamngSetThisState(FS_ACTIVE);  
  }  
  }  
  PRINT_SIDES();  
  }Top

8 楼guoyu2008(影子杀手)回复于 2002-09-21 00:04:16 得分 10

#include   <stdio.h>  
   
  struct   list  
  {  
      int   id,age;  
      char   name[20];  
      int   score;  
      struct   list*   next;     //指向下一个记录的指针  
  }*   head;  
   
  void   create(struct   list**   head)  
  {  
      char   an;  
      struct   list*   p;  
      if   (*head!=NULL)   //判断头指针指向的数据域是否为空  
        {        
            printf("Table   existed!Do   you   want   to   overwrite   it?");  
            scanf("\n%c",&an);  
            if   (!((an=='Y')   ||   (an=='y')))   return;//如果不要覆盖则继续输入  
      }  
      *head=NULL;//否则重建列表  
      printf("Table   created!\n");  
      return;  
  }  
   
  void   input(struct   list**   head)  
  {  
      int   j,id,age,score;  
      char   name[20];  
      char   sure;  
      char   again;  
      struct   list*   p;  
   
      do   {  
      printf("--------------------------------------------\n");  
      printf("ID:   ");  
      scanf("%d",&id);  
      printf("Name:   ");  
      scanf("%s",&name);  
      printf("Age:   ");  
      scanf("%d",&age);  
      printf("Score:   ");  
      scanf("%d",&score);  
      printf("--------------------------------------------");  
      printf("Sure?");//是否确定要输入  
      scanf("\n%c",&sure);  
      if   ((sure=='Y')   ||   (sure=='y'))//假如是的话,则动态分配一个内存空间给p    
      {  
          p=(struct   list*)malloc(sizeof(struct   list));  
          p->id=id;//把数据保存在p指针指向的数据域内  
          for   (j=0;   j<20;   j++)  
                p->name[j]=name[j];  
          p->age=age;  
          p->score=score;  
          p->next=*head;  
          *head=p;  
    }  
    printf("Do   you   want   to   input   record   again?");  
    scanf("\n%c",&again);  
    }   while   ((again=='y')   ||   (again=='Y'));  
  }  
   
  void   print(struct   list*   head)  
  {  
      int   i=0;  
      if   (head!=NULL)   //判断列表是否为空,不为空则执行  
      {  
      printf("----------------------------------------------\n");  
      printf("ID             |Name                                     |Age|Score         |\n");  
      while   (head!=NULL)  
      {  
          printf("%d           %20s     %d       %d\n",head->id,head->name,head->age,head->score);//判断列表是否为空,不为空则执行  
          head=head->next;  
          if   (i<8)    
          {  
              printf("----------------------------------------------\n");  
              i=0;  
          }  
          i++;  
      }  
      }   else   printf("No   record.....\n");  
  }  
   
  void   del(struct   list**   head)  
  {  
      struct   list   *p=*head;  
      struct   list   *q;  
      int   i,j;  
   
      printf("Input   the   node   you   want   to   delete:   ");  
      scanf("%d",&i);//输入想要删除的记录的号码,按入栈的次序  
      if   (i==1)   {  
          q=p;  
          p=q->next;  
          *head=p;  
      }    
      else   {  
          for   (j=1;   j!=i-1;   j++)  
              p=p->next;  
          q=p->next;  
          p->next=q->next;  
          }  
      free(q);释放q  
      printf("Node   %d   has   been   deleted!\n",i);  
      return;  
  }  
   
  void   show(struct   list*   head,   int   n)  
  {  
      int   i;  
      struct   list   *p=head;  
      for   (i=1;   i<=n-1;   i++)  
          p=p->next;  
      printf("ID:%d\nName:%s\nAge:%d\nScore:%d\n",p->id,p->name,p->age,p->score);  
      return;  
  }  
   
  int   search(struct   list*   head)  
  {  
      int   i=1;  
      int   id;  
      printf("Input   ID:   ");  
      scanf("%d",&id);  
      while   ((head->id!=id)   &&   (head!=NULL))   {  
          head=head->next;  
          i++;  
      }  
      if   (head!=NULL)   return   i;  
          else   return   0;  
  }  
   
  void   main()  
  {  
      int   choose,i,id;  
   
      printf("Welcome   to   Student   DataBase   System\n");  
      do{  
      printf("1.Create\n");  
      printf("2.Input   Data\n");  
      printf("3.Data   Output\n");  
      printf("4.Delete   Data\n");  
      printf("5.Search\n");  
      printf("Please   choose   1-5,   type   0   to   exit\n");  
      scanf("%d",&choose);  
      if   ((choose>5)   ||   (choose<0))  
          printf("Error!   The   number   you   typed   is   out   of   range!\n");  
      else  
      {  
          switch   (choose)   {  
              case   1:   create(&head);   break;  
              case   2:   input(&head);   break;  
              case   3:   print(head);   break;  
              case   4:   del(&head);   break;  
              case   5:   show(head,search(head));   break;  
          }  
      }  
      }  
      while   (choose!=0);  
      printf("Quiting...\n");  
  }  
  Top

9 楼tttc(Azure)回复于 2002-09-21 00:27:00 得分 10

#include<dos.h>  
  #include<stdio.h>  
  #include<math.h>  
  #include<time.h>  
  #include<conio.h>  
   
  #define   XMAX   319  
  #define   YMAX   199  
  #define   COMPUTER   0  
  #define   HUMAN   1  
  #define   IDLE   0  
  #define   DOWN   1  
  #define   UP   -1  
  #define   LEFT   -1  
  #define   RIGHT   1  
   
  void   line(int   startx,int   starty,int   endx,int   endy,int   color);  
  void   mempoint(int   x,int   y,int   color);  
  void   palette(int   pnum);  
  void   mode(int   mode_code);  
  void   display_object(int   ob[][5],int   lines);  
  void   xhairs(int   x,int   y),goto_xy(int   x,int   y);  
  void   save_pic(void),load_pic(void);  
  void   it_comp_move(int   ob1[][5],int   ob2[][5],int   human[][5],int   sides);  
  void   not_it_comp_move(int   ob1[][5],int   ob2[][5],int   directx,int   directy,  
      int   sides);  
  void   show_score(int   it,long   htime,long   ctime);  
  void   update_object(int   ob[][5],int   x,int   y,register   int   sides);  
  int   readkey(void),kbhit(void);  
  int   is_legal(int   ob[][5],int   x,int   y,int   sides);  
  int   tag(int   ob1[][5],int   ob2[][5]);  
   
  int   human[4][5]={  
        6,1,6,6,1,  
        2,4,9,3,1,  
        1,9,6,6,1,  
        11,9,6,6,1};  
   
  int   human2[4][5]={  
        6,1,6,6,1,  
        2,4,9,3,1,  
        3,9,6,6,1,  
        9,9,6,6,1};  
  int   computer[4][5]={  
        6,180,6,185,3,  
        2,183,9,182,3,  
        1,188,6,185,3,  
        11,188,6,185,3};  
  int   computer2[4][5]={  
        6,180,6,185,3,  
        2,183,9,182,3,  
        3,188,6,185,3,  
        9,188,6,185,3};  
   
  int   directx,directy;  
  main(void)  
  {  
    union   k{char   c[2];  
    int   i;  
    }key;  
   
  int   deltax=0,deltay=0;  
  int   swaph=0,swapc=0;  
  int   it=COMPUTER;  
  long   htime,ctime,starttime,curtime;  
  int   count;  
  mode(4);  
  palette(0);  
  load_pic();  
  time(&starttime);  
  htime=ctime=0;  
  display_object(human,4);  
  display_object(computer,4);  
  count=0;  
   
  do{  
    time(&curtime);  
    if(it==COMPUTER)   htime+=curtime-starttime;  
    else   ctime+=curtime-starttime;  
    time(&starttime);  
    show_score(it,htime,ctime);  
    if(kbhit()){  
                directx=directy=IDLE;  
                key.i=readkey();  
                deltax=0;deltay=0;  
                if(!key.c[0])   switch(key.c[1]){  
  case   75:  
      deltax=-1;  
      directx=LEFT;  
      break;  
  case   77:  
      deltax=1;  
      directx=RIGHT;  
      break;  
  case   72:  
      deltay=-1;  
      directy=UP;  
      break;  
  case   80:  
      deltay=1;  
      directy=DOWN;  
      break;  
  case   71:  
      deltax=-1;deltay=-1;  
      directy=UP;directx=LEFT;  
      break;  
  case   73:  
      deltay=-1;deltax=1;  
      directy=UP;directx=RIGHT;  
      break;  
  case   79:  
      deltay=1;deltax=-1;  
      directy=DOWN;directx=LEFT;  
      break;  
  case   81:  
      deltay=1;deltax=1;  
      directy=DOWN;directx=RIGHT;  
      break;  
    }  
              }  
              if(swaph<5)   display_object(human,4);  
              else   display_object(human2,4);  
   
              if(is_legal(human,deltax,deltay,4)){  
                update_object(human,deltax,deltay,4);  
                update_object(human2,deltax,deltay,4);  
                }  
   
              if(!count&&tag(human,computer)){  
              it=!it;  
              count=6;  
              }  
              swaph++;  
              if(swaph==10)   swaph=0;  
              if(swaph<5)   display_object(human,4);  
              else   display_object(human2,4);  
   
              if(swapc<5)   display_object(computer,4);  
              else   display_object(computer2,4);  
   
              if(it==COMPUTER)   it_comp_move(computer,computer2,human,4);  
              else   not_it_comp_move(computer,computer2,directx,directy,4);  
              if(!count&&tag(human,computer)){  
                it=!it;  
                count=6;  
                if(is_legal(computer,2,0,4)){  
                update_object(computer,2,0,4);  
                update_object(computer2,2,0,4);  
                }  
                else{  
                update_object(computer,-2,0,4);  
                update_object(computer2,-2,0,4);  
                }  
                }  
   
                swapc++;  
                if(swapc==10)   swapc=0;  
                if(swapc<5)   display_object(computer,4);  
                else   display_object(computer2,4);  
   
                if(count)   count--;  
                }while(key.c[0]!='q'&&htime<999&&ctime<999);  
                mode(3);  
   
  if(ctime>htime)   printf("Computer   wins!");  
  else   printf("You   win!");  
  return   0;  
  }  
   
  void   show_score(int   it,long   htime,long   ctime)  
  {goto_xy(6,24);  
  if(it==COMPUTER)   printf("YOU:%ld",htime);  
  else   printf("you:%ld",htime);  
  goto_xy(26,24);  
  if(it==HUMAN)   printf("ME:%ld",ctime);  
  else   printf("me:%ld",ctime);  
  }  
   
  void   palette(int   pnum)  
  {union   REGS   r;  
  r.h.bh=1;  
  r.h.bl=pnum;  
  r.h.ah=11;  
  int86(0x10,&r,&r);  
  }  
   
  void   mode(int   mode_code)  
  {union   REGS   r;  
  r.h.al=mode_code;  
  r.h.ah=0;  
  int86(0x10,&r,&r);  
  }  
   
  void   line(int   startx,int   starty,int   endx,int   endy,int   color)  
  {  
  register   int   t,distance;  
  int   x=0,y=0,delta_x,delta_y;  
  int   incx,incy;  
  delta_x=endx-startx;  
  delta_y=endy-starty;  
  if(delta_x>0)   incx=1;  
  else   if(delta_x==0)   incx=0;  
  else   incx=-1;  
   
  if(delta_y>0)   incy=1;  
  else   if(delta_y==0)   incy=0;  
  else   incy=-1;  
   
  delta_x=abs(delta_x);  
  delta_y=abs(delta_y);  
  if(delta_x>delta_y)   distance=delta_x;  
  else   distance=delta_y;  
   
  for(t=0;t<=distance+1;t++){  
  mempoint(startx,starty,color);  
  x+=delta_x;  
  y+=delta_y;  
  if(x>distance){  
    x-=distance;  
    startx+=incx;  
    }  
    if(y>distance){  
    y-=distance;  
    starty+=incy;  
    }  
    }  
    }  
   
  void   mempoint(int   x,int   y,int   color)  
  {  
    union   mask{char   c[2];  
          int   i;  
          }bit_mask;  
    int   index,bit_position;  
    unsigned   char   t;  
    char   xor;  
   
    char   far   *ptr=(char   far*)0xB8000000;  
    bit_mask.i=0xFF3F;  
    if(x<0||x>XMAX||y<0||y>YMAX)   return;  
    xor=color&128;  
    color=color&127;  
    bit_position=x%4;  
    color<<=2*(3-bit_position);  
    bit_mask.i>>=2*bit_position;  
    index=y*40+(x>>2);  
    if(y%2)   index+=8152;  
    if(!xor){  
    t=*(ptr+index)&bit_mask.c[0];  
    *(ptr+index)=t|color;  
    }  
    else{  
      t=*(ptr+index)|(char)0;  
      *(ptr+index)=t^color;  
      }  
      }  
   
      void   xhairs(int   x,int   y)  
      {line(x-4,y,x+3,y,1|128);  
        line(x,y+4,x,y-3,1|128);  
        }  
   
    unsigned   char   read_point(int   x,int   y)  
    {union   mask{  
        char   c[2];  
        int   i;  
        }bit_mask;  
        int   index,bit_position;  
        unsigned   char   t;  
   
        char   far   *ptr=(char   far*)   0xB8000000;  
        bit_mask.i=3;  
        if(x<0||x>XMAX||y<0||y>YMAX)   return   0;  
        bit_position=x%4;  
        bit_mask.i<<=2*(3-bit_position);  
        index=y*40+(x>>2);  
        if(y%2)   index+=8152;  
        t=*(ptr+index)&bit_mask.c[0];  
        t>>=2*(3-bit_position);  
        return   t;  
        }Top

10 楼tttc(Azure)回复于 2002-09-21 00:27:56 得分 10

void   save_pic(void)  
        {  
        char   fname[80];  
        FILE   *fp;  
        register   int   i,j;  
        int   e=0;  
   
        char   far   *ptr=(char   far   *)0xB8000000;  
        char   far   *temp;  
        unsigned   char   buf[14][80];  
        temp=ptr;  
        for(i=0;i<14;i++)  
          for(j=0;j<80;j+=2){  
          buf[i][j]=*temp;  
          buf[i][j+1]=*(temp+8152);  
          *temp=0;*(temp+8152)=0;  
          temp++;  
          }  
   
      goto_xy(0,0);  
      printf("Game   board:");  
      gets(fname);  
      if(!(fp=fopen(fname,"wb"))){  
      goto_xy(0,0);  
      printf("cannot   open   file   -   press   a   key");  
      getch();  
      e=1;  
      }  
   
  temp=ptr;  
  for(i=0;i<14;i++)  
    for(j=0;j<80;j+=2){  
    *temp=buf[i][j];  
    *(temp+8152)=buf[i][j+1];  
    temp++;  
    }  
  if(e)   return;  
  for(i=0;i<8152;i++){  
    putc(*ptr,fp);  
    putc(*(ptr+8152),fp);  
    ptr++;  
    }  
      fclose(fp);  
      }  
   
      void   load_pic(void)  
      {  
        char   fname[80];  
        FILE   *fp;  
        register   int   i,j;  
        char   far   *ptr=(char   far   *)0xB8000000;  
        char   far   *temp;  
        unsigned   char   buf[14][80];  
        temp=ptr;  
        for(i=0;i<14;i++)  
          for(j=0;j<80;j+=2){  
          buf[i][j]=*temp;  
          buf[i][j+1]=*(temp+8152);  
          *temp=0;*(temp+8152)=0;  
          temp++;  
          }  
  goto_xy(0,0);  
  printf("Filename:");  
  gets(fname);  
  if(!(fp=fopen(fname,"rb"))){  
    goto_xy(0,0);  
    printf("cannot   open   file\n");  
    temp=ptr;  
    for(i=0;i<14;i++)  
      for(j=0;j<80;j+=2){  
      *temp=buf[i][j];  
      *(temp+8152)=buf[i][j+1];  
      temp++;  
      }  
    return;  
    }  
   
    for(i=0;i<8152;i++){  
    *ptr=getc(fp);  
    *(ptr+8152)=getc(fp);  
    ptr++;  
    }  
    fclose(fp);  
    }  
   
  void   goto_xy(int   x,int   y)  
  {union   REGS   r;  
  r.h.ah=2;  
  r.h.dl=x;  
  r.h.dh=y;  
  r.h.bh=0;  
  int86(0x10,&r,&r);  
  }  
  void   display_object(int   ob[][5],int   lines)  
  {register   int   i;  
  for(i=0;i<lines;i++)  
    line(ob[i][0],ob[i][1],ob[i][2],ob[i][3],ob[i][4]|128);  
    }  
   
    void   update_object(int   ob[][5],int   x,int   y,register   int   sides)  
    {sides--;  
    for(;sides>=0;sides--){  
      ob[sides][0]+=x;  
      ob[sides][1]+=y;  
      ob[sides][2]+=x;  
      ob[sides][3]+=y;  
      }  
  }  
   
  is_legal(int   ob[][5],int   x,int   y,int   sides)  
  {   if(x==0&&y==0)   return   1;  
  sides--;  
  for(;sides>=0;sides--){  
  if(ob[sides][0]+x>XMAX||ob[sides][1]+y>YMAX)   return   0;  
  if(ob[sides][2]+x<0||ob[sides][3]+y<0)   return   0;  
  if(read_point(ob[sides][0]+x,ob[sides][1]+y)==2)   return   0;  
  if(read_point(ob[sides][2]+x,ob[sides][3]+y)==2)   return   0;  
  }  
  return   1;  
  }  
   
  void   it_comp_move(int   ob1[][5],int   ob2[][5],int   human[][5],int   sides)  
  {  
    register   int   x,y;  
    static   skip=0;  
    skip++;  
    if(skip==3){  
    skip=0;  
    return;  
    }  
    x=0;y=0;  
   
    if(human[0][0]<ob1[0][0])   x=-1;  
    else   if(human[0][0]>ob1[0][0])   x=1;  
    if(human[0][1]<ob1[0][1])   y=-1;  
    else   if(human[0][1]>ob1[0][1])   y=1;  
   
    if(is_legal(ob1,x,y,sides)){  
    update_object(ob1,x,y,sides);  
    update_object(ob2,x,y,sides);  
    }  
    else{  
    if(x&&is_legal(ob1,x,0,sides)){  
    update_object(ob1,x,0,sides);  
    update_object(ob2,x,0,sides);  
    }  
    else   if(is_legal(ob1,0,y,sides)){  
    update_object(ob1,0,y,sides);  
    update_object(ob2,0,y,sides);  
    }  
    }  
    }  
    void   not_it_comp_move(int   ob1[][5],int   ob2[][5],int   directx,int   directy,  
    int   sides)  
    {  
    register   int   x,y;  
    static   skip=1;  
    skip++;  
    if(skip==3){  
    skip=0;  
    return;  
    }  
    x=0;y=0;  
    x=-directx;  
    y=-directy;  
    if(is_legal(ob1,x,y,sides)){  
    update_object(ob1,x,y,sides);  
    update_object(ob2,x,y,sides);  
    }  
    else{  
    if(x&&is_legal(ob1,x,0,sides)){  
    update_object(ob1,x,0,sides);  
    update_object(ob2,x,0,sides);  
    }  
    else   if(is_legal(ob1,0,y,sides)){  
    update_object(ob1,0,y,sides);  
    update_object(ob2,0,y,sides);  
    }}}  
   
    tag(int   ob1[][5],int   ob2[][5])  
    {register   int   i;  
    for(i=-1;i<2;i++){  
    if(ob1[0][0]==ob2[0][0]+i&&ob1[0][1]==ob2[0][1]+i){  
    return   1;  
    }  
    }  
    return   0;  
    }  
   
    readkey(void)  
    {  
    union   REGS   r;  
    r.h.ah=0;  
    return   int86(0x16,&r,&r);  
    }  
  一个小游戏!  
   
   
   
   
   
   
  Top

11 楼Thie(荷塘月色)回复于 2002-09-21 00:38:42 得分 10

语法分析程序()    
   
  #include<stdio.h>    
   
  #include<string.h>    
   
  #include<ctype.h>    
   
  #include<conio.h>    
   
  #include<stdlib.h>    
   
  char   a[10][20],c[20],d[10][20],f[10][20];    
   
  int   b[20][20],e[10][20],g[10][20],zh[10][2];    
   
  int   i,j,k,l,m,n,u,v;    
   
  char   ch[50],ck[50];  
     
  FILE   *fp;    
   
  void   get_wf()    
   
  {  
   
  int   bool;    
   
  printf("请输入算符优先文法(增广文法):\n");    
   
  i=0;    
   
  gets(a[i]);  
     
  while(strlen(a[i]))   gets(a[++i]);    
   
  for(i=0;strlen(a[i]);i++)    
   
  {  
   
  int   z,bb=1;    
   
  for(z=0;d[z][0];z++)    
   
  if(d[z][0]==a[i][0]){bb=0;break;  
   
  }    
   
  if(bb)d[z][0]=f[z][0]=a[i][0];  
     
  for(j=3;a[i][j]!='\0';j++)  
     
  if(!isupper(a[i][j]))  
   
  {    
  bool=1;    
   
  for(k=1;c[k];k++)  
     
  if(c[k]==a[i][j]){bool=0;break;  
   
  }    
   
  if(bool)c[k]=a[i][j];    
   
  }    
   
  }    
   
  if((fp=fopen("wfile","w"))!=NULL)  
   
  {  
   
  fwrite(&a,10*20*sizeof(char),1,fp);    
   
  fwrite(&d,10*20*sizeof(char),1,fp);    
   
  fwrite(&f,10*20*sizeof(char),1,fp);    
   
  fwrite(&c,10*sizeof(char),1,fp);  
   
  }    
   
  }    
   
  void   firstvt()    
   
  {  
   
  int   bool=1,y=0;    
   
  for(i=0;strlen(a[i]);i++)    
   
  {  
   
  for(l=0;d[l][0];l++)    
   
  if(d[l][0]==a[i][0])   break;    
   
  for(j=3;j<=4;j++)    
   
  if(!isupper(a[i][j]))  
  {  
   
  bool=0;  
     
  for(k=1;c[k];k++)  
     
  if(c[k]==a[i][j])  
   
  {  
   
  bool=1;break;  
   
  }    
   
  if(bool)  
   
  {    
   
  bool=1;    
   
  for(m=0;d[l][m];m++)    
   
  if(d[l][m]==k)  
   
  {  
   
  bool=0;break;  
   
  }    
   
  if(bool)d[l][m]=k;    
   
  }    
   
  break;  
   
  }    
  if(j==4)  
   
  {    
   
  for(n=0;d[n][0];n++)    
   
  if(d[n][0]==a[i][j-1])    
   
  break;    
   
  zh[y][0]=l;zh[y++][1]=n;  
     
  }    
   
  }    
   
  for(y--;y>=0;y--)    
   
  for(m=1;d[zh[y][1]][m];m++)    
   
  {  
   
  bool=1;  
     
  for(u=0;d[zh[y][0]][u];u++)    
   
  if(d[zh[y][0]][u]==d[zh[y][1]][m])  
   
  {  
   
  bool=0;  
   
  break;  
   
  }    
  if(bool)   d[zh[y][0]][u]=d[zh[y][1]][m];  
   
  }    
   
  gotoxy(20,wherey());  
   
  printf("非终结符的FIRSTVT集如下:\n"   );  
   
  for(i=0;d[i][0];i++)    
   
  {    
   
  gotoxy(20,wherey());  
     
  printf("%4c",d[i][0]);    
   
  for(j=1;d[i][j];j++)  
     
  printf("%4c",c[d[i][j]]);    
   
  printf("\n");    
   
  }    
   
  }    
   
  void   lastvt()    
   
  {  
   
  int   x=0,bool=1,y=0;    
   
  for(i=0;strlen(a[i]);i++)  
     
  {  
   
  for(l=0;f[l][0];l++)    
   
  if(f[l][0]==a[i][0])   break;    
   
  j=3;  
   
  while(a[i][j]!='\0')j++;    
   
  x=0;    
   
  while(x<=1)    
   
  {  
   
  j--;    
   
  if(!isupper(a[i][j]))  
   
  {  
   
  bool=0;    
   
  for(k=1;c[k];k++)  
     
  if(c[k]==a[i][j])  
   
  {  
   
  bool=1;  
   
  break;  
   
  }    
   
   
  if(bool)  
   
  {    
   
  for(m=0;f[l][m];m++)    
   
  if(f[l][m]==k)  
   
  {  
   
  bool=0;break;  
   
  }    
   
  if(bool)   f[l][m]=k;    
   
  }    
   
  break;  
   
  }    
   
  x++;    
   
  }    
   
  if(x==1)  
   
  {    
   
  for(n=0;f[n][0];n++)  
     
  if(f[n][0]==a[i][j+1])     break;    
   
  zh[y][0]=l;zh[y++][1]=n;    
   
  }    
   
  }    
   
  for(y--;y>=0;y--)    
   
  for(m=1;f[zh[y][1]][m];m++)  
     
  {  
   
  bool=1;    
   
  for(u=0;f[zh[y][0]][u];u++)    
   
  if(f[zh[y][0]][u]==f[zh[y][1]][m])  
   
  {  
   
  bool=0;break;  
   
  }    
   
  if(bool)   f[zh[y][0]][u]=f[zh[y][1]][m];  
   
  }    
   
  gotoxy(20,wherey());  
   
  printf("非终结符的LASTVT集如下:\n"   );    
   
  for(i=0;f[i][0];i++)    
   
  {  
   
    gotoxy(20,wherey());    
   
  printf("%4c",f[i][0]);  
     
  for(j=1;f[i][j];j++)    
   
  printf("%4c",c[f[i][j]]);    
   
  printf("\n");  
   
    }  
     
  }    
   
  void   rel_s()    
   
  {    
   
  for(i=0;strlen(a[i]);i++)    
   
  for(j=3;a[i][j]!='\0';j++)    
   
  if(isupper(a[i][j]))  
  {    
  for(l=0;d[l][0];l++)    
   
  if(d[l][0]==a[i][j])  
   
  {  
   
  g[i][j]=l;  
   
  break;  
   
  }    
   
  if(g[i][j]&&e[i][j-1])  
     
  for(m=1;d[g[i][j]][m];m++)    
   
  if(b[e[i][j-1]][d[g[i][j]][m]])  
   
  {    
   
  gotoxy(20,wherey());    
   
  printf("该文法为非算符优先文法!\n");  
   
  exit(0);  
   
  }    
   
  else    
   
  b[e[i][j-1]][d[g[i][j]][m]]=2;    
   
  }    
   
  else  
   
  {    
   
  for(k=1;c[k];k++)    
   
  if(c[k]==a[i][j])  
   
  {  
   
  e[i][j]=k;  
   
  break;  
   
  }  
     
  if(e[i][j]&&e[i][j-1])    
   
  if(b[e[i][j-1]][e[i][j]])  
   
  {    
   
  gotoxy(20,wherey());  
   
  printf("该文法为非算符优先文法!\n");  
   
  exit(0);  
   
  }    
   
  else    
   
  b[e[i][j-1]][e[i][j]]=1;    
   
  if(e[i][j]&&g[i][j-1]&&e[i][j-2])    
   
  if(b[e[i][j-2]][e[i][j]])  
   
  {  
   
    gotoxy(20,wherey());  
   
  printf("该文法为非算符优先文法!\n");  
   
  exit(0);  
   
  }    
   
  else    
   
  b[e[i][j-2]][e[i][j]]=1;    
   
  if(e[i][j]&&g[i][j-1])    
   
  for(m=1;f[g[i][j-1]][m];m++)    
   
  if(b[f[g[i][j-1]][m]][e[i][j]])  
   
  {    
   
  gotoxy(20,wherey());  
   
  printf("该文法为非算符优先文法!\n");  
   
  exit(0);  
   
  }    
   
  else  
   
    b[f[g[i][j-1]][m]][e[i][j]]=3;    
   
  }    
   
  }    
   
  void   g_yue()    
   
  {  
   
  char   cc[10],ce[10];  
     
  int   x,t=1;    
   
  gotoxy(20,wherey());  
   
  printf("输入要分析的字符串:"   );    
   
  gets(ch);    
   
  k=0;l=0;    
   
  while(ch[k]!='\0')  
   
  k++;    
   
  ch[k]='#';  
   
  ch[k+1]='\0';    
   
  m=0;  
   
  ck[m]='#';    
   
  gotoxy(20,wherey());  
   
  printf("分析过程如下:\n");    
   
  gotoxy(20,wherey());  
   
  printf("步骤   栈   优先关系   当前符号   剩余串   动作\n");    
   
  int   bl=1,p,q;  
     
  for(i=0;ch[i]!='\0';i++)    
   
  {  
   
  gotoxy(20,wherey());  
     
  printf("%2d",t++);  
     
  gotoxy(27,wherey());    
   
  for(u=0;u<=m;u++)    
   
  printf("%c",ck[u]);  
     
  q=0;    
   
  for(p=i+1;ch[p]!='\0';p++)    
   
  ce[q++]=ch[p];    
   
  ce[q]='\0';    
   
  for(k=1;c[k];k++)  
     
  if(c[k]==ch[i])   j=k;  
     
  n=m;    
   
  while(isupper(ck[n]))   n--;    
   
  for(k=1;c[k];k++)    
   
  if(c[k]==ck[n])     break;    
   
  gotoxy(37,wherey());    
   
  switch(b[k][j])    
   
  {  
   
  case   1:printf("   =");break;  
     
  case   2:printf("   <");break;  
     
  case   3:printf("   >");    
   
  }    
   
  gotoxy(45,wherey());    
   
  printf("%c",ch[i]);    
   
  gotoxy(55,wherey());    
   
  printf("%s",ce);    
   
  if(b[k][j]==0)  
   
  {    
   
  gotoxy(20,wherey());  
   
  printf("\n该字符串不是合法字符串!press   any   key---\n");  
   
  bl=0;  
   
    break;  
   
  }    
   
  else    
   
  if(b[k][j]<3)  
   
  {  
   
  ck[++m]=ch[i];  
   
  gotoxy(67,wherey());  
   
  if(ch[i+1]!='\0')  
   
  printf("移进\n");  
   
  else   printf("接受\n");  
   
  }    
   
  else    
   
  {  
   
  i--;    
   
  gotoxy(67,wherey());    
   
  printf("规约\n");  
     
  x=0;    
   
  do    
   
  {  
   
  n--;  
     
  while(isupper(ck[n]))   n--;    
   
  for(j=0;c[j];j++)    
   
  if(c[j]==ck[n])  
   
  break;  
     
  }  
   
  while(b[j][k]==1);  
     
  u=n;    
   
  while(m>u)   cc[x++]=ck[++u];    
   
  m=n;    
   
  for(u=0;strlen(a[u]);u++)    
   
  {  
   
  x=1;  
     
  for(v=3;a[u][v]!='\0';v++)  
     
  if(!isupper(a[u][v])&&a[u][v]!=cc[v-3])    
   
  x=0;  
     
  if(x)    
   
  {    
   
  ck[++m]=a[u][0];  
   
  l=0;  
   
  break;    
   
  }    
   
  }    
   
  }    
   
  }    
   
  gotoxy(20,wherey());    
   
  if(bl)    
   
  printf("successful!press   any   key---");    
   
  _setcursortype(_NOCURSOR);    
   
  while(!kbhit());    
   
  }    
   
  void   main()    
   
  {  
   
  for(i=0;i<10;i++)    
   
  for(j=0;j<20;j++)    
   
  d[i][j]=e[i][j]=f[i][j]=g[i][j]=0;  
     
  for(i=0;i<20;i++)    
   
  for(j=0;j<20;j++)    
   
  b[i][j]=0;    
   
  for(i=0;i<10;i++)    
   
  c[i]=0;    
   
  textbackground(BLUE);    
   
  clrscr();    
   
  printf("*****************************语法分析器*****************************************\n");    
   
  gotoxy(20,5);    
   
  printf("要使用新文法?(y/n):");  
     
  if(getchar()=='y')  
   
    {  
   
  scanf("%c");  
   
  get_wf();  
   
  }  
     
  else  
   
  {  
   
  scanf("%c");    
   
  if((fp=fopen("wfile","r"))!=NULL)  
   
  {  
   
  fread(&a,10*20*sizeof(char),1,fp);  
     
  fread(&d,10*20*sizeof(char),1,fp);    
   
  fread(&f,10*20*sizeof(char),1,fp);    
   
  fread(&c,10*sizeof(char),1,fp);  
   
  }    
   
  gotoxy(20,wherey());  
   
  printf("您现在使用的文法为:\n");    
   
  for(i=0;strlen(a[i]);i++)  
     
  {    
   
  gotoxy(20,wherey());    
   
  for(j=0;a[i][j]!='\0';j++)    
   
  printf("%2c",a[i][j]);    
   
  printf("\n");    
   
  }    
   
  }    
   
  for(i=0;strlen(a[i]);i++)  
     
  {  
   
  for(j=1;a[i][j]!=0;j++)  
     
  if(isupper(a[i][j])&&isupper(a[i][j-1]))  
   
  {  
   
  gotoxy(20,wherey());  
   
  printf("该文法为非算符文法!\n");    
   
  exit(0);  
   
  }    
   
  if(j<=3)  
   
  {    
   
  gotoxy(20,wherey());  
   
  printf("该文法为非算符优先文法!\n");    
   
  exit(0);  
   
  }    
   
  }    
   
  firstvt();    
   
  lastvt();  
     
  k=1;    
   
  while(c[k])   k++;    
   
  rel_s();    
   
  gotoxy(20,wherey());  
   
  printf("所求关系矩阵如下:\n");  
     
  gotoxy(22,wherey());  
     
  for(i=1;i<=k;i++)    
   
  printf("%2c",c[i]);  
     
  printf("\n");    
   
  for(i=1;i<=k;i++)    
   
  {    
   
  gotoxy(20,wherey());  
     
  printf("%2c",c[i]);    
   
  for(j=1;j<=k;j++)  
     
  switch(b[i][j])    
   
  {  
   
  case   0:printf("   ");break;  
     
  case   1:printf("   =");break;    
   
  case   2:printf("   <");break;    
   
  case   3:printf("   >");    
   
  }    
   
  printf("\n");    
   
  }    
   
  g_yue();    
   
  }    
   
  Top

12 楼maoxianwang(傻蛋)回复于 2002-09-21 01:46:29 得分 5

徐士良主编的常用算法不错,  
   
  你去看看吧  
   
  我要分Top

相关问题

  • 求C#简单的代码
  • 简单的C/C++代码 怎样看它的汇编代码?
  • 一段简单C++代码改成Delphi
  • 一个简单的c代码编译不过的问题。