实验2

#include"stdio.h"

#include"stdib.h"

#include"string.h"

typedef struct process       
{
 char name;
 int arrive;
 int prio;
 int needTime;
 
}Process;

void input(Process a[],int n){        int i;
 for(i=0;i<n;i++)
 {
  printf("输入%d个进程:",i+1);
  scanf("%c",&a[i].name);
  printf("输入%d个进程的优先级:",i+1);
        scanf("%d",&a[i].prio);
        printf("输入%d个进程的到达时间:",i+1);
        scanf("%d",&a[i].arrive);
  printf("输入%d个进程的需要时间:",i+1);
  scanf("%d",&a[i].needTime);
        getchar();
  printf(" ");
 }
}

void sort(Process a[],int n)
{
   int i,j;
   Process temp;
   for(i=0;i<n;i++)
    for(j=i;j<N;j++)
    {
     if(a[j].prio>a[i].prio) 

     {
      temp=a[j];
      a[j]=a[i];
      a[i]=temp;

     }
     if(a[j].prio==a[i].prio)  

     {
      if(a[j].arrive<a[i].arrive)
      {
               temp=a[j];
      a[j]=a[i];
      a[i]=temp;
      }
     }
    }
}
void output(Process a[],int n)  
{
   int i;
   printf("进程排序结果: ");
   printf("name prio needTime ");
   for(i=0;i<n;i++)
   {
        printf("%c %d %d ",a[i].name,a[i].prio,a[i].needTime);
  
   }
}

/*void running(Process a[N])
{
 int i,j,x=0,y=0,z=0;
   
   Process ready[M],wait[M],finished[M];
   for(i=0;i<N;i++)
   {
       ready[x]=a[i];x++;
       for(j=i;i<N;j++)
    {
          wait[y]=a[j];y++;
    }
    if(a[i].needTime==0)
    {
    finished[z]=a[i];
    z++;
    }

   }
   for(i=0;i<x;i++)
    printf("%c %d %d %d ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
   for(i=0;i<y;i++)
     printf("%c %d %d %d ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
   for(i=0;i<z;i++)
    printf("%c %d %d %d ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
  
}*/
               void go(Process a[],int n)
{
   int i=0;
   while(a[i].needTime>=0&&a[i].prio>=0)
   {   
    if(a[i].needTime==0)
    {
      a[i].prio=-1;
   printf("进程%c已执行结束! ",a[i].name);
   printf("--------------------------- ");
   i=i+1;
   if(a[i].needTime==0)
   {
    printf("进程%c已执行结束! ",a[i].name);
    i=i+1;
   }
    }
    if(a[i].prio ==0)
    {
     while(a[i].needTime!=0)
     {
        a[i].needTime--;
     }
    }
    a[i].needTime--;                
    a[i].prio--;
   
    printf("现在执行的进程信息: ");
    printf("name prio needTime ");
    printf("%c %d %d ",a[i].name,a[i].prio,a[i].needTime);
    printf("------------------------- ");
    sort(a,n);         
    output(a,n);       
    printf(" ");
      
   }
  
   
}


main(){
 int n;
 Process a[N];
 printf("想输入多少进程信息: ");
 scanf("%d",&n);
 getchar();
     input(a,n);
  sort(a,n);
  output(a,n);
  go(a,n);

}

原文地址:https://www.cnblogs.com/dachui/p/5438959.html