输入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. 作为iOS开发者不得不follow的52人
  2. (一) 自带刷新的列表-LtRecyclerView v2.x版本(LtAdapter)(基本使用)
  3. gtk 控件内存回收_咱们从头到尾说一次 Java 垃圾回收
  4. 人工计算机的相关信息,第三届计算机信息科学与人工智能国际学术会议(CISAI 2020)...
  5. Docker学习一:Docker简介与安装
  6. Docker简介以及Docker历史
  7. 夏天面试男生穿什么_你今年夏天在做什么?
  8. windows安装解压版mysql
  9. Java中导入Excel文件
  10. Linux 编译并更换内核
  11. mapbox/minemap 首屏固定比例尺为1:20
  12. css 文本超出...
  13. 使用Memberane Moniter监控HTTP SOAP requests
  14. 【系统设计】系统设计基础:速率限制器
  15. 搜索技巧:提升你的搜索效率
  16. i春秋新春战疫公益赛复现
  17. 喜报:虎博科技与国信证券成功续约
  18. Fiddler死活抓不了HTTPS包解决办法(2018更新版本)
  19. mysql必知必会第5版pdf_雍正荐书第十一期 | SQL入门经典教程2020全新升级!SQL必知必会(第5版)...
  20. WinXP系统下H81、H85、H87等主板网卡无法使用怎么办

热门文章

  1. 异类 不一样的成功启示录笔记以及读后感
  2. 在这个秋天,一起收获亚马逊云科技认证吧!
  3. 【机器学习】(四)一些数据集:forge、wave、cancer、bosten、two-moons
  4. 【实践】对于绑定变量看执行计划
  5. Linux nm查看库中包含那些函数
  6. 信息检索——查全率和查准率
  7. hibernate操作Oracle出现违反唯一约束条件
  8. 「内容管理系统」34个无头CMS应该在你的技术雷达上
  9. android 7.1 支持哪些 cpu,安卓7.1加骁龙处理器,新一代全民性价比手机
  10. 让linux挂载的移动硬盘具有执行权限