📄 cipandiaodusuanfa.cpp
字号:
#include "stdio.h"
#define maxsize 100
#include"stdlib.h"
#include "time.h"
int cidao[maxsize];
ra()
{
int i,k,n;
srand((unsigned)time(NULL));
for(i=1;i<101;i++)
{
k=rand();
n=k%40;
if(n>=0&&n<20)
cidao[i]=k%500;
else if(n<30)
cidao[i]=500+k%500;
else
cidao[i]=1000+k%500;
}
}/*产生随机磁道序列*/
void FCFS(int array[101],int n)
{
int i,j;
int sum=0;
printf("\n请输入当前的磁道号: ");///array[0]
scanf("%d",&array[0]);
for(i=0,j=1;i<n;i++,j++)
{
sum+=array[j]>array[i]?array[j]-array[i]:array[i]-array[j];
}
printf("移动的总道数:%d\n",sum);
}
void SSTF(int array[101],int n)
{
int t,k,l;
int now,min,max;
int i,j,sum=0,sign=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(array[i]>array[j])
{
t=array[i];
array[i]=array[j];
array[j]=t;
}
}/*排序*/
printf("\n请输入当前的磁道号: ");
scanf("%d",&now);
printf("i=%d ",i);
max=array[100];
min=array[1];
if(now<min)sum+=max-now;
else if(now>max)sum+=now-min;
else
{
if((now-min)<(max-now)){sum+=now+max-min*2;}
else if((now-min)>(max-now)){sum+=max*2-now-min;}
else sum+=3*(max-min)/2;
}
printf("移动的总道数: %d\n",sum);
return;
}
void SCAN(int array[101],int n)
{
int t;
int now,min,max;
int i,j,sum=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]>array[j])
{
t=array[i];
array[i]=array[j];
array[j]=t;
}
}
}/*排序*/
printf("\n请输入当前的磁道号: ");
scanf("%d",&now);
printf("i=%d ",i);
max=array[0];
min=array[0];
for(i=1;i<=100;i++)
{
if(max<array[i])max=array[i];
if(min>array[i])min=array[i];
}
sum+=now+max-min*2;
printf("移动的总道数: %d\n",sum);
return;
}
void CSCAN(int array[101],int n)
{
int t,k;
int now,max,min;
int i,j,sum=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]>array[j])
{
t=array[i];
array[i]=array[j];
array[j]=t;
}
}
}/*排序*/
printf("\n请输入当前的磁道号:");
scanf("%d",&now);
int mid;
for(i=1;i<101;i++)
{
if(now<array[i])
{
break;
}
}
mid=i;
printf("i=%d ",i);
max=array[100];
min=array[1];
if(now<min)sum+=max-now;
else if(now>max)sum+=now-min;
else
{
sum=max-now+array[mid-1]-min;
}
printf("移动的总道数: %d\n",sum);
return;
}
void LOOK(int array[101],int n)
{
int t,k;
int now,max,min;
int i,j,sum=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]>array[j])
{
t=array[i];
array[i]=array[j];
array[j]=t;
}
}
}/*排序*/
printf("\n请输入当前的磁道号:");
scanf("%d",&now);
int mid=0;
for(i=1;i<101;i++)
{
if(now<array[i])
{
break;
}
}
mid=i;
printf("i=%d ",i);
max=array[100];
min=array[1];
if(now<min)sum+=1499;
else sum+=1499+now-array[mid-1];
printf("移动的总道数: %d\n",sum);
return;
}
void main()
{
int c;
int i=0,count=101;
ra();
printf("产生的随机序列为:\n");
for(i=1;i<101;i++)
printf("%5d",cidao[i]);
printf("\n");
while(1)
{
printf("系统的菜单如下:\n");
printf("1.先来先服务FCFS 2.最短寻道时间优先SSTF 3.扫描SCAN");
printf("\n");
printf("4.单向扫描CSCAN 5.循环LOOK 6.退出");
printf("\n");
printf("请选择:\n");
scanf("%d",&c);
if(c>5)
break;
switch(c)
{
case 1:
FCFS(cidao,count);
break;
case 2:
SSTF(cidao,count);
break;
case 3:
SCAN(cidao,count);
break;
case 4:
CSCAN(cidao,count);
break;
case 5:
LOOK(cidao,count);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -