中秋放分:给几个超过500行的简单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, ®isters, ®isters );
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

