进程调度算法#include"stdio.h"#define N 50int n; int sj; struct Gzuo{ int id; //进程名字 int dt; //到达时刻 int st; //服务时间 int wct; //完成时刻 int st2; //标志是否完成 float zt; //周转时间 float dczt; //带权周转时间 }; Gzuo a[N]; void input(Gzuo a[]) { printf("请输入进程个数:"); scanf("%d",&n); for(int i=0;i=0;j--) { for(i=0;ia[i+1].dt) { min=a[i].dt; a[i].dt=a[i+1].dt; a[i+1].dt=min; min=a[i].st; a[i].st=a[i+1].st; a[i+1].st=min; min=a[i].st2; a[i].st2=a[i+1].st2; a[i+1].st2=min; min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min; } } } time = a[0].dt; //printf("赋值后TIME值为:%d\n",time); min = 0; //控制5个进程循环 while(min0&&a[i].dt<=time) flag=false; } for(i=0;i 0 ){ if(a[i].dt<=time) { a[i].st2 = a[i].st2 - sj;//printf("当前a[%d].st2值为:%d\n",i,a[i].st2); printf("运算后当前a[%d].st2值为:%d\n",i,a[i].st2); 剩余所需服务时间 time = time + sj; //printf("当前TIME值为:%d\n",time); printf("增加之后TIME值为:%d\n",time); //已服务时间 if(a[i].st2<=0) { a[i].wct = time + a[i].st2; a[i].zt=(float)(a[i].wct-a[i].dt); //周转=完成-到达 a[i].dczt=a[i].zt/a[i].st; //带权=周转/服务 min++; } } else if(flag){ for(i=0;i0&&a[i].dt>time){ time=a[i].dt; break; } } } } } } printf("\n进程:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"); sum1=0; sum2=0; for(j=0;j=0;j--){ for(i=0;ia[i+1].dt){ min=a[i].dt; a[i].dt=a[i+1].dt; a[i+1].dt=min; min=a[i].st; a[i].st=a[i+1].st; a[i+1].st=min; min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min; } } } a[0].wct=a[0].st+a[0].dt; a[0].zt=(float)a[0].st; a[0].dczt=a[0].zt/a[0].st; for(i=1;ia[i-1].wct){ a[i].wct=a[i].dt+a[i].st; a[i].zt=(float)a[i].st; a[i].dczt=a[i].zt/a[i].st; } else{ //后到《=前完 a[i].wct=a[i-1].wct+a[i].st; a[i].zt=(float)(a[i].wct-a[i].dt); a[i].dczt=a[i].zt/a[i].st; } } printf("\n进程:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"); sum1=0; sum2=0; for(j=0;j=0;j--){ //按到达时间进行排序 for(i=0;ia[i+1].dt){ min=a[i].dt; a[i].dt=a[i+1].dt; a[i+1].dt=min; min=a[i].st; a[i].st=a[i+1].st; a[i+1].st=min; min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min; } //到达相等看服务时间 if(a[i].dt==a[i+1].dt&&a[i].st>a[i+1].st){ min=a[i].dt; a[i].dt=a[i+1].dt; a[i+1].dt=min; min=a[i].st; a[i].st=a[i+1].st; a[i+1].st=min; min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min; } } } a[0].wct=a[0].st+a[0].dt; //先得到a[0]的三个时间 a[0].zt=(float)a[0].st; a[0].dczt=a[0].zt/a[0].st; for(i=1;ia[0].wct) ; else b=b+1; //a[i]的到达时间《=a[0]完成时间,b为个数 } for(j=b-1;j>=1;j--){ for(i=1;ia[i+1].st){ min=a[i].dt; a[i].dt=a[i+1].dt; a[i+1].dt=min; min=a[i].st; a[i].st=a[i+1].st; a[i+1].st=min; min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min; } } } //计算三个时间 for(i=1;ia[i-1].wct){ a[i].wct=a[i].dt+a[i].st; a[i].zt=(float)a[i].st; a[i].dczt=a[i].zt/a[i].st; } else{ a[i].wct=a[i-1].wct+a[i].st; a[i].zt=(float)(a[i].wct-a[i].dt); a[i].dczt=a[i].zt/a[i].st; } for(j=i+1,b=j;ja[i].wct) ; else b=b+1; } for(j=b-1;j>=i;j--){ for(z=i;za[z+1].st){ min=a[z].dt; a[z].dt=a[z+1].dt; a[z+1].dt=min; min=a[z].st; a[z].st=a[z+1].st; a[z+1].st=min; min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min; } } } } printf("\n进程:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"); sum1=0; sum2=0; for(j=0;j