先来先服务算法(FCFS)C语言超详细,小白可入

#include<stdio.h>
#include<string.h>//strcpy()函数的头文件
#define week 3//作业个数 
#define MAX_week 20
//周转时间=作业完成时刻—作业到达时刻;
//带权周转时间=周转时间/服务时间;
//平均周转时间=作业周转总时间/作业个数;
//平均带权周转时间=带权周转总时间/作业个数;
struct job
{
	char name[5];
	int starttime;//到达时间 
	int needtime;//服务时间(不等待情况下,week运行所需时间)
	int runtime;//周转时间
	int endtime;//结束时间
	double dqzz_time;//带权周转时间 	
};
void fcfs(struct job jobs[MAX_week],int n)
{
	int i=0,j=0;
	char t_name[5];
	int t_time;
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(jobs[j].starttime<jobs[i].starttime)
			{//把先到的放前面 
				t_time=jobs[j].starttime;
				jobs[j].starttime=jobs[i].starttime;
				jobs[i].starttime=t_time;
			//把先到的所需的时间也放前面 
				t_time=jobs[j].needtime;
				jobs[j].needtime=jobs[i].needtime;
				jobs[i].needtime=t_time;
            //交换名字
				strcpy(t_name,jobs[j].name);//这个函数就是把后面的字符串赋给前面
				strcpy(jobs[j].name,jobs[i].name);
				strcpy(jobs[i].name,t_name);//在t_name数组中排序
			}
		}
	}
	for(i=0;i<n;i++)
	{
		if(i==0)
		{
			jobs[i].runtime=jobs[i].needtime;//周转时间=服务时间 
			jobs[i].endtime=jobs[i].starttime+jobs[i].runtime;//结束时间=到达时间+周转时间 
		}
		else if(jobs[i].starttime<jobs[i-1].endtime)
		{
			jobs[i].endtime=jobs[i-1].endtime+jobs[i].needtime;
			//该作业的完成时间现在好算,是上个的截止时间+它自身的服务时间 
			jobs[i].runtime=jobs[i].endtime-jobs[i].starttime;
			//周转时间=作业完成时刻—作业到达时刻
		}
		else
		{
			jobs[i].runtime=jobs[i].needtime;
			jobs[i].endtime=jobs[i].starttime+jobs[i].needtime;
		}
		jobs[i].dqzz_time=jobs[i].runtime*1.0/jobs[i].needtime;//带权周转时间=周转时间/服务时间 
//		printf("%d",jobs[i].dqzz_time);//看清楚jobs[i].dqzz_time是double型写成这样就错了!
		printf("\n第%s的作业:第%d个运行\n周转时间为%d\n运行结束的时间%d\n",jobs[i].name,i+1,jobs[i].runtime,jobs[i].endtime);
		printf("带权周转时间%lf",jobs[i].dqzz_time);//(我好蠢又错了,打印是%lf如果写成%d,呢就全是0) 
	 } 
}
int main()
{
//	int week,MAX_week;(乌龙了,这个地方在define定义以后,不能再定义)
	struct job jobs[MAX_week];
	for(int i=0;i<week;i++)
    {
        scanf("%s",jobs[i].name); //作业名
        scanf("%d",&jobs[i].starttime);//到达时间
        scanf("%d",&jobs[i].needtime);//运行(服务时间)时间
    }
	fcfs(jobs,week);
	return 0;
}

后期还会更新另一个小改变的做法,欢迎关注,谢谢!!

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值