今天又是待了一天的机房,代码没少敲,改进设计一中的短作业调度进程的算法。感觉感触挺大的,因为,很久没有这么认真去对待一件事情了,后果便是:感触颇深——只要你认真和专注地去做一件事情,结果肯定会出来的。
附上短作业调度的c语言代码:
#include<stdio.h> struct sjf { char name[10]; //进程名 float arrivetime; //到达时间 float servicetime;//服务时间 float starttime; //开始时间 float finishtime;//完成时间 float zztime;//周转时间 float dqzztime;//带权周转 }; sjf p[100]; void Sinput(sjf *p, int N) { int i; printf("输入进程名称,到达时间,服务时间:\n"); for (i = 0; i<N; i++) { printf("输入第%d进程的名称,到达时间,服务时间:", i+1); scanf("%s%f%f", &p[i].name, &p[i].arrivetime, &p[i].servicetime); } } void Sprint(sjf *p, int N) { int k; printf("run order:"); printf("%s",p[0].name); for(k=1;k<N;k++) { printf("-->%s",p[k].name); } printf("\nname\tarrive\tservice\tstart\tfinish\tzztime\tdqzztime\n"); for(k=0;k<=N-1;k++) { printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime, p[k].servicetime,p[k].starttime,p[k].finishtime,(p[k].finishtime-p[k].arrivetime), ((p[k].finishtime-p[k].arrivetime)/p[k].servicetime)); } } void Ssort(sjf *p, int N) { for (int i = 1; i < N; i++) { for (int j = 1; j <= i; j++) { if((p[i].arrivetime<=p[j].arrivetime)) { if(p[i].servicetime<p[j].servicetime) { sjf temp; temp = p[i]; p[i] = p[j]; p[j] = temp; } } } } } void Sdeal(sjf *p,int N,float arrivetime,float servicetime,float finishtime) { int k; for(k=0;k<=N;k++) { if(k==0){ p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime;} else{ p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime;} } } void SJF(sjf *p, int N) { float arrivetime=0,servicetime=0,finishtime=0; Ssort(p, N); Sdeal(p,N,arrivetime,servicetime,finishtime); Sprint(p, N); } int main() { int M; printf("短作业优先调度算法\n"); printf("输入进程数:"); scanf("%d", &M); Sinput(p, M); SJF(p, M); }
调试过之后没啥问题了,