实验二

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #define MAX    100
  4 struct job
  5 {
  6     char name[10];  //作业名
  7     int reachtime;   //作业到达时间
  8     int starttime;   //作业开始时间
  9     int needtime;   //作业运行时间
 10     int zztime;   //作业周转时间
 11     int endtime;   //作业完成时间
 12     double zzxs;   //周转系数
 13     char state;    //作业状态
 14 };
 15 typedef struct job JOB;
 16 
 17 void input(JOB job[],int *jnum)
 18 {
 19     int i,num;
 20     printf("请输入作业个数:");
 21     scanf("%d",&num);
 22     for(i=0;i<num;i++)
 23     {
 24         printf("\n请输入第%d个作业的名称:",i+1);
 25         scanf("%s",&job[i].name);
 26         printf("\n请输入第%d个作业的到达时间:",i+1);
 27         scanf("%d",&job[i].reachtime);
 28         printf("\n请输入第%d个作业的运行时间:",i+1);
 29         scanf("%d",&job[i].needtime);
 30         job[i].state='W';
 31     }
 32     *jnum=num;
 33 }
 34 void btsort(JOB btjob[],int n) //按作业到达时间排序
 35 {
 36     int i,j;
 37     JOB jobtemp;
 38     for(j=1;j<n;j++)
 39     {
 40         for(i=0;i<n-1;i++)
 41         {
 42             if(btjob[i].reachtime>btjob[j].reachtime)
 43             {
 44             jobtemp=btjob[i];
 45             btjob[i]=btjob[j];
 46             btjob[j]=jobtemp;
 47             }
 48         }
 49     }
 50 }
 51 void btsortarrived(JOB btjob[],int n) //按作业执行时间排序
 52 {
 53     int i,j;
 54     JOB jobtemp;
 55     for(j=1;j<n;j++)
 56     {
 57         for(i=0;i<n-1;i++)
 58         {
 59             if(btjob[i].needtime>btjob[j].needtime)
 60             {
 61             jobtemp=btjob[i];
 62             btjob[i]=btjob[j];
 63             btjob[j]=jobtemp;
 64             }
 65         }
 66     }
 67 }
 68 void NotarrToArr(JOB notarrived[],int *pnumnotarr,JOB arrived[],int *pnumarr,int systime)
 69 //按照系统时间,将小于等于系统时间的作业放入后背队列
 70 {
 71     int j;
 72     while((*pnumnotarr>0)&&(notarrived[0].reachtime<=systime))
 73     {
 74         arrived[*pnumarr]=notarrived[0];
 75         (*pnumnotarr)--;
 76         (*pnumarr)++;
 77         for(j=0;j<*pnumnotarr;j++)
 78         notarrived[j]=notarrived[j+1];
 79     }
 80 }
 81 void jobfinprintf(JOB pjob[],int n)
 82 {
 83     int i;
 84     printf("作业名称 到达时间 运行时间 开始时刻 完成时刻 周转时间 周转系数\n");
 85     for(i=0;i<n;i++)
 86     {
 87         printf("    %s        %d        %d       %d        %d         %d      %.1f\n",pjob[i].name,pjob[i].reachtime,pjob[i].needtime,pjob[i].starttime,pjob[i].endtime,pjob[i].zztime,pjob[i].zzxs);
 88     }
 89 }
 90 void jobprint(JOB job[],int n)    //输出数组中的作业
 91 {
 92     int i;
 93     printf("作业名称\t提交时间\t运行时间");
 94     for(i=0;i<n;i++)
 95     {
 96         printf("\n%s\t\t%d\t\t%d",job[i].name,job[i].reachtime,job[i].needtime);
 97     }
 98 }
 99 main()
100 {
101     JOB jobarrived[MAX],jobfinished[MAX],jobnotarrived[MAX];
102     int numarr=0,numfin=0,numnotarr;
103     int systime=0;
104     JOB jobrunning;
105     int j;
106     input(jobnotarrived,&numnotarr);
107     printf("用户输入的原始数据\n");
108     jobprint(jobnotarrived,numnotarr);
109     systime=0;
110     while(jobnotarrived[0].reachtime>systime)
111     {
112         printf("\n当前系统时间为:%d\n\n",systime);
113         system("pause");
114         systime++;
115     }
116     printf("按先来先服务算法进行调度!\n");
117     while(numnotarr>0||numarr>0)
118     {
119         printf("\n当前系统时间为:%d\n\n",systime);
120         NotarrToArr(jobnotarrived,&numnotarr,jobarrived,&numarr,systime);
121         system("pause");
122         if(numnotarr>0)
123         {
124             printf("还未进入后备队列的作业:\n");
125             jobprint(jobnotarrived,numnotarr);
126         }
127         if(numarr==0) systime++;
128         if(numarr>0)
129         {
130             printf("\n进入后备队列的作业:\n");
131             //input(jobarrived,numarr);
132             jobprint(jobarrived,numarr);
133             jobrunning=jobarrived[0];
134             for(j=0;j<numarr;j++)
135                 jobarrived[j]=jobarrived[j+1];
136             numarr--;
137             jobrunning.state='R';
138             jobrunning.starttime=systime;
139             jobrunning.endtime=jobrunning.starttime+jobrunning.needtime;
140             jobrunning.zztime=jobrunning.endtime-jobrunning.reachtime;
141             jobrunning.zzxs=(jobrunning.zztime*1.0)/(jobrunning.needtime*1.0);
142             printf("\n处于运行的作业为:%s\n",jobrunning.name);
143             jobfinished[numfin]=jobrunning;
144             numfin++;
145             systime=systime+jobrunning.needtime;
146             printf("已经完成的作业:\n");
147             jobfinprintf(jobfinished,numfin);
148             system("pause");
149         }
150     }
151 }

原文地址:https://www.cnblogs.com/badgood/p/4468084.html