📄 workunit.c
字号:
#include <string.h>
#include <stdio.h>
#define N 20
typedef struct
{
char ID[3];/*作业的序号*/
int s_min; /*开始的提交时间*/
int s_hour;
int e_min; /*运行结束时间*/
int e_hour;
int finish; /*作业运行结束的标志:0表示未运行*/
float respond;/*响应比*/
int runtime;/*程序运行时间*/
}workunit;/*作业类型*/
/****************函数声明*********************/
float calrespond(workunit ,int ,int);
void display(char *sort[],int n);
void displayunit(workunit unit[],int );
/****************主函数***********************/
void main()
{
int n_min,n_hour;
char *sort[N];
float highres=0;/*最高响应比*/
int referno=0;
workunit unit[N];
int unitno,i=1,next,j;
printf("输入各作业的信息(作业号,提交时间,运行时间)\n");
printf("当作业号为(*)时,作业序列提交结束!\n");
while(1)
{
printf("作业号:");
scanf("%s",unit[i].ID);
if(unit[i].ID[0]=='*') break;
printf("提交时间:");
scanf("%d:%d",&unit[i].s_hour,&unit[i].s_min);
printf("运行时间:");
scanf("%d",&unit[i].runtime);
unit[i].e_min=unit[i].e_hour=unit[i].finish=0;
unit[i].respond=0.0;
i++;
}
unitno=i-1;
displayunit(unit,unitno);
for(i=1;i<=unitno;)
{
if(i==1)/*第一个作业*/
{
sort[1]=unit[1].ID;
/*strcpy(sort[1],unit[1].ID);*/
n_min=unit[1].e_min=(unit[1].s_min+unit[1].runtime)%60;
n_hour=unit[1].e_hour=unit[1].s_hour+(unit[1].s_min+unit[1].runtime)/60;
unit[1].finish=1;
i++;
}
if(i<=unitno)/*后续的作业*/
{
for(j=2;j<=unitno;j++)
{ if(unit[j].finish==0)/*未完成的作业*/
{
if((unit[j].s_hour<n_hour)||(unit[j].s_hour==n_hour&&unit[j].s_min<n_min))
/*找出已提交的,并且响比最高的作业*/
{
referno++;
unit[j].respond=calrespond(unit[j],n_min,n_hour);
if(unit[j].respond>highres)
{
next=j;
highres=unit[j].respond;
sort[i]=unit[j].ID;
}
}
}
}
if(referno>=1) /*存在已提交的作业*/
{
n_hour=unit[next].e_hour=n_hour+(n_min+unit[next].runtime)/60;
n_min=unit[next].e_min=(n_min+unit[next].runtime)%60;
unit[next].finish=1;
i++;
highres=0;
}
else /*不存在已提交的作业*/
{
sort[i]=unit[i].ID;
n_min=unit[i].e_min=(unit[i].s_min+unit[i].runtime)%60;
n_hour=unit[i].e_hour=unit[i].s_hour+(unit[i].s_min+unit[i].runtime)/60;
unit[i].finish=1;
i++;
}
}
}
for(i=1;i<=unitno;i++) unit[i].respond=(float)((unit[i].e_hour-unit[i].s_hour)*60+(unit[i].e_min-unit[i].s_min))/unit[i].runtime;
printf("\n\n最后的作业信息:\n");
displayunit(unit,unitno);
display(sort,unitno);
getch();
}
/********************函数定义***********************/
float calrespond(workunit temp,int min,int hour)
{
float respond;
int waittime;
waittime=(hour-temp.s_hour)*60+(min-temp.s_min);
respond=(float)(waittime+temp.runtime)/temp.runtime;
return respond;
}
void display(char *sort[],int n)
{
int i;
printf("响应序列:");
for(i=1;i<=n;i++) printf("%s ",sort[i]);
}
void output(int min,int hour)
{
if(hour>=0&&hour<=9) printf("0");
printf("%d:",hour);
if(min>=0&&min<=9) printf("0");
printf("%d",min);
}
void displayunit(workunit u[],int n)
{
int i;
printf("作业号\t提交时间\t结束时间\t响应比\n");
for(i=1;i<=n;i++)
{
printf("%s\t ",u[i].ID);
output(u[i].s_min,u[i].s_hour);printf(" \t ");
output(u[i].e_min,u[i].e_hour);printf("\t\t");
printf("%f\n",u[i].respond);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -