急求一个关于洗车仿真的编程代码,题目如下要用C语言做.

1个回答

  • #include

    #include

    #include

    #include

    #define QUENELEN 6

    #define QUENENUM 3

    #define MAXTIME 360

    struct cCar

    {

    int num;

    int waitTime;

    int serverTime;

    int arriveTime;

    int leaveTime;

    int quene;

    struct cCar * next;

    } ;

    struct cQuene

    {

    x05int quene;

    int queneNum;

    int num[QUENELEN];

    int waitTime[QUENELEN];

    int serverTime[QUENELEN];

    };

    void initCar(struct cCar * s)

    {

    s->num = 0;

    s->waitTime = 0;

    s->serverTime = 0;

    s->arriveTime = 0;

    s->leaveTime = 0;

    s->quene = 0;

    s->next = NULL;

    }

    void printQuene(struct cQuene * s)

    {

    x05int i;

    x05printf("%dt%dn",s->queneNum ,s->quene );

    x05for(i=0;iserverTime [i]);

    x05printf("n");

    x05for(i=0;iwaitTime [i]);

    x05printf("n");

    x05for(i=0;inum [i]);

    x05printf("n");

    x05printf("n");

    }

    void initQuene(struct cQuene * s,int n)

    {

    int i;

    x05s->quene = n;

    s->queneNum = 0;

    for(i = 0; i < QUENELEN; i++)

    {

    s->num[i] = 0;

    s->waitTime[i] = 0;

    s->serverTime[i] = 0;

    }

    }

    int curTime=0,Num=1;

    struct cCar firstCar;

    struct cQuene Quene[QUENENUM];

    void initQuene()

    {

    x05int i;

    x05for(i=0; iserverTime[i];

    return count;

    }

    void updataQuene(struct cQuene * s)

    {

    int i;

    x05struct cCar *p = &firstCar;

    s->serverTime[0]--; //洗车时间减1

    if(s->serverTime[0] next)

    x05x05x05{

    x05x05x05x05if(p->num == s->num [0]) break;

    x05x05x05x05p = p ->next ;

    x05x05x05}

    x05x05}

    x05x05if(p)

    x05x05{

    x05x05x05p->leaveTime = curTime+1; //记录离开时间

    x05x05x05p->waitTime = s->waitTime[0]; //记录等待时间

    x05x05}

    x05x05else printf("没有找到编号为%d的车",s->num [0]);

    for(i = 0; i < s->queneNum; i++) //队列移动

    {

    s->num[i] = s->num[i+1];

    s->waitTime[i] = s->waitTime[i+1];

    s->serverTime[i] = s->serverTime[i+1];

    }

    s->num[i] = 0;

    s->waitTime[i] = 0;

    s->serverTime[i] = 0;

    if(s->queneNum>0) s->queneNum--; //队列数减1

    }

    x05for(i = 1; i queneNum; i++) s->waitTime[i]++; //等待时间加1

    }

    void updataQuene()

    {

    x05int i;

    x05for(i=0;i 0) updataQuene(&Quene[i]);

    x05x05//printQuene(&Quene[i]);

    x05}

    }

    void addCar()

    {

    x05const int serverTime[3] = {10,15,25};

    x05struct cCar * p = &firstCar;

    x05int i,j,queneWait[QUENENUM],index[QUENENUM],minpos,tmp;

    x05while(p->next) p = p ->next ; //最后一条记录

    x05p->next = (struct cCar *)malloc(sizeof(struct cCar)); //添加新车

    x05p = p ->next;

    x05p->arriveTime = curTime; //车到达时间

    x05p->num = Num++; //到达序号

    x05p->next = NULL;

    x05p->serverTime = serverTime[rand() % 3]; //服务时间

    x05p->leaveTime = curTime;

    x05p->waitTime = 0;

    x05p->quene = -1;

    x05

    x05for(i=0; iquene = index[i];

    x05x05x05x05break;

    x05x05x05}

    x05x05}

    x05}

    }

    void main()

    {

    x05int i,num=0,count=0;

    x05int wait = rand() % 30;

    x05struct cCar * p = &firstCar,*p2;

    x05srand(time(NULL));

    x05initQuene();

    x05while(curTimenext ;

    x05printf("编号t队列号t到达t离开t服务t等待n");

    x05while(p)

    x05{

    x05x05printf("%dt%dt%dt%dt%dt%dn",p->num ,p->quene ,p->arriveTime ,p->leaveTime ,p->serverTime ,p->waitTime );

    x05x05if( p->arriveTime != p->leaveTime)

    x05x05{

    x05x05x05num ++;

    x05x05x05count += p->waitTime;

    x05x05}

    x05x05p = p->next ;

    x05}

    x05printf("平均等待时间%fn",(double) count / (num+1));

    x05p = firstCar.next ;

    x05while(p )//释放空间

    x05{

    x05x05p2 = p;

    x05x05p = p->next ;

    x05x05free(p2);

    x05}

    }