C语言写出代码某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类或货车类,上渡船有如下规定: 同类车先到先上船; 客车先于货车上渡船,且每上4辆客车,才允许放上一辆货车; 若等待客车不足4辆,则以货车代替; 若无货车等待,允许客车都上船。 试设计程序模拟渡口管理。
时间: 2024-03-25 17:40:58 浏览: 34
好的,这是一个经典的模拟题目,我来给您讲一下思路。
首先,我们需要定义两个队列,一个队列用来存放等待上船的客车,另一个队列用来存放等待上船的货车。
在程序运行时,我们要不断地接收车辆到达的消息。对于每个到达的车辆,我们需要判断它是客车还是货车。如果是客车,我们就将其加入客车队列中;如果是货车,我们就将其加入货车队列中。
然后,我们需要不断地检查队列中是否有车可以上船。如果有,则按照上船规则选择车辆,并将其从队列中移除,同时将其上船。如果没有,则等待下一次检查。
为了方便模拟,我们可以使用一个计数器来记录当前已经上船的客车数量。当计数器达到4时,我们就可以允许一辆货车上船,并将计数器清零。
下面是一个简单的示例代码,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100
typedef struct {
int type; // 0 for passenger car, 1 for truck
int id; // vehicle id
} Vehicle;
typedef struct {
Vehicle data[MAX_QUEUE_SIZE];
int front, rear;
} Queue;
void initQueue(Queue *queue) {
queue->front = queue->rear = 0;
}
int isQueueEmpty(Queue *queue) {
return queue->front == queue->rear;
}
int isQueueFull(Queue *queue) {
return (queue->rear + 1) % MAX_QUEUE_SIZE == queue->front;
}
void enqueue(Queue *queue, Vehicle vehicle) {
if (isQueueFull(queue)) {
printf("Error: queue is full\n");
exit(1);
}
queue->data[queue->rear] = vehicle;
queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE;
}
Vehicle dequeue(Queue *queue) {
if (isQueueEmpty(queue)) {
printf("Error: queue is empty\n");
exit(1);
}
Vehicle vehicle = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_QUEUE_SIZE;
return vehicle;
}
int main() {
Queue passengerQueue, truckQueue;
initQueue(&passengerQueue);
initQueue(&truckQueue);
int passengerCount = 0;
int truckCount = 0;
while (1) {
int type, id;
printf("Enter vehicle type (0 for passenger car, 1 for truck) and id: ");
scanf("%d %d", &type, &id);
Vehicle vehicle = { type, id };
if (type == 0) {
enqueue(&passengerQueue, vehicle);
printf("Passenger car %d arrived and queued up.\n", id);
} else if (type == 1) {
enqueue(&truckQueue, vehicle);
printf("Truck %d arrived and queued up.\n", id);
} else {
printf("Error: invalid vehicle type\n");
continue;
}
while (!isQueueEmpty(&passengerQueue) && passengerCount < 4) {
Vehicle vehicle = dequeue(&passengerQueue);
printf("Passenger car %d boarded the ferry.\n", vehicle.id);
passengerCount++;
}
if (passengerCount == 4 && !isQueueEmpty(&truckQueue)) {
Vehicle vehicle = dequeue(&truckQueue);
printf("Truck %d boarded the ferry.\n", vehicle.id);
passengerCount = 0;
}
if (isQueueEmpty(&passengerQueue) && isQueueEmpty(&truckQueue)) {
printf("All vehicles have boarded the ferry.\n");
break;
}
}
return 0;
}
```