用C语言编程实现“先来先服务(FCFS)”算法模拟作业调度,输出平均周转时间、平均带权周转时间

** 用C语言编程实现“先来先服务(FCFS)”算法模拟作业调度,输出平均周转时间、平均带权周转时间**

要求:按作业的到达顺序输入各作业需要的运行时间,按算法调度输出平均周转时间。
例如(FCFS),输入:8(到达时间0), 5(到达时间2),7(到达时间3),1(到达时间6)

作业到达时间开始时间运行时间结束时间周转时间
J100888
J22851311
J331372017
J462012115

提示:
带权周转时间(Wi)=周转时间/运行时间
平均带权周转时间=累计带权周转时间和/作业个数

输出:
平均周转时间=(8+(13-2)+(20-3)+(21-6))/4=51/4
平均带权周转时间=(8/8+11/5+17/7+15/1)/4=5.157(大约)

#include <stdio.h>

int zhouzhuan(int ch[],int sh[],int num);
int main()
{
	int ch[4]={0,2,3,6};   //到达时间的实参数组,可自己给出
	int sh[4]={8,5,7,1};   //运行时间的实参数组,可自己给出
	int num=sizeof(ch)/sizeof(ch[0]); //求出数组中的元素个数,即作业个数
	zhouzhuan(ch,sh,num);
}

int zhouzhuan(int ch[] ,int sh[],int num) 
{
	int i;
	int rt[100];  //运行时间
	int at[100];  //到达时间
	int et[100];  //结束时间
	int ct[100];  //周转时间
	float dq[100];  //带权周转时间=作业周转时间/作业执行时间
	float totaltime; //周转时间
	float avgtime; //平均周转时间
	float totaldaiquan;//所有作业的带权周转时间累计和
	float avgdaiquan;  //平均带权周转时间

	for(i=0;i<num;i++)   
	{
		at[i]=ch[i];     //初始化到达时间数组
		rt[i]=sh[i];     //初始化运行时间数组
		printf("p%d:rt=%d,at=%d\n",i+1,rt[i],at[i]);
	}

	printf("FCFS:\n");

	for(i=0;i<num;i++)
	{
		if(i==0)   //i=0时是第一个到达
		{	
			et[i]=rt[i]+at[i];   //第一个到达的,其结束时间就等于运行时间+到达时间

		}

		else if(at[i]<=et[i-1])  //当目前到达的作业在上一个作业结束前或刚好结束的时候就到达了,此时上一个作业的结束时间就是目前这个作业的开始时间
		{
			et[i]=et[i-1]+rt[i];    //结束时间=开始时间+运行时间 ,又因为这里的开始时间是上一个作业的结束时间,所以 结束时间=上一个作业的结束时间+这个作业的运行时间

		}

       //可能前一个已经运行结束,但是后一个还没有到达(也可能) 
		else 
		{
			et[i]=at[i]+rt[i];  //结束时间=开始时间+运行时间。因为这个作业,在它上一个作业完成之后都没有到达,所以她的开始时间就是自己的开始时间
		}
	    ct[i]=et[i]-at[i];   //周转时间=结束时间-到达时间
		dq[i]=(float)ct[i]/(float)rt[i];	//带权周转时间=作业周转时间/作业执行时间
		printf("p%d:到达时间=%d,运行时间=%d,结束时间=%d,周转时间=%d,带权周转时间=%.2f \n",i+1,at[i],rt[i],et[i],ct[i],dq[i]);
	}

	totaltime=0; //先设置一个初始值,不然计算会出错,赋垃圾值
	totaldaiquan=0; //先设置一个初始值,不然计算会出错,赋垃圾值

	for(i=0;i<num;i++)
	{	
		totaltime+=(float)ct[i];    //累计周转时间
	    totaldaiquan+=(float)dq[i];  //累计带权周转时间

	}


	avgtime=totaltime/num;    //平均周转时间
	avgdaiquan=totaldaiquan/num;   //累计平均周转时间

	printf("Total cycling time of FCFS is:%.2f\n",totaltime);
	printf("Average cycling time of FCFS is:%.2f.\n",avgtime);
	printf("Total daiquan time of FCFS is:%.2f\n",totaldaiquan);
	printf("Average daiquan time of FCFS is:%.2f\n",avgdaiquan);
	return 0;
	
}
  • 4
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值