#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;
}
后期还会更新另一个小改变的做法,欢迎关注,谢谢!!