zoukankan      html  css  js  c++  java
  • 操作系统实验2-作业调度3.0

    1.实验内容和要求

    (1)初始化程序运行界面,实现菜单选项

    (2)选择从文件读取作业

    (3)选择调度算法菜单

    (4)显示调度结果

    2.主要程序段

      1 #include<stdio.h>
      2 
      3 #include<stdlib.h>
      4 #include<string.h>
      5 #include<conio.h>
      6 #include <time.h>
      7 
      8 struct jcb
      9 { 
     10     char name[10];           /* 作业名 */  
     11     char status;             /* 作业状态 */  
     12     
     13     int arrtime;             /* 到达时间 */  
     14     int startime;            /* 开始运行时间 */  
     15     int reqtime;             /* 要求服务时间 */ 
     16     int finitime;            /* 完成时间 */ 
     17     
     18     float TAtime;            /* 周转时间 */  
     19     float TAWtime;           /* 带权周转时间 */  
     20     
     21     float prio;              //优先权
     22     float rp;              //响应比
     23 } jobarr[24],jobfin[24],job[24];    
     24 
     25 void AutoInput(int n,jcb job[]);//调用自己输入模拟数据
     26 int ReadFile();//文件读取
     27 void Finishtime(int n,jcb job[]);//计算结束时间
     28 TAtime(int n,jcb job[],float averageTAtime);//计算周转时间、平均周转时间
     29 TAWtime(int n,jcb job[],float averageTAWtime);//计算带权周转时间、平均带权周转时间
     30 void FCFS(int n,jcb job[]);//先到先服务,按到达时间排序
     31 void SJF(int n,jcb job[]);//短作业优先,按服务时间排序
     32 void HRRF(int n,jcb job[]);//最高响应比优先
     33 void putOutjob(jcb job[],int n);//打印内容
     34 
     35 void main()
     36 {
     37     //    int intarr,intfin,intjob;  /* 到达作业个数,完成作业个数,未到达作业个数 */
     38     float averageTAtime=0;
     39     float averageTAWtime=0;
     40     int n;
     41     int systime=0; 
     42     int i;
     43     int a,b;
     44     printf("1.调用文本写入数据
    2.调用自己输入模拟数据
    ");
     45     scanf("%d",&a);
     46     if(a==1)
     47         ReadFile();
     48     else 
     49         AutoInput(n,job);
     50     
     51     
     52     printf("		************选择调度算法************
    ");
     53     printf("		1.FCFS(先到先服务)算法调度
    		2.SJF(短作业优先)算法调度
    		3.HRRF(最高响应比优先)算法调度
    ");
     54     printf("		************************************
    ");
     55     scanf("%d",&b);
     56     if(b==1)
     57     {
     58         printf("		************FCFS(先到先服务)************
    ");
     59         FCFS(n,job);
     60         printf("
    
    作业名-到达时间-服务时间-开始时间-结束时间-周转时间-带权周转时间
    ");
     61         for(i=0;i<n;i++)
     62         {
     63             printf("%s	%d	%d	%d	%d	%f	%f
    ",job[i].name,job[i].arrtime,job[i].reqtime,job[i].startime,job[i].finitime,job[i].TAtime,job[i].TAWtime);
     64             printf("
    ");
     65         }
     66         printf("
    
    ");
     67     }
     68     
     69     else if(b==2)
     70     {
     71         printf("		************SJF(短作业优先)************
    ");
     72         SJF(n,job);
     73         printf("
    
    作业名-到达时间-服务时间-开始时间-结束时间-周转时间-带权周转时间
    ");
     74         for(i=0;i<n;i++)
     75         {
     76             printf("%s	%d	%d	%d	%d	%f	%f
    ",job[i].name,job[i].arrtime,job[i].reqtime,job[i].startime,job[i].finitime,job[i].TAtime,job[i].TAWtime);
     77             printf("
    ");
     78         }
     79     }
     80     
     81     else if(b==3)
     82     {
     83         printf("		************HRRF(最高响应比优先)************
    ");
     84         HRRF(n,job);
     85         printf("
    
    作业名-到达时间-服务时间-开始时间-结束时间-周转时间-带权周转时间
    ");
     86         for(i=0;i<n;i++)
     87         {
     88             printf("%s	%d	%d	%d	%d	%f	%f
    ",job[i].name,job[i].arrtime,job[i].reqtime,job[i].startime,job[i].finitime,job[i].TAtime,job[i].TAWtime);
     89             printf("
    ");
     90         }
     91     }    
     92     
     93     
     94     
     95     Finishtime(n,job);
     96     averageTAtime=(float)TAtime(n,job,averageTAtime);
     97     averageTAWtime=(float)TAWtime(n,job,averageTAWtime);
     98     
     99     printf("现在系统时间:%d
    ",systime);
    100     printf("平均周转时间=%f
    ",averageTAtime);
    101     printf("平均带权周转时间=%f
    ",averageTAWtime);
    102     
    103 }
    104 
    105 void AutoInput(int n,jcb job[])//调用自己输入模拟数据
    106 {
    107     printf("作业个数:");
    108     scanf("%d",&n);
    109     printf("
    ");
    110     for(int i=0;i<n;i++)
    111     {
    112         printf("第%d个作业:
    ",i+1);
    113         printf("输入作业名称:");
    114         scanf("%s",job[i].name);
    115         printf("到达时间:");
    116         scanf("%d",&job[i].arrtime);
    117         printf("要求服务时间:");
    118         scanf("%d",&job[i].reqtime);
    119         printf("
    ");
    120     }
    121 }
    122 
    123 
    124 
    125 /*
    126 
    127   void putOutjob(jcb job[],int n)//打印内容
    128   {
    129   int i;
    130   printf("
    
    作业名-到达时间-服务时间-开始时间-结束时间-周转时间-带权周转时间
    ");
    131   for(i=0;i<n;i++)
    132   {
    133         printf("%s	%d	%d	%d	%d	%f	%f
    ",job[i].name,job[i].arrtime,job[i].reqtime,job[i].startime,job[i].finitime,job[i].TAtime,job[i].TAWtime);
    134         printf("
    ");
    135         
    136           }
    137           printf("
    
    ");
    138           }
    139           
    140 */
    141 
    142 void FCFS(int n,jcb job[])//先到先服务,按到达时间排序
    143 {
    144     int i,j;
    145     jcb tmp;
    146     for(i=0;i<n-1;i++)
    147         for(j=i+1;j<n;j++)
    148         {
    149             if(job[i].arrtime>job[j].arrtime)
    150             {
    151                 tmp=job[i];
    152                 job[i]=job[j];
    153                 job[j]=tmp;
    154             }
    155         }
    156 }
    157 
    158 
    159 void SJF(int n,jcb job[])
    160 {
    161     int i,j;
    162     jcb tmp;
    163     for(i=0;i<n-1;i++)
    164         for(j=i+1;j<n;j++)
    165         {
    166             if(job[i].reqtime<job[j].reqtime)
    167             {
    168                 tmp=job[i];
    169                 job[i]=job[j];
    170                 job[j]=tmp;
    171             }
    172         }
    173 }
    174 
    175 void HRRF(int n,jcb job[])
    176 {
    177     int i,j;
    178     jcb tmp;
    179     for(i=0;i<n;i++)
    180     {
    181         job[i].rp=job[i].TAtime/job[i].arrtime;
    182     }
    183     for(i=0;i<n-1;i++)
    184         for(j=i+1;j<n;j++)
    185         {
    186             if(job[i].rp>job[j].rp)
    187             {
    188                 tmp=job[i];
    189                 job[i]=job[j];
    190                 job[j]=tmp;
    191             }
    192         }
    193 }
    194 
    195 
    196 void Finishtime(int n,jcb job[])//计算结束时间
    197 {
    198     int i;
    199     for(i=0;i<n;i++)
    200     {
    201         if(i==0)
    202         {
    203             //job[i].startime=job[i].arrtime;
    204             job[i].finitime=job[i].arrtime+job[i].reqtime;
    205             job[i].startime=job[i].finitime;
    206         }
    207         else
    208         {
    209             job[i].finitime=job[i-1].startime+job[i].reqtime;
    210             job[i].startime=job[i].finitime;
    211         }
    212     }
    213 }
    214 
    215 TAtime(int n,jcb job[],float averageTAtime)//计算周转时间、平均周转时间
    216 {
    217     int i;
    218     float sum=0;
    219     for(i=0;i<n;i++)
    220     {
    221         job[i].TAtime=(float)job[i].finitime-job[i].arrtime;
    222         sum=sum+job[i].TAtime;
    223     }
    224     averageTAtime=sum/(float)n;
    225     return averageTAtime;
    226 }
    227 
    228 
    229 TAWtime(int n,jcb job[],float averageTAWtime)//计算带权周转时间、平均带权周转时间
    230 {
    231     int i;
    232     float sum=0;
    233     for(i=0;i<n;i++)
    234     {
    235         job[i].TAWtime=job[i].TAtime/job[i].reqtime;
    236         sum=sum+job[i].TAWtime;
    237     }
    238     averageTAWtime=sum/(double)n;
    239     return averageTAWtime;
    240 }
    241 
    242 int ReadFile()
    243 {
    244     int m=0;
    245     int i=1;
    246     FILE *fp;     //定义文件指针
    247     fp=fopen("3.txt","r");  //打开文件
    248     if(fp==NULL)
    249     {
    250         printf("File open error !
    ");
    251         exit(0);
    252     }
    253     printf("
     作业名称    作业到达时间     作业运行所需要时间
    ");
    254     while(!feof(fp))
    255     {
    256         fscanf(fp,"%d%d%d",&job[i].name,&job[i].arrtime,&job[i].reqtime);  //fscanf()函数将数据读入
    257         printf("
    %3f%12d%15d
    ",job[i].name,job[i].arrtime,job[i].reqtime);  //输出到屏幕
    258         i++;//
    259     };
    260     
    261     if(fclose(fp))     //关闭文件
    262     {
    263         printf("Can not close the file !
    ");
    264         exit(0);
    265     }
    266     m=i-1;
    267     return m;
    268     
    269 }

    运行结果及分析

    仍有一些问题未解决,故最后的输出错误。此次编程是自己摸索的,由于编程能力不足,所以会因为一些小错误卡住很久。还有些问题到现在都无法解决。

    今后的练习中会多向同学学习,弥补自身的不足。

  • 相关阅读:
    leetcode------Clone Graph
    leetcode------Anagrams
    leetcode------Simplify Path
    leetcode------Number of Islands
    leetcode------3Sum Closest
    leetcode------4Sum
    leetcode------3Sum
    leetcode------Binary Tree Right Side View
    leetcode------Word Break
    leetcode------House Robber
  • 原文地址:https://www.cnblogs.com/sr1zsq/p/5420619.html
Copyright © 2011-2022 走看看