c编写FCFS算法的程序代码,并实现以下功能: 1) 输出选择作业的次序; 2) 计算并输出平均作业周转时间; 3) 计算并输出平均带权周转时间。
时间: 2024-12-15 09:27:43 浏览: 25
FCFS(First-Come, First-Served,先到先服务)调度算法是一种简单的进程调度策略,按照进程到达的时间顺序来进行处理。下面是使用C语言实现的一个基本版本:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体表示作业
typedef struct {
int id; // 作业ID
float burst; // 作业运行时间
} Job;
// 比较函数,用于排序
int compareJobs(Job *a, Job *b) {
return a->burst - b->burst;
}
void schedule(Job jobs[], int n) {
printf("Selected job order:\n");
for (int i = 0; i < n; i++) {
printf("%d ", jobs[i].id);
}
printf("\n");
// 初始化周转时间和总执行时间
float total_burst_time = 0, turnaround_time[n], weighted_turnaround_time[n];
for (int i = 0; i < n; i++) {
total_burst_time += jobs[i].burst;
turnaround_time[i] = jobs[i].burst + (i == 0 ? 0 : turnaround_time[i-1]);
weighted_turnaround_time[i] = jobs[i].burst * turnaround_time[i];
}
// 计算并输出平均周转时间和平均带权周转时间
float avg_turnaround = total_burst_time / n;
float avg_weighted_turnaround = 0;
for (int i = 0; i < n; i++) {
avg_weighted_turnaround += weighted_turnaround_time[i];
}
avg_weighted_turnaround /= n;
printf("Average job turnaround time: %.2f\n", avg_turnaround);
printf("Average weighted job turnaround time: %.2f\n", avg_weighted_turnaround);
}
int main() {
int num_jobs;
printf("Enter the number of jobs: ");
scanf("%d", &num_jobs);
Job* jobs = malloc(num_jobs * sizeof(Job));
if (!jobs) {
perror("Memory allocation failed");
return 1;
}
for (int i = 0; i < num_jobs; i++) {
printf("Enter job %d ID and burst time: ", i+1);
scanf("%d%f", &jobs[i].id, &jobs[i].burst);
}
qsort(jobs, num_jobs, sizeof(Job), compareJobs);
schedule(jobs, num_jobs);
free(jobs);
return 0;
}
```
这个程序首先读取作业的数量和每个作业的ID和运行时间,然后对作业按bursts时间排序。接着,它依次处理每个作业,记录它们的周转时间和带权周转时间。最后,输出平均周转时间和平均带权周转时间。
阅读全文