先来先服务调度算法和短作业优先调度算法.docx
先来先服务调度算法和短作业优先调度算法先来先服务调度算法和短作业优先调度算法 #include <stdio.h> struct fcfs /定义进程的结构体 char name10; /进程名 float arrivetime; /到达时间 float servicetime; /服务时间 float starttime; /开始时间 float finishtime; /完成时间 float zztime; /周转时间 float dqzztime; /带权周转时间 ; struct sjf /定义进程的结构体 char name10; /进程名 float arrivetime; /到达时间 float servicetime; /服务时间 float starttime; /开始时间 float finishtime; /完成时间 float zztime; /周转时间 float dqzztime; /带权周转时间 ; fcfs a100; /定义先来先服务算法进程的最大数量 sjf b100; /定义短作业优先算法进程的最大数量 void Finput(fcfs *p,int N) /输入函数 int i; printf("intput the process's name & arrivetime & servicetime:nfor exmple: a 0 100n"); for(i=0;i<=N-1;i+) printf("input the %dth process's information:n",i+1); scanf("%s%f%f",&pi.name,&pi.arrivetime,&pi.servicetime); /输出函数 void FPrint(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) int k; printf("nrun order:n"); printf("%s",p0.name); for(k=1;k<N;k+) printf("->%s",pk.name); printf("nnthe process's information:n"); printf("nnametarrivetservicetstarttfinishtzztdqzznn"); for(k=0;k<=N-1;k+) printf("%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftnn",pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); void Fsort(fcfs *p,int N) /按到达时间排序,先到达排在前面 for(int i=0;i<=N-1;i+) for(int j=0;j<=i;j+) if(pi.arrivetime<pj.arrivetime) fcfs temp; temp=pi; pi=pj; pj=temp; /运行结果 void Fdeal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) int k; for(k=0;k<=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; /开始时间=前一个进程的完成时间 pk.finishtime=pk-1.finishtime+pk.servicetime; /结束时间=前一个进程的完成时间+现在进程的服务时间 for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; /周转时间=完成时间-到达时间 pk.dqzztime=pk.zztime/pk.servicetime; /带权周转时间=周转时间/服务时间 /先来先服务 void FCFS(fcfs *p,int N) float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; Fsort(p,N); Fdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); FPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); void Sinput(sjf *p,int N) /输入函数 int i; printf("intput the process's name & arrivetime & servicetime:nfor exmple: a 0 100nn"); for(i=0;i<=N-1;i+) printf("input the %dth process's information:n",i+1); scanf("%s%f%f",&pi.name,&pi.arrivetime,&pi.servicetime); /输出函数 void SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) int k; printf("nrun order:n"); printf("%s",p0.name); for(k=1;k<N;k+) printf("->%s",pk.name); printf("nnthe process's information:n"); printf("nnametarrivetservicetstarttfinishtzztdqzzn"); for(k=0;k<=N-1;k+) printf("%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftnn",pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); void Ssort(sjf *p,int N) /按短作业优先算法排序 for(int i=1;i<=N-1;i+) for(int j=1;j<=i;j+) if(pi.servicetime<pj.servicetime) sjf temp; temp=pi; pi=pj; pj=temp; /运行结果 void Sdeal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) int k; for(k=0;k<=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; /开始时间=前一个进程的完成时间 pk.finishtime=pk-1.finishtime+pk.servicetime; /结束时间=前一个进程的完成时间+现在进程的服务时间 for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; /周转时间=完成时间-到达时间 pk.dqzztime=pk.zztime/pk.servicetime; /带权周转时间=周转时间/服务时间 void SJF(sjf *p,int N) float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; Ssort(p,N); Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); void main /主函数 while(1) int n; printf("选择哪种算法?1、先来先服务算法 2、段作业优先算法n"); scanf("%d",&n); if(n=1) /先来先服务算法 int N; printf("-先来先服务调度算法-n"); printf("input the process's number:n"); scanf("%d",&N); Finput(a,N); FCFS(a,N); if(n=2) /短作业优先算法 int M; printf("-短作业优先调度算法-n"); printf("input the process's number:n"); scanf("%d",&M); Sinput(b,M); SJF(b,M); char o; printf("继续工作吗?(Y/N):"); scanf("%s",&o); if(o='Y') continue; if(o='N') break;