• 实验二


      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define MAX    100
      4 struct job
      5 {
      6     char name[10];  //作业名
      7     int reachtime;   //作业到达时间
      8     int starttime;   //作业开始时间
      9     int needtime;   //作业运行时间
     10     int zztime;   //作业周转时间
     11     int endtime;   //作业完成时间
     12     double zzxs;   //周转系数
     13     char state;    //作业状态
     14 };
     15 typedef struct job JOB;
     16 
     17 void input(JOB job[],int *jnum)
     18 {
     19     int i,num;
     20     printf("请输入作业个数:");
     21     scanf("%d",&num);
     22     for(i=0;i<num;i++)
     23     {
     24         printf("\n请输入第%d个作业的名称:",i+1);
     25         scanf("%s",&job[i].name);
     26         printf("\n请输入第%d个作业的到达时间:",i+1);
     27         scanf("%d",&job[i].reachtime);
     28         printf("\n请输入第%d个作业的运行时间:",i+1);
     29         scanf("%d",&job[i].needtime);
     30         job[i].state='W';
     31     }
     32     *jnum=num;
     33 }
     34 void btsort(JOB btjob[],int n) //按作业到达时间排序
     35 {
     36     int i,j;
     37     JOB jobtemp;
     38     for(j=1;j<n;j++)
     39     {
     40         for(i=0;i<n-1;i++)
     41         {
     42             if(btjob[i].reachtime>btjob[j].reachtime)
     43             {
     44             jobtemp=btjob[i];
     45             btjob[i]=btjob[j];
     46             btjob[j]=jobtemp;
     47             }
     48         }
     49     }
     50 }
     51 void btsortarrived(JOB btjob[],int n) //按作业执行时间排序
     52 {
     53     int i,j;
     54     JOB jobtemp;
     55     for(j=1;j<n;j++)
     56     {
     57         for(i=0;i<n-1;i++)
     58         {
     59             if(btjob[i].needtime>btjob[j].needtime)
     60             {
     61             jobtemp=btjob[i];
     62             btjob[i]=btjob[j];
     63             btjob[j]=jobtemp;
     64             }
     65         }
     66     }
     67 }
     68 void NotarrToArr(JOB notarrived[],int *pnumnotarr,JOB arrived[],int *pnumarr,int systime)
     69 //按照系统时间,将小于等于系统时间的作业放入后背队列
     70 {
     71     int j;
     72     while((*pnumnotarr>0)&&(notarrived[0].reachtime<=systime))
     73     {
     74         arrived[*pnumarr]=notarrived[0];
     75         (*pnumnotarr)--;
     76         (*pnumarr)++;
     77         for(j=0;j<*pnumnotarr;j++)
     78         notarrived[j]=notarrived[j+1];
     79     }
     80 }
     81 void jobfinprintf(JOB pjob[],int n)
     82 {
     83     int i;
     84     printf("作业名称 到达时间 运行时间 开始时刻 完成时刻 周转时间 周转系数\n");
     85     for(i=0;i<n;i++)
     86     {
     87         printf("    %s        %d        %d       %d        %d         %d      %.1f\n",pjob[i].name,pjob[i].reachtime,pjob[i].needtime,pjob[i].starttime,pjob[i].endtime,pjob[i].zztime,pjob[i].zzxs);
     88     }
     89 }
     90 void jobprint(JOB job[],int n)    //输出数组中的作业
     91 {
     92     int i;
     93     printf("作业名称\t提交时间\t运行时间");
     94     for(i=0;i<n;i++)
     95     {
     96         printf("\n%s\t\t%d\t\t%d",job[i].name,job[i].reachtime,job[i].needtime);
     97     }
     98 }
     99 main()
    100 {
    101     JOB jobarrived[MAX],jobfinished[MAX],jobnotarrived[MAX];
    102     int numarr=0,numfin=0,numnotarr;
    103     int systime=0;
    104     JOB jobrunning;
    105     int j;
    106     input(jobnotarrived,&numnotarr);
    107     printf("用户输入的原始数据\n");
    108     jobprint(jobnotarrived,numnotarr);
    109     systime=0;
    110     while(jobnotarrived[0].reachtime>systime)
    111     {
    112         printf("\n当前系统时间为:%d\n\n",systime);
    113         system("pause");
    114         systime++;
    115     }
    116     printf("按先来先服务算法进行调度!\n");
    117     while(numnotarr>0||numarr>0)
    118     {
    119         printf("\n当前系统时间为:%d\n\n",systime);
    120         NotarrToArr(jobnotarrived,&numnotarr,jobarrived,&numarr,systime);
    121         system("pause");
    122         if(numnotarr>0)
    123         {
    124             printf("还未进入后备队列的作业:\n");
    125             jobprint(jobnotarrived,numnotarr);
    126         }
    127         if(numarr==0) systime++;
    128         if(numarr>0)
    129         {
    130             printf("\n进入后备队列的作业:\n");
    131             //input(jobarrived,numarr);
    132             jobprint(jobarrived,numarr);
    133             jobrunning=jobarrived[0];
    134             for(j=0;j<numarr;j++)
    135                 jobarrived[j]=jobarrived[j+1];
    136             numarr--;
    137             jobrunning.state='R';
    138             jobrunning.starttime=systime;
    139             jobrunning.endtime=jobrunning.starttime+jobrunning.needtime;
    140             jobrunning.zztime=jobrunning.endtime-jobrunning.reachtime;
    141             jobrunning.zzxs=(jobrunning.zztime*1.0)/(jobrunning.needtime*1.0);
    142             printf("\n处于运行的作业为:%s\n",jobrunning.name);
    143             jobfinished[numfin]=jobrunning;
    144             numfin++;
    145             systime=systime+jobrunning.needtime;
    146             printf("已经完成的作业:\n");
    147             jobfinprintf(jobfinished,numfin);
    148             system("pause");
    149         }
    150     }
    151 }

  • 相关阅读:
    (算法)Hanoi Problem汉诺塔问题
    (剑指Offer)面试题48:不能被继承的类
    (剑指Offer)面试题47:不用加减乘除做加法
    (剑指Offer)面试题46:求1+2+3+....+n
    (剑指Offer)面试题45:圆圈中最后剩下的数字
    程序员应该知道的15件事 在生活与工作中用他们来警惕自己
    基于REST架构的Web Service设计
    互联网上五个最高级的搜索引擎
    哈佛经济学家关于工作效率的意外发现
    列举一些常见的系统系能瓶颈 Common Bottlenecks
  • 原文地址:https://www.cnblogs.com/badgood/p/4468084.html
Copyright © 2020-2023  润新知