⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scan.cpp

📁 操作系统课程设计,有问题可以联系我!C++代码的实先,OS课设!
💻 CPP
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//先向右扫描再向左扫描
typedef struct node
{
	int data;
	int flag;
}node;

int scan(int cl,int num,node *a)
{  
    
	int i,t,j;
	for(i=0;i<num;i++)//数组按递增排序                                                                                                             
		for(j=i+1;j<num;j++)
			if(a[i].data>a[j].data)
			{
				t=a[i].data;
				a[i].data=a[j].data;
				a[j].data=t;
			}
printf("\n\n磁道调度序列为:\n\n");
	for (i=0;i<num;i++)//向右扫描
	{
		if(a[i].data>cl)
		{ 
			if(a[i].flag==0) 
		  {
			  printf("%d-->\t",a[i].data);
			  if(i%10==0) printf("\n");//每十个数为一行
			  a[i].flag=1;
		  }
		  
		}
	}
	t=abs(cl-a[num-1].data);
	for(i=num-1;i>=0;i--)//向左扫描
	{
		int f=0;f++;
		if(a[i].data<cl)
		{
			if(a[i].flag==0)
			{
				printf("%d-->\t",a[i].data);
                
				if(f%10==0) printf("\n");//每十个数为一行
				a[i].flag=1;
			}
			
		}
	}
	t=t+a[num-1].data-a[0].data;//移动的磁道数
	printf("\n\n移动磁道数为:%d\n",t);
   return 1;
}

int main(int argc,char *argv[])
{
	FILE *fp;int i;int num,location;char temp[20];
	node *serial;
     fp=fopen(argv[1],"r");
	if(fp==NULL)
	{
		printf("Read file failed!");
		return 0;
	}
	fscanf(fp,"%14s%d",temp,&num);//读待访问的磁道数
	printf("%14s%d\n",temp,num);
	fscanf(fp,"%17s%d",temp,&location);//读当前磁头
	printf("%17s%d\n",temp,location);
	fscanf(fp,"%13s",temp);//读待访问的磁道序列
	printf("%13s\n",temp);
	serial=(node *)malloc(num*sizeof(node));//数组长度
	for(i=0;i<num;i++)	
		fscanf(fp,"%d",&(serial[i].data));		
    for(i=0;i<num;i++)
	{
	   printf("%d\t",serial[i].data);
	   serial[i].flag=0;
	}
  fclose(fp);
  scan(location,num,serial);
  free(serial);
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -