进程调度 短作业优先代码

2019-07-14 06:56发布

#include
#include
struct PCB
{
char name[10];
float arrivetime;
float runtime;
float starttime;
float finishtime;
float zztime;
float dqzztime;
};
PCB a[100];
void input(PCB *p,int N)
{
int i;
printf("请输入进程的名称、到达时间和运行时间: for example:a 0 100 ");
for(i=0;i<=N-1;i++)
{
printf("请输入第%d个进程的信息: ",i+1);
scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].runtime);
}
}
void output(PCB *p,int N)
{
int k;
printf("优先运行顺序:");
printf("%s",p[0].name);
for(k=1;k {
printf("-->%s",p[k].name);
}
printf(" 各个进程的信息: ");
printf(" 名称 到达 运行 开始 完成 周转 带权周转 ");
for(k=0;k {
printf("%s %-.2f %-.2f %-.2f %-.2f %-.2f %-.2f ",p[k].name,p[k].arrivetime,p[k].runtime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
}
}


void sort(PCB *p,int N)
{
for(int i=0;i for(int j=0;j if(p[i].arrivetime {
PCB t;
t=p[i];
p[j]=p[i];
p[j]=t;
}
}
void deal(PCB *p,int N)
{
int k;
 
for(k=0;k {
if(k==0)
{
p[k].starttime=p[k].arrivetime;
p[k].finishtime=p[k].starttime+p[k].runtime;
}
else
{
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k].starttime+p[k].runtime;
}
}
for(k=0;k {
p[k].zztime=p[k].finishtime-p[k].arrivetime;
p[k].dqzztime=p[k].zztime/p[k].runtime;
}
}
void sjff(PCB *p,int N)
{
float arrivetime=0,runtime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;




sort(p,N);//调用sort函数



    for(int m=0;m {
if(m==0)
        p[m].finishtime=p[m].arrivetime+p[m].runtime;
        else 
{
if(p[m-1].finishtime >=p[m].arrivetime )
{
p[m].starttime=p[m-1].finishtime;}
else
{
p[m].starttime =p[m].arrivetime;}
  p[m].finishtime=p[m].starttime+p[m].runtime;
}
int i=0;
        for(int n=m+1;n<=N-1;n++)
{
if(p[n].arrivetime<=p[m].finishtime)
            i++;
}


  
//按运行时间排序
        float min=p[m+1].runtime;
        int next=m+1;//m+1=n
        for(int k=m+1;k {
          if(p[k+1].runtime          {
 min=p[k+1].runtime;
              next=k+1;
 }
            
}
            PCB temp;
            temp=p[m+1];
            p[m+1]=p[next];
            p[next]=temp;
}
        
   deal(p,N);
   
   output(p,N);
}


void main()
{
int M;
printf("----短作业优先调度算法---- ");
printf("请输入进程数目:");
scanf("%d",&M);
    input(a,M);
    sjff(a,M);

}