栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

短作业优先调度算法-c语言编程实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

短作业优先调度算法-c语言编程实现

使用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;ijobs[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;ijobs[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;ijobs[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

结果: 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号