📄 实验一进程调度:短作业优先.c
字号:
#include "stdlib.h"
#include "stdio.h"
#define GetJcb(type) (type*)malloc(sizeof(type))
struct jcb{
char name[10];
int ctime; //进程到达时间
int btime; //进程开始时间
int ntime; //进程所需时间
int Tc; //进程完成时间
int Ti; //进程周转时间
float Wi; //进程带权周转时间
struct jcb *link;
} *ready =NULL, *p;
typedef struct jcb JCB;
void input();
void running();
void sort();
void disp(JCB *pr);
int j=0; //定义一个全局变量,用来记录一组进程中进程的最迟到达时间
//**************************************************************
void main()
{ int T=0;
char c;
input();
while(ready!=NULL)
{
c=getchar();
p=ready;
ready=p->link;
p->link=NULL;
p->btime=T;
T=T+(p->ntime);
disp(p);
running();
printf("\n按任意键继续...");
c=getchar();
}
printf("\n\n进程已完成.\n");
c=getchar();
}
//***************************************************************
void input()//输入进程
{
int i,num;
system("cls");
printf("*********************************************\n");
printf("\n");
printf(" 短 作 业 优 先 调 度 \n");
printf("\n");
printf("*********************************************\n");
printf("\n请输入要运行的进程数:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("\n请输入进程%d:\n",i+1);
p=GetJcb(JCB);
printf("\n进程是名字是:");
scanf("%s",p->name);
printf("\n进程的到达时间是:");
scanf("%d",&p->ctime);
printf("\n进程所需的时间是:");
scanf("%d",&p->ntime);
printf("\n");
p->link=NULL;
sort();
if(j==0) j=p->ctime;
else if(j<p->ctime) j=p->ctime;
}
}
/*********************************************************/
void sort()//进程排队
{ JCB *fir,*sec;
int ins=0;
if((ready==NULL)||((p->ntime)<(ready->ntime)))
{p->link=ready;
ready=p;
}
else{fir=ready;
sec=fir->link;
while(sec!=NULL)
{
if((p->ntime)<(sec->ntime))
{
p->link=sec;
fir->link=p;
sec=NULL;
ins=1;
}
else
{
fir=fir->link;
sec=sec->link;
}
}
if(ins==0)fir->link=p;
}
}
/********************************************/
void disp(JCB *pr)//输出进程信息
{
int i=0;
printf("\n正在运行进程名是:[%s]\n",p->name);
if(i==0) i++;
if(i==1)
{pr->Tc=j+(p->btime)+(p->ntime);
pr->Ti=(p->Tc)-(p->ctime);
pr->Wi=((float)(p->Ti))/((float)(p->ntime));
}
else
{pr->Tc=(p->btime)+(p->ntime);
pr->Ti=(p->Tc)-(p->ctime);
pr->Wi=((float)(p->Ti))/((float)(p->ntime));
}
printf("进程到达时间是\t%d\n",pr->ctime);
printf("进程开始时间是\t%d\n",pr->btime);
printf("进程需要时间是\t%d\n",pr->ntime);
printf("进程完成时间是\t%d\n",pr->Tc);
printf("进程周转时间是\t%d\n",pr->Ti);
printf("进程带权周转时间是\t%f\n",pr->Wi);
printf("\n");
}
//*************************************************
void running()//进程运行并释放
{
while(p->ntime!=0)
(p->ntime)--;
printf("\n进程 [%s] 已完成.\n",p->name);
free(p);
}
//**************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -