代码如下
运行如图
本文链接:https://liuyanzhao.com/4694.html
- /*
- @author WellsLiu
- @url liuyanzhao.com
- */
- #include"stdio.h"
- #include"stdlib.h"
- typedef struct PCB //定义进程控制块
- { char name[10]; //进程名
- char state; //运行状态
- int ArriveTime; //到达时间
- int StartTime; //进程开始时间
- int FinishTime; //进程结束时间
- int ServiceTime; //服务时间
- float WholeTime;//周转时间
- float WeightWholeTime;//带权周转时间
- double AverageWT_FCFS; //平均周转时间
- double AverageWWT_FCFS;//带权平均周转时间
- struct PCB *next; //指向下个进程
- }pcb;
- double x=0,y=0;
- int i;
- int time; //计时器
- int n; //进程个数
- pcb *head=NULL,*p,*q; //进程链表指针
- void run_FCFS(pcb *p1) //运行未完成的进程
- {
- time = p1->ArriveTime > time? p1->ArriveTime:time;
- p1->StartTime=time;
- // printf("\n时刻:%d, 当前开始运行作业%s\n\n",time,p1->name);
- time+=p1->ServiceTime;
- p1->state='T';
- p1->FinishTime=time;
- p1->WholeTime=p1->FinishTime-p1->ArriveTime;
- p1->WeightWholeTime=p1->WholeTime/p1->ServiceTime;
- x+=p1->WholeTime;
- y+=p1->WeightWholeTime;
- p1->AverageWT_FCFS=p1->WholeTime/n;
- p1->AverageWWT_FCFS=p1->WeightWholeTime/n;
- printf("%4s %6d %10d %10d %8d %10.1f %10.2f %12.2f %14.2f\n",p1->name,p1->ArriveTime,p1->StartTime,p1->ServiceTime,p1->FinishTime,p1->WholeTime,p1->WeightWholeTime,p1->AverageWT_FCFS,p1->AverageWWT_FCFS);
- }
- void FCFS() //找到当前未完成的进程
- {
- int i;
- p=head;
- printf("\n============================================================================================================\n");
- printf("作业名 到达时间 开始时间 服务时间 完成时间 周转时间 带权周转时间 平均周转时间 平均带权周转时间 \n");
- printf("------------------------------------------------------------------------------------------------------------\n");
- for(i=0;i<n;i++)
- {
- if(p->state=='F')
- {
- q=p; //标记当前未完成的进程
- run_FCFS(q);
- }
- p=p->next;
- }
- printf("\n============================================================================================================\n");
- }
- void getInfo() //获得进程信息并创建进程
- {
- int num;
- printf("\n进程个数:");
- scanf("%d",&n);
- for(num=0;num<n;num++)
- {
- p=(pcb *)malloc(sizeof(pcb));
- printf("依次输入:进程名 到达时间 服务时间\n");
- scanf("%s\t%d\t%d",&p->name,&p->ArriveTime,&p->ServiceTime);
- if(head==NULL)
- {head=p;q=p;time=p->ArriveTime;}
- if(p->ArriveTime < time) time=p->ArriveTime;
- q->next=p;
- p->StartTime=0;
- p->FinishTime=0;
- p->WholeTime=0;
- p->WeightWholeTime=0;
- p->next=NULL;
- p->state='F';
- q=p;
- }
- }
- void main()
- { printf("先来先服务FCFS算法模拟\n");
- getInfo();
- p=head;
- FCFS();
- }
运行如图
本文链接:https://liuyanzhao.com/4694.html
2020年06月21日 12:38:31
这里的x,y起的是什么作用?