24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 448  |  回复: 2

永远的答案

银虫 (小有名气)

[求助] 调试错误

蛋疼的数据结构,我们明明是数学系的,结果还要做数据结构的课程设计,我们只学了二十几节课好不好,数据结构编程不会呀!老师要求还好严苛,要求这个星期五要做完,只好在网上下了一篇,然后自己再改了改,已经改了一个星期了,况且我们还有好几门考试呢,不坑能把所有的时间都放置在这上面。可是这一篇总是有错误,调试的时候总是调试不成功,那位大神帮帮忙给改改呗!我只有34金币,全部给你了。
题目是停车场管理系统。利用站和队列实现的!

#include
#include
#include
#include
#define Size 3                                                           /*车库容量*/
#define Price 5                                                          /*单位价格*/
#define Null 0
typedef struct time
{
        int hour;
        int minute;
}Time;

typedef struct
{
        int car_number;
        Time arrivetime,leavetime;                                           /*车信息结点*/
        float fee;
}car_info;

typedef struct
{
        car_info *north;
        car_info *south;                                                     /*停车场信息*/
        int number;
}car_park;

typedef struct
{
        car_info *west;
        car_info *east;                                                      /*倒车场信息*/
        int number;
}car_park_back;

typedef struct car
{
        car_info *data;
        struct car *next;                                                    /*结点信息*/
}carnode;

typedef struct node
{
        carnode *head;
        carnode *rear;                                                       /*便道信息*/
        int number;
}car_park_temp;

void init_car_park(car_park *cp)
{
        cp->north=(car_info *)malloc(Size * sizeof(car_info));               /*初始化停车场*/
        if(!cp->north)
                printf("error\n";
        cp->south=cp->north;                                                 /*令栈顶等于栈底*/
        cp->number=0;
}

void enter_car_park(car_park *cp,car_info *car)
{
        *cp->south++=*car;                                                  /*车辆进入停车场*/
        cp->number++;                 
}
int notfull_car_park(car_park *cp)
{
        int e;
        if(cp->south-cp->north>=Size)                                       /*判断停车场是否已满*/
                e=0;
        else
                e=1;
        return(e);
}
int notempty_car_park_back(car_park_back *cpb)
{
        int e;
        if(cpb->east==cpb->west)
                e=0;                                                            /*判断倒车场是否不空*/
        else
                e=1;
        return(e);
}

void back_car_park(car_park *cp,car_info *car)
{
        *car=*cp->south;                                                    /*进行倒车操作*/
        cp->number--;
}

void init_car_park_back(car_park_back *cpb)
{
        cpb->west=(car_info *)malloc(Size *sizeof(car_info));
        if(!cpb->west)
                printf("error\n";                                               /*倒车场初始化*/
        cpb->east=cpb->west;
        cpb->number=0;
}

void enter_car_park_back(car_park_back *cpb,car_info *car)
{
        *cpb->east++=*car;
        cpb->number++;                                                       /*进入倒车场操作*/
}

void leave_car_park_back(car_park_back *cpb,car_info *car)
{
        *car=*--cpb->east;
        cpb->number--;                                                       /*离开倒车场操作*/
}

void init_car_park_temp(car_park_temp *cpt)
{
        cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode));              /*初始化便道*/
        cpt->head->next=Null;
        cpt->number=0;
}

void enter_car_park_temp(car_park_temp *cpt,car_info *car)
{
        carnode *p;
        p=(carnode *)malloc(sizeof(carnode));                                 /*进入便道操作*/
        p->data=car;
        p->next=Null;
        cpt->rear->next=p;
        cpt->rear=p;
        cpt->number++;
}

void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp)
{
        carnode *h;
        h=(carnode *)malloc(sizeof(carnode));
        h=cpt->head->next;
        car=h->data;                                                           /*离开便道操作*/
        cpt->head->next=h->next;
        enter_car_park(cp,car);
        cpt->number--;
}
int notempty_car_park_temp(car_park_temp *cpt)
{
        int e;
        if(cpt->head==cpt->rear)                                               /*判断便道是否为空*/
                e=0;
        else
                e=1;
        return(e);
}

void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb)
{
        float e,a1,a2,b1,b2,t;                                                 /*定义时间变量*/
        car_info *car1,*car2;
        car1=(car_info *)malloc(sizeof(car_info));                             /*车辆实体化*/
        car2=(car_info *)malloc(sizeof(car_info));   
        while((--cp->south)->car_number!=car->car_number)                      /*判断车号是否为要出去的车号*/
        {
                back_car_park(cp,car1);                                            /*进行倒车操作*/
                enter_car_park_back(cpb,car1);                                     /*进入倒车场*/
        }
        car->arrivetime.hour=cp->south->arrivetime.hour;
        car->arrivetime.minute=cp->south->arrivetime.minute;
        a1=car->arrivetime.hour;
        a2=car->arrivetime.minute;
        b1=car->leavetime.hour;
        b2=car->leavetime.minute;
        t=((b1-a1)+(b2-a2)/60);
        car->fee=t*Price;                                                       /*计算价格*/
        printf("the time of the car is %2.1f hour ,%2.1f minute",(b1-a1),(b2-a2));
        printf("the money is %3.1f  yuan",car->fee);
        e=notempty_car_park_back(cpb);                                          /*判断倒车场是否为空*/
        while(e==1)
        {
                leave_car_park_back(cpb,car2);                                      /*离开倒车场*/
                enter_car_park(cp,car2);                                            /* 进入停车场*/
                e=notempty_car_park_back(cpb);                                      /*判断倒车场是否为空*/
        }
        cp->number--;
}

void main()                                                                 /*主函数*/
{
        char ch;      
        int e,n,i;                                                              /*定义字符和整形变量*/
        car_park_back *cpb;                                                     /* 定义停车场,倒车场以及便道的变量*/
        car_park *cp;
        car_park_temp *cpt,*cpt2;
        car_info *car;
        cp=(car_park *)malloc(sizeof(car_park));                                /*实体化变量*/
        cpb=(car_park_back *)malloc(sizeof(car_park));
        cpt=(car_park_temp *)malloc(sizeof(car_park_temp));       

        cpt2=(car_park_temp *)malloc(sizeof(car_park_temp));
        init_car_park(cp);                                                      /*实体化停车场,倒车场,便道*/
        init_car_park_back(cpb);
        init_car_park_temp(cpt);
        printf("\nA=车辆到达 L=车辆离开 X=车场信息\n";
        car=(car_info *)malloc(sizeof(car_info));
        do
        {
                printf("input the 'A' or 'L' or 'X'  :";                           /*输入待操作的命令*/
                scanf("%s",&ch);
                e=notfull_car_park(cp);
                                                                            /*判断车场是否为空*/
                switch(ch)                                                          /*判断要输入的命令*/
                {
                case 'A':
                        if(e==1)                                                        /*车场不满,进入车辆*/
                        {
                                printf("input the car_number:";                            /*输入车辆的基本信息*/
                                scanf("%s",&car->car_number);
                                printf("input the arrivetime:";
                                scanf("%d",&(*car).arrivetime.hour);
                                scanf("%d",&(*car).arrivetime.minute);
                                enter_car_park(cp,car);                                    /*进入车场*/
                                printf("the car is in the car_park,the place is %d\n",cp->number);
                        }
                        else                                                           /*若车场满,进入便道*/
                        {
                                enter_car_park_temp(cpt,car);
                            printf("input the car_number:";
                            scanf("%c",&car->car_number);
                            printf("the car is in the car_park_temp,the place of temp is %d\n",cpt->number);
                        }
                        break;
                case 'L':                                                         /*离开停车场*/
                        printf("input the car_number:";                              /*输入要离开车辆的号码以及离开时间*/
                        scanf("%s",&car->car_number);
                    printf("input the leavetime of the car:";
                    scanf("%d",&(*car).leavetime.hour);
                        scanf("%d",&(*car).leavetime.minute);
                    leave_car_park(cp,car,cpb);                                   /*执行离开车场*/
                    i=(*car).leavetime.hour;                                      /*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/
                    n=notempty_car_park_temp(cpt);                                /*判断便道是否不空*/
                        if(n==1)
                                printf("The car %s",cpt->head->next->data->car_number);   /*记住便道里第一辆车的号码*/
                        leave_car_park_temp(cpt,car,cp);                              /*离开便道,进入停车场*/
                        printf(" is enter the car_park,arrivetime is %d ,the place of carpark is %d\n",i,cp->number);
                        break;
                case 'X':                                                         /*查看车场以及便道里的车辆信息*/
                        printf("\nThere are %d cars in car park!\nFolowing is the carnumber in the car park:\n ",cp->number);
                        for(i=1;i<=cp->number;i++)                                    /*做循环,依次输出停车场里车辆的信息*/
                                printf("%s,",(cp->north++)->car_number);
                        cp->north=cp->north-cp->number;
                        cpt2->head=cpt->head->next;                                   /*设一个虚拟指针使其指向头结点的下一个位置*/
                        if(cpt->number==0)                                            /*便道里没有车的情况*/
                                printf("\nThere is no cars in temp!" ;
                        else
                        {
                                printf("There are %d cars in car temp!\n Folowing is the carnumber in the car temp:\n ",cpt->number);
                                for(i=1;i<=cpt->number;i++)                               /*做一个循环,输出便道里车辆的信息*/
                                {
                                        printf("%d ",cpt2->head->next->data->car_number);     /* 输出车辆的号码*/
                                        cpt2->head=cpt2->head->next;
                                }
                        }
                        break;
                default:
                        printf("ERROR please input again\n";
                        break;
                }
        }
        while(ch!='0');
}
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

岚雾

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty(金币+1): 欢迎常来程序语言看看 2011-12-19 19:59:29
jjdg:编辑内容 2011-12-20 01:54
jjdg:编辑内容 2011-12-20 01:55
jjdg:编辑内容 2011-12-20 01:55
jjdg:编辑内容 2011-12-20 01:56
jjdg:编辑内容 2011-12-20 01:57
jjdg:编辑内容 2011-12-20 01:58
jjdg:编辑内容 2011-12-20 01:59
永远的答案(金币+1): 没有帮助, 2011-12-22 12:28:02
#include
#include
#include
#include
#define Size 3                                                           /*车库容量*/
#define Price 5                                                          /*单位价格*/
#define Null 0
typedef struct time
{
        int hour;
        int minute;
}Time;

typedef struct
{
        int car_number;
        Time arrivetime,leavetime;                                           /*车信息结点*/
        float fee;
}car_info;

typedef struct
{
        car_info *north;
        car_info *south;                                                     /*停车场信息*/
        int number;
}car_park;

typedef struct
{
        car_info *west;
        car_info *east;                                                      /*倒车场信息*/
        int number;
}car_park_back;

typedef struct car
{
        car_info *data;
        struct car *next;                                                    /*结点信息*/
}carnode;

typedef struct node
{
        carnode *head;
        carnode *rear;                                                       /*便道信息*/
        int number;
}car_park_temp;

void init_car_park(car_park *cp)
{
        cp->north=(car_info *)malloc(Size * sizeof(car_info)) ;               /*初始化停车场*/
        if(!cp->north)
                printf("error\n" ) ;
        cp->south=cp->north;                                                 /*令栈顶等于栈底*/
        cp->number=0;
}

void enter_car_park(car_park *cp,car_info *car)
{
        *cp->south++=*car;                                                  /*车辆进入停车场*/
        cp->number++;                 
}
int notfull_car_park(car_park *cp)
{
        int e;
        if(cp->south-cp->north>=Size)                                       /*判断停车场是否已满*/
                e=0;
        else
                e=1;
        return(e);
}
int notempty_car_park_back(car_park_back *cpb)
{
        int e;
        if(cpb->east==cpb->west)
                e=0;                                                            /*判断倒车场是否不空*/
        else
                e=1;
        return(e);
}

void back_car_park(car_park *cp,car_info *car)
{
        *car=*cp->south;                                                    /*进行倒车操作*/
        cp->number--;
}

void init_car_park_back(car_park_back *cpb)
{
        cpb->west=(car_info *)malloc(Size *sizeof(car_info));
        if(!cpb->west)
                printf("error\n" ) ;                                               /*倒车场初始化*/
        cpb->east=cpb->west;
        cpb->number=0;
}

void enter_car_park_back(car_park_back *cpb,car_info *car)
{
        *cpb->east++=*car;
        cpb->number++;                                                       /*进入倒车场操作*/
}

void leave_car_park_back(car_park_back *cpb,car_info *car)
{
        *car=*--cpb->east;
        cpb->number--;                                                       /*离开倒车场操作*/
}

void init_car_park_temp(car_park_temp *cpt)
{
        cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode)) ;              /*初始化便道*/
        cpt->head->next=Null;
        cpt->number=0;
}

void enter_car_park_temp(car_park_temp *cpt,car_info *car)
{
        carnode *p;
        p=(carnode *)malloc(sizeof(carnode)) ;                                 /*进入便道操作*/
        p->data=car;
        p->next=Null;
        cpt->rear->next=p;
        cpt->rear=p;
        cpt->number++;
}

void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp)
{
        carnode *h;
        h=(carnode *)malloc(sizeof(carnode)) ;
        h=cpt->head->next;
        car=h->data;                                                           /*离开便道操作*/
        cpt->head->next=h->next;
        enter_car_park(cp,car);
        cpt->number--;
}
int notempty_car_park_temp(car_park_temp *cpt)
{
        int e;
        if(cpt->head==cpt->rear)                                               /*判断便道是否为空*/
                e=0;
        else
                e=1;
        return(e);
}

void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb)
{
        float e,a1,a2,b1,b2,t;                                                 /*定义时间变量*/
        car_info *car1,*car2;
        car1=(car_info *)malloc(sizeof(car_info));                             /*车辆实体化*/
        car2=(car_info *)malloc(sizeof(car_info));   
        while((--cp->south)->car_number!=car->car_number)                      /*判断车号是否为要出去的车号*/
        {
                back_car_park(cp,car1);                                            /*进行倒车操作*/
                enter_car_park_back(cpb,car1);                                     /*进入倒车场*/
        }
        car->arrivetime.hour=cp->south->arrivetime.hour;
        car->arrivetime.minute=cp->south->arrivetime.minute;
        a1=car->arrivetime.hour;
        a2=car->arrivetime.minute;
        b1=car->leavetime.hour;
        b2=car->leavetime.minute;
        t=((b1-a1)+(b2-a2)/60);
        car->fee=t*Price;                                                       /*计算价格*/
        printf("the time of the car is %2.1f hour ,%2.1f minute",(b1-a1),(b2-a2));
        printf("the money is %3.1f  yuan",car->fee);
        e=notempty_car_park_back(cpb);                                          /*判断倒车场是否为空*/
        while(e==1)
        {
                leave_car_park_back(cpb,car2);                                      /*离开倒车场*/
                enter_car_park(cp,car2);                                            /* 进入停车场*/
                e=notempty_car_park_back(cpb);                                      /*判断倒车场是否为空*/
        }
        cp->number--;
}

void main()                                                                 /*主函数*/
{
        char ch;      
        int e,n,i;                                                              /*定义字符和整形变量*/
        car_park_back *cpb;                                                     /* 定义停车场,倒车场以及便道的变量*/
        car_park *cp;
        car_park_temp *cpt,*cpt2;
        car_info *car;
        cp=(car_park *)malloc(sizeof(car_park));                                /*实体化变量*/
        cpb=(car_park_back *)malloc(sizeof(car_park));
        cpt=(car_park_temp *)malloc(sizeof(car_park_temp));        

        cpt2=(car_park_temp *)malloc(sizeof(car_park_temp));
        init_car_park(cp);                                                      /*实体化停车场,倒车场,便道*/
        init_car_park_back(cpb);
        init_car_park_temp(cpt);
        printf("\nA=车辆到达 L=车辆离开 X=车场信息\n" );
        car=(car_info *)malloc(sizeof(car_info));
        do
        {
                printf("input the 'A' or 'L' or 'X'  :" );                           /*输入待操作的命令*/
                scanf("%s",&ch);
                e=notfull_car_park(cp);
                /*判断车场是否为空*/
                switch(ch)                                                          /*判断要输入的命令*/
                {
                case 'A':
                        if(e==1)                                                        /*车场不满,进入车辆*/
                        {
                                printf("input the car_number:" );                            /*输入车辆的基本信息*/
                                scanf("%s",&car->car_number);
                                printf("input the arrivetime:" );
                                scanf("%d",&(*car).arrivetime.hour);
                                scanf("%d",&(*car).arrivetime.minute);
                                enter_car_park(cp,car);                                    /*进入车场*/
                                printf("the car is in the car_park,the place is %d\n",cp->number);
                        }
                        else                                                           /*若车场满,进入便道*/
                        {
                                enter_car_park_temp(cpt,car);
                                printf("input the car_number:" );
                                scanf("%c",&car->car_number);
                                printf("the car is in the car_park_temp,the place of temp is %d\n",cpt->number);
                        }
                        break;
                case 'L':                                                         /*离开停车场*/
                        printf("input the car_number:" );                              /*输入要离开车辆的号码以及离开时间*/
                        scanf("%s",&car->car_number);
                        printf("input the leavetime of the car:" );
                        scanf("%d",&(*car).leavetime.hour);
                        scanf("%d",&(*car).leavetime.minute);
                        leave_car_park(cp,car,cpb);                                   /*执行离开车场*/
                        i=(*car).leavetime.hour;                                      /*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/
                        n=notempty_car_park_temp(cpt);                                /*判断便道是否不空*/
                        if(n==1)
                                printf("The car %s",cpt->head->next->data->car_number);   /*记住便道里第一辆车的号码*/
                        leave_car_park_temp(cpt,car,cp);                              /*离开便道,进入停车场*/
                        printf(" is enter the car_park,arrivetime is %d ,the place of carpark is %d\n",i,cp->number);
                        break;
                case 'X':                                                         /*查看车场以及便道里的车辆信息*/
                        printf("\nThere are %d cars in car park!\nFolowing is the carnumber in the car park:\n ",cp->number);
                        for(i=1;i<=cp->number;i++)                                    /*做循环,依次输出停车场里车辆的信息*/
                                printf("%s,",(cp->north++)->car_number);
                        cp->north=cp->north-cp->number;
                        cpt2->head=cpt->head->next;                                   /*设一个虚拟指针使其指向头结点的下一个位置*/
                        if(cpt->number==0)                                            /*便道里没有车的情况*/
                                printf("\nThere is no cars in temp!" );
                        else
                        {
                                printf("There are %d cars in car temp!\n Folowing is the carnumber in the car temp:\n ",cpt->number ) ;
                                for(i=1;i<=cpt->number;i++)                               /*做一个循环,输出便道里车辆的信息*/
                                {
                                        printf("%d ",cpt2->head->next->data->car_number ) ;     /* 输出车辆的号码*/
                                        cpt2->head=cpt2->head->next;
                                }
                        }
                        break;
                default:
                        printf("ERROR please input again\n" ) ;
                        break;
                }
        }
        while(ch!='0');
}



没有什么问题,数学专业最好也学下程序设计方面,以后找工作应该很有用处的,我也是数学专业的.

[ Last edited by jjdg on 2011-12-20 at 01:59 ]
2楼2011-12-19 18:01:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

永远的答案

银虫 (小有名气)

引用回帖:
: Originally posted by 岚雾 at 2011-12-19 18:01:30:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Size 3                                                           /*车库容量*/
#define P ...

你输入几个数测试一下!当离开停车场的时候就会出来一个提示指向car=h->data;并提示access violation。编译,组建都不会出错,但是调试的时候就会出错。学点程序设计确实挺好,但是我们学的太快,比计算机学院的学的还快,而且要求的还挺高!我们大学期间要学接近十门计算机的课程!
3楼2011-12-20 10:30:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 永远的答案 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 338求调剂 +6 晟功? 2026-04-03 6/300 2026-04-03 14:50 by ls刘帅
[硕博家园] 求老师收留 +9 lllq123 2026-04-03 9/450 2026-04-03 13:48 by 呼吸都是减肥
[考研] 285求调剂 +6 FZAC123 2026-03-30 6/300 2026-04-03 12:22 by xingguangj
[考研] 建环,能源,土木老师路过看一看!!! +5 嘿嘿uu 2026-04-01 5/250 2026-04-03 11:47 by znian
[考研] 一志愿郑州大学材料与化工085600,求调剂 +15 吃的不少 2026-04-02 15/750 2026-04-03 09:32 by jp9609
[考研] 材料调剂 +8 懒羊羊轻置玉臀 2026-04-02 8/400 2026-04-02 22:03 by liu823948201
[考研] 330分求调剂 +15 qzenlc 2026-03-29 15/750 2026-04-02 21:41 by 百灵童888
[考研] 318求调剂 +3 笃行致远. 2026-03-31 4/200 2026-04-02 15:56 by Jaylen.
[考研] 307分求调剂 +14 (o~o) 2026-03-31 15/750 2026-04-01 20:43 by longlotian
[考研] 349求调剂 +6 吃的不少 2026-04-01 6/300 2026-04-01 17:55 by JYD2011
[考研] 【求调剂】085601材料工程专硕 | 总分272 | +10 脚滑的守法公民 2026-03-27 10/500 2026-04-01 17:23 by pies112
[考研] 一志愿华南师范361分,化学求调剂 +4 Nicole88888 2026-04-01 4/200 2026-04-01 10:08 by 唐沐儿
[考研] 土木304求调剂 +3 兔突突突, 2026-03-31 3/150 2026-04-01 09:42 by JourneyLucky
[考研] 求调剂,一志愿北林食品与营养095500,301分,已过六级,有科研经历 +4 快乐储蓄罐 2026-03-31 4/200 2026-04-01 09:26 by JourneyLucky
[考研] 江苏苏北高校诚邀调剂同学 +3 zzll406 2026-03-31 3/150 2026-03-31 16:54 by 及时行乐fan
[考研] 本科211安全工程,初试290分,求调剂 +3 2719846834 2026-03-28 3/150 2026-03-31 13:52 by 热情沙漠
[考研] 一志愿大连理工大学,机械工程学硕,341 +3 西瓜田的守望者 2026-03-30 3/150 2026-03-31 11:08 by asdfzly
[考研] 08工科求调剂286 +5 tgs_001 2026-03-28 5/250 2026-03-31 08:18 by 一只好果子?
[考研] 一志愿中南大学化学0703总分337求调剂 +6 niko- 2026-03-27 6/300 2026-03-30 10:25 by herarysara
[考研] 291求调剂 +5 Y-cap 2026-03-29 6/300 2026-03-29 13:18 by mumin1990
信息提示
请填处理意见