编写C语言程序,模拟“最短作业优先(SJF)” 调度算法,编写以下函数,计算平均带权周转时间并返回。 注意:1)不要修改函数名、函数返回类型、参数个数、参数名和参数类型。2)函数输入参数说明:arrival_time:作业达到时间数组run_time: 作业运行时间数组num:作业数3)函数返回值:作业平均带权周转时间
时间: 2024-02-25 21:56:02 浏览: 65
以下是实现最短作业优先(SJF)算法计算平均带权周转时间的 C 语言代码:
```c
float sjf(float arrival_time[], float run_time[], int num) {
float completion_time[num], turn_around_time[num], waiting_time[num], total_waiting_time = 0, total_turn_around_time = 0;
// 完成时间初始化为0
for (int i = 0; i < num; i++) {
completion_time[i] = 0;
}
// 按到达时间排序作业
for (int i = 0; i < num; i++) {
for (int j = i + 1; j < num; j++) {
if (arrival_time[i] > arrival_time[j]) {
float temp = arrival_time[i];
arrival_time[i] = arrival_time[j];
arrival_time[j] = temp;
temp = run_time[i];
run_time[i] = run_time[j];
run_time[j] = temp;
}
}
}
// 计算完成时间和周转时间
for (int i = 0; i < num; i++) {
if (i == 0) {
completion_time[i] = arrival_time[i] + run_time[i];
} else {
if (arrival_time[i] > completion_time[i - 1]) {
completion_time[i] = arrival_time[i] + run_time[i];
} else {
completion_time[i] = completion_time[i - 1] + run_time[i];
}
}
turn_around_time[i] = completion_time[i] - arrival_time[i];
}
// 计算带权周转时间和平均带权周转时间
for (int i = 0; i < num; i++) {
waiting_time[i] = turn_around_time[i] - run_time[i];
total_waiting_time += waiting_time[i];
total_turn_around_time += turn_around_time[i];
}
return total_turn_around_time / num / run_time[0];
}
```
该函数的参数为到达时间数组 `arrival_time`、运行时间数组 `run_time` 和作业数 `num`。函数返回值为计算得到的平均带权周转时间。
函数首先初始化完成时间数组为0,然后按到达时间对作业进行排序。接着,计算完成时间和周转时间,并计算带权周转时间和平均带权周转时间,最后返回平均带权周转时间。
阅读全文