• 实验二 (3)最短作业优先调度


    #include<stdio.h>
    #define Time int
    #define M 100
    typedef struct process{
        char name[M];//进程名
        int priority;//优先数
        int reachtime;//到达时间
        int needtime;//需要时间
        int usedtime;//已用时间
        int completetime;//完成时间
        int time1;//周转时间内
        int time2;//带权周转时间
       int state;//进程状态
        int Ptime;//时间片大小
    }PCB;      //进程控制块
    int n;
    PCB pcb[M];
    int pTime;
    void print(int n){
        int i;
        printf("################################最短作业优先进程调度############################ ");
        printf("-------------------------------------------------------------------------------- ");
       printf("进程名   需要时间   到达时间       完成时间          周转时间      带权周转时间 ");
       for(i=0;i<n;i++){
        printf("%s %d %d %d %d      %d ",pcb[i].name,pcb[i].needtime,pcb[i].reachtime,pcb[i].completetime,pcb[i].time1,pcb[i].time2);
        
       }
        printf("-------------------------------------------------------------------------------- ");
    }


    void SJsort(int n){
      int i;
      int j;
      int a=0;
      int b;
      PCB temp;
      //判断
      for(b=0;b<n;b++){
          
        a=a+pcb[b].needtime;
        if(a>=pcb[n-1].reachtime){
         
         printf("%d ",b+1);
         break;
        }

      }
       
     
     
      for(i=b+1;i<n;i++){
          for(j=i;j<n;j++){
              if(pcb[i].needtime>pcb[j].needtime){
                   temp=pcb[j];
                  pcb[j]=pcb[i];
                   pcb[i]=temp;
              }
              
          }
      }
     
    }





        void main(){
        int i;
        int j;
        float avertime1=0.00;
        float avertime2=0.00;
        
        PCB temp;
        printf("请输入进程数:");
        scanf("%d",&n);
        for(i=0;i<n;i++){
            printf(" 请输入进程名:");
            scanf("%s",&pcb[i].name);
            
            printf("请输入需要的时间:");
            scanf("%d",&pcb[i].needtime);
            printf("请输入到达的时间:");
            scanf("%d",&pcb[i].reachtime);
        }

    SJsort(n);

    print(n);
    for(i=0;i<n;i++){
    while(pcb[i].needtime!=0){
    printf(" 请按任意键继续...... ");
    printf(" ");
    fflush(stdin);
    getchar();

    printf("                                       当前运行的程序是: ");

    printf("-------------------------------------------------------------------------------- ");
    printf("进程名   需要时间   到达时间       完成时间          周转时间      带权周转时间 ");
    if(i==0){
    pcb[i].completetime=pcb[i].needtime+pcb[i].reachtime;//计算完成时间
    }
    else{
    pcb[i].completetime=pcb[i-1].completetime+pcb[i].needtime;//计算完成时间
    }
    pcb[i].time1=pcb[i].completetime-pcb[i].reachtime;//计算周转时间
    pcb[i].time2=pcb[i].time1/pcb[i].needtime;//计算带权周转时间

    printf("%s %d %d %d %d      %d ",pcb[i].name,pcb[i].needtime,pcb[i].reachtime,pcb[i].completetime,pcb[i].time1,pcb[i].time2);
        
    printf("-------------------------------------------------------------------------------- ");

    pcb[i].needtime=0;
    printf(" ");
    print(n);

    }


    }
    for(i=0;i<n;i++){
        avertime1=avertime1+pcb[i].time1;
         avertime2=avertime2+pcb[i].time2;

    }
    printf("该进程的平均周转时间是:");
    printf("%.2f ",avertime1/n);
    printf("该进程的平均带全周转时间是:");
    printf("%.2f ",avertime2/n);

        printf("                             提示:最短作业优先进程调度结束! ");


    }
       

  • 相关阅读:
    为什么新买的音响连接上电脑后有很强的杂音(电流声)?
    USB2.0 Camera驱动
    如何重命名多张图片的名称
    网络共享:[25]组策略
    线刷宝“华为荣耀畅玩7 (DUA-AL00)”刷机教程
    电信手机卡被锁,忘记了PIN码,怎么办?
    [转]glyphicons-halflings-regular字体 图标
    牛年祝福语大全
    HYQiHei GES字体汉仪旗黑全套字体
    得实AR-530K打印机驱动 vB5.5官方版
  • 原文地址:https://www.cnblogs.com/garxiu/p/5587152.html
Copyright © 2020-2023  润新知