标签:
#include<stdio.h> #include<stdlib.h> #define getpch(type)(type*)molloc(sizeof(type)) #define NULL 0 int n; float T1=0;T2=0; int times=0; struct JCB//作业控制块 { char name[15]; int starttime; //开始时间 int reachtime; //到达时间 int needtime; //所需时间 int finishtime; //完成时间 float response; //响应比 float turnaround; //周转时间 float cycletime; //带权周转时间 char state; //作业状态 struct jcb *next; //结构体指针 }*ready=NULL,*p,*q; typedef struct jcb JCB; void queue()//建立作业队列 { int i; printf("\n允许用户指定作业的个数(2-24"),默认值为5:"); scanf("%d,&n"); for(i=0;i<n;i++) { p=getch(JCB); printf("\n请输入作业名:"); scanf("%s,p->name"); getch(); p->reachtime=i; printf("作业到达时间:%d",i); printf("\n作业所需运行时间:"); scanf("%d",&p->needtime); p->state=‘W‘; p->next=NULL; if(ready==NULL) { ready=q=p; } else { q->next=p; q=p; } } } void running(JCB *p,int m)//作业的运行 { if(p==ready) { ready=p->next; p->next=NULL; } else { q=ready; while(q->next!=p) q=q->next; q->next=p->next; } p->starttime=times; p->state=‘R‘; } void final()//最后打印的平均周转时间,平均带权周转时间 { float t,s; t=t1/n; s=t2/n; getch(); printf("\n作业已经全部完成!"); printf("\n%d个作业的平均周转时间是:%f",n,t); printf("\n%d个作业的平均带权周转时间是:%f",n,s); } void fcfs(int m)//先来先服务算法 { int i,iden; system("cls"); queue(); for(i=0;i<n;i++) { p=ready; iden=1; do { if(p->state==‘W‘&&p->reachtime<=times) { iden=0; } if(iden) { p=p->next; } }while(p!=NULL&&iden) if(iden) { i--; printf("\n无满足要求的进程,需要等待"); times++; if(times>100) { printf("\n等待的时间过长!"); getch(); } } else { running(p,m);//调用running函数 } } final();//调用final函数 } main() { printf("请输入你想要选择的算法:"); printf("\n\t先来先服务(FCFS)调度算法"); printf("\n\t短作业优先(SJF)调度算法"); printf("\n\t响应比高者优先(HRRN)调度算法"); queue(); running(); }
总结:先来先服务算法尚未完成,觉得另外两种算法相对于先来先服务算法来说更加难。希望老师在下次上课时能够更加详细一点地说说如何实现另外两种算法。
标签:
原文地址:http://www.cnblogs.com/summer--liumengyun/p/4468102.html