| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 766 人关注过本帖
标题:银行模拟程序,编译没有错误,为何无法执行。。。求助
只看楼主 加入收藏
sdh1
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-11-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
银行模拟程序,编译没有错误,为何无法执行。。。求助
#include"c1.h"
#include<time.h>
#include<time.h>
typedef struct LNode{////////////////事件练表的元素类型
    int OccurTime;
    int NType;
    LNode *next;
}Event,ElemType,*xx;
typedef struct Head /////////////////此时要是这个head名字和LinkList一样,则出错
 {
   ElemType *head;
   ElemType *tail;
   int len;
 }LinkList;
typedef struct QNode{/////////////////////////////////队列的元素类型
    int Arrivetime;
    int Duration;
    QNode *next;
}QElemType;
 struct LinkQueue///////////////////////////
 {
   QElemType *front;
   QElemType *rear;
 };
/////////////////////////////////////
typedef LinkList EvenList;
EvenList ev;//////////////////////////
Event en;
LinkQueue q[5];
QElemType Customer;
int TotalTime,CustomerNum,CloseTime;
///////////////////////////////////////
 Status InitList(LinkList &L)//////////////////////////////////////////// 构造一个空的线性链表
 {
   ElemType *p;
   p=(ElemType*)malloc(sizeof(LNode)); // 生成头结点
   if(p)
   {
     p->next=NULL;
     L.head=L.tail=p;
     L.len=0;
     return OK;
   }
   else
     return ERROR;
 }
//////////////////////////////////////////////////////////////////////初始化一个队列
Status InitQueue(LinkQueue &Q)
 {
   Q.front=Q.rear=(QElemType*)malloc(sizeof(QNode));
   if(!(Q.front))
   exit(OVERFLOW);
   Q.front->next=NULL;
   return OK;
 }
///////////////////////////////////////////////////////
 int cmp(Event a,Event b)
 {
   if(a.OccurTime==b.OccurTime)
     return 0;
   else
     return (a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime);
 }

////////////////////////////////////////////////////////此处是声明一个函数的入后点
void OrderInsert(LinkList &L,ElemType en,int (*cmp)(ElemType ,ElemType ))// 已知L为有序线性链表,将元素e按非降序插入在L中///////调试次函数形式的作用
{  

   ElemType *o,*p,*q;
   q=L.head;
   p=q->next;/////////////p指向第一个元素节点
   while(p!=NULL&& cmp(*p,en)<0) // p不是表尾且元素值小于e、、、、、p前面加一个*是指针的形式转化成结构
   {
     q=p;
     p=p->next;
   }
   o=(ElemType*)malloc(sizeof(LNode)); // 生成结点
   o->OccurTime=en.OccurTime;
   o->NType=en.NType;// 赋值
   q->next=o; // 插入
   o->next=p;
   L.len++; // 表长加1
   if(!p) // 插在表尾
     L.tail=o; // 修改尾结点   
 }
/////////////////////////////////////
int ListEmpty(EvenList ev)
{
    int r;
    r=ev.len;
    if(r==0)///////////////////////////////////////////////////注意此处若r!==1时则出现语法错误
        return 0;
    else
        return 1;
}
/////////////////////////////////////////////////////
xx GetHead(LinkList L)////////////////////////相当与说这个函数返回的类型是一个指向事件元素的指针值,,,到下面以个函数时相当于H是指向头节点的指针
 {
   return L.head;
 }
 ///////////////////////////////////////////////////DelFirst(ev,GetHead(ev),q)
void DelFirst(LinkList &L,xx h,xx &q)
 { // 把h当做头结点,删除链表中的第一个结点并以q返回。
   q=h->next;/////////////////////////////////////////此时的q指向第一个元素节点
   if(q)
   {
     h->next=q->next;/////////////////////将第一个元素节点删除,,,相当于将头结点的指针的下一个元素,进行了修改
     if(!h->next) /////////////////////// 如果链表中只有一个元素,那么需要将尾节点的位置进行修改
       L.tail=h;  
     L.len--;   
   }
   
   
 }
 ///////////////////////////////////////////////////////////////////////
void Random(int &durtime,int &intertime)
{
    srand(time(0));
    durtime=rand()%30+1;
    intertime=rand()%5+1;
}

//////////////////////////////////////////////////////
 int QueueLength(LinkQueue Q)
 {
   int i=0;
   QElemType *p;
   p=Q.front;
   while(Q.rear!=p)
   {
     i++;
     p=p->next;
   }
   return i;
 }
////////////////////////////////////////////////
 ////////////////////////////////////////////
int mininum()
{
    int j,a[5],k;
    for(j=1;j<=4;j++)
    {
        a[j]=QueueLength(q[j]);
    }
    k=1;
    for(j=2;j<=4;j++)
    {
        if(a[j]<a[1])
        {
           a[1]=a[j];
            k=j;
        }
    return j;
    }
}
///////////////////////////////////////////////////
void EnQueue(LinkQueue &Q,QElemType e)
 {
   QElemType *p;
   if(!(p=(QElemType*)malloc(sizeof(QNode))))
     exit(OVERFLOW);
   p->Arrivetime=e.Arrivetime;
   p->Duration=e.Duration;
   p->next=NULL;
   Q.rear->next=p;
   Q.rear=p;  
 }
