标签:
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 }
标签:
原文地址:http://www.cnblogs.com/badgood/p/4468084.html