#include<stdio.h> #include<stdlib.h> #define MAX 100 struct Proc { char Name[4]; int StartTime; int NeedTime; int RunTime; int EndTime; double DQZZ_Time; }; Proc proc[MAX]; int sum_Time=0; double sum_DQ=0; int ReadFile() { int i=0; FILE *fp; fp=fopen("1.txt","r"); if(fp==NULL) { printf("打开文件失败! "); exit(0); } else { while(!feof(fp)) { fscanf(fp,"%s",&proc[i].Name); fscanf(fp,"%d",&proc[i].StartTime); fscanf(fp,"%d",&proc[i++].NeedTime); } fclose(fp); } i--; return i; } void Show(int num) { int i; printf("进程名 进入时间 运行时间 "); for(i=0;i<num;i++) { printf("%6s%8d%10d ",proc[i].Name,proc[i].StartTime,proc[i].NeedTime); } printf(" "); } //先来先服务算法计算 void FIFS(int num) { int i,j; for(i=0;i<num;i++) { //第一个进程 if(i==0) { proc[i].RunTime=proc[i].NeedTime; proc[i].EndTime=proc[i].StartTime+proc[i].RunTime; } else { if(proc[i].StartTime>proc[i-1].EndTime) { proc[i].RunTime=proc[i].NeedTime; proc[i].EndTime=proc[i].StartTime+proc[i].RunTime; } else { proc[i].RunTime=proc[i].NeedTime+proc[i-1].EndTime-proc[i].StartTime; proc[i].EndTime=proc[i].StartTime+proc[i].RunTime; } } proc[i].DQZZ_Time=proc[i].RunTime*1.0/proc[i].NeedTime; sum_Time+=proc[i].RunTime; sum_DQ+=proc[i].DQZZ_Time; if(i==0) printf("%s Runing.... Others Waiting.... ",proc[i].Name); else { printf("%s Runing.... ",proc[i].Name); for(j=0;j<i;j++) { printf("%s ",proc[j].Name); } printf("is Finished.... "); } } } //显示计算结果 void Result(int num) { int i; printf("进程名 进入时间 结束时间 执行时间 周转时间 带权周转时间 "); for(i=0;i<num;i++) { printf("%6s%8d%10d%10d%10d%12.2lf ",proc[i].Name,proc[i].StartTime; proc[i].EndTime,proc[i].NeedTime,proc[i].RunTime,proc[i].DQZZ_Time); } printf("平均周转时间为:%.2lf ",sum_Time*1.0/num); printf("平均带权周转时间为:%.2lf ",sum_DQ*1.0/num); printf(" "); } int main() { int num; num=ReadFile(); //记录进程个数 Show(num); FIFS(num); printf("先来先服务算法得到的结果如下: "); Result(num); system("pause"); return 0; }
暂时还运行不了,还在调试中。