?? 21.c
字號(hào):
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct jcb {
char name[10];
char state;/*狀態(tài)*/
int atime; /*到達(dá)時(shí)刻*/
int ntime; /*所需時(shí)間*/
int ctime; /*完成時(shí)刻*/
int stime; /*開始時(shí)刻*/
int ttime; /*周轉(zhuǎn)時(shí)間*/
float bttime;/*帶權(quán)周轉(zhuǎn)時(shí)間 */
struct jcb* link;
}*ready=NULL,*p,*q;
typedef struct jcb JCB;
float wtime=0,wttime=0,wbttime=0;
sort()
{ if(ready==NULL)
{
p->link=ready;
ready=p;
q=p;
}
else
{ q->link=p;
q=p;
}
}
input()
{ int i,num;
clrscr(); /*清屏*/
printf("\n 請(qǐng)輸入作業(yè)數(shù):");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("\n 作業(yè)號(hào)No.%d:\n",i);
p=getpch(JCB);
printf("\n 輸入作業(yè)名:");
scanf("%s",p->name);
printf("\n 輸入作業(yè)所需時(shí)間:");
scanf("%d",&p->ntime);
printf("\n");
p->atime=i;
p->state='w';
p->link=NULL;
sort(); /* 調(diào)用sort函數(shù)*/
}
}
int space()
{
int l=0; JCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
disp1(JCB* pr) /*建立作業(yè)顯示函數(shù),用于顯示當(dāng)前作業(yè)*/
{
printf("\n作業(yè)名|狀態(tài)|開始時(shí)刻|完成時(shí)刻|周轉(zhuǎn)時(shí)間|帶權(quán)周轉(zhuǎn)時(shí)間 \n");
printf("%s\t",pr->name);
printf("%c\t",pr->state);
printf("%d\t",pr->stime);
printf("%d\t",pr->ctime);
printf("%d\t",pr->ttime);
printf("%f\t",pr->bttime);
printf("\n");
}
disp2(JCB* pr) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/
{
printf("\n作業(yè)名 |狀態(tài)|到達(dá)時(shí)刻 |所需時(shí)間 \n");
printf("%s\t",pr->name);
printf("%c\t",pr->state);
printf("%d\t",pr->atime);
printf("%d\t",pr->ntime);
printf("\n");
}
check() /* 建立作業(yè)查看函數(shù) */
{
JCB* pr;
pr=ready;
printf("\n ****當(dāng)前就緒隊(duì)列狀態(tài)為:\n"); /*顯示就緒隊(duì)列狀態(tài)*/
while(pr!=NULL)
{
disp2(pr);
pr=pr->link;
}
}
destroy() /*建立作業(yè)撤消函數(shù)(作業(yè)運(yùn)行結(jié)束,撤消作業(yè))*/
{
printf("\n 作業(yè) [%s] 已完成.\n",p->name);
free(p);
}
running()
{ p->stime=wtime;
p->ctime=p->stime+p->ntime;
p->ttime=p->ctime-p->atime;
p->bttime=(float)p->ttime/(float)p->ntime;
wtime=wtime+p->ntime;
/*printf("時(shí)間:%f",wtime);*/
wttime=wttime+p->ttime;
wbttime=wbttime+p->bttime;
printf("\n **** 當(dāng)前正在運(yùn)行的作業(yè)是:%s",p->name); /*顯示當(dāng)前運(yùn)行作業(yè)*/
disp1(p);
destroy();
}
main() /*主函數(shù)*/
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("\n The execute number:%d \n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
running();
check();
printf("\n 按任一鍵繼續(xù)......");
ch=getchar();
}
printf("\n\n 作業(yè)已經(jīng)完成.\n");
printf("\n該次作業(yè)調(diào)度平均周轉(zhuǎn)時(shí)間:%f\n",wttime/len);
printf("\n該次作業(yè)調(diào)度帶權(quán)平均周轉(zhuǎn)時(shí)間:%f\n",wbttime/len);
ch=getchar();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -