第二章

#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; 
}

暂时还运行不了,还在调试中。

原文地址:https://www.cnblogs.com/VernSean/p/4468096.html