yqz
作者:
违鑫
,
2022-11-10 12:02:06
,
所有人可见
,
阅读 134
#include <stdio.h>
struct process{
char id[5];
int sever_time;
int arrive_time;
int start_time;
int end_time;
int turn_time;
int flag;
float Jratio;
}P[5];
int N=5;
int Time=0;
void sort() {
int i,j;
struct process temp;
for (i = 0; i < N-1; i++) {
for (j = i+1; j < N; j++) {
if (P[i].arrive_time > P[j].arrive_time) {
temp = P[i] ;
P[i] = P[j];
P[j] = temp;
}
}
}
}
void dispatch() {
int i,j;
struct process temp;
for (i = 0; i < N-1; i++) {
for (j = i+1; j < N; j++) {
if (P[i].start_time > P[j].start_time) {
temp = P[i] ;
P[i] = P[j];
P[j] = temp;
}
}
}
}
int main(){
float max;
printf("请分别输入5个作业的作业号、到达时间、服务时间\n");
for(int i=0;i<N;i++){
P[i].flag=1;
scanf("%s%d%d",P[i].id,&P[i].arrive_time,&P[i].sever_time);
}
for(int q=0;q<N;q++){
if(q==0){
P[q].start_time = Time;
P[q].end_time= Time + P[q].sever_time;
Time = Time + P[q].sever_time;
P[q].flag=0;
P[q].turn_time = Time - P[q].arrive_time;
}
else{
max = 0;
for(int j=1;j<N;j++){
if(P[j].flag == 1){
P[j].Jratio= (Time - P[j].arrive_time)/P[j].sever_time + 1;
if(P[j].Jratio > max)
max = P[j].Jratio;
}
}
for(int k=0;k<N;k++){
if(P[k].Jratio == max && P[k].flag == 1){
P[k].start_time = Time;
P[k].end_time= Time + P[k].sever_time;
Time = Time + P[k].sever_time;
P[k].flag=0;
P[k].turn_time = Time - P[k].arrive_time;
P[k].flag = 0;
}
}
}
}
printf("输出根据高相应比调度的作业表\n");
printf("作业号 到达时间 服务时间 开始运行时间 结束运行时间 周转时间\n");
for(int i=0;i<N;i++){
printf("%s%10d%10d%12d%15d%12d\n",P[i].id,P[i].arrive_time,P[i].sever_time,P[i].start_time,P[i].end_time,P[i].turn_time);
}
printf("\n");
dispatch();
printf("调度顺序为:");
for(int i=0;i<N;i++){
printf("%s ",P[i].id);
}
printf("\n");
float ave_turntime=0;
for(int i=0;i<N;i++){
ave_turntime += P[i].turn_time;
}
ave_turntime = ave_turntime/N;
printf("平均周转时间为:%f\n",ave_turntime);
return 0;
}