zoukankan      html  css  js  c++  java
  • 进程2

    #include<stdio.h>
    #define N 3
    //#define M 10

    typedef struct process       //进程结构体定义
    {
     char name;
     int arrive;
     int prio;
     int needTime;
     
    }Process;

    void input(Process a[],int n){    //输入进程基本信息
        int i;
     for(i=0;i<n;i++)
     {
      printf("请输入%d个进程的进程名:",i+1);
      scanf("%c",&a[i].name);
      printf("请输入%d个进程的优先级:",i+1);
            scanf("%d",&a[i].prio);
            printf("请输入%d个进程的到达时间:",i+1);
            scanf("%d",&a[i].arrive);
      printf("请输入%d个进程的需要时间:",i+1);
      scanf("%d",&a[i].needTime);
            getchar();
      printf(" ");
     }
    }

    void sort(Process a[],int n)
    {
       int i,j;
       Process temp;
       for(i=0;i<n;i++)
        for(j=i;j<N;j++)
        {
         if(a[j].prio>a[i].prio) //按进程优先级排序
         {
          temp=a[j];
          a[j]=a[i];
          a[i]=temp;

         }
         if(a[j].prio==a[i].prio)  //如果优先级相同,按先来先服务原则排序
         {
          if(a[j].arrive<a[i].arrive)
          {
                   temp=a[j];
          a[j]=a[i];
          a[i]=temp;
          }
         }
        }
    }
    void output(Process a[],int n)   //输出进程信息
    {
       int i;
       printf("进程排序结果: ");
       printf("name prio needTime ");
       for(i=0;i<n;i++)
       {
            printf("%c %d %d ",a[i].name,a[i].prio,a[i].needTime);
      
       }
    }

    /*void running(Process a[N])
    {
     int i,j,x=0,y=0,z=0;
       
       Process ready[M],wait[M],finished[M];
       for(i=0;i<N;i++)
       {
           ready[x]=a[i];x++;
           for(j=i;i<N;j++)
        {
              wait[y]=a[j];y++;
        }
        if(a[i].needTime==0)
        {
        finished[z]=a[i];
        z++;
        }

       }
       for(i=0;i<x;i++)
        printf("%c %d %d %d ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
       for(i=0;i<y;i++)
         printf("%c %d %d %d ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
       for(i=0;i<z;i++)
        printf("%c %d %d %d ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
      
    }*/
                   //问题:1,优先级为0,服务时间有余            
                   //      2,服务时间0,优先级有余
                   //      3,服务时间0时退出序列

    void go(Process a[],int n)
    {
       int i=0;
       while(a[i].needTime>=0&&a[i].prio>=0)
       {   
        if(a[i].needTime==0)
        {
          a[i].prio=-1;
       printf("进程%c已执行结束! ",a[i].name);
       printf("--------------------------- ");
       i=i+1;
       if(a[i].needTime==0)
       {
        printf("进程%c已执行结束! ",a[i].name);
        i=i+1;
       }
        }
        if(a[i].prio ==0)
        {
         while(a[i].needTime!=0)
         {
            a[i].needTime--;
         }
        }
        a[i].needTime--;                
        a[i].prio--;
       
        printf("现在执行的进程信息: ");
        printf("name prio needTime ");
        printf("%c %d %d ",a[i].name,a[i].prio,a[i].needTime);
        printf("------------------------- ");
        sort(a,n);         //执行一次进程之后再排序
        output(a,n);       //显示再次排序进程序列
        printf(" ");
          
       }
      
       
    }


    main(){
     int n;
     Process a[N];
     printf("你想输入多少个进程信息: ");
     scanf("%d",&n);
     getchar();
         input(a,n);
      sort(a,n);
      output(a,n);
      go(a,n);
    }

  • 相关阅读:
    输入/输出的格式和方法
    程序编译运行和exe运行之文件位置的区别
    ZOJ_3950_How Many Nines 解题报告及如何对程序进行测试修改
    [Offer收割]编程练习赛13 解题报告
    查找语言自带函数
    codeblocks下的汇编语言
    hiho一下 第144周(机会渺茫)解题报告及拓展
    关闭调试窗口快捷方式
    编写程序一个位置的快速到达和修改
    poj3660(Cow Contest)解题报告
  • 原文地址:https://www.cnblogs.com/guo2016/p/5414108.html
Copyright © 2011-2022 走看看