为什么运行出来的结果都是一样的呢?可以帮忙修改一下吗?
#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;
}
}