/*非抢占式高优先级调度算法(优先数越大级别越高)算法思想:在按进程达到时间由小到大的顺序输入进程信息后,先对其优先数进行排列,将最先到达的进程的到达时间设为开始时间,计算结束时间,然后对后面到达的时间与该进程的结束时间进行比较,如若小于该进程的结束时间,记录进程的个数,再对其优先数逐个进行比较,将优先数最大的提到前面,每次进程结束都要进行比较,得到执行序列,在依次输出结果*/#includestdio.h#defineMAX100structhrfs{charname[10];floatarrvitetime;floatstarttime;floatservietime;floatfinishtime;intpriority;//优先数intorder;//进程执行次序intrun_flag;//标记进程状态};hrfsp[MAX];intcount;//排列到达时间//按到达时间与优先数计算执行序列voidHRfs(){floattemp_time=0;inti=0,j;intk,temp_count;intmax_priority;max_priority=p[i].priority;j=1;while((jcount)&&(p[i].arrvitetime==p[j].arrvitetime)){if(p[j].priorityp[i].priority){max_priority=p[j].priority;i=j;}j++;}k=i;p[k].starttime=p[k].arrvitetime;//开始时间=达到时间p[k].finishtime=p[k].starttime+p[k].servietime;p[k].run_flag=1;temp_time=p[k].finishtime;p[k].order=1;temp_count=1;while(temp_countcount){max_priority=0;for(j=0;jcount;j++){//判断到达时间是否小于上一个进程的结束时间并且非处在运行状态if((p[j].arrvitetime=temp_time)&&(!p[j].run_flag))//判断进程优先数是否大于最大优先数,如果大于,就将其值赋给max_priorityif(p[j].prioritymax_priority){max_priority=p[j].priority;k=j;}}p[k].starttime=temp_time;p[k].finishtime=p[k].starttime+p[k].servietime;p[k].run_flag=1;temp_time=p[k].finishtime;temp_count++;p[k].order=temp_count;}}voidinput(){inti;printf(\n请输入进程名到达时间运行时间优先数,例如:a01001\n);for(i=0;icount;i++){printf(进程%d的信息:,i+1);scanf(%s%f%f%d,p[i].name,&p[i].arrvitetime,&p[i].servietime,&p[i].priority);p[i].starttime=0;p[i].finishtime=0;p[i].order=0;p[i].run_flag=0;}}voidprint(){inti;floatturn_round_time=0,f1,w=0;floatright_turn_round_time;printf(\n-------------------------------进程完成信息------------------------------------\n);printf(进程名优先级达到时间运行时间开始时间结束时间周转时间带权周转时间运行次序\n);for(i=0;icount;i++){f1=p[i].finishtime-p[i].arrvitetime;turn_round_time+=f1;right_turn_round_time=f1/p[i].servietime;w+=(f1/p[i].servietime);printf(%s%5d%10.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8d\n,p[i].name,p[i].priority,p[i].arrvitetime,p[i].servietime,p[i].starttime,p[i].finishtime,f1,right_turn_round_time,p[i].order);}printf(平均周转时间=%5.2f\n,turn_round_time/count);printf(平均带权周转时间=%5.2f\n,w/count);}voidmain(){printf(---------------------------非抢占式高优先级调度算法----------------------------\n);printf(进程个数:);scanf(%d,&count);input();HRfs();print();}