用c语言编写一个FCFS算法 要求手动输入需要调度的作业个数 手动输入每个作业的名称,到达时间,运行时间 全部输入完成后 ,要求输出内容:作业名称 到达时间 起始时间 结束时间 周转时间 带权周转时间
时间: 2024-10-05 16:03:13 浏览: 36
在C语言中,我们可以编写一个简单的First-Come, First-Served (FCFS) 算法来处理这个问题。首先,我们需要创建一个结构体来存储作业的信息,然后按照到达时间对它们排序并依次调度。以下是基本的实现步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义作业信息结构
typedef struct {
char name[50];
int arrival_time;
int burst_time;
} Job;
// 比较函数用于排序
int compare_jobs(const void *a, const void *b) {
return ((Job*)a)->arrival_time - ((Job*)b)->arrival_time;
}
void fcfs(int num_jobs) {
// 动态分配作业数组
Job *jobs = malloc(num_jobs * sizeof(Job));
// 输入作业信息
printf("请输入作业数量以及每个作业的详细信息:\n");
for (int i = 0; i < num_jobs; ++i) {
printf("作业 %d: ", i + 1);
scanf("%s %d %d", jobs[i].name, &jobs[i].arrival_time, &jobs[i].burst_time);
}
// 对作业按到达时间排序
qsort(jobs, num_jobs, sizeof(Job), compare_jobs);
// 初始化变量
int current_time = 0;
Job *current_job = jobs;
int turnaround_time[num_jobs], waiting_time[num_jobs];
// 遍历并调度作业
for (int i = 0; i < num_jobs; ++i) {
while (current_time < current_job->arrival_time) {
current_time++;
}
// 开始当前作业
current_time += current_job->burst_time;
// 计算周转时间和等待时间
turnaround_time[i] = current_time - current_job->arrival_time;
waiting_time[i] = i > 0 ? jobs[i - 1].burst_time : 0;
printf("作业 %s: 到达时间 %d, 起始时间 %d, 结束时间 %d, 周转时间 %d, 带权周转时间 %d\n",
current_job->name, current_job->arrival_time, current_time, current_time, turnaround_time[i],
turnaround_time[i] * current_job->burst_time);
// 更新下一个作业
if (i != num_jobs - 1) {
current_job++;
}
}
// 释放内存
free(jobs);
}
int main() {
int num_jobs;
printf("请输入作业个数: ");
scanf("%d", &num_jobs);
fcfs(num_jobs);
return 0;
}
```
在这个程序中,我们首先获取用户输入的作业数量和每个作业的详细信息,然后通过`qsort`函数根据到达时间对作业进行排序。接着遍历每个作业,根据 FCFS 规则计算起始、结束时间、周转时间和带权周转时间,并打印结果。
阅读全文