大佬救救我这个计算机学生吧

为什么运行出来的结果都是一样的呢?可以帮忙修改一下吗?

#include <stdio.h>
#include <stdlib.h>
void FCFS(int current, int requests[], int size){
    int i, distance = 0;
    for(i = 0; i < size; i++){
        distance += abs(requests[i] - current);
        current = requests[i];
    }
    printf("FCFS调度顺序:\n");
    for(i = 0; i < size; i++)
        printf("%d ", requests[i]);
    printf("\n平均寻道长度:%d\n", distance);
}
int min(int a, int b, int c){
    int min = a;
    if(b < min) min = b;
    if(c < min) min = c;
    return min;
}
void SSTF(int current, int requests[], int size){
    int i, distance = 0, next = -1;
    for(i = 0; i < size; i++){
        if(requests[i] >= current){
            if(next == -1 || abs(requests[i] - current) < abs(next - current)){
                next = requests[i];
            }
        }
    }
    if(next != -1){
        distance += abs(next - current);
        current = next;
    }else{
        distance = 0; // 如果没有下一个请求,那么不需要移动磁头,距离为0。
    }
    printf("SSTF调度顺序:\n");
    for(i = 0; i < size; i++)
        if(requests[i] == next) printf("* %d ", next); // 标记*表示下一个要服务的请求。
        else printf("%d ", requests[i]);
    printf("\n平均寻道长度:%d\n", distance);
}
void SCAN(int current, int requests[], int size){
    int direction = 1; // 初始方向为正向(从低到高)或反向(从高到低)
    int i, distance = 0;
    for(i = 0; i < size; i++){
        if(direction == 1 && requests[i] > current) direction = -1; // 如果方向是正向,且下一个请求在反向方向,改变方向。
        else if(direction == -1 && requests[i] < current) direction = 1; // 如果方向是反向,且下一个请求在正向方向,改变方向。
        distance += abs(requests[i] - current); // 计算距离并累加到总距离上。
        current = requests[i]; // 更新当前磁头位置。
    }
    printf("SCAN调度顺序:\n");
    for(i = 0; i < size; i++) printf("%d ", requests[i]); // 打印出所有的调度顺序。
    printf("\n平均寻道长度:%d\n", distance); // 打印出总的平均寻道长度。
}
void CSCAN(int current, int requests[], int size){
    int direction = 1; // 初始方向为正向(从低到高)或反向(从高到低)
    int i, distance = 0;
    int start = current; // 记录起始位置,用于确定移动方向。
    for(i = 0; i < size; i++){
        if(direction == 1 && requests[i] > current) direction = -1; // 如果方向是正向,且下一个请求在反向方向,改变方向。同时将起始位置移动到当前位置的下一个位置。
        else if(direction == -1 && requests[i] < current) direction = 1; // 如果方向是反向,且下一个请求在正向方向,改变方向。同时将起始位置移动到当前位置的前一个位置。
        distance += abs(requests[i] - current); // 计算距离并累加到总距离上。同时将起始位置移动到当前位置。
        current = requests[i]; // 更新当前磁头位置。同时将起始位置移动到当前位置。
    }
    printf("C-SCAN调度顺序:\n");
    printf("\n平均寻道长度:%d\n", distance); // 打印出总的平均寻道长度。同时将起始位置移动到当前位置的前一个位置。
    
    }
    
    int main(){
    
    int current = 100; // 当前磁头位置
    
    int requests[] = {55,58,39,18,90,160,150,38,184}; // 请求序列
    
    int size = sizeof(requests)/sizeof(requests[0]); // 请求序列的长度
    
    FCFS(current, requests, size);
    
    SSTF(current, requests, size);
    
    SCAN(current, requests, size);
    
    CSCAN(current, requests, size);
    
    return 0;
    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值