输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照先来先服务算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数)。

输入格式:
第一行输入作业数目,第二行输入作业的名字,第三行输入到达时间,第四行输入服务时间。

输出格式:
按照到达时间从小到大排序,第一行输出作业的名字,第二行输出到达时间,第三行输出服务时间,第四行输出完成时间,第五行输出完成时间,第六行输出带权周转时间。

输入样例:
在这里给出一组输入。例如:

5
A B C D E
0 1 2 3 4
4 3 4 2 4

输出样例:
在这里给出相应的输出。例如:

作 业 名:A B C D E
到达时间:0 1 2 3 4
服务时间:4 3 4 2 4
完成时间:4 7 11 13 17
周转时间:4 6 9 10 13
带权周转时间:1.00 2.00 2.25 5.00 3.25

源代码:

#include<stdio.h>
#include<stdlib.h>//进程信息模块
struct pcb {char name[10];//名字int arrive_time;//到达时间int sever_time;//服务时间int over_time;//完成时间int turnover_time;//周转时间double workturn_time;//带权周转时间
};//输入模块
void Getdata(struct pcb *p,int n){//控制输入 for(int i=0;i<n;i++){//名字 scanf("%s",&p[i].name);}for(int i=0;i<n;i++){//到达时间 scanf("%d",&p[i].arrive_time);}for(int i=0;i<n;i++){//服务时间 scanf("%d",&p[i].sever_time);}}//到达时间排序,升序
void sort(struct pcb* p, int n)
{for (int i = 0; i < n - 1; i++){struct pcb temp;for (int j = 0; j < n - i - 1; j++){if (p[j].arrive_time> p[j + 1].arrive_time){temp = p[j];p[j] = p[j + 1];p[j + 1] = temp;}}}
}//核心算法
void Computer(struct pcb* p, int n) {//计算完成时间for (int i = 0; i < n; i++) {if (i == 0) {p[0].over_time = p[0].arrive_time + p[0].sever_time;   //如果是第一个则完成=到达+服务}else {if (p[i].arrive_time > p[i - 1].over_time) {       //如果到达>上一个的完成,则完成=到达+服务,这个算法考虑了cpu的空闲情况p[i].over_time = p[i].arrive_time+ p[i].sever_time;}else {p[i].over_time = p[i - 1].over_time + p[i].sever_time;//如果到达<=上一个的完成,则完成=上一个完成+服务}}}//周转时间for (int i = 0; i < n; i++) {p[i].turnover_time = p[i].over_time - p[i].arrive_time;}//带权周转for (int i = 0; i < n; i++) {p[i].workturn_time = (double)p[i].turnover_time / (double)p[i].sever_time;}}//输出模块
void Putout(struct pcb* p, int n)
{printf("作 业 名:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%s", p[n - 1].name);printf("\n");}else {printf("%s ", p[i].name);}}printf("到达时间:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%d", p[n - 1].arrive_time);printf("\n");}else {printf("%d ", p[i].arrive_time);}}printf("服务时间:");for (int i = 0; i < n; i++) {if (i == n - 1) {             printf("%d", p[n - 1].sever_time);printf("\n");}else {printf("%d ", p[i].sever_time);}}printf("完成时间:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%d", p[n - 1].over_time);printf("\n");}else {printf("%d ", p[i].over_time);}}printf("周转时间:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%d", p[n - 1].turnover_time);printf("\n");}else {printf("%d ", p[i].turnover_time);}}printf("带权周转时间:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%.2f", p[n - 1].workturn_time);printf("\n");}else {printf("%.2f ", p[i].workturn_time);}}}int main(void) {int n = 0;//作业数量 scanf("%d", &n);struct pcb p[10] = {0};//初始化为0 Getdata(p, n);sort(p, n);Computer(p, n);Putout(p, n);return 0;
}

测试:(测试环境:DVC++)

先来先服务算法——FCFS相关推荐

  1. 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN

    各种调度算法的学习思路: 调度算法的评价指标: 一.先来先服务算法(FCFS):First Come First Serve 二.最短作业优先算法(SJF非抢占式):Shortest Job Firs ...

  2. 先来先服务算法-FCFS

    #include <iostream> #include <cstdlib> #include <numeric> using namespace std; #de ...

  3. 操作系统 先来先服务算法(FCFS)、最短寻到时间优先算法(SSTF)、扫描算法(电梯算法,SCAN)、循环扫描算法(CSCAN)

    操作系统 先来先服务算法(FCFS).最短寻到时间优先算法(SSTF).扫描算法(电梯算法,SCAN).循环扫描算法(CSCAN)和N步扫描算法(NStepScan)的程序实现 复制到本地即可运行 # ...

  4. 进程分配算法(FCFS,SJF,RR)

    一.进程调度算法的背景 在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目.这就要求系统能按某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行.分配处理机的任务是由处理机调度 ...

  5. 【操作系统】-- 先来先服务算法(FCFS)、短作业优先算法(SJF)、高响应比调度算法(HRRN)

    一.先来先服务(FCFS) 1.算法思想 主要从公平的角度考虑. 2.算法规则 按照 作业/进程 到达的先后顺序进行服务. 3.是否可抢占 非抢占式算法. 4.是否可导致饥饿 不会导致饥饿. 5.优缺 ...

  6. JAVA编写FCFS(先来先服务算法) 和 SJF(最短进程优先调度算法)

    核心代码如下: import java.util.ArrayList; import java.util.Scanner;public class opera {private static doub ...

  7. 1.2.7存储结构-磁盘管理:磁盘移臂调度算法、先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)、循环扫描(CSCAN)

    1.2.7存储结构-磁盘管理:磁盘移臂调度算法.先来先服务(FCFS).最短寻道时间优先(SSTF).扫描算法(SCAN).循环扫描(CSCAN) 先来先服务(FCFS) 最短寻道时间优先(SSTF) ...

  8. 调度算法先来先服务(FCFS)、最短作业优先(SJF)和最高响应比优先(HRRN)算法

    一.调度算法 (一)先来先服务(FCFS,First Come First Serve) 例题:各进程到达就绪队列的时间.需要的运行时间如下表所示.使用先来先服务调度算法,计算各进程的等待时间.平均等 ...

  9. 软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试

    源代码 被测代码 Schedule package net.mooctest;import java.util.ArrayList; import java.util.List;public clas ...

最新文章

  1. 关于sql中case when的用法
  2. 用Python读取整个文件
  3. java 自定义http头_HttpClient自定义HTTP头
  4. RPC框架的可靠性设计
  5. 收藏 | EXCEL的36个逆天功能,动画教程
  6. mfc检测一个目录是否产生新文件_细数Java8中那些让人纵享丝滑的文件操作
  7. 期权这块「饼」,互联网人吃不下去了
  8. Kubernetes - - k8s - v1.12.3 Helm持久化部署Harbor集成OpenLDAP登录
  9. slam 无人车 融合imu 后手动调整小车位姿,不受里程计影响
  10. AI和机器学习对云计算的安全有何影响?
  11. MacFree ePlicy Orchestrator
  12. Java的环境变量在哪个文件夹_Java设置环境变量
  13. 华师大计算机科学与技术考研科目,2020华东师范大学计算机与软件工程考研初试科目、参考书目、招生人数汇总...
  14. 【胖虎的逆向之路】如何绕过 Android11新特性之 “包的可见性“
  15. 面试常用mysql语句_50个常用的笔试、面试sql语句
  16. springboot使用arthas-spring-boot-starter引入arthas方案
  17. [前端笔记——HTML介绍] 4.HTML文本基础+超链接+高级文本格式
  18. 两所澳门顶尖高校基金与芯耀辉合作,共同促进产业和技术发展
  19. Qomo OpenProject Field Test 4发布!
  20. 大数据如何完整的进行数据探察

热门文章

  1. 阿里巴巴算力攻坚新突破:阿里云20%新增算力将使用自研CPU
  2. 我的2012小结:不忘初心,方得始终
  3. matlab三维 旋转矩阵,matlab中的三维坐标系与旋转
  4. 东南大学计算机科学培养方案,计算机技术专业学位培养方案-东南大学计算机科学与工程学院.DOC...
  5. 【正点原子FPGA连载】第十一章 触摸按键控制LED灯实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  6. 光模块,光纤如何区分单模多模
  7. LeetCode 周赛-236(万得场)
  8. eclipse强制结束进程后,再次打开卡死
  9. 智慧树/知到——程序设计基础(C语言)入门篇(第一章到第五章测试)
  10. 广西免考职称英语计算机,广西十六类人可免考职称外语