📄 cipandiaodu.c
字号:
#include"stdio.h"
#include"stdlib.h"
#define maxsize 100
void FCFS(int shuzu[],int m)/*先来先服务函数*/
{ int sum=0,j,i,n;
printf("please input the current disk number: ");
scanf("%d",&n);
for( i=0;i<m;i++)
{ printf("---->%d ",shuzu[i]); }
sum=abs(n-shuzu[0]);
for(i=0,j=1;j<m;i++,j++)
{ sum+=abs(shuzu[j]-shuzu[i]); }
printf("\n the sum of move:%d ",sum);/*输出磁头臂移动总数*/
}
void Order(int array[],int m)
{ int i,j,temp;
for(i=0;i<m-1;i++)
for(j=i;j<m;j++)
{ if(array[i]>array[j])
{ temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}/*排序*/
void SSTF(int array[],int m)/*最短寻道时间优先函数*/
{ int temp,k=0, now,l,r,i,j,sum=0;
Order(array, m);
printf("please input the current disk number: ");
scanf("%d",&now);
if(array[m-1]<=now )
{ sum+=now-array[m-1];
for(i=m-1;i>=0;i--)
{ printf("---->%d ",array[i]);
if(i>0) sum+=array[i]-array[i-1];
}
} /*如果磁头大于所有数*/
else
if(array[0]>=now)
{ sum+=array[0]-now;
for(i=0;i<m;i++)
{ printf("---->%d ",array[i]);
if(i<m-1) sum+=array[i+1]-array[i];
}
} /*如果磁头小于所有数*/
else
{ while(array[k]<now)
{ k++; } /*判断磁头的位置*/
i=k-1;
r=k;
while((i>=0)&&(r<m))
{ if((now-array[i])<=(array[r]-now))
{ printf("---->%d ",array[i]);
sum+=now-array[i];
now=array[i];
i--;
}
else
{ printf("---->%d ",array[r]);
sum+=array[r]-now;
now=array[r];
r++;
}
}
if(i==-1)
{ sum+=array[r]-array[0];
for(j=r;j<m;j++)
{ printf("---->%d ",array[j]);
if(j<m-1)
sum+=array[j+1]-array[j];
}
}
else
{ sum+=array[m-1]-array[i];
for(j=i;j>=0;j--)
{ printf("---->%d ",array[j]);
if(j>0) sum+=array[j]-array[j-1];
}
}
}
printf("\nthe sum of move: %d ",sum);/*输出磁头臂移动总数*/
}
void Elevator(int array[],int m) /*电梯算法*/
{ int temp,k=0,now,l,r,d ,i,j,sum=0;
Order(array, m);
printf("please input the current disk number: ");
scanf("%d",&now);
if(array[m-1]<=now)
{ sum=now-array[m-1];
for(i=m-1;i>=0;i--)
{ printf("---->%d ",array[i]);
if(i>0) sum+=array[i]-array[i-1];
}
}/*如果磁头大于所有数*/
else
if(array[0]>=now)
{ sum=array[0]-now;
for(i=0;i<m;i++)
{ printf("---->%d ",array[i]);
if(i<m-1) sum+=array[i+1]-array[i];
}
}/*如果磁头小于所有数*/
else
{ while(array[k]<now)
{ k++; }/*判断磁头的位置*/
l=k-1;
r=k;
printf("please input the current direction of move(0 is inside,1 is outside): ");
scanf("%d",&d);/*输入磁头臂移动方向*/
if(d==0)
{ sum=now-array[l];
for(j=l;j>=0;j--)
{ printf("---->%d ",array[j]);
if(j>0) sum+=array[j]-array[j-1];
}
sum+=array[r]-array[0];
for(j=r;j<m;j++)
{ printf("---->%d ",array[j]);
if(j<m-1) sum+=array[j+1]-array[j];
}
}
else
{ sum=array[r]-now;
for(j=r;j<m;j++)
{ printf("---->%d ",array[j]);
if(j<m-1) sum+=array[j+1]-array[j];
}
sum+=array[m-1]-array[l];
for(j=l;j>=0;j--)
{ printf("---->%d ",array[j]);
if(j>0) sum+=array[j]-array[j-1];
}
}
}
printf("\nthe sum of move: %d ",sum);/*输出磁头臂移动总数*/
}
void main()
{ int c,n, cidao[maxsize], i=0, count,shuzu[maxsize];
printf("please input the work's count:");
scanf("%d",&count); /*输入请求队列的个数*/
printf("\nplease input %d figures",count);
printf("\nplease input the disk required queue:\n");
for(;i<count;i++)
{ scanf("%d",&cidao[i]);
shuzu[i]=cidao[i];
} /*输入磁盘请求队列*/
for(i=0;i<count;i++)
{ printf("%5d",cidao[i]); }
while(1)
{ printf("\n_____________________________________________________________________");
printf("\nthe system menu:\n");
printf("1. FCFS 2. SSTF 3. Elevator 4.exit\n");
printf("please choose:");
scanf("%d",&c);
switch(c)
{ case 1: FCFS(shuzu,count); break;
case 2: SSTF(cidao,count); break;
case 3: Elevator(cidao,count); break;
case 4: exit(0);
default: break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -