使用c语言编写程序,实现短作业优先调度算,对作业进行调度。当前时间为0点,时间单位为分钟。程序通过命令行读入作业信息,输入格式见注1。将调度结果输出到屏幕上,输出格式见注2,输出结果包括作业ID、作业开始时间、作业结束时间、周转时间和带权周转时间。作业包括以下信息:任务ID、作业到达时间、作业开始时间、作业服务时间,作业结束时间。
注1:命令行读入作业信息格式如下:
1 0 2
2 2 4
…
一行表示一个作业,数字间以空格作为分隔符,三个数字分别表示作业ID、作业到达时间、作业服务时间。第一行 1 0 2 表示,任务ID为1,到达时间为0点,需要的服务时间为2分钟。
注2:调度结果输出格式为:
1 0 2 2 1
…
一行表示一个作业,数字间以空格作为分隔符,五个数字分别表示作业ID、作业开始时间、作业结束时间、周转时间、带权周转时间。第一行1 0 2 2 1表示,任务ID为1,开始时间为0点,作业结束时间为0点开始2分钟后,作业周转时间为2分钟,带权周转时间为1。
#include#include struct job{ int id; //作业的id int starttime; //作业到达系统时间 int needtime; //作业服务时间 int endtime; //作业结束时间 int runtime; //作业周转时间 double dqzztime; //带权周转时间 }; main(){ struct job jobs[50]; int n,i; //n个作业 printf("输入作业个数:"); scanf("%d",&n); printf("输入每个作业的ID,到达时间,服务时间:n"); for(i=0;i jobs[i+1].starttime){ //把到达时间早的赋值到min min=jobs[i].starttime; jobs[i].starttime=jobs[i+1].starttime; jobs[i+1].starttime=min; //把到达时间早的赋值到min min=jobs[i].needtime; jobs[i].needtime=jobs[i+1].needtime; jobs[i+1].needtime=min; temp = jobs[i].id; jobs[i].id = jobs[i+1].id; jobs[i+1].id = temp;//在temp数组中排序 } } jobs[0].endtime=jobs[0].starttime+jobs[0].needtime;//结束时间=到达时间+服务时间 jobs[0].runtime=jobs[0].needtime;//周转时间=服务时间 jobs[0].dqzztime=jobs[0].runtime*1.0/jobs[0].needtime;//带权周转时间=周转时间/服务时间 for(i=1;i jobs[0].endtime) ; //作业到达系统时,第0个作业还在运行 else b=b+1; //用b统计需等待作业0运行的作业个数 } for(i=1;i<=b-1;i++){ if(jobs[i].needtime>jobs[i+1].needtime){ min=jobs[i].starttime; jobs[i].starttime=jobs[i+1].starttime; jobs[i+1].starttime=min; min=jobs[i].needtime; jobs[i].needtime=jobs[i+1].needtime; jobs[i+1].needtime=min; temp = jobs[i].id; //将第二个参数的值复制给第一个参数,返回第一个参数 jobs[i].id = jobs[i+1].id; jobs[i+1].id = temp; } //按最短运行时间排序 } for(i=1;i jobs[i-1].endtime){ //第i个进程到达系统时,第i-1个进程已运行完毕 jobs[i].endtime=jobs[i].starttime+jobs[i].needtime; jobs[i].runtime=jobs[i].needtime; }else{ jobs[i].endtime=jobs[i-1].endtime+jobs[i].needtime; jobs[i].runtime=jobs[i].endtime-jobs[i].starttime; } jobs[i].dqzztime=jobs[i].runtime*1.0/jobs[i].needtime; } printf("作业名 到达时间 运行时间 完成时间 周转时间 带权周转时间n"); for(i=0;i 测试用例
5
1 0 4
2 1 3
3 2 5
4 3 2
5 4 4结果:



