• 大小: 0.01M
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 其他  

资源简介

.c

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

typedef char string[10];  //定义string为含有10个字符元素的字符数组类型

struct task {
string name;   //作业名称*
int arrTime;   //作业到达时间*
int serTime;   //作业要求服务时间*
int waiTime;   //等待时间
int begTime;   //开始运行时间
int finTime;   //结束运行时间
int turTime;   //周转时间
double priority;  //优先权 
int finish;    //是否已经完成 finish=0表示没有完成 finish=1表示已经完成
}JCB[10];    //定义JCB为包含十个结构体的数组

void print(int iint timesint a);

int num;  //记录输入的作业数量 
int FIFO_waitTime=0;
int HRN_waitTime=0;

void init()//初始化
{
int i;
FIFO_waitTime=0;
HRN_waitTime=0;
for(i=0;i {
JCB[i].begTime=0;
JCB[i].finTime=0;
JCB[i].waiTime=0;
JCB[i].turTime=0;
JCB[i].finish=0;
}
}

/***************录入作业信息****************/   
void input()
{
int i;
    system(“cls“);
printf(“\n请输入作业数量: “);
scanf(“%d“ &num);
for(i=0;i {
printf(“\n请输入作业 NO.%d:\n“i+1);
printf(“  作业名称: \t“);
scanf(“%s“JCB[i].name);
printf(“  到达时间: \t“);
scanf(“%d“&JCB[i].arrTime);
printf(“  服务时间: \t“);
scanf(“%d“&JCB[i].serTime);
JCB[i].priority = 1; //初始化每个作业的优先权都为1
JCB[i].finish =0;
}
}

/***************************先来先服务算法***********************/
void FIFO()
{
int SturTime=0;
int ij;
int maxmax_j;
struct task t;
//按照到达时间排序
for(j=0;j {
max=JCB[j].arrTime;
max_j=j;
for(i=j;i {
if(JCB[i].arrTime {
max=JCB[i].arrTime;
max_j=i;
}
}
t=JCB[max_j];
JCB[max_j]=JCB[j];
JCB[j]=t;
}
for(i=0;i {
if(i==0){
JCB[i].begTime=JCB[i].arrTime;
JCB[i].waiTime=0;
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
}else{

if(JCB[i-1].finTime-JCB[i].arrTime>0){  
//表明在上一个作业被调度后,当前作业已经在后备队列中了
JCB[i].waiTime=JCB[i-1].finTime-JCB[i].arrTime;
JCB[i].begTime=JCB[i-1].finTime;
}else{
JCB[i].waiTime=0;
JCB[i].begTime=JCB[i].arrTime;
}
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
}
FIFO_waitTime+=JCB[i].waiTime;
JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;
SturTime+=JCB[i].turTime;
}
for(i=0;i {
if(i==0)
print(i20);
else
print(i10);
}
printf(“等待时间总和:\t%d“FIFO_waitTime);
printf(“\t平均周转时间:\t%d\n“SturTime/num);
}


/******************最高响应比优先算法*****************/
void HRN()
{
int pre;
int SturTime=0;
int current;//记录当前操作的作业的下标
int count=1ijSserviceTimeRelativeMinSerTime=INT_MAX;
double min=INT_MINmax=INT_MAX;
int startTime;
//第一个被调度的作业就是最先到达的那个几个
for(i=0;i {
if(JCB[i].arrTime {
max=JCB[i].arrTime;
current=i;
}
}
for(i=0;i {
if(JC

评论

共有 条评论