///////////////////////////////////////////////////////
Status DeQueue(LinkQueue &Q,QElemType &e)
 {
   QElemType *p;
   if(Q.front==Q.rear)
     return ERROR;
   p=Q.front->next;
   Q.front->next=p->next;
   e.Arrivetime=p->Arrivetime;
   e.Duration=p->Duration;
   if(Q.rear==p)
     Q.rear=Q.front;
   free(p);
   return OK;
 }
//////////////////////////////////////////////////////
Status GetHead0(LinkQueue Q,QElemType &e)
 {
   QElemType *p;
   if(Q.front==Q.rear)
     return ERROR;
   p=Q.front->next;
   e.Arrivetime=p->Arrivetime;
   e.Duration=p->Duration;
   return OK;
 }
/////////////////////////////////////////////////////银行模拟实验的初始化
void OpenForDay()
{
    int i;
    TotalTime=0;CustomerNum=0;
    InitList(ev);
    en.OccurTime=0;en.NType=0;
    OrderInsert(ev,en,cmp);
    for(i=1;i<=4;++i)
    {
        InitQueue(q[i]);
    }
}
////////////////////////////////////////////////////////////////////////en.OccurTime=en.OccurTime+intertime;
void CustomerArrived()
{
    Event en0,en1;
    int t,durtime,intertime,i;
    ++CustomerNum;
    Random(durtime,intertime);
    en0.OccurTime=en.OccurTime+intertime;
    en0.NType=0;   
    t=en.OccurTime+intertime;//////////////////////////当前时刻加上随机时刻之后是下一个事件发生的时刻。插入时间表Customer.Arrivetime=
    if(t<CloseTime)
    OrderInsert(ev,en0,cmp);
    i=mininum();  
    Customer.Arrivetime=en0.OccurTime;
    Customer.Duration=durtime;
    EnQueue(q[i],Customer);
    if(QueueLength(q[i])==1)
        en1.OccurTime=en.OccurTime+durtime;
        en1.NType=i;
       OrderInsert(ev,en1,cmp);
}
////////////////////////////////////
void CustomerDeparture()
 {
   Event et;
   int i;
   i=en.NType;
   DeQueue(q[i],Customer);
   TotalTime+=en.OccurTime-Customer.Arrivetime;
   if(!QueueLength(q[i]))
   {
     GetHead0(q[i],Customer);
     et.OccurTime=en.OccurTime+Customer.Duration;
     et.NType=i;
     OrderInsert(ev,et,cmp);
   }
 }
/////////////////////////////////
void main()
{
    xx m;
    xx g;
    scanf("%d",&CloseTime);
    OpenForDay();
    while(ListEmpty(ev))
    {
        m=GetHead(ev);/////此时的m返回的是头结点的指针
         DelFirst(ev,m,g);  en=*g;//////////////注意变量和指向变量的指针之间的转化问题,,,此时已经可以确定结点不畏孔
       if(en.NType==0)///////////////////////在此之前的程序没有任何问题
           CustomerArrived();   
    else
        CustomerDeparture();
    }
printf(" %f\n",TotalTime/CustomerNum);
}



c1.h这个头文件里面是这些
 // c1.h (程序名)
 #include<string.h>
 #include<ctype.h>
 #include<malloc.h> // malloc()等
 #include<limits.h> // INT_MAX等
 #include<stdio.h> // EOF(=^Z或F6),NULL
 #include<stdlib.h> // atoi()
 #include<io.h> // eof()
 #include<math.h> // floor(),ceil(),abs()
 #include<process.h> // exit()
 #include<iostream.h> // cout,cin
 // 函数结果状态代码
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 // #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
 typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE


搜索更多相关主题的帖子: 模拟程序 银行 编译 
2010-11-20 15:06
sdh1
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-11-7
收藏
得分:0 
这个程序现在是真的找不到哪个地方有错误,我把这个程序还打出来,检查好几遍还是没发现那点有错误。。这个程序是编译的时候没错误,也可以让你输进去数,,但是,输入数以后,程序就停到那里了,,本人大二的,没有很多的编程经验,希望高手求解。谢谢
2010-11-20 15:09
流觞
Rank: 2
等 级:论坛游民
帖 子:11
专家分:18
注 册:2010-11-20
收藏
得分:7 
我大一的...

               现实強奸了过去''   留下孽种叫回忆
2010-11-20 15:30
sdh1
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-11-7
收藏
得分:0 
人气好低啊
2010-11-20 18:39
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:7 
你自己写的时候把每句的注释写上去 就能看出来了
2010-11-20 19:22
xdzsm
Rank: 2
等 级:论坛游民
帖 子:137
专家分:99
注 册:2010-10-26
收藏
得分:7 
go go!
2010-11-25 13:43
快速回复:银行模拟程序,编译没有错误,为何无法执行。。。求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021485 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved