c语言实现模拟电梯

c语言实现模拟电梯,要求可以在终端输入楼层,移动过程中显示到第几层了,移动结束后选择下一个楼层,程序开始执行便不会借宿,除非输入exit

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 电梯结构体
typedef struct {
    int current_floor;
} Elevator;

// 初始化电梯
void initializeElevator(Elevator *elevator) {
    elevator->current_floor = 1; // 初始位置为第1层
}

// 移动电梯到目标楼层
void moveElevator(Elevator *elevator, int target_floor) {
    if (target_floor > elevator->current_floor) {
        printf("电梯上行中...\n");
        for (int i = elevator->current_floor; i <= target_floor; ++i) {
            printf("当前楼层:%d\n", i);
        }
    } else if (target_floor < elevator->current_floor) {
        printf("电梯下行中...\n");
        for (int i = elevator->current_floor; i >= target_floor; --i) {
            printf("当前楼层:%d\n", i);
        }
    } else {
        printf("电梯已经在目标楼层:%d\n", target_floor);
    }
    elevator->current_floor = target_floor; // 更新电梯当前楼层
}

int main() {
    Elevator elevator;
    initializeElevator(&elevator);

    char input[10];

    printf("电梯模拟程序。输入楼层编号,输入 'exit' 退出程序。\n");

    while (1) {
        printf("请输入目标楼层:");
        fgets(input, sizeof(input), stdin);

        // 去除换行符
        input[strcspn(input, "\n")] = 0;

        if (strcmp(input, "exit") == 0) {
            printf("程序结束。\n");
            break;
        }

        int target_floor = atoi(input);

        if (target_floor <= 0) {
            printf("请输入有效的楼层数字。\n");
        } else {
            moveElevator(&elevator, target_floor);
        }
    }

    return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的模拟电梯调度算法的 C 语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_FLOORS 20 #define MAX_ELEVATORS 5 typedef struct elevator { int id; int current_floor; int direction; // 0: 停止, 1: 上行, -1: 下行 int requests[MAX_FLOORS + 1]; // 等待服务的请求 int num_requests; } Elevator; typedef struct elevator_controller { Elevator elevators[MAX_ELEVATORS]; int num_elevators; } ElevatorController; void init_elevator(Elevator *elevator, int id) { elevator->id = id; elevator->current_floor = 1; elevator->direction = 0; elevator->num_requests = 0; for (int i = 0; i <= MAX_FLOORS; i++) { elevator->requests[i] = 0; } } void add_request(Elevator *elevator, int floor) { // 将请求加入电梯的请求队列中 if (!elevator->requests[floor]) { elevator->requests[floor] = 1; elevator->num_requests++; } // 根据请求方向调整电梯运行方向 if (elevator->direction == 0) { elevator->direction = floor > elevator->current_floor ? 1 : -1; } } void move(Elevator *elevator) { // 根据当前方向移动电梯 elevator->current_floor += elevator->direction; } void serve_request(Elevator *elevator) { // 处理当前楼层的请求 if (elevator->requests[elevator->current_floor]) { elevator->requests[elevator->current_floor] = 0; elevator->num_requests--; } } int should_stop(Elevator *elevator) { // 判断是否需要在当前楼层停下 if (elevator->requests[elevator->current_floor]) { return 1; } if (elevator->direction == 1) { for (int i = elevator->current_floor + 1; i <= MAX_FLOORS; i++) { if (elevator->requests[i]) { return 0; } } return 1; } if (elevator->direction == -1) { for (int i = elevator->current_floor - 1; i >= 1; i--) { if (elevator->requests[i]) { return 0; } } return 1; } return 0; } void run_elevator(Elevator *elevator) { // 运行电梯直到没有请求 while (elevator->num_requests > 0) { serve_request(elevator); if (should_stop(elevator)) { elevator->direction = 0; } else { move(elevator); } } } void init_controller(ElevatorController *controller, int num_elevators) { controller->num_elevators = num_elevators; for (int i = 0; i < num_elevators; i++) { init_elevator(&controller->elevators[i], i); } } void add_request_to_controller(ElevatorController *controller, int floor) { // 选择离请求最近的电梯来服务该请求 Elevator *elevator = NULL; int min_distance = MAX_FLOORS; for (int i = 0; i < controller->num_elevators; i++) { int distance = abs(controller->elevators[i].current_floor - floor); if (distance < min_distance) { elevator = &controller->elevators[i]; min_distance = distance; } } add_request(elevator, floor); } void run_controller(ElevatorController *controller) { // 运行所有电梯 for (int i = 0; i < controller->num_elevators; i++) { run_elevator(&controller->elevators[i]); } } int main() { ElevatorController controller; init_controller(&controller, 2); // 添加请求 add_request_to_controller(&controller, 5); add_request_to_controller(&controller, 10); add_request_to_controller(&controller, 3); add_request_to_controller(&controller, 15); // 运行调度算法 run_controller(&controller); return 0; } ``` 在这个示例中,`Elevator` 结构体表示一个电梯,包含了当前楼层、运行方向和等待服务的请求等信息,而 `ElevatorController` 结构体则负责将新请求分配给最近的空闲电梯,并运行所有电梯直到所有请求都得到服务。算法的具体实现是每次选择距离请求最近的电梯,并根据当前请求和电梯状态来调整电梯运行方向和停靠位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值