📄 zuoyetiaodu2.cpp
字号:
#include<iostream>
#include<stdio.h>
#define getb(type) (type *)malloc(sizeof(type))
#define NULL 0
typedef struct JCB{//定义作业控制块JCB
char name[10];//作业名
int stime;//开始运行时刻
int rtime;//需要运行时间,即提供服务的时间
char state;//作业状态
JCB *next;//链指针
}JCB;
JCB *ready=NULL,*p;
int T;//时间量
int ttime;//总周转时间
float trtime;//总的带权周转时间
void sort()//构造链表存放作业
{JCB *fir,*sec;
if(ready==NULL){ready=p;}
else{
fir=ready->next;
if(fir==NULL){sec=ready;}
else{
while(fir!=NULL){
sec=fir;fir=fir->next;
} }
sec->next=p;
}}
void init()//输入作业参数
{int i,num;
printf("输入作业数:");
scanf("%d",&num);//输入作业数
for(i=0;i<num;i++){printf("输入第%d个作业的信息:\n",i+1);
p=getb(JCB);
printf("作业名:");
scanf("%s",p->name);
printf("开始运行时刻:");
scanf("%d",&p->stime);
printf("需要运行时间:");
scanf("%d",&p->rtime);
p->state='w';//每个作业的初始状态总是等待W
p->next=NULL;
sort();
}
T=0;//时间量
ttime=0;//总周转时间
trtime=0;//总的带权周转时间
getchar();//接收字符
}
int length()//链表长
{int i=0;
JCB *q;
q=ready;
while(q!=NULL){i++;q=q->next;}
return i;
}
void destroy(int end)//完成作业
{ int i=end;
float W;
printf("\n作业完成时间:%d",i);
printf("\n周转时间:%d",i-(p->stime));
W=(float)(i-(p->stime))/(float)(p->rtime);//带权周转时间=周转时间/提供服务的时间
printf("\n带权周转时间:%2.2f",W);
}
void run()//运行作业
{ int start,end;
start=T;//初始值为0
end=(p->rtime)+start;//作业完成时间=运行时间+开始运行时刻
ttime+=end-p->stime;//总周转时间=完成时间-开始运行时刻
trtime+=(float)(end-(p->stime))/(float)(p->rtime);//总的带权周转时间
T+=p->rtime;
destroy(end);
}
void main()//主函数
{ int len,count;
count=0;
printf("\t\tcopyright:林庆达 计算机03(7)班");
printf("\n\t ******作业调度算法:先来先服务(FCFS)******\n");
init();//初始化数据
len=length();//就绪作业的长度
printf("\npress any key to continue ...");
getchar();
while((len!=0)&&(ready!=NULL)){//若就绪队列不为空
count++;
p=ready;
printf("\n正在执行的作业是: %s.",p->name);
ready=ready->next;
p->next=NULL;
p->state='r';
run();
printf("\npress any key to continue ...");
getchar();
}
printf("\n所有作业全部完成运行!\n");
printf("平均周转时间为:%3.2f\n",(float)ttime/(float)count);//总周转时间/作业数
printf("平均带权周转时间为:%3.2f\n",trtime/(float)count);//总的带权周转时间/作业数
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -