用C语言编写一个FCFS算法,要求手动输入需要调度的作业个数,手动输入每个作业的名称,到达时间和运行时间,在全部输入完成后,要求输出:作业名称 到达时间 起始时间 结束时间 周转时间 带权周转时间
时间: 2024-09-29 08:10:37 浏览: 30
作业调度FCFS算法C语言
FCFS(First-Come, First-Served,先来先服务)调度算法是一种简单的时间片轮转策略。在C语言中,可以使用数组或动态内存分配来模拟作业的到达、开始和结束时间。以下是简化的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_JOBS 10
// 定义作业结构体
struct Job {
char name[50];
int arrival_time;
int burst_time;
};
int main() {
int num_jobs;
scanf("%d", &num_jobs);
struct Job jobs[MAX_JOBS];
for (int i = 0; i < num_jobs; i++) {
printf("Enter job %d details:\n", i + 1);
scanf("%s%d%d", jobs[i].name, &jobs[i].arrival_time, &jobs[i].burst_time);
}
// 初始化变量
int total_completion_time = 0;
int turnaround_time[MAX_JOBS] = {0};
double weighted_turnaround_time[MAX_JOBS] = {0};
// 遍历所有作业
for (int j = 0; j < num_jobs; j++) {
// 计算起始时间:当前已完成作业的完成时间加上新作业的到达时间
int start_time = total_completion_time + jobs[j].arrival_time;
// 开始处理作业
total_completion_time += jobs[j].burst_time;
jobs[j].completion_time = total_completion_time;
// 计算周转时间和带权周转时间
turnaround_time[j] = jobs[j].completion_time - jobs[j].arrival_time;
weighted_turnaround_time[j] = (double)turnaround_time[j] / jobs[j].burst_time;
printf("Job %s: Arrival Time: %d, Start Time: %d, End Time: %d, Turnaround Time: %d, Weighted Turnaround Time: %.2f\n",
jobs[j].name, jobs[j].arrival_time, start_time, jobs[j].completion_time, turnaround_time[j], weighted_turnaround_time[j]);
}
return 0;
}
```
在上述代码中,我们首先获取用户输入的作业数量和每个作业的详细信息。然后遍历每个作业,计算起始时间、结束时间,并计算周转时间和带权周转时间(假设带权周转时间是基于作业的处理时间)。最后,输出每个作业的信息。
阅读全文