zoukankan      html  css  js  c++  java
  • (哈)先来先服务(FCFS)调度算法 --升级版

    代码 (只支持在环境中用数字来输入,用数字以为则会显示错误!)

    /* 先来先服务 */
    #include<stdio.h>
    #define MAX 50
    struct Gzuo{
    int id; //进程名字
    int dt; //到达时刻
    int st; //服务时间
    int wct; //完成时刻
    float zt; //周转时间
    float dczt; //带权周转时间
    };
    Gzuo a[MAX];

    int main(){
    int i,j,min;
    int n,px; //n:进程个数 px:输出方式选择
    float sum1=0,sum2=0;
    printf(" ************* 先来先服务(FCFS)调度算法 ************* ");
    printf(" 请输入有n个进程(0<n<=50): ");
    scanf("%d",&n);
    while(n>50||n<=0)
    {
    printf("n 请重新输入:");
    scanf("%d",&n);
    }
    for(i=0;i<n;i++)
    {
    printf(" *************输入第%d个进程信息: ",i+1);
    printf(" 进程名字: ");
    scanf("%d",&a[i].id);
    printf(" 到达时间: ");
    scanf("%d",&a[i].dt);
    printf(" 服务时间: ");
    scanf("%d",&a[i].st);
    }

    for(j=n-1;j>=0;j--)
    {
    for(i=0;i<j;i++)
    {
    if(a[i].dt>a[i+1].dt)
    {
    min=a[i].id;
    a[i].id=a[i+1].id;
    a[i+1].id=min;

    min=a[i].dt;
    a[i].dt=a[i+1].dt;
    a[i+1].dt=min;

    min=a[i].st;
    a[i].st=a[i+1].st;
    a[i+1].st=min;
    }
    }
    }

    for(i=0;i<n;i++)
    {
    if(a[i].dt>a[i-1].wct) //当 a[i]到达时刻>a[i-1]完成时刻
    {
    a[i].wct=a[i].dt+a[i].st; //a[i]完成时刻=到达时刻+服务时间
    }
    else
    {
    a[i].wct=a[i-1].wct+a[i].st; //a[i]完成时刻=a[i-1]完成时刻+a[i]服务时间
    }
    a[i].zt=(float)(a[i].wct-a[i].dt); //周转时间=完成时刻-到达时刻
    a[i].dczt=a[i].zt/a[i].st; //带权周转时间=周转时间/服务时间
    }
    printf(" ");
    printf(" 1、按id号依次输出 ");
    printf(" 2、按完成顺序依次输出 ");
    printf(" 请选择输出顺序: ");
    scanf("%d",&px);
    printf(" 进程名字 到达时间 服务时间 完成时间 周转时间 带权周转时间 ");
    switch(px)

    {
    case 1: //1.按id号依次输出
    {
    for(j=0;j<n;j++)
    {
    for(i=0;i<n;i++)
    if(a[i].id==j+1)
    {
    printf("%d %d %d %d %.0f %.2f ",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);
    sum1+=a[i].zt;
    sum2+=a[i].dczt;
    }
    }
    printf(" 平均周转时间:%.2f ",sum1/n);
    printf(" 平均带权周转时间:%.2f ",sum2/n);
    break;
    }
    case 2: //2.按完成顺序依次输出
    {
    for(i=0;i<n;i++)
    {
    printf("%d %d %d %d %.0f %.2f ",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);
    sum1+=a[i].zt;
    sum2+=a[i].dczt;
    }
    printf(" 平均周转时间:%.2f ",sum1/n);
    printf(" 平均带权周转时间:%.2f ",sum2/n);
    break;
    }
    default: break;
    }
    }

  • 相关阅读:
    Selenium2学习-002-Selenium2 Web 元素定位及 XPath 编写演示示例
    Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置
    Selenium2学习-000-Selenium2初识
    000-沉沦,幸福
    JMeter学习-005-JMeter 主要组件概要介绍及执行顺序
    JMeter学习-004-WEB脚本入门实战
    JMeter学习-003-JMeter与LoadRunner的异曲同工
    C#设计模式之十四命令模式(Command Pattern)【行为型】
    C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】
    C#设计模式之十二代理模式(Proxy Pattern)【结构型】
  • 原文地址:https://www.cnblogs.com/1314-520/p/12707201.html
Copyright © 2011-2022 走看